Download runtime/error_handler.py from teganmosi/realtime: direct link, hf CLI and curl.
- Browser
- Download file 2.02 kB
-
https://huggingface.co/spaces/teganmosi/realtime/resolve/main/runtime/error_handler.py
- Command line
-
hf download hf://spaces/teganmosi/realtime/runtime/error_handler.py
-
curl -L -o error_handler.py https://huggingface.co/spaces/teganmosi/realtime/resolve/main/runtime/error_handler.py
2.02 kB
| import logging | |
| from typing import Any | |
| from models.event import EventType | |
| from models.session_state import TurnState | |
| logger = logging.getLogger("s2s_server") | |
| class ErrorHandler: | |
| def __init__(self, context: Any): | |
| self.context = context | |
| async def handle_error(self, error: Exception, context_msg: str = ""): | |
| from fastapi import WebSocketDisconnect | |
| is_disconnect = isinstance(error, WebSocketDisconnect) or ( | |
| isinstance(error, RuntimeError) and "once a disconnect message has been received" in str(error) | |
| ) | |
| if is_disconnect: | |
| self.context.logger.info( | |
| f"[{self.context.session_id}] Connection closed by client during {context_msg}." | |
| ) | |
| else: | |
| self.context.logger.error( | |
| f"[{self.context.session_id}] ErrorHandler caught exception during {context_msg}: {error}", | |
| exc_info=True | |
| ) | |
| # Publish service error event | |
| await self.context.event_bus.publish(EventType.SERVICE_ERROR, { | |
| "error": str(error), | |
| "context": context_msg | |
| }) | |
| # Notify the client of the error (only if still connected) | |
| if not is_disconnect: | |
| try: | |
| await self.context.websocket.send_json({ | |
| "type": "error", | |
| "message": f"Service error during {context_msg}. The system is resetting." | |
| }) | |
| await self.context.websocket.send_json({"type": "done"}) | |
| except Exception as ws_err: | |
| self.context.logger.error( | |
| f"[{self.context.session_id}] Failed to send error frame to WebSocket: {ws_err}" | |
| ) | |
| # Trigger cleanup | |
| self.context.cleanup_manager.perform_cleanup() | |
| # Reset turn manager to idle | |
| if self.context.turn_manager: | |
| self.context.turn_manager.state = TurnState.IDLE | |
| await self.context.event_bus.publish(EventType.TURN_COMPLETED) | |