Update api/utils.py
Browse files- api/utils.py +7 -35
api/utils.py
CHANGED
@@ -147,7 +147,6 @@ def create_chat_completion_data(
|
|
147 |
prompt_tokens: int = 0,
|
148 |
completion_tokens: int = 0,
|
149 |
finish_reason: Optional[str] = None,
|
150 |
-
function_call: Optional[Dict] = None,
|
151 |
) -> Dict[str, Any]:
|
152 |
usage = None
|
153 |
if finish_reason == "stop":
|
@@ -162,22 +161,15 @@ def create_chat_completion_data(
|
|
162 |
"created": timestamp,
|
163 |
"model": model,
|
164 |
"system_fingerprint": system_fingerprint,
|
165 |
-
"choices": [{
|
166 |
-
"index": 0,
|
167 |
-
"delta": {
|
168 |
-
"content": content if not function_call else None,
|
169 |
-
"role": "assistant",
|
170 |
-
"function_call": function_call
|
171 |
-
},
|
172 |
-
"finish_reason": finish_reason
|
173 |
-
}],
|
174 |
"usage": usage,
|
175 |
}
|
176 |
|
177 |
-
def message_to_dict(message, model_prefix: Optional[str] = None
|
178 |
"""
|
179 |
Convert a ChatRequest message to a dict for the request payload.
|
180 |
-
Supports
|
|
|
181 |
"""
|
182 |
content = ""
|
183 |
images_data = []
|
@@ -250,7 +242,7 @@ async def process_streaming_response(request: ChatRequest):
|
|
250 |
logger.error("No h-value for validation.")
|
251 |
raise HTTPException(status_code=500, detail="Missing h-value.")
|
252 |
|
253 |
-
messages = [message_to_dict(msg, model_prefix=model_prefix
|
254 |
|
255 |
json_data = {
|
256 |
"agentMode": agent_mode,
|
@@ -328,27 +320,7 @@ async def process_streaming_response(request: ChatRequest):
|
|
328 |
final_snapzion_links.extend(snapzion_urls)
|
329 |
cleaned_content = strip_model_prefix(chunk, model_prefix)
|
330 |
completion_tokens += calculate_tokens(cleaned_content, request.model)
|
331 |
-
|
332 |
-
# Handle function call responses
|
333 |
-
function_call = None
|
334 |
-
if cleaned_content and cleaned_content.startswith("{"):
|
335 |
-
try:
|
336 |
-
function_call = json.loads(cleaned_content)
|
337 |
-
cleaned_content = None # Content must be null for function calls
|
338 |
-
except json.JSONDecodeError:
|
339 |
-
pass
|
340 |
-
|
341 |
-
yield "data: " + json.dumps(create_chat_completion_data(
|
342 |
-
cleaned_content,
|
343 |
-
request.model,
|
344 |
-
timestamp,
|
345 |
-
request_id,
|
346 |
-
system_fingerprint,
|
347 |
-
prompt_tokens,
|
348 |
-
completion_tokens,
|
349 |
-
finish_reason=None,
|
350 |
-
function_call=function_call
|
351 |
-
)) + "\n\n"
|
352 |
yield "data: " + json.dumps(create_chat_completion_data("", request.model, timestamp, request_id, system_fingerprint, prompt_tokens, completion_tokens, "stop")) + "\n\n"
|
353 |
yield "data: [DONE]\n\n"
|
354 |
except httpx.HTTPStatusError as e:
|
@@ -402,7 +374,7 @@ async def process_non_streaming_response(request: ChatRequest):
|
|
402 |
logger.error("Failed to retrieve h-value.")
|
403 |
raise HTTPException(status_code=500, detail="Missing h-value.")
|
404 |
|
405 |
-
messages = [message_to_dict(msg, model_prefix=model_prefix
|
406 |
|
407 |
json_data = {
|
408 |
"agentMode": agent_mode,
|
|
|
147 |
prompt_tokens: int = 0,
|
148 |
completion_tokens: int = 0,
|
149 |
finish_reason: Optional[str] = None,
|
|
|
150 |
) -> Dict[str, Any]:
|
151 |
usage = None
|
152 |
if finish_reason == "stop":
|
|
|
161 |
"created": timestamp,
|
162 |
"model": model,
|
163 |
"system_fingerprint": system_fingerprint,
|
164 |
+
"choices": [{"index": 0, "delta": {"content": content, "role": "assistant"}, "finish_reason": finish_reason}],
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
165 |
"usage": usage,
|
166 |
}
|
167 |
|
168 |
+
def message_to_dict(message, model_prefix: Optional[str] = None):
|
169 |
"""
|
170 |
Convert a ChatRequest message to a dict for the request payload.
|
171 |
+
Supports up to three images with type-based structure and sends multiple formats.
|
172 |
+
Prepends model_prefix to text content if specified.
|
173 |
"""
|
174 |
content = ""
|
175 |
images_data = []
|
|
|
242 |
logger.error("No h-value for validation.")
|
243 |
raise HTTPException(status_code=500, detail="Missing h-value.")
|
244 |
|
245 |
+
messages = [message_to_dict(msg, model_prefix=model_prefix) for msg in request.messages]
|
246 |
|
247 |
json_data = {
|
248 |
"agentMode": agent_mode,
|
|
|
320 |
final_snapzion_links.extend(snapzion_urls)
|
321 |
cleaned_content = strip_model_prefix(chunk, model_prefix)
|
322 |
completion_tokens += calculate_tokens(cleaned_content, request.model)
|
323 |
+
yield "data: " + json.dumps(create_chat_completion_data(cleaned_content, request.model, timestamp, request_id, system_fingerprint, prompt_tokens, completion_tokens)) + "\n\n"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
324 |
yield "data: " + json.dumps(create_chat_completion_data("", request.model, timestamp, request_id, system_fingerprint, prompt_tokens, completion_tokens, "stop")) + "\n\n"
|
325 |
yield "data: [DONE]\n\n"
|
326 |
except httpx.HTTPStatusError as e:
|
|
|
374 |
logger.error("Failed to retrieve h-value.")
|
375 |
raise HTTPException(status_code=500, detail="Missing h-value.")
|
376 |
|
377 |
+
messages = [message_to_dict(msg, model_prefix=model_prefix) for msg in request.messages]
|
378 |
|
379 |
json_data = {
|
380 |
"agentMode": agent_mode,
|