TurboSkillSlug / transcribe.py
legendarydragontamer's picture
deploy
51a9974
Raw
History Blame Contribute Delete
1.23 kB
"""Transcription via Whisper on Modal."""
import base64
import os
from pathlib import Path
import httpx
WHISPER_URL = os.environ.get(
"MODAL_WHISPER_URL",
"https://anubhavbharadwaaj--slugvoice-whisper-whisperserver-api.modal.run",
)
_HERE = Path(__file__).resolve().parent
_SAMPLE_AUDIO = _HERE / "sample_session.wav"
def _resolve_audio_path(audio_path: str) -> Path:
"""Return a stable audio path, tolerating evicted Gradio example temp files."""
path = Path(audio_path)
if path.exists():
return path
name = path.name.lower()
if name.startswith("sample_session") and _SAMPLE_AUDIO.exists():
return _SAMPLE_AUDIO
raise FileNotFoundError(
f"Audio file is no longer available: {audio_path}. "
"Please re-upload the file and try again."
)
def transcribe_audio(audio_path: str) -> str:
"""Transcribe audio using Whisper on Modal."""
resolved_path = _resolve_audio_path(audio_path)
with open(resolved_path, "rb") as f:
audio_b64 = base64.b64encode(f.read()).decode()
resp = httpx.post(
WHISPER_URL,
json={"audio": audio_b64},
timeout=120,
)
resp.raise_for_status()
return resp.json()["text"]