from __future__ import annotations import json from typing import List, Optional from fastapi import APIRouter, File, Form, UploadFile try: from services.asr_service import list_supported_models, transcribe_with_model except ImportError: from .services.asr_service import list_supported_models, transcribe_with_model router = APIRouter() def _parse_model_ids(model_id: Optional[str], model_ids: Optional[str]) -> List[str]: if model_ids: try: parsed = json.loads(model_ids) if isinstance(parsed, list): return [str(item) for item in parsed if str(item).strip()] except json.JSONDecodeError: return [item.strip() for item in model_ids.split(",") if item.strip()] if model_id: return [model_id] return [] @router.get("/test-asr/models") async def get_test_asr_models(): return {"models": list_supported_models()} @router.post("/test-asr") async def test_asr( audio: UploadFile = File(...), model_id: Optional[str] = Form(None), model_ids: Optional[str] = Form(None), ): audio_bytes = await audio.read() selected_model_ids = _parse_model_ids(model_id, model_ids) if not selected_model_ids: return { "model_id": model_id, "transcription": None, "processing_time_seconds": None, "error": "Provide model_id for one model or model_ids for comparison mode.", } results = [ transcribe_with_model( model_id=item, audio_bytes=audio_bytes, filename=audio.filename, ) for item in selected_model_ids ] if len(results) == 1: return results[0] return {"results": results}