Commit Graph
40 Commits
Author SHA1 Message Date
didar 9fdaa9472f Revert "fix: let voice early-plan turns answer from the FAQ knowledge base"
deploy / deploy (push) Successful in 31s
This reverts commit 8ced7a59e3.
2026-08-31 00:54:38 +05:00
didar 8ced7a59e3 fix: let voice early-plan turns answer from the FAQ knowledge base
deploy / deploy (push) Successful in 32s
The speculative "early plan" turn (computed on partial ASR, before the
caller finishes talking) can win the race and get spoken as the actual
reply, but it unconditionally skipped KB search and answered common
questions (schedule/address/price/status/problem) with a hardcoded
clarifying question even when the FAQ already had the answer.

KB search is a cheap in-memory lexical scan over a DB-cached row set,
so it fits the early-plan latency budget unlike a real LLM call. Now
early-plan runs it and, on a match, answers from the KB snippet
(intent resolved via normalize_intent) instead of guessing a generic
clarifying question; with no match it falls back to the prior
behavior unchanged. operator_request is unaffected.
2026-08-31 00:38:06 +05:00
didar d2438b6954 feat: canonical intent taxonomy for AI operator (kb_answer -> intent_code)
deploy / deploy (push) Successful in 30s
Centralizes fixed control intents and adds a data-driven intent_code
field on kb_articles so many phrasings of the same FAQ question
resolve to one stable code (e.g. VOUCHER_ACTIVATION) instead of a
free-form, unvalidated string the LLM invented on the fly.

- services/shared/intents.py: CONTROL_INTENTS + normalize_intent()
- kb_articles.intent_code column (ORM + dev/sqlite runtime compat +
  migrations/sql/0034_* for postgres/sqlite)
- kb_service CRUD exposes intent_code
- orchestrator surfaces intent_code to the LLM and validates its
  intent output against control intents + the KB codes shown that turn
- voice.py: _voice_early_intent_bucket renamed to _voice_ack_topic_bucket
  to stop it being conflated with the canonical FAQ intent
2026-08-31 00:17:51 +05:00
didar 2f4a9795b5 fix: small fixes on filler phrases
deploy / deploy (push) Successful in 34s
2026-08-30 23:52:06 +05:00
didar 48d1fabba1 fix: update ElevenLabs Russian and Kazakh voice IDs for TTS
deploy / deploy (push) Successful in 32s
2026-08-30 23:44:05 +05:00
didar 010a8dcab6 fix: ensure emotive ack rotation and prebaked ack caching apply outside v2 queue eligibility
deploy / deploy (push) Successful in 30s
2026-08-30 12:49:26 +05:00
didar 36c2acb011 test: add test for emotive ack rotation not gated on v2 queue eligibility
deploy / deploy (push) Successful in 31s
2026-08-30 12:03:37 +05:00
didar fe9b3f3a80 feat: enhance voice reply logic to prevent duplicate name addressing and improve greeting handling
deploy / deploy (push) Successful in 32s
2026-08-30 11:53:56 +05:00
didar 9e4c47eddd feat: enhance AudioSocketMediaRuntime to skip filler acks for closing intents and throttle repeated filler acks
deploy / deploy (push) Successful in 30s
2026-08-30 11:30:55 +05:00
didar 6ef2e6b81f fix: update ElevenLabs voice IDs for Russian and Kazakh languages
deploy / deploy (push) Successful in 31s
2026-08-29 13:36:27 +05:00
didar a651b9c086 fix: add name correction action in _voice_downstream_name_update function
deploy / deploy (push) Successful in 30s
2026-08-29 01:53:58 +05:00
didar 78007dae38 fix: improve name matching logic in _voice_reply_with_name function
deploy / deploy (push) Successful in 31s
2026-08-29 01:32:08 +05:00
didar d2a9df36d1 feat: add cache_fingerprint method to TTSProvider and its subclasses for voice/model configuration
deploy / deploy (push) Successful in 30s
2026-08-29 01:23:23 +05:00
didar 09bcf7457c feat: add AI_VOICE_AI_TIMEOUT_SECONDS for configurable voice timeout
deploy / deploy (push) Successful in 30s
2026-08-29 00:50:08 +05:00
didarandClaude Sonnet 5 b8c922c9cf fix: revert AI_VOICE_V2_STREAMING_TTS to disabled
deploy / deploy (push) Successful in 28s
Streaming TTS caused poor voice quality in live testing on Creator
plan too — not just a quota-era fluke. Reverting to non-streaming
synthesis until the root cause is understood.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-29 00:39:46 +05:00
didar 26d718b0ae feat: enable streaming TTS for improved voice interaction
deploy / deploy (push) Successful in 30s
2026-08-29 00:29:44 +05:00
didar d9437d8b21 feat: update ElevenLabs API keys and voice IDs for improved ASR and TTS functionality
deploy / deploy (push) Successful in 32s
2026-08-28 23:45:34 +05:00
didar b474c35608 feat: enhance acknowledgment responses for Kazakh and Russian languages
deploy / deploy (push) Successful in 33s
2026-08-28 15:12:19 +05:00
didarandClaude Sonnet 5 fadff59512 feat: reduce VAD trailing silence for faster voice bot response
deploy / deploy (push) Successful in 30s
Lower AI_VOICE_VAD_TRAILING_SILENCE_MS from 500 to 350 so the bot
starts responding sooner after the caller stops speaking.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-25 16:59:00 +05:00
didarandClaude Sonnet 5 7f03b26ef6 feat: switch ElevenLabs RU/KK voice to softer, younger female voice
deploy / deploy (push) Successful in 2m50s
Swap RU and KK TTS voice IDs to "Nataly Mi Soft voice" — a soft,
gentle, young female voice verified for Russian on eleven_turbo_v2_5.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-25 16:23:44 +05:00
didar 953268e1b8 feat: update ElevenLabs RU voice ID for improved TTS performance
deploy / deploy (push) Successful in 31s
2026-08-25 02:09:48 +05:00
didar f9793dc5f4 feat: enable emotive acknowledgments and update ElevenLabs TTS model ID for enhanced audio responses
deploy / deploy (push) Successful in 30s
2026-08-25 02:00:26 +05:00
didar 7ddc965292 fix: disable AI_VOICE_V2_STREAMING_TTS for improved stability
deploy / deploy (push) Successful in 30s
2026-08-25 01:50:31 +05:00
didar 2ea6e6f4bb feat: update AI voice settings for improved responsiveness and pacing
deploy / deploy (push) Successful in 31s
2026-08-25 01:42:10 +05:00
didar 6ccdaf9167 feat: update ElevenLabs TTS model ID and add prebuffering for improved audio streaming
deploy / deploy (push) Successful in 31s
2026-08-25 01:20:52 +05:00
didar 70ec9ab384 feat: retrieving back ElevenLabs TTS model ID to eleven_flash_v2_5
deploy / deploy (push) Successful in 30s
2026-08-25 01:09:26 +05:00
didar c399296165 feat: implement no-speech reprompt functionality with configurable parameters
deploy / deploy (push) Successful in 33s
2026-08-24 14:17:00 +05:00
didarandClaude Sonnet 5 75d9ed85a7 fix: force narrowband slin on AI audiosocket channel
deploy / deploy (push) Successful in 31s
AudioSocket was delivering 16kHz audio despite the telecom-kz trunk being
codec-restricted to alaw/ulaw, causing the 8k->16k ASR resample to double
an already-16kHz stream to an effective 32kHz labeled as 16000 Hz -
audible as slow, deep-pitched, unintelligible speech. Force
audioread/writeformat=slin before AudioSocket() so the channel always
delivers narrowband 8kHz, matching every rate assumption in the runtime.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-23 15:42:01 +05:00
didar c590528694 feat: add debug audio dump functionality for ElevenLabs ASR provider
deploy / deploy (push) Successful in 30s
2026-08-23 13:38:56 +05:00
didar 9a09a39849 feat: enhance ElevenLabs ASR provider to accumulate autonomous VAD commits
deploy / deploy (push) Successful in 31s
2026-08-23 13:20:31 +05:00
didar 206b0bafe0 feat: update real-time commit strategy for ElevenLabs ASR to VAD
deploy / deploy (push) Successful in 30s
2026-08-23 13:05:58 +05:00
didar 1a91dc4489 feat: add tenant ID handling for sales voice and telegram sync requests
deploy / deploy (push) Successful in 30s
2026-08-23 12:55:25 +05:00
didar 8dd3e238f2 feat: enhance low signal transcript handling with finalization checks and logging
deploy / deploy (push) Successful in 31s
2026-08-23 12:40:59 +05:00
didar 642104ec0d Merge pull request 'feat: make ai_operator_settings config code the source of truth' (#3) from feat/ai-operator-config-source-of-truth into main
deploy / deploy (push) Successful in 29s
Reviewed-on: #3
2026-08-21 16:17:12 +00:00
didarandClaude Sonnet 5 c5dd87ee32 feat: make ai_operator_settings config code the source of truth
Add sync_ai_operator_config_from_code() which overwrites the DB-cached
ai_operator_settings row from ai_operator_default_config() on startup
of ai_orchestrator_service and ai_voice_runtime_service. Greeting and
system prompt changes now go through git + deploy instead of manual
psql/API edits to prod. Also adds a root README pointing to existing docs.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-21 21:00:34 +05:00
didar ffa779ffa0 Move ai-voice-runtime-service host port off 9019 to avoid cross-tenant conflict
deploy / deploy (push) Canceled after 24h48m11s
A separate deployment on the same host (aimaq-call-center) already binds
127.0.0.1:9019, so this project's ai-voice-runtime-service could never
start there. Remap the host side to 9024 and point Asterisk's
AudioSocket target at the new port; the container still listens on 9019
internally.
2026-08-20 23:22:16 +05:00
didar 13ef87eb2c Fix voice greeting test marker to hit the actually-served default
deploy / deploy (push) Canceled after 25h17m2s
The previous marker was added to operator_persona.py's inline fallback,
which only fires when config is None. Every real call path loads a
populated AIOperatorConfig via load_effective_ai_operator_config(),
so ai_operator_default_config() in services/shared/ai_operator_config.py
is the default that's actually served.
2026-08-20 22:53:27 +05:00
didar c5e11fde3d Add test marker to voice greeting to verify Gitea CI/CD deploy
deploy / deploy (push) Canceled after 25h22m40s
2026-08-20 22:47:34 +05:00
didar 4e1039ab58 Merge pull request 'Play a filler ack during slow voice decisions and cache KB search rows' (#2) from voice-latency-llm-tts-improvements into main
deploy / deploy (push) Canceled after 27h22m42s
Reviewed-on: #2
2026-08-20 09:47:45 +00:00
didar 9cc5d802d6 Merge pull request 'Add architecture longread and remove dead code found during review' (#1) from worktree-call-center-review into main
deploy / deploy (push) Canceled after 27h28m15s
Reviewed-on: #1
2026-08-20 09:42:15 +00:00