This commit is contained in:
arys
2026-04-30 02:16:45 +05:00
parent 411cf44742
commit 1b5ebbc456
4 changed files with 14 additions and 14 deletions
+1 -1
View File
@@ -21,7 +21,7 @@ from realtime_voice_service.transports.base import BaseMediaTransport
LOGGER = logging.getLogger("uvicorn.error")
SEMANTIC_ENDPOINTING_HOLD_MS = 2000
SEMANTIC_ENDPOINTING_HOLD_MS = 1000
SEMANTIC_CONTINUATION_TOKENS = {
"а",
"в",
+2 -2
View File
@@ -70,8 +70,8 @@ def _audiosocket_port() -> int:
def _sample_rate_hz() -> int:
configured = max(_int_env("REALTIME_VOICE_SAMPLE_RATE_HZ", 8000), 1)
return configured if configured in {8000, 16000, 24000} else 8000
configured = max(_int_env("REALTIME_VOICE_SAMPLE_RATE_HZ", 16000), 1)
return configured if configured in {8000, 16000, 24000} else 16000
def _http_host() -> str:
+4 -4
View File
@@ -69,7 +69,7 @@ class OpenAILLM(BaseLLM):
base_url: str | None = None,
system_prompt: str | None = None,
timeout_seconds: float | None = None,
temperature: float = 0.3,
temperature: float = 0.7,
max_retries: int = 2,
max_context_messages: int | None = None,
reasoning_effort: str | None = None,
@@ -86,7 +86,7 @@ class OpenAILLM(BaseLLM):
if system_prompt is not None
else os.getenv(
"OPENAI_LLM_SYSTEM_PROMPT",
"You are a concise voice assistant for a telecom call center. Answer clearly and briefly.",
"Ты — дружелюбный, живой и эмпатичный голосовой ИИ-ассистент. Отвечай кратко, как в реальном диалоге. Используй разговорный стиль. Чтобы синтезатор речи (TTS) читал аббревиатуры и английские термины без акцента, пиши их русскими буквами так, как они произносятся (например, 'ай-ти' вместо 'IT', 'би-ту-би' вместо 'B2B', 'си-эр-эм' вместо 'CRM').",
)
).strip()
self._timeout_seconds = max(float(timeout_seconds if timeout_seconds is not None else _timeout_seconds()), 1.0)
@@ -654,7 +654,7 @@ class OllamaLLM(BaseLLM):
"OLLAMA_LLM_SYSTEM_PROMPT",
os.getenv(
"OPENAI_LLM_SYSTEM_PROMPT",
"You are a concise voice assistant for a telecom call center. Answer clearly and briefly.",
"Ты — дружелюбный, живой и эмпатичный голосовой ИИ-ассистент. Отвечай кратко, как в реальном диалоге. Используй разговорный стиль. Чтобы синтезатор речи (TTS) читал аббревиатуры и английские термины без акцента, пиши их русскими буквами так, как они произносятся (например, 'ай-ти' вместо 'IT', 'би-ту-би' вместо 'B2B', 'си-эр-эм' вместо 'CRM').",
),
)
).strip()
@@ -663,7 +663,7 @@ class OllamaLLM(BaseLLM):
1.0,
)
self._temperature = max(
min(float(temperature if temperature is not None else self._read_float_env("OLLAMA_LLM_TEMPERATURE", 0.3)), 2.0),
min(float(temperature if temperature is not None else self._read_float_env("OLLAMA_LLM_TEMPERATURE", 0.7)), 2.0),
0.0,
)
self._max_context_messages = max(
+7 -7
View File
@@ -91,12 +91,12 @@ class ElevenLabsTTS(BaseTTS):
self._ws_base = _ws_base(self._api_base)
self._voice_id = str(voice_id or os.getenv("ELEVENLABS_TTS_VOICE_ID", "")).strip()
self._requested_model_id = (
str(model_id or os.getenv("ELEVENLABS_TTS_MODEL_ID", "eleven_turbo_v2_5")).strip()
or "eleven_turbo_v2_5"
str(model_id or os.getenv("ELEVENLABS_TTS_MODEL_ID", "eleven_multilingual_v2")).strip()
or "eleven_multilingual_v2"
)
self._websocket_fallback_model_id = (
str(os.getenv("ELEVENLABS_TTS_WS_FALLBACK_MODEL_ID", "eleven_turbo_v2_5")).strip()
or "eleven_turbo_v2_5"
str(os.getenv("ELEVENLABS_TTS_WS_FALLBACK_MODEL_ID", "eleven_multilingual_v2")).strip()
or "eleven_multilingual_v2"
)
self._model_id = self._resolve_websocket_model_id(
requested_model_id=self._requested_model_id,
@@ -129,7 +129,7 @@ class ElevenLabsTTS(BaseTTS):
or _parse_chunk_schedule(os.getenv("ELEVENLABS_TTS_CHUNK_LENGTH_SCHEDULE"))
)
self._voice_settings = {
"stability": self._read_float_env("ELEVENLABS_TTS_STABILITY", 0.35),
"stability": self._read_float_env("ELEVENLABS_TTS_STABILITY", 0.5),
"similarity_boost": self._read_float_env("ELEVENLABS_TTS_SIMILARITY_BOOST", 0.75),
"speed": self._read_float_env("ELEVENLABS_TTS_SPEED", 1.0),
"use_speaker_boost": self._read_bool_env("ELEVENLABS_TTS_USE_SPEAKER_BOOST", False),
@@ -352,11 +352,11 @@ class ElevenLabsTTS(BaseTTS):
@staticmethod
def _resolve_websocket_model_id(*, requested_model_id: str, fallback_model_id: str) -> str:
normalized_requested = requested_model_id.strip() or "eleven_turbo_v2_5"
normalized_requested = requested_model_id.strip() or "eleven_multilingual_v2"
if normalized_requested not in {"eleven_v3", "eleven_ttv_v3"}:
return normalized_requested
normalized_fallback = fallback_model_id.strip() or "eleven_turbo_v2_5"
normalized_fallback = fallback_model_id.strip() or "eleven_multilingual_v2"
LOGGER.warning(
"ElevenLabs WebSocket TTS does not support model_id=%s; falling back to model_id=%s",
normalized_requested,