MON3EMPASHA's picture
Update Space analyze service
92a5c40
Raw
History Blame Contribute Delete
1.75 kB
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}