Niansuh commited on
Commit
65e5192
·
verified ·
1 Parent(s): ff46621

Update api/utils.py

Browse files
Files changed (1) hide show
  1. api/utils.py +41 -20
api/utils.py CHANGED
@@ -5,6 +5,8 @@ import asyncio
5
  import random
6
  import string
7
  from typing import Any, Dict, Optional
 
 
8
 
9
  import httpx
10
  from fastapi import HTTPException
@@ -51,26 +53,34 @@ def message_to_dict(message, model_prefix: Optional[str] = None):
51
  content = message.content if isinstance(message.content, str) else message.content[0]["text"]
52
  if model_prefix:
53
  content = f"{model_prefix} {content}"
 
 
54
  if isinstance(message.content, list) and len(message.content) == 2 and "image_url" in message.content[1]:
55
  # Ensure base64 images are always included for all models
56
  return {
57
  "role": message.role,
58
  "content": content,
59
  "data": {
60
- "imageBase64": message.content[1]["image_url"]["url"],
 
 
 
 
 
61
  "fileText": "",
62
  "title": "snapshot",
63
  },
64
  }
65
  return {"role": message.role, "content": content}
66
 
67
- # Function to strip model prefix from content if present
68
- def strip_model_prefix(content: str, model_prefix: Optional[str] = None) -> str:
69
- """Remove the model prefix from the response content if present."""
70
- if model_prefix and content.startswith(model_prefix):
71
- logger.debug(f"Stripping prefix '{model_prefix}' from content.")
72
- return content[len(model_prefix):].strip()
73
- return content
 
74
 
75
  # Process streaming response with headers from config.py
76
  async def process_streaming_response(request: ChatRequest):
@@ -96,18 +106,24 @@ async def process_streaming_response(request: ChatRequest):
96
  logger.error("Failed to retrieve h-value for validation.")
97
  raise HTTPException(status_code=500, detail="Validation failed due to missing h-value.")
98
 
 
 
 
 
 
 
99
  json_data = {
100
  "agentMode": agent_mode,
101
  "clickedAnswer2": False,
102
  "clickedAnswer3": False,
103
  "clickedForceWebSearch": False,
104
- "codeModelMode": True,
105
  "githubToken": None,
106
  "id": None, # Using request_id instead of chat_id
107
  "isChromeExt": False,
108
  "isMicMode": False,
109
  "maxTokens": request.max_tokens,
110
- "messages": [message_to_dict(msg, model_prefix=model_prefix) for msg in request.messages],
111
  "mobileClient": False,
112
  "playgroundTemperature": request.temperature,
113
  "playgroundTopP": request.top_p,
@@ -180,18 +196,24 @@ async def process_non_streaming_response(request: ChatRequest):
180
  logger.error("Failed to retrieve h-value for validation.")
181
  raise HTTPException(status_code=500, detail="Validation failed due to missing h-value.")
182
 
 
 
 
 
 
 
183
  json_data = {
184
  "agentMode": agent_mode,
185
  "clickedAnswer2": False,
186
  "clickedAnswer3": False,
187
  "clickedForceWebSearch": False,
188
- "codeModelMode": True,
189
  "githubToken": None,
190
  "id": None, # Using request_id instead of chat_id
191
  "isChromeExt": False,
192
  "isMicMode": False,
193
  "maxTokens": request.max_tokens,
194
- "messages": [message_to_dict(msg, model_prefix=model_prefix) for msg in request.messages],
195
  "mobileClient": False,
196
  "playgroundTemperature": request.temperature,
197
  "playgroundTopP": request.top_p,
@@ -205,26 +227,25 @@ async def process_non_streaming_response(request: ChatRequest):
205
  "webSearchModePrompt": False,
206
  }
207
 
208
- full_response = ""
209
  async with httpx.AsyncClient() as client:
210
  try:
211
- async with client.stream(
212
- method="POST", url=f"{BASE_URL}/api/chat", headers=headers_api_chat, json=json_data
213
  ) as response:
214
  response.raise_for_status()
215
- async for chunk in response.aiter_text():
216
- full_response += chunk
217
  except httpx.HTTPStatusError as e:
218
  logger.error(f"HTTP error occurred for Request ID {request_id}: {e}")
219
  raise HTTPException(status_code=e.response.status_code, detail=str(e))
220
  except httpx.RequestError as e:
221
  logger.error(f"Error occurred during request for Request ID {request_id}: {e}")
222
  raise HTTPException(status_code=500, detail=str(e))
223
-
 
224
  if full_response.startswith("$@$v=undefined-rv1$@$"):
225
  full_response = full_response[21:]
226
 
227
- # Remove the blocked message if present
228
  if BLOCKED_MESSAGE in full_response:
229
  logger.info(f"Blocked message detected in response for Request ID {request_id}.")
230
  full_response = full_response.replace(BLOCKED_MESSAGE, '').strip()
@@ -246,4 +267,4 @@ async def process_non_streaming_response(request: ChatRequest):
246
  }
247
  ],
248
  "usage": None,
249
- }
 
5
  import random
6
  import string
7
  from typing import Any, Dict, Optional
8
+ import base64
9
+ import os
10
 
11
  import httpx
12
  from fastapi import HTTPException
 
53
  content = message.content if isinstance(message.content, str) else message.content[0]["text"]
54
  if model_prefix:
55
  content = f"{model_prefix} {content}"
56
+
57
+ # Handle image data in the message
58
  if isinstance(message.content, list) and len(message.content) == 2 and "image_url" in message.content[1]:
59
  # Ensure base64 images are always included for all models
60
  return {
61
  "role": message.role,
62
  "content": content,
63
  "data": {
64
+ "imagesData": [
65
+ {
66
+ "filePath": message.content[1].get("filePath", ""),
67
+ "contents": message.content[1].get("contents", "")
68
+ }
69
+ ],
70
  "fileText": "",
71
  "title": "snapshot",
72
  },
73
  }
74
  return {"role": message.role, "content": content}
75
 
76
+ # Function to convert image file to base64
77
+ def image_to_base64(image_path: str) -> str:
78
+ try:
79
+ with open(image_path, "rb") as image_file:
80
+ return base64.b64encode(image_file.read()).decode('utf-8')
81
+ except Exception as e:
82
+ logger.error(f"Error reading image {image_path}: {e}")
83
+ return ""
84
 
85
  # Process streaming response with headers from config.py
86
  async def process_streaming_response(request: ChatRequest):
 
106
  logger.error("Failed to retrieve h-value for validation.")
107
  raise HTTPException(status_code=500, detail="Validation failed due to missing h-value.")
108
 
109
+ # Prepare the image payload (if any)
110
+ messages = []
111
+ for msg in request.messages:
112
+ message_dict = message_to_dict(msg, model_prefix=model_prefix)
113
+ messages.append(message_dict)
114
+
115
  json_data = {
116
  "agentMode": agent_mode,
117
  "clickedAnswer2": False,
118
  "clickedAnswer3": False,
119
  "clickedForceWebSearch": False,
120
+ "codeModelMode": False,
121
  "githubToken": None,
122
  "id": None, # Using request_id instead of chat_id
123
  "isChromeExt": False,
124
  "isMicMode": False,
125
  "maxTokens": request.max_tokens,
126
+ "messages": messages,
127
  "mobileClient": False,
128
  "playgroundTemperature": request.temperature,
129
  "playgroundTopP": request.top_p,
 
196
  logger.error("Failed to retrieve h-value for validation.")
197
  raise HTTPException(status_code=500, detail="Validation failed due to missing h-value.")
198
 
199
+ # Prepare the image payload (if any)
200
+ messages = []
201
+ for msg in request.messages:
202
+ message_dict = message_to_dict(msg, model_prefix=model_prefix)
203
+ messages.append(message_dict)
204
+
205
  json_data = {
206
  "agentMode": agent_mode,
207
  "clickedAnswer2": False,
208
  "clickedAnswer3": False,
209
  "clickedForceWebSearch": False,
210
+ "codeModelMode": False,
211
  "githubToken": None,
212
  "id": None, # Using request_id instead of chat_id
213
  "isChromeExt": False,
214
  "isMicMode": False,
215
  "maxTokens": request.max_tokens,
216
+ "messages": messages,
217
  "mobileClient": False,
218
  "playgroundTemperature": request.temperature,
219
  "playgroundTopP": request.top_p,
 
227
  "webSearchModePrompt": False,
228
  }
229
 
 
230
  async with httpx.AsyncClient() as client:
231
  try:
232
+ async with client.post(
233
+ f"{BASE_URL}/api/chat", headers=headers_api_chat, json=json_data
234
  ) as response:
235
  response.raise_for_status()
236
+ full_response = await response.text()
237
+
238
  except httpx.HTTPStatusError as e:
239
  logger.error(f"HTTP error occurred for Request ID {request_id}: {e}")
240
  raise HTTPException(status_code=e.response.status_code, detail=str(e))
241
  except httpx.RequestError as e:
242
  logger.error(f"Error occurred during request for Request ID {request_id}: {e}")
243
  raise HTTPException(status_code=500, detail=str(e))
244
+
245
+ # Clean up the response and return it
246
  if full_response.startswith("$@$v=undefined-rv1$@$"):
247
  full_response = full_response[21:]
248
 
 
249
  if BLOCKED_MESSAGE in full_response:
250
  logger.info(f"Blocked message detected in response for Request ID {request_id}.")
251
  full_response = full_response.replace(BLOCKED_MESSAGE, '').strip()
 
267
  }
268
  ],
269
  "usage": None,
270
+ }