Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 10 additions & 9 deletions decart/realtime/webrtc_connection.py
Original file line number Diff line number Diff line change
Expand Up @@ -285,7 +285,7 @@ async def _receive_messages(self) -> None:
if self._on_error:
self._on_error(e)
finally:
# WS loop exited (clean close or error) — signal disconnected so manager can reconnect
self._resolve_pending_waits("WebSocket disconnected")
await self._set_state("disconnected")

async def _handle_message(self, data: dict) -> None:
Expand Down Expand Up @@ -368,23 +368,24 @@ def _handle_set_image_ack(self, message: SetImageAckMessage) -> None:
result["error"] = message.error
event.set()

def _handle_error(self, message: ErrorMessage) -> None:
logger.error(f"Received error from server: {message.error}")
error = WebRTCError(message.error)

# Fail-fast: resolve any pending Phase-2 waits so they surface the
# real server error instead of timing out after 30 s.
def _resolve_pending_waits(self, error_message: str) -> None:
if self._pending_image_set:
event, result = self._pending_image_set
result["success"] = False
result["error"] = message.error
result["error"] = error_message
event.set()

for _prompt, (event, result) in list(self._pending_prompts.items()):
result["success"] = False
result["error"] = message.error
result["error"] = error_message
event.set()

def _handle_error(self, message: ErrorMessage) -> None:
logger.error(f"Received error from server: {message.error}")
error = WebRTCError(message.error)

self._resolve_pending_waits(message.error)

if self._on_error:
self._on_error(error)

Expand Down
Loading