Skip to content

Commit 4009de0

Browse files
add error handler to non streaming chat completion
1 parent 889f0ff commit 4009de0

File tree

1 file changed

+36
-8
lines changed

1 file changed

+36
-8
lines changed

mcp_bridge/openai_clients/chatCompletion.py

Lines changed: 36 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
11
import secrets
2+
import time
3+
from turtle import st
24
from lmos_openai_types import (
5+
ChatCompletionResponseMessage,
6+
Choice1,
37
CreateChatCompletionRequest,
48
CreateChatCompletionResponse,
59
ChatCompletionRequestMessage,
10+
FinishReason1,
611
)
712

813
from .utils import call_tool, chat_completion_add_tools
@@ -12,6 +17,25 @@
1217
from loguru import logger
1318
import 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

1640
async 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

Comments
 (0)