mirror of
https://github.com/jamiepine/voicebox.git
synced 2026-09-15 04:40:40 -07:00
Fix: keep the uploaded file extension when transcribing (#903)
/transcribe wrote every upload to a temp file named .wav regardless of its real format. librosa picks its decoder from the extension, so any non-wav upload failed with "could not open/decode file" even though the format is one the app handles elsewhere. profiles.py already solves this for voice samples by keeping the uploaded extension when it is one of the audio types it accepts, and falling back to .wav otherwise. Same approach here, same set. The fallback means an unknown or missing extension behaves exactly as it does today.
This commit is contained in:
@@ -15,6 +15,10 @@ router = APIRouter()
|
||||
|
||||
UPLOAD_CHUNK_SIZE = 1024 * 1024 # 1MB
|
||||
|
||||
# Same set profiles.py accepts for voice samples. librosa picks its decoder from the
|
||||
# file extension, so the temp file has to keep the uploaded one.
|
||||
ALLOWED_AUDIO_EXTS = {".wav", ".mp3", ".m4a", ".ogg", ".flac", ".aac", ".webm", ".opus"}
|
||||
|
||||
|
||||
@router.post("/transcribe", response_model=models.TranscriptionResponse)
|
||||
async def transcribe_audio(
|
||||
@@ -23,7 +27,10 @@ async def transcribe_audio(
|
||||
model: str | None = Form(None),
|
||||
):
|
||||
"""Transcribe audio file to text."""
|
||||
with tempfile.NamedTemporaryFile(suffix=".wav", delete=False) as tmp:
|
||||
uploaded_ext = Path(file.filename or "").suffix.lower()
|
||||
file_suffix = uploaded_ext if uploaded_ext in ALLOWED_AUDIO_EXTS else ".wav"
|
||||
|
||||
with tempfile.NamedTemporaryFile(suffix=file_suffix, delete=False) as tmp:
|
||||
while chunk := await file.read(UPLOAD_CHUNK_SIZE):
|
||||
tmp.write(chunk)
|
||||
tmp_path = tmp.name
|
||||
|
||||
Reference in New Issue
Block a user