study-buddy / app /routers /voice.py
GitHub Actions
deploy d092bea3608b7a29952f16357fda39b7a29e399b
2e818da
Raw
History Blame Contribute Delete
1.91 kB
import os
from fastapi import APIRouter, HTTPException
from app.services.tts_service import build_default_registry
from app.services.voice_selection import VoiceSelectionError, get_voice_selection_store
from app.services.voice_transcription_service import VoiceTranscriptionService
router = APIRouter(prefix="/api/voice", tags=["voice"])
def _is_demo_mode() -> bool:
return os.getenv("DEPLOYMENT_ENV", "desktop") == "demo"
@router.get("/catalog")
def voice_catalog():
registry = build_default_registry()
return {
"default_selection": get_voice_selection_store().get(registry),
"models": registry.catalog(),
}
@router.get("/default-selection")
def get_default_voice_selection():
registry = build_default_registry()
return {"selection": get_voice_selection_store().get(registry)}
@router.put("/default-selection")
def set_default_voice_selection(payload: dict):
registry = build_default_registry()
try:
selection = get_voice_selection_store().set(payload, registry)
except VoiceSelectionError as exc:
raise HTTPException(status_code=422, detail=str(exc)) from exc
return {"selection": selection}
@router.get("/status")
def voice_status():
if _is_demo_mode():
return {
"available": False,
"is_loading": False,
"backend": "disabled",
"model": "disabled",
"compute_type": "disabled",
"tts_backend": "disabled",
"tts_voice": "disabled",
}
service = VoiceTranscriptionService.get()
config = service.model_config
return {
"available": service.is_available,
"is_loading": service.is_model_loading(),
"backend": config.backend,
"model": config.model,
"compute_type": config.compute_type,
"tts_backend": "pocket-tts",
"tts_voice": "anshuman-normal-custom",
}