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"}), 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