11import secrets
2+ import time
3+ from turtle import st
24from lmos_openai_types import (
5+ ChatCompletionResponseMessage ,
6+ Choice1 ,
37 CreateChatCompletionRequest ,
48 CreateChatCompletionResponse ,
59 ChatCompletionRequestMessage ,
10+ FinishReason1 ,
611)
712
813from .utils import call_tool , chat_completion_add_tools
1217from loguru import logger
1318import json
1419
20+ def format_error_as_chat_completion (message : str ) -> CreateChatCompletionResponse :
21+ return CreateChatCompletionResponse .model_validate (
22+ {
23+ "model" : "MCP-Bridge" ,
24+ "choices" : [
25+ {
26+ "index" : 0 ,
27+ "finish_reason" : "stop" ,
28+ "message" : {
29+ "content" : message ,
30+ "role" : "assistant" ,
31+ }
32+ }
33+ ],
34+ "id" : secrets .token_hex (16 ),
35+ "created" : int (time .time ()),
36+ "object" : "chat.completion" ,
37+ }
38+ )
1539
1640async def chat_completions (
1741 request : CreateChatCompletionRequest ,
@@ -23,26 +47,30 @@ async def chat_completions(
2347 while True :
2448 # logger.debug(request.model_dump_json())
2549
26- text = (
27- await get_client ().post (
50+ response = await get_client ().post (
2851 "/chat/completions" ,
29- # content=request.model_dump_json(
30- # exclude_defaults=True, exclude_none=True, exclude_unset=True
31- # ),
3252 json = chat_completion_requester (request ),
3353 )
34- ) .text
54+ text = response .text
3555 logger .debug (text )
3656 try :
3757 response = chat_completion_responder (json .loads (text ))
3858 except Exception as e :
3959 logger .error (f"Error parsing response: { text } " )
4060 logger .error (e )
41- return # type: ignore
61+
62+ # openrouter returns a json error message
63+ try :
64+ response = json .loads (text )
65+ return format_error_as_chat_completion (f"Upstream error: { response ['error' ]['message' ]} " )
66+ except Exception :
67+ pass
68+
69+ return format_error_as_chat_completion (f"Error parsing response: { text } " )
4270
4371 if not response .choices :
4472 logger .error ("no choices found in response" )
45- return # type: ignore
73+ return format_error_as_chat_completion ( "no choices found in response" )
4674
4775 msg = response .choices [0 ].message
4876 msg = ChatCompletionRequestMessage (
0 commit comments