fix: media_paths NameError, import order, add error logging and tests

- Move media_paths assignment before voice message handling to prevent
  NameError at runtime
- Fix broken import layout in transcription.py (httpx/loguru after class)
- Add error logging to OpenAITranscriptionProvider matching Groq style
- Add regression tests for voice transcription and no-media fallback

Made-with: Cursor
This commit is contained in:
Xubin Ren
2026-04-06 06:01:14 +00:00
parent 413740f585
commit 7b7a3e5748
3 changed files with 58 additions and 8 deletions
+3 -3
View File
@@ -236,6 +236,9 @@ class WhatsAppChannel(BaseChannel):
sender_id = user_id.split("@")[0] if "@" in user_id else user_id
logger.info("Sender {}", sender)
# Extract media paths (images/documents/videos downloaded by the bridge)
media_paths = data.get("media") or []
# Handle voice transcription if it's a voice message
if content == "[Voice Message]":
if media_paths:
@@ -249,9 +252,6 @@ class WhatsAppChannel(BaseChannel):
else:
content = "[Voice Message: Audio not available]"
# Extract media paths (images/documents/videos downloaded by the bridge)
media_paths = data.get("media") or []
# Build content tags matching Telegram's pattern: [image: /path] or [file: /path]
if media_paths:
for p in media_paths:
+7 -5
View File
@@ -3,6 +3,9 @@
import os
from pathlib import Path
import httpx
from loguru import logger
class OpenAITranscriptionProvider:
"""Voice transcription provider using OpenAI's Whisper API."""
@@ -13,12 +16,13 @@ class OpenAITranscriptionProvider:
async def transcribe(self, file_path: str | Path) -> str:
if not self.api_key:
logger.warning("OpenAI API key not configured for transcription")
return ""
path = Path(file_path)
if not path.exists():
logger.error("Audio file not found: {}", file_path)
return ""
try:
import httpx
async with httpx.AsyncClient() as client:
with open(path, "rb") as f:
files = {"file": (path.name, f), "model": (None, "whisper-1")}
@@ -28,12 +32,10 @@ class OpenAITranscriptionProvider:
)
response.raise_for_status()
return response.json().get("text", "")
except Exception:
except Exception as e:
logger.error("OpenAI transcription error: {}", e)
return ""
import httpx
from loguru import logger
class GroqTranscriptionProvider:
"""