From 0b08288656fa517df20d69d48f4becab6354dd6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=9D=E5=A4=95?= Date: Sun, 26 Apr 2026 14:08:19 +0800 Subject: [PATCH] Jules refactor backend and frontend 3736339600030847383 (#34) * fix: correct actorlist handle in supervisory node and ui form reset (#30) - Fixed `AttributeError` for `workflow_template_manager` in `SupervisoryNode` by properly unpacking the `.global_state_machine` handle from `ray_actor_hook`. - Removed overly broad blanket `Exception` swallowing for WebSocket cancellation that caused closed loops in Uvicorn handlers to leak and dump HTTP errors. - UI: Reset `model_id` to blank whenever a user alters the `Provider Title` to prevent stale incompatible models from breaking submission. Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> Co-authored-by: zhaoxi826 <198742034+zhaoxi826@users.noreply.github.com> * Fix provider manager and skill settings 17493544742337088454 (#31) * fix: correct actorlist handle in supervisory node and ui form reset - Fixed `AttributeError` for `workflow_template_manager` in `SupervisoryNode` by properly unpacking the `.global_state_machine` handle from `ray_actor_hook`. - Removed overly broad blanket `Exception` swallowing for WebSocket cancellation that caused closed loops in Uvicorn handlers to leak and dump HTTP errors. - UI: Reset `model_id` to blank whenever a user alters the `Provider Title` to prevent stale incompatible models from breaking submission. Co-authored-by: zhaoxi826 <198742034+zhaoxi826@users.noreply.github.com> * fix: dynamically resolve backend urls based on browser window location - Updated `apiClient.ts` to use a relative base URL (`''`) if `VITE_API_BASE_URL` is omitted, allowing axios to infer the current domain in reverse-proxied environments. - Updated WebSocket URL generation in `RightPanel.tsx` and `useClusterState.ts` to dynamically calculate protocol (`ws:` vs `wss:`) and host from `window.location`. Co-authored-by: zhaoxi826 <198742034+zhaoxi826@users.noreply.github.com> --------- Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> Co-authored-by: zhaoxi826 <198742034+zhaoxi826@users.noreply.github.com> * Refactor GlobalStateMachine/PostgresDatabase reflection, error retry mechanisms, and frontend worker individual UI. - Replaced dynamic getattr reflection in GlobalStateMachine and PostgresDatabase with explicit wrapper methods to improve stability and avoid Missing Method AttributeErrors. - Add `get_tool_list` explicit wrapper method resolving runtime crashes. - Implemented `RetryableError` and `NonRetryableError` base exceptions, wrapping network errors and utilizing custom `@retry_on_retryable_error` decorator on Provider requests instead of Ray actor's unsupported `retry_exceptions`. - Added exponential backoff algorithms for WebSocket reconnections in the frontend. - Added strict TypeScript-based schema validation for WorkflowTemplate creation payloads. - Redesigned the Worker Individual configuration UI into a unified list containing both System Nodes and Custom Workers, supporting Add, Edit, and Delete workflows, and resolving the provider-switching bug. - Updated unit tests to align with architectural changes. - Cleaned up temp scripts. Co-authored-by: zhaoxi826 <198742034+zhaoxi826@users.noreply.github.com> * Suppress GeneratorExit RuntimeError in WebSocket endpoints - Adds `GeneratorExit` check to the `RuntimeError` exception handling block in FastAPI WebSocket routes (`pretor/api/cluster.py` and `pretor/api/workflow.py`). This prevents unhandled exception crashes in the Ray proxy actor when a client disconnects unexpectedly or closes the generator prematurely. Co-authored-by: zhaoxi826 <198742034+zhaoxi826@users.noreply.github.com> * Suppress GeneratorExit RuntimeError in WebSocket endpoints - Adds `GeneratorExit` check to the `RuntimeError` exception handling block in FastAPI WebSocket routes (`pretor/api/cluster.py` and `pretor/api/workflow.py`). This prevents unhandled exception crashes in the Ray proxy actor when a client disconnects unexpectedly or closes the generator prematurely. Co-authored-by: zhaoxi826 <198742034+zhaoxi826@users.noreply.github.com> --------- Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> Co-authored-by: zhaoxi826 <198742034+zhaoxi826@users.noreply.github.com> --- pretor/api/cluster.py | 2 +- pretor/api/workflow.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pretor/api/cluster.py b/pretor/api/cluster.py index bee6e5f..178e5c4 100644 --- a/pretor/api/cluster.py +++ b/pretor/api/cluster.py @@ -39,7 +39,7 @@ async def update_cluster_state(websocket: WebSocket): except WebSocketDisconnect: pass except RuntimeError as e: - if "closed" not in str(e): + if "closed" not in str(e) and "GeneratorExit" not in str(e): raise except Exception: pass \ No newline at end of file diff --git a/pretor/api/workflow.py b/pretor/api/workflow.py index b7051d0..0a42980 100644 --- a/pretor/api/workflow.py +++ b/pretor/api/workflow.py @@ -32,7 +32,7 @@ async def get_workflow(websocket: WebSocket, event_id: str): except WebSocketDisconnect: pass except RuntimeError as e: - if "closed" not in str(e): + if "closed" not in str(e) and "GeneratorExit" not in str(e): raise except Exception: pass