From defa7376ee2a2058099c1df7da6e86aa0f24f6d2 Mon Sep 17 00:00:00 2001 From: Dat Date: Thu, 19 Feb 2026 17:29:57 +0100 Subject: [PATCH 1/2] fix: add universal-2 fallback for languages unsupported by universal-3-pro universal-3-pro does not support all languages (e.g. Dutch/nl). Setting speech_models to ["universal-3-pro", "universal-2"] lets AssemblyAI fall back to universal-2 for the 99 languages not covered by universal-3-pro. Also fetch and store the real AssemblyAI error reason in the webhook error handler instead of the generic "AssemblyAI error for transcript ". --- echo/server/dembrane/api/webhooks.py | 10 ++++++++-- echo/server/dembrane/transcribe.py | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/echo/server/dembrane/api/webhooks.py b/echo/server/dembrane/api/webhooks.py index 58324a30..9117062e 100644 --- a/echo/server/dembrane/api/webhooks.py +++ b/echo/server/dembrane/api/webhooks.py @@ -73,9 +73,15 @@ async def assemblyai_webhook_callback( if normalized_status == "error": from dembrane.tasks import _on_chunk_transcription_done - from dembrane.transcribe import _save_chunk_error + from dembrane.transcribe import _save_chunk_error, fetch_assemblyai_result - _save_chunk_error(chunk_id, f"AssemblyAI error for transcript {payload.transcript_id}") + error_detail = f"AssemblyAI error for transcript {payload.transcript_id}" + try: + fetch_assemblyai_result(payload.transcript_id) + except Exception as fetch_exc: + error_detail = str(fetch_exc) + + _save_chunk_error(chunk_id, error_detail) _on_chunk_transcription_done(conversation_id, chunk_id, logger) delete_assemblyai_webhook_metadata(payload.transcript_id) return {"status": "error_handled"} diff --git a/echo/server/dembrane/transcribe.py b/echo/server/dembrane/transcribe.py index 06f68dfb..23cf5762 100644 --- a/echo/server/dembrane/transcribe.py +++ b/echo/server/dembrane/transcribe.py @@ -107,7 +107,7 @@ def transcribe_audio_assemblyai( data: dict[str, Any] = { "audio_url": audio_file_uri, - "speech_models": ["universal-3-pro"], + "speech_models": ["universal-3-pro", "universal-2"], "language_detection": True, "language_detection_options": { "expected_languages": list(set(get_allowed_languages()) | {"pt"}), From ba45295dfcda18b1a799e8e50e811592745c8dde Mon Sep 17 00:00:00 2001 From: Dat Date: Thu, 19 Feb 2026 17:39:00 +0100 Subject: [PATCH 2/2] fix: add universal-2 fallback for languages unsupported by universal-3-pro universal-3-pro does not support all languages (e.g. Dutch/nl). Setting speech_models to ["universal-3-pro", "universal-2"] lets AssemblyAI fall back to universal-2 for the 99 languages not covered by universal-3-pro. Also fetch and store the real AssemblyAI error reason in the webhook error handler instead of the generic "AssemblyAI error for transcript ". --- echo/server/tests/test_transcribe_webhook.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/echo/server/tests/test_transcribe_webhook.py b/echo/server/tests/test_transcribe_webhook.py index 7193dc1e..3f41c875 100644 --- a/echo/server/tests/test_transcribe_webhook.py +++ b/echo/server/tests/test_transcribe_webhook.py @@ -51,7 +51,7 @@ def _fake_post(url: str, **kwargs: Any) -> _FakeResponse: assert transcript is None assert payload == {"transcript_id": "tx-1"} assert captured["url"].endswith("/v2/transcript") - assert captured["json"]["speech_models"] == ["universal-3-pro"] + assert captured["json"]["speech_models"] == ["universal-3-pro", "universal-2"] assert "speech_model" not in captured["json"] assert "prompt" not in captured["json"] assert captured["json"]["keyterms_prompt"] == ["Dembrane"] @@ -92,7 +92,7 @@ def _fake_get(_url: str, **_kwargs: Any) -> _FakeResponse: assert response["status"] == "completed" assert payloads["polls"] == 2 post_payload = payloads["posts"][0] - assert post_payload["speech_models"] == ["universal-3-pro"] + assert post_payload["speech_models"] == ["universal-3-pro", "universal-2"] assert "speech_model" not in post_payload assert "webhook_url" not in post_payload