Niansuh commited on
Commit
32af12c
·
verified ·
1 Parent(s): 6c54971

Update api/utils.py

Browse files
Files changed (1) hide show
  1. api/utils.py +91 -1
api/utils.py CHANGED
@@ -15,7 +15,50 @@ from api.logger import setup_logger
15
 
16
  logger = setup_logger(__name__)
17
 
18
- # ... [Other code remains the same] ...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
 
20
  async def process_streaming_response(request: ChatRequest):
21
  json_data = {
@@ -67,3 +110,50 @@ async def process_streaming_response(request: ChatRequest):
67
  except httpx.RequestError as e:
68
  logger.error(f"Error occurred during request: {e}")
69
  raise HTTPException(status_code=500, detail=str(e))
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
 
16
  logger = setup_logger(__name__)
17
 
18
+ def create_chat_completion_data(
19
+ content: str, model: str, timestamp: int, finish_reason: Optional[str] = None
20
+ ) -> Dict[str, Any]:
21
+ return {
22
+ "id": f"chatcmpl-{uuid.uuid4()}",
23
+ "object": "chat.completion.chunk",
24
+ "created": timestamp,
25
+ "model": model,
26
+ "choices": [
27
+ {
28
+ "index": 0,
29
+ "delta": {"content": content, "role": "assistant"},
30
+ "finish_reason": finish_reason,
31
+ }
32
+ ],
33
+ "usage": None,
34
+ }
35
+
36
+
37
+ def verify_app_secret(credentials: HTTPAuthorizationCredentials = Depends(security)):
38
+ if credentials.credentials != APP_SECRET:
39
+ raise HTTPException(status_code=403, detail="Invalid APP_SECRET")
40
+ return credentials.credentials
41
+
42
+
43
+ def message_to_dict(message):
44
+ if isinstance(message.content, str):
45
+ result = {"role": message.role, "content": message.content}
46
+ if hasattr(message, 'data'):
47
+ result['data'] = message.data
48
+ return result
49
+ elif isinstance(message.content, list) and len(message.content) == 2:
50
+ return {
51
+ "role": message.role,
52
+ "content": message.content[0]["text"],
53
+ "data": {
54
+ "imageBase64": message.content[1]["image_url"]["url"],
55
+ "fileText": "",
56
+ "title": "snapshoot",
57
+ },
58
+ }
59
+ else:
60
+ return {"role": message.role, "content": message.content}
61
+
62
 
63
  async def process_streaming_response(request: ChatRequest):
64
  json_data = {
 
110
  except httpx.RequestError as e:
111
  logger.error(f"Error occurred during request: {e}")
112
  raise HTTPException(status_code=500, detail=str(e))
113
+
114
+
115
+ async def process_non_streaming_response(request: ChatRequest):
116
+ json_data = {
117
+ "messages": [message_to_dict(msg) for msg in request.messages],
118
+ "previewToken": None,
119
+ "userId": None,
120
+ "codeModelMode": True,
121
+ "agentMode": AGENT_MODE.get(request.model, {}),
122
+ "trendingAgentMode": TRENDING_AGENT_MODE.get(request.model, {}),
123
+ "isMicMode": False,
124
+ "userSystemPrompt": None,
125
+ "maxTokens": request.max_tokens,
126
+ "playgroundTopP": request.top_p,
127
+ "playgroundTemperature": request.temperature,
128
+ "isChromeExt": False,
129
+ "githubToken": None,
130
+ "clickedAnswer2": False,
131
+ "clickedAnswer3": False,
132
+ "clickedForceWebSearch": False,
133
+ "visitFromDelta": False,
134
+ "mobileClient": False,
135
+ "userSelectedModel": MODEL_MAPPING.get(request.model, request.model),
136
+ }
137
+ full_response = ""
138
+ async with httpx.AsyncClient() as client:
139
+ async with client.stream(
140
+ method="POST", url=f"{BASE_URL}/api/chat", headers=headers, json=json_data
141
+ ) as response:
142
+ async for chunk in response.aiter_text():
143
+ full_response += chunk
144
+ if full_response.startswith("$@$v=undefined-rv1$@$"):
145
+ full_response = full_response[21:]
146
+ return {
147
+ "id": f"chatcmpl-{uuid.uuid4()}",
148
+ "object": "chat.completion",
149
+ "created": int(datetime.now().timestamp()),
150
+ "model": request.model,
151
+ "choices": [
152
+ {
153
+ "index": 0,
154
+ "message": {"role": "assistant", "content": full_response},
155
+ "finish_reason": "stop",
156
+ }
157
+ ],
158
+ "usage": None,
159
+ }