feat(ai): add rolling conversation summary memory

This commit is contained in:
Yera All
2026-04-13 11:59:43 +05:00
parent 989bf9a0c1
commit 6b8f5d069b
14 changed files with 900 additions and 26 deletions
+3 -3
View File
@@ -292,7 +292,7 @@ def spawn_service(spec: dict[str, Any], runtime_dir: Path, data_dir: Path, base_
env["AI_TIMEOUT_SECONDS"] = env.get("AI_TIMEOUT_SECONDS", "20")
env["AI_TELEGRAM_ENABLED"] = env.get("AI_TELEGRAM_ENABLED", "0")
env["AI_TELEGRAM_ALWAYS_REPLY"] = env.get("AI_TELEGRAM_ALWAYS_REPLY", "0")
env["AI_TELEGRAM_MAX_CONTEXT_MESSAGES"] = env.get("AI_TELEGRAM_MAX_CONTEXT_MESSAGES", "20")
env["AI_TELEGRAM_MAX_CONTEXT_MESSAGES"] = env.get("AI_TELEGRAM_MAX_CONTEXT_MESSAGES", "12")
env["AI_TELEGRAM_MAX_KB_RESULTS"] = env.get("AI_TELEGRAM_MAX_KB_RESULTS", "3")
env["AI_TELEGRAM_CONFIDENCE_HANDOFF_THRESHOLD"] = env.get(
"AI_TELEGRAM_CONFIDENCE_HANDOFF_THRESHOLD",
@@ -300,7 +300,7 @@ def spawn_service(spec: dict[str, Any], runtime_dir: Path, data_dir: Path, base_
)
env["AI_WHATSAPP_ENABLED"] = env.get("AI_WHATSAPP_ENABLED", "0")
env["AI_WHATSAPP_ALWAYS_REPLY"] = env.get("AI_WHATSAPP_ALWAYS_REPLY", "0")
env["AI_WHATSAPP_MAX_CONTEXT_MESSAGES"] = env.get("AI_WHATSAPP_MAX_CONTEXT_MESSAGES", "20")
env["AI_WHATSAPP_MAX_CONTEXT_MESSAGES"] = env.get("AI_WHATSAPP_MAX_CONTEXT_MESSAGES", "12")
env["AI_WHATSAPP_MAX_KB_RESULTS"] = env.get("AI_WHATSAPP_MAX_KB_RESULTS", "3")
env["AI_WHATSAPP_CONFIDENCE_HANDOFF_THRESHOLD"] = env.get(
"AI_WHATSAPP_CONFIDENCE_HANDOFF_THRESHOLD",
@@ -330,7 +330,7 @@ def spawn_service(spec: dict[str, Any], runtime_dir: Path, data_dir: Path, base_
env["AI_VOICE_V2_PARTIAL_ASR"] = env.get("AI_VOICE_V2_PARTIAL_ASR", "1")
env["AI_VOICE_V2_EMOTIVE_ACK_ENABLED"] = env.get("AI_VOICE_V2_EMOTIVE_ACK_ENABLED", "1")
env["AI_VOICE_V2_EMOTIVE_ACK_RU_ONLY"] = env.get("AI_VOICE_V2_EMOTIVE_ACK_RU_ONLY", "1")
env["AI_VOICE_MAX_CONTEXT_SEGMENTS"] = env.get("AI_VOICE_MAX_CONTEXT_SEGMENTS", "8")
env["AI_VOICE_MAX_CONTEXT_SEGMENTS"] = env.get("AI_VOICE_MAX_CONTEXT_SEGMENTS", "12")
env["AI_VOICE_HANDOFF_TIMEOUT_SECONDS"] = env.get("AI_VOICE_HANDOFF_TIMEOUT_SECONDS", "8")
env["AI_VOICE_VAD_TRAILING_SILENCE_MS"] = env.get("AI_VOICE_VAD_TRAILING_SILENCE_MS", "400")
env["AI_VOICE_RUNTIME_TRUSTED_SERVICE_SUBJECTS"] = env.get(
+2 -2
View File
@@ -23,7 +23,7 @@ from services.ai_voice_runtime_service.providers.tts import build_tts_provider
def _default_provider_name() -> str:
return os.getenv("AI_VOICE_TTS_PROVIDER", "openai").strip() or "openai"
return os.getenv("AI_VOICE_TTS_PROVIDER", "yandex").strip() or "yandex"
def _parse_args() -> argparse.Namespace:
@@ -39,7 +39,7 @@ def _parse_args() -> argparse.Namespace:
parser.add_argument(
"--provider",
default=_default_provider_name(),
help="TTS provider name. Defaults to AI_VOICE_TTS_PROVIDER or openai.",
help="TTS provider name. Defaults to AI_VOICE_TTS_PROVIDER or yandex.",
)
parser.add_argument("--sample-rate", type=int, default=8000, help="Target WAV sample rate. Defaults to 8000.")
parser.add_argument("--default-language", default="ru", help="Fallback language for ambiguous prompts. Defaults to ru.")
+2 -2
View File
@@ -16,7 +16,7 @@ from services.ai_voice_runtime_service.providers.tts import build_tts_provider
def _parse_args() -> argparse.Namespace:
default_provider = os.getenv("AI_VOICE_TTS_PROVIDER", "openai").strip() or "openai"
default_provider = os.getenv("AI_VOICE_TTS_PROVIDER", "yandex").strip() or "yandex"
parser = argparse.ArgumentParser(
description="Generate TTS once, cache it on the server, and materialize a WAV prompt file.",
)
@@ -26,7 +26,7 @@ def _parse_args() -> argparse.Namespace:
parser.add_argument(
"--provider",
default=default_provider,
help="TTS provider name. Defaults to AI_VOICE_TTS_PROVIDER or openai.",
help="TTS provider name. Defaults to AI_VOICE_TTS_PROVIDER or yandex.",
)
parser.add_argument("--sample-rate", type=int, default=8000, help="Target WAV sample rate. Defaults to 8000.")
return parser.parse_args()