Update api/utils.py
Browse files- api/utils.py +72 -2
api/utils.py
CHANGED
@@ -15,8 +15,6 @@ from api.logger import setup_logger
|
|
15 |
|
16 |
logger = setup_logger(__name__)
|
17 |
|
18 |
-
# Remove redundant definition of verify_app_secret
|
19 |
-
|
20 |
def message_to_dict(message):
|
21 |
if isinstance(message.content, str):
|
22 |
result = {"role": message.role, "content": message.content}
|
@@ -36,6 +34,24 @@ def message_to_dict(message):
|
|
36 |
else:
|
37 |
return {"role": message.role, "content": message.content}
|
38 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
39 |
async def process_streaming_response(request: ChatRequest):
|
40 |
json_data = {
|
41 |
"messages": [message_to_dict(msg) for msg in request.messages],
|
@@ -86,3 +102,57 @@ async def process_streaming_response(request: ChatRequest):
|
|
86 |
except httpx.RequestError as e:
|
87 |
logger.error(f"Error occurred during request: {e}")
|
88 |
raise HTTPException(status_code=500, detail="Request to external service failed")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
15 |
|
16 |
logger = setup_logger(__name__)
|
17 |
|
|
|
|
|
18 |
def message_to_dict(message):
|
19 |
if isinstance(message.content, str):
|
20 |
result = {"role": message.role, "content": message.content}
|
|
|
34 |
else:
|
35 |
return {"role": message.role, "content": message.content}
|
36 |
|
37 |
+
def create_chat_completion_data(
|
38 |
+
content: str, model: str, timestamp: int, finish_reason: Optional[str] = None
|
39 |
+
) -> Dict[str, Any]:
|
40 |
+
return {
|
41 |
+
"id": f"chatcmpl-{uuid.uuid4()}",
|
42 |
+
"object": "chat.completion.chunk",
|
43 |
+
"created": timestamp,
|
44 |
+
"model": model,
|
45 |
+
"choices": [
|
46 |
+
{
|
47 |
+
"index": 0,
|
48 |
+
"delta": {"content": content, "role": "assistant"},
|
49 |
+
"finish_reason": finish_reason,
|
50 |
+
}
|
51 |
+
],
|
52 |
+
"usage": None,
|
53 |
+
}
|
54 |
+
|
55 |
async def process_streaming_response(request: ChatRequest):
|
56 |
json_data = {
|
57 |
"messages": [message_to_dict(msg) for msg in request.messages],
|
|
|
102 |
except httpx.RequestError as e:
|
103 |
logger.error(f"Error occurred during request: {e}")
|
104 |
raise HTTPException(status_code=500, detail="Request to external service failed")
|
105 |
+
|
106 |
+
async def process_non_streaming_response(request: ChatRequest):
|
107 |
+
json_data = {
|
108 |
+
"messages": [message_to_dict(msg) for msg in request.messages],
|
109 |
+
"previewToken": None,
|
110 |
+
"userId": None,
|
111 |
+
"codeModelMode": True,
|
112 |
+
"agentMode": AGENT_MODE.get(request.model, {}),
|
113 |
+
"trendingAgentMode": TRENDING_AGENT_MODE.get(request.model, {}),
|
114 |
+
"isMicMode": False,
|
115 |
+
"userSystemPrompt": None,
|
116 |
+
"maxTokens": request.max_tokens,
|
117 |
+
"playgroundTopP": request.top_p,
|
118 |
+
"playgroundTemperature": request.temperature,
|
119 |
+
"isChromeExt": False,
|
120 |
+
"githubToken": None,
|
121 |
+
"clickedAnswer2": False,
|
122 |
+
"clickedAnswer3": False,
|
123 |
+
"clickedForceWebSearch": False,
|
124 |
+
"visitFromDelta": False,
|
125 |
+
"mobileClient": False,
|
126 |
+
"userSelectedModel": MODEL_MAPPING.get(request.model, request.model),
|
127 |
+
}
|
128 |
+
full_response = ""
|
129 |
+
async with httpx.AsyncClient() as client:
|
130 |
+
try:
|
131 |
+
async with client.stream(
|
132 |
+
method="POST", url=f"{BASE_URL}/api/chat", headers=headers, json=json_data
|
133 |
+
) as response:
|
134 |
+
response.raise_for_status()
|
135 |
+
async for chunk in response.aiter_text():
|
136 |
+
full_response += chunk
|
137 |
+
except httpx.HTTPStatusError as e:
|
138 |
+
logger.error(f"HTTP error occurred: {e}")
|
139 |
+
raise HTTPException(status_code=e.response.status_code, detail="External service error")
|
140 |
+
except httpx.RequestError as e:
|
141 |
+
logger.error(f"Error occurred during request: {e}")
|
142 |
+
raise HTTPException(status_code=500, detail="Request to external service failed")
|
143 |
+
if full_response.startswith("$@$v=undefined-rv1$@$"):
|
144 |
+
full_response = full_response[21:]
|
145 |
+
return {
|
146 |
+
"id": f"chatcmpl-{uuid.uuid4()}",
|
147 |
+
"object": "chat.completion",
|
148 |
+
"created": int(datetime.now().timestamp()),
|
149 |
+
"model": request.model,
|
150 |
+
"choices": [
|
151 |
+
{
|
152 |
+
"index": 0,
|
153 |
+
"message": {"role": "assistant", "content": full_response},
|
154 |
+
"finish_reason": "stop",
|
155 |
+
}
|
156 |
+
],
|
157 |
+
"usage": None,
|
158 |
+
}
|