|
|
@@ -34,6 +34,7 @@ from fastapi import (
|
|
|
Request,
|
|
|
UploadFile,
|
|
|
WebSocket,
|
|
|
+ WebSocketDisconnect,
|
|
|
status,
|
|
|
)
|
|
|
from fastapi.responses import FileResponse, JSONResponse
|
|
|
@@ -238,7 +239,8 @@ async def attach_session(request: Request, call_next):
|
|
|
request.state.conversation = await session_manager.attach_to_conversation(
|
|
|
request.state.sid
|
|
|
)
|
|
|
- if request.state.conversation is None:
|
|
|
+ if not request.state.conversation:
|
|
|
+ logger.error(f'Runtime not found for session: {request.state.sid}')
|
|
|
return JSONResponse(
|
|
|
status_code=status.HTTP_404_NOT_FOUND,
|
|
|
content={'error': 'Session not found'},
|
|
|
@@ -344,7 +346,13 @@ async def websocket_endpoint(websocket: WebSocket):
|
|
|
|
|
|
latest_event_id = -1
|
|
|
if websocket.query_params.get('latest_event_id'):
|
|
|
- latest_event_id = int(websocket.query_params.get('latest_event_id'))
|
|
|
+ try:
|
|
|
+ latest_event_id = int(websocket.query_params.get('latest_event_id'))
|
|
|
+ except ValueError:
|
|
|
+ logger.warning(
|
|
|
+ f'Invalid latest_event_id: {websocket.query_params.get("latest_event_id")}'
|
|
|
+ )
|
|
|
+ pass
|
|
|
|
|
|
async_stream = AsyncEventStreamWrapper(
|
|
|
session.agent_session.event_stream, latest_event_id + 1
|
|
|
@@ -361,7 +369,14 @@ async def websocket_endpoint(websocket: WebSocket):
|
|
|
),
|
|
|
):
|
|
|
continue
|
|
|
- await websocket.send_json(event_to_dict(event))
|
|
|
+ try:
|
|
|
+ await websocket.send_json(event_to_dict(event))
|
|
|
+ except WebSocketDisconnect:
|
|
|
+ logger.warning(
|
|
|
+ 'Websocket disconnected while sending event history, before loop started'
|
|
|
+ )
|
|
|
+ session.close()
|
|
|
+ return
|
|
|
|
|
|
await session.loop_recv()
|
|
|
|