feat: live observability, ElevenLabs migration sync, and provider bridges - #118
feat: live observability, ElevenLabs migration sync, and provider bridges#118aadhar-EAI wants to merge 6 commits into
Conversation
Land incremental live-event ingest, provider/synthetic traces, and Observability UI so the traces work can keep building from a committed baseline. Co-authored-by: Cursor <cursoragent@cursor.com>
…5 temperature fix Add provider sync jobs for bulk ElevenLabs agent/conversation import, live transcript bridges (monitor WebSocket + Pipecat observer), proxied ElevenLabs audio playback, and omit unsupported temperature for GPT-5 reasoning models. Co-authored-by: Cursor <cursoragent@cursor.com>
Integrate usage tracking, metric studio, and platform admin from main with ElevenLabs observability, provider sync, and live tracing from border. Co-authored-by: Cursor <cursoragent@cursor.com>
Restore missing provider schemas, remove duplicate voice_bundle argument, track ElevenLabs test fixtures, and seed org/workspace in live emitter test. Co-authored-by: Cursor <cursoragent@cursor.com>
Only build live synthetic traces for pipecat/livekit or explicit live_transcript, use 6-char call_short_id values in observability API tests, add S3 download stub, and make call ingest tests self-contained. Co-authored-by: Cursor <cursoragent@cursor.com>
|
| Filename | Overview |
|---|---|
| app/workers/tasks/elevenlabs_provider_sync.py | Adds the provider-sync workflow and cancellation polling, but catalog and agent terminal writes can still overwrite a concurrent cancellation. |
| app/services/observability/recording_url_safety.py | Adds host, path, IP, and redirect checks for credential-bearing downloads, but leaves validation vulnerable to DNS rebinding. |
| docker-compose.yml | Adds provider-sync to the import worker's consumed queues, resolving the previously unconsumed queue. |
| app/api/v1/routes/integrations.py | Adds provider-sync creation, status, and cancellation endpoints; cancellation commits correctly but workers do not preserve it atomically. |
| app/api/v1/routes/observability.py | Substantially expands observability ingest, retrieval, live event, trace, and recording endpoints. |
Reviews (3): Last reviewed commit: "Address Greptile merge blockers for prov..." | Re-trigger Greptile
Route provider-sync tasks in Docker Compose, terminate agent sync jobs on completion, honor cancellation during sync loops, and validate ElevenLabs recording URLs before attaching provider credentials. Co-authored-by: Cursor <cursoragent@cursor.com>
1 similar comment
| if not payload.get("has_more") or not cursor: | ||
| break | ||
|
|
||
| _mark_job(db, job, status="running", phase="enrich") |
There was a problem hiding this comment.
Cancellation state is restored to running
When a user cancels after the catalog task’s final cancellation check but before its phase handoff, this unconditional write replaces cancelled with running, causing the chained enrichment task to continue provider requests and database writes while subsequent syncs remain blocked. The standalone agent task has the same terminal-write race and can replace cancellation with completed.
| with httpx.Client( | ||
| timeout=timeout_seconds, | ||
| follow_redirects=True, | ||
| event_hooks={"request": [_validate_redirect]}, | ||
| ) as client: | ||
| response = client.get(recording_url, headers={"xi-api-key": api_key}) |
There was a problem hiding this comment.
DNS rebinding bypasses destination validation
When an allowed ElevenLabs hostname changes from a public address during validation to a private address when HTTPX connects, the request sends the decrypted xi-api-key to the unvalidated internal destination, enabling internal-network access and credential disclosure.
How this was verified: The validator checks one getaddrinfo result, while HTTPX subsequently resolves and connects independently with the xi-api-key attached.
Summary
Test plan
061_provider_sync_jobsand verify backend healthdocs/telemetry/elevenlabs-local-ngrok.md) and verify post-call ingestPOST /integrations/{id}/sync/elevenlabs/agentsand.../conversations; confirm job progress endpointsgpt-5.6and confirm no temperature 400 errorpytest tests/test_api/test_observability_routes.py tests/test_api/test_integrations_routes.py tests/test_services/test_ai/test_llm_service.pyMade with Cursor