fix: reduce awkward fillers and handle call endings
This commit is contained in:
@@ -14,18 +14,20 @@ from realtime_voice_service.providers.base import BaseTTS
|
||||
|
||||
LOGGER = logging.getLogger("uvicorn.error")
|
||||
|
||||
|
||||
DEFAULT_FILLER_TEXTS: dict[str, tuple[str, ...]] = {
|
||||
"serper": (
|
||||
"Сейчас уточню.",
|
||||
"Проверяю информацию.",
|
||||
"Сейчас подскажу.",
|
||||
),
|
||||
"generic": (
|
||||
"Сейчас отвечу.",
|
||||
"Уточняю.",
|
||||
"Уже отвечаю.",
|
||||
),
|
||||
}
|
||||
|
||||
|
||||
|
||||
class FillerAudioLibrary:
|
||||
def __init__(
|
||||
self,
|
||||
|
||||
+53
-3
@@ -52,6 +52,7 @@ SEMANTIC_ENDPOINTING_HOLD_MS = _semantic_hold_ms()
|
||||
FILLER_AUDIO_DELAY_MS = _filler_delay_ms()
|
||||
TTS_CHUNK_SOFT_MIN_CHARS = _tts_chunk_soft_min_chars()
|
||||
TTS_CHUNK_SOFT_MIN_WORDS = _tts_chunk_soft_min_words()
|
||||
|
||||
_FAREWELL_MARKERS: frozenset[str] = frozenset({
|
||||
"спасибо",
|
||||
"благодарю",
|
||||
@@ -60,9 +61,22 @@ _FAREWELL_MARKERS: frozenset[str] = frozenset({
|
||||
"пока",
|
||||
"до встречи",
|
||||
"хорошего дня",
|
||||
"ничего не нужно",
|
||||
"ничего не надо",
|
||||
"мне ничего не нужно",
|
||||
"мне ничего не надо",
|
||||
"больше ничего",
|
||||
"это все",
|
||||
"это всё",
|
||||
"все понятно",
|
||||
"всё понятно",
|
||||
"вопросов нет",
|
||||
"не надо",
|
||||
"не нужно",
|
||||
"goodbye",
|
||||
"bye",
|
||||
})
|
||||
|
||||
_FAREWELL_QUERY_MARKERS: frozenset[str] = frozenset({
|
||||
"вопрос",
|
||||
"подскаж",
|
||||
@@ -73,9 +87,25 @@ _FAREWELL_QUERY_MARKERS: frozenset[str] = frozenset({
|
||||
"где",
|
||||
"когда",
|
||||
"можно",
|
||||
"нужно",
|
||||
"нужно ли",
|
||||
"нужно еще",
|
||||
"нужно ещё",
|
||||
"хочу",
|
||||
"мне",
|
||||
"еще",
|
||||
"ещё",
|
||||
"теперь",
|
||||
"тогда",
|
||||
"адрес",
|
||||
"тариф",
|
||||
"оператор",
|
||||
"статус",
|
||||
"проблем",
|
||||
"помощ",
|
||||
"помочь",
|
||||
"узнать",
|
||||
"нужен",
|
||||
"нужна",
|
||||
"нужны",
|
||||
})
|
||||
FAREWELL_RESPONSE_TEXT = "Спасибо за обращение в DigiOps. Всего доброго, до свидания!"
|
||||
|
||||
@@ -1082,6 +1112,26 @@ class CallSession:
|
||||
self.session_id,
|
||||
len(self._conversation),
|
||||
)
|
||||
if _is_terminal_farewell(transcript):
|
||||
LOGGER.info(
|
||||
"realtime session %s farewell detected before assistant response: epoch=%s transcript=%r",
|
||||
self.session_id,
|
||||
epoch,
|
||||
_preview_text(transcript),
|
||||
)
|
||||
await self._play_prepared_response(
|
||||
epoch=epoch,
|
||||
response_text=FAREWELL_RESPONSE_TEXT,
|
||||
actually_spoken_chunks=actually_spoken_chunks,
|
||||
)
|
||||
self._ensure_generation(epoch)
|
||||
self._commit_assistant_context(
|
||||
llm_generated_text=FAREWELL_RESPONSE_TEXT,
|
||||
actually_spoken_chunks=actually_spoken_chunks,
|
||||
interrupted=False,
|
||||
)
|
||||
await self._close_after_farewell()
|
||||
return
|
||||
name_collection_response = self._build_name_collection_response(transcript)
|
||||
if name_collection_response is not None:
|
||||
LOGGER.info(
|
||||
@@ -1143,7 +1193,7 @@ class CallSession:
|
||||
epoch=epoch,
|
||||
tool_name=None,
|
||||
started_monotonic=llm_started_monotonic,
|
||||
suppress=_is_farewell_transcript(transcript),
|
||||
suppress=_is_terminal_farewell(transcript) or _is_farewell_transcript(transcript),
|
||||
),
|
||||
name=f"{self.session_id}-filler-delay-{epoch}",
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user