Fix talking voice error
This commit is contained in:
@@ -12,6 +12,18 @@ from ..schemas import (
|
||||
|
||||
router = APIRouter(prefix="/assistants", tags=["Assistants"])
|
||||
|
||||
OPENAI_COMPATIBLE_DEFAULT_MODEL = "FunAudioLLM/CosyVoice2-0.5B"
|
||||
OPENAI_COMPATIBLE_KNOWN_VOICES = {
|
||||
"alex",
|
||||
"anna",
|
||||
"bella",
|
||||
"benjamin",
|
||||
"charles",
|
||||
"claire",
|
||||
"david",
|
||||
"diana",
|
||||
}
|
||||
|
||||
|
||||
def _is_openai_compatible_vendor(vendor: Optional[str]) -> bool:
|
||||
return (vendor or "").strip().lower() in {
|
||||
@@ -22,6 +34,24 @@ def _is_openai_compatible_vendor(vendor: Optional[str]) -> bool:
|
||||
}
|
||||
|
||||
|
||||
def _normalize_openai_compatible_voice_key(voice_value: str, model: str) -> str:
|
||||
raw = (voice_value or "").strip()
|
||||
model_name = (model or "").strip() or OPENAI_COMPATIBLE_DEFAULT_MODEL
|
||||
if not raw:
|
||||
return f"{model_name}:anna"
|
||||
|
||||
if ":" in raw:
|
||||
voice_model, voice_id = raw.split(":", 1)
|
||||
voice_model = voice_model.strip() or model_name
|
||||
voice_id = voice_id.strip()
|
||||
if voice_id.lower() in OPENAI_COMPATIBLE_KNOWN_VOICES:
|
||||
voice_id = voice_id.lower()
|
||||
return f"{voice_model}:{voice_id}"
|
||||
|
||||
voice_id = raw.lower() if raw.lower() in OPENAI_COMPATIBLE_KNOWN_VOICES else raw
|
||||
return f"{model_name}:{voice_id}"
|
||||
|
||||
|
||||
def _resolve_runtime_metadata(db: Session, assistant: Assistant) -> dict:
|
||||
metadata = {
|
||||
"systemPrompt": assistant.prompt or "",
|
||||
@@ -67,12 +97,17 @@ def _resolve_runtime_metadata(db: Session, assistant: Assistant) -> dict:
|
||||
voice = db.query(Voice).filter(Voice.id == assistant.voice).first()
|
||||
if voice:
|
||||
tts_provider = "openai_compatible" if _is_openai_compatible_vendor(voice.vendor) else "edge"
|
||||
model = voice.model
|
||||
runtime_voice = voice.voice_key or voice.id
|
||||
if tts_provider == "openai_compatible":
|
||||
model = model or OPENAI_COMPATIBLE_DEFAULT_MODEL
|
||||
runtime_voice = _normalize_openai_compatible_voice_key(runtime_voice, model)
|
||||
metadata["services"]["tts"] = {
|
||||
"enabled": True,
|
||||
"provider": tts_provider,
|
||||
"model": voice.model,
|
||||
"model": model,
|
||||
"apiKey": voice.api_key if tts_provider == "openai_compatible" else None,
|
||||
"voice": voice.voice_key or voice.id,
|
||||
"voice": runtime_voice,
|
||||
"speed": assistant.speed or voice.speed,
|
||||
}
|
||||
else:
|
||||
|
||||
Reference in New Issue
Block a user