-
Notifications
You must be signed in to change notification settings - Fork 1
/
get_conversation_response.py
65 lines (52 loc) · 2.24 KB
/
get_conversation_response.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import os
import azure.functions as func
import logging
import json
from utilities.helpers.env_helper import EnvHelper
from utilities.helpers.orchestrator_helper import Orchestrator
from utilities.helpers.config.config_helper import ConfigHelper
bp_get_conversation_response = func.Blueprint()
logger = logging.getLogger(__name__)
logger.setLevel(level=os.environ.get("LOGLEVEL", "INFO").upper())
@bp_get_conversation_response.route(route="GetConversationResponse")
async def get_conversation_response(req: func.HttpRequest) -> func.HttpResponse:
return await do_get_conversation_response(req)
async def do_get_conversation_response(req: func.HttpRequest) -> func.HttpResponse:
logger.info("Python HTTP trigger function processed a request.")
message_orchestrator = Orchestrator()
env_helper: EnvHelper = EnvHelper()
try:
req_body = req.get_json()
user_message = req_body["messages"][-1]["content"]
conversation_id = req_body["conversation_id"]
user_assistant_messages = list(
filter(
lambda x: x["role"] in ("user", "assistant"), req_body["messages"][0:-1]
)
)
chat_history = []
for i, k in enumerate(user_assistant_messages):
if i % 2 == 0:
chat_history.append(
(
user_assistant_messages[i]["content"],
user_assistant_messages[i + 1]["content"],
)
)
messages = await message_orchestrator.handle_message(
user_message=user_message,
chat_history=chat_history,
conversation_id=conversation_id,
orchestrator=ConfigHelper.get_active_config_or_default().orchestrator,
)
response_obj = {
"id": "response.id",
"model": env_helper.AZURE_OPENAI_MODEL,
"created": "response.created",
"object": "response.object",
"choices": [{"messages": messages}],
}
return func.HttpResponse(json.dumps(response_obj), status_code=200)
except Exception as e:
logger.exception("Exception in /api/GetConversationResponse")
return func.HttpResponse(json.dumps({"error": str(e)}), status_code=500)