Connector
The connector enables bidirectional communication between your application (via the Rhesis SDK), the Rhesis backend, and worker processes. It allows remote function execution and automatic endpoint registration without manual configuration.
System Architecture
The connector connects three main components: your target application (via the SDK), the Rhesis backend, and worker processes.
Target Application (SDK):
- Decorates functions with
@collaborate - Maintains WebSocket connection to backend
- Executes functions when requested
- Sends results back via WebSocket
Rhesis Backend:
- Manages WebSocket connections from SDK clients
- Receives function registrations
- Creates/updates endpoint records in database
- Forwards test execution requests to SDK
- Publishes responses to Redis for workers
Workers:
- Execute tests asynchronously via Celery
- Use Redis RPC to invoke SDK functions
- Cannot directly access backend’s in-memory WebSocket connections
- Subscribe to Redis channels for SDK responses
Connection Flow
Initial Connection:
- Target app starts → SDK initializes
RhesisClientwithproject_idandenvironment - SDK establishes WebSocket connection to backend (
/ws/connector) - SDK sends registration message with function metadata
- Backend stores connection and creates endpoint records
Test Execution Flow:
- Worker receives test execution task
- Worker publishes RPC request to Redis (
ws:rpc:requests) - Backend subscribes to Redis and forwards request to SDK via WebSocket
- SDK executes function in target app
- SDK sends result back via WebSocket
- Backend publishes result to Redis (
ws:rpc:response:{test_run_id}) - Worker subscribes and receives result
Backend Components
Connection Manager
Manages WebSocket connections and RPC routing:
Message Handlers
registration.py: Processes SDK function registration, syncs endpointstest_result.py: Handles test execution results, triggers validationpong.py: Keepalive message handling
Mapping System
4-tier priority for request/response mapping:
- SDK Manual: Explicit mappings from
@collaboratedecorator - Existing DB: Preserved manual edits from UI
- Auto-Mapping: Pattern-based heuristics (confidence >= 0.7)
- LLM Fallback: GPT-4 generates mappings (confidence < 0.7)
RPC Architecture
Problem
Workers run in separate processes and cannot access backend’s in-memory connection dictionary.
Solution: Redis Pub/Sub RPC
Flow:
- Worker publishes request to Redis channel
- Backend subscribes and forwards to WebSocket
- SDK executes function and returns result
- Backend publishes response to Redis
- Worker subscribes and receives result
WebSocket Protocol
Message Types
register: SDK registers functions with metadataexecute_test: Backend requests function executiontest_result: SDK returns execution resultpong: Keepalive response
Registration Message
Endpoint Synchronization
When SDK registers functions, backend automatically:
- Creates/updates endpoint records
- Generates or applies mappings
- Validates mappings via test execution
- Updates endpoint status (Active/Error/Inactive)
Key Files
Backend (apps/backend/src/rhesis/backend/app/):
services/connector/manager.py- Connection managementservices/connector/handlers/- Message handlersservices/connector/mapping/- Mapping logicservices/connector/rpc_client.py- Worker RPC clientservices/connector/redis_client.py- Redis connectionrouters/connector.py- WebSocket and REST endpoints
SDK (sdk/src/rhesis/sdk/):
connector/manager.py- SDK connector managerconnector/connection.py- WebSocket connectiondecorators.py-@collaboratedecorator
Related Documentation - Backend - Worker - SDK Connector