-
-
Notifications
You must be signed in to change notification settings - Fork 106
Open
Description
When trying to make a stream request:
{
"model": "gpt-4o-mini",
"messages": [
{
"role": "user",
"content": "Test prompt"
}
],
"stream": true,
"stream_options": {
"include_usage": true
}
}
The docs will return a NetworkError
, curl
will say transfer closed with outstanding read data remaining, and the logs will have the following:
2025-06-19 10:43:05.651 | DEBUG | mcp_bridge.openai_clients.streamChatCompletion:chat_completions:94 - inference serverstream done
ERROR: Exception in ASGI application
+ Exception Group Traceback (most recent call last):
| File "/.venv/lib/python3.12/site-packages/uvicorn/protocols/http/h11_impl.py", line 403, in run_asgi
| result = await app( # type: ignore[func-returns-value]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| File "/.venv/lib/python3.12/site-packages/uvicorn/middleware/proxy_headers.py", line 60, in __call__
| return await self.app(scope, receive, send)
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| File "/.venv/lib/python3.12/site-packages/fastapi/applications.py", line 1054, in __call__
| await super().__call__(scope, receive, send)
| File "/.venv/lib/python3.12/site-packages/starlette/applications.py", line 112, in __call__
| await self.middleware_stack(scope, receive, send)
| File "/.venv/lib/python3.12/site-packages/starlette/middleware/errors.py", line 187, in __call__
| raise exc
| File "/.venv/lib/python3.12/site-packages/starlette/middleware/errors.py", line 165, in __call__
| await self.app(scope, receive, _send)
| File "/.venv/lib/python3.12/site-packages/opentelemetry/instrumentation/asgi/__init__.py", line 745, in __call__
| await self.app(scope, otel_receive, otel_send)
| File "/.venv/lib/python3.12/site-packages/starlette/middleware/errors.py", line 187, in __call__
| raise exc
| File "/.venv/lib/python3.12/site-packages/starlette/middleware/errors.py", line 165, in __call__
| await self.app(scope, receive, _send)
| File "/.venv/lib/python3.12/site-packages/starlette/middleware/cors.py", line 93, in __call__
| await self.simple_response(scope, receive, send, request_headers=headers)
| File "/.venv/lib/python3.12/site-packages/starlette/middleware/cors.py", line 144, in simple_response
| await self.app(scope, receive, send)
| File "/.venv/lib/python3.12/site-packages/starlette/middleware/exceptions.py", line 62, in __call__
| await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
| File "/.venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
| raise exc
| File "/.venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
| await app(scope, receive, sender)
| File "/.venv/lib/python3.12/site-packages/starlette/routing.py", line 714, in __call__
| await self.middleware_stack(scope, receive, send)
| File "/.venv/lib/python3.12/site-packages/starlette/routing.py", line 734, in app
| await route.handle(scope, receive, send)
| File "/.venv/lib/python3.12/site-packages/starlette/routing.py", line 288, in handle
| await self.app(scope, receive, send)
| File "/.venv/lib/python3.12/site-packages/starlette/routing.py", line 76, in app
| await wrap_app_handling_exceptions(app, request)(scope, receive, send)
| File "/.venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
| raise exc
| File "/.venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
| await app(scope, receive, sender)
| File "/.venv/lib/python3.12/site-packages/starlette/routing.py", line 74, in app
| await response(scope, receive, send)
| File "/.venv/lib/python3.12/site-packages/sse_starlette/sse.py", line 237, in __call__
| async with anyio.create_task_group() as task_group:
| ^^^^^^^^^^^^^^^^^^^^^^^^^
| File "/.venv/lib/python3.12/site-packages/anyio/_backends/_asyncio.py", line 772, in __aexit__
| raise BaseExceptionGroup(
| ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception)
+-+---------------- 1 ----------------
| Traceback (most recent call last):
| File "/.venv/lib/python3.12/site-packages/sse_starlette/sse.py", line 240, in cancel_on_finish
| await coro()
| File "/.venv/lib/python3.12/site-packages/sse_starlette/sse.py", line 159, in _stream_response
| async for data in self.body_iterator:
| File "/mcp_bridge/openai_clients/streamChatCompletion.py", line 158, in chat_completions
| assert last.choices[0].finish_reason is not None
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| AssertionError
+------------------------------------
with multiple
mcp_bridge.openai_clients.streamChatCompletion:chat_completions:101 - failed to lowercase finish_reason: string indices must be integers, not 'str'
When making the request without the stream_options.include_usage
field, the error does not happen and it returns the streamed responses correctly.
My configuration is the following:
{
"inference_server": {
"base_url": "OPENAI_LLM_URL",
"api_key": "OPENAI_API_KEY"
},
"mcp_servers": {
"timezone-server": {
"url": "http://time-tool-server:8001/sse"
}
},
"network": {
"host": "0.0.0.0",
"port": 8000
},
"logging": {
"log_level": "DEBUG"
}
}
Metadata
Metadata
Assignees
Labels
No labels