Commit Graph
66 Commits
Author SHA1 Message Date
Didar KozhikovandClaude Sonnet 5 a9be976845 Implement real streaming TTS for ElevenLabs to cut voice-assistant reply latency
The AudioSocket/media_runtime playback pipeline already supports chunked
TTS streaming (voice_v2_streaming_tts), but every provider inherited the
base TTSProvider.synthesize_chunks(), which just called the blocking
synthesize() and yielded the entire finished audio as a single "chunk" -
so the caller waited for full-utterance synthesis before any playback
could start regardless of the flag.

ElevenLabs is the production default (AI_VOICE_TTS_PROVIDER=elevenlabs in
deployment/docker-compose.server.yml), so give it a real implementation
that POSTs to the /stream endpoint and yields audio as network chunks
arrive, instead of waiting for the whole response body. Chunk boundaries
are re-aligned to whole 16-bit PCM samples so a split sample at a network
read boundary can't corrupt playback. The full synthesized audio is still
written to the on-disk cache afterwards so repeat phrases stay fast and
skip the vendor call entirely, matching the existing synthesize() cache
behavior.

Added test_elevenlabs_tts_provider_streams_chunks_and_caches_full_audio to
cover: chunk splitting mid-sample gets re-aligned, all yielded chunks are
sample-aligned, the full audio round-trips through the cache, and a
cached synthesis is replayed without invoking the streaming endpoint
again.

Verified via tests/test_ai_voice_tts_provider.py (9/9 pass) and a wider
voice/tts-filtered run across the suite: the only failures present are
the same pre-existing, already-documented ones (sales_service test
cross-file isolation ordering, one known persona-prompt assertion) -
identical set to before this change, no new failures.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-19 21:40:35 +05:00
Didar KozhikovandClaude Sonnet 5 cdabe61bc2 Add architecture longread and remove dead code found during review
- docs: longread.md — deep architecture/flow review of the whole
  platform (services, event bus reality vs docs, AI/ML stack honesty
  check, tech debt inventory)
- ai_orchestrator_service/voice.py: drop _voice_decision_legacy
  (unreferenced) and the shadowed first _voice_decision definition
  (silently overwritten by the real one, dead code)
- ui/analyst/app.js: drop duplicate dead definitions of
  loadSavedAnalyticsViews/saveAnalyticsView/deleteAnalyticsView and
  the first loadAnalyticsTrend implementation, all shadowed by later
  declarations in the same file; kept the intentional AI-mode
  drilldown wrapper layer (openAnalyticsDrilldown/exportAnalyticsDrilldownCsv/etc.)
  since that duplication is deliberate delegation, not dead code
- ui/operator/vendor/sip-0.21.2.min.js: remove byte-identical orphaned
  duplicate of ui/operator/sip-0.21.2.min.js (unreferenced anywhere)

Verified via full pytest run: identical set of 97 pre-existing
failures before and after (sales_* test-isolation ordering issue and
one known persona-prompt test), no new regressions.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-18 22:25:27 +05:00
Magzhan Zhumabayev 5236ee74ac Autostage Telegram sales leads 2026-05-12 19:41:04 +05:00
Magzhan Zhumabayev fbc77ba8a7 Expand sales leads and customer contracts 2026-05-12 19:09:31 +05:00
Magzhan Zhumabayev ce3ba270aa Add configurable AI operator persona 2026-05-11 17:37:26 +05:00
Magzhan Zhumabayev 67a0255c0d Fix sales post-repair acceptance gaps 2026-05-11 17:33:08 +05:00
Magzhan Zhumabayev 64862dd49a Add sales contract repair routes 2026-05-11 16:57:30 +05:00
Magzhan Zhumabayev ebba6c3f82 Allow tenant header for bearer-authenticated requests 2026-05-11 16:02:16 +05:00
Admin 8577d97356 Implement sales CRM workflow foundation 2026-05-10 20:54:01 +05:00
Magzhan Zhumabayev 866d96e560 Implement sales tenant pipeline events 2026-05-10 18:24:06 +05:00
arys f53af1f7dc sales fix 2026-05-09 09:16:06 +05:00
Yera All aa64b6b94c Revert "feat(voice): start early replies before final asr"
This reverts commit a44a1b97a1.
2026-04-19 01:30:26 +05:00
Yera All 224973d840 Revert "fix(voice): race slow streaming asr finalize"
This reverts commit 77df41bce0.
2026-04-19 01:30:26 +05:00
Yera All 93002ab86a Revert "fix(voice): stop repeating failed clarifications"
This reverts commit 294d30a797.
2026-04-19 01:30:26 +05:00
Yera All 294d30a797 fix(voice): stop repeating failed clarifications 2026-04-19 01:19:54 +05:00
Yera All 77df41bce0 fix(voice): race slow streaming asr finalize 2026-04-19 01:06:03 +05:00
Yera All a44a1b97a1 feat(voice): start early replies before final asr 2026-04-19 00:46:16 +05:00
Yera All 9cd553bf92 feat(voice): start replies from stable streaming partials 2026-04-19 00:13:58 +05:00
Yera All 770ba4e925 feat(voice): add elevenlabs realtime streaming asr 2026-04-18 20:15:44 +05:00
Yera All 34b807e460 feat(voice): add elevenlabs stt and transcript truth fixes 2026-04-18 18:25:07 +05:00
Yera All ac2269b6a4 fix(voice): correct yandex asr endpoints 2026-04-17 13:39:26 +05:00
Yera All feb0ce01e2 fix(asterisk): update telecom route and recording fallback 2026-04-17 12:16:51 +05:00
Yera All 4adaf192fb fix(voice): avoid silence on ASR runtime failures 2026-04-17 01:28:06 +05:00
Yera All f66b289371 feat(voice): add Yandex streaming ASR 2026-04-17 01:06:45 +05:00
Yera All 5d40cfafd8 feat(voice): switch voice ASR to Yandex SpeechKit 2026-04-17 00:53:20 +05:00
Yera All 39096e114f fix(voice): harden noisy streaming turns 2026-04-17 00:30:41 +05:00
Yera All aa6f838061 fix(voice): keep asr partial polling off push path 2026-04-17 00:06:27 +05:00
Yera All 52b2edfcd3 fix(voice): stop thinking continuation on silence 2026-04-16 23:56:10 +05:00
Yera All d331981ac8 fix(voice): decouple streaming asr from media loop 2026-04-16 23:11:24 +05:00
Yera All 1206ff91ac chore: push remaining local changes 2026-04-16 02:31:57 +05:00
Yera All 5af47991dc fix(voice): stabilize turn finalization after asr timeouts 2026-04-16 02:30:39 +05:00
Yera All 0d7e833a0d fix(voice): ignore playback audio until real barge-in 2026-04-13 12:28:36 +05:00
Yera AllandClaude Opus 4.6 6798320209 fix: remove dead code duplicates, add SQL LIMIT across all services
- Remove duplicate function definitions with hardcoded "AI-оператор" strings
  (ai_voice_runtime, ai_orchestrator, voice_name_config, voice.py)
- Remove unreachable dead code after return in ai_voice_runtime
- Add SQL LIMIT to 17 unbounded queries across 12 services to prevent OOM
- Move Python-side filtering to SQL WHERE in reporting_service
- Downgrade 19 logger.warning to logger.info for normal-flow events in media_runtime

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-13 12:04:26 +05:00
Yera All 6b8f5d069b feat(ai): add rolling conversation summary memory 2026-04-13 11:59:43 +05:00
Yera All 989bf9a0c1 fix(voice): stabilize v2 streaming topic handling 2026-04-12 21:59:32 +05:00
Yera All 57bd5cad4b fix(voice): suppress low-signal turns and false lookup replies 2026-04-12 20:40:25 +05:00
Yera All f2ece35588 fix(tests): isolate db state and stabilize voice runtime suite 2026-04-12 11:38:02 +05:00
Yera All c4c8b69494 fix(sql): backfill whatsapp chat_id in compat init 2026-04-12 01:52:27 +05:00
Yera All bdaf65a256 fix(db): avoid repeated sqlite schema initialization 2026-04-12 01:45:49 +05:00
Yera All 9386b8f9b9 feat(voice): add streaming asr sidecar for v2 duplex 2026-04-12 01:38:30 +05:00
Yera All b75b76fae6 feat(voice): add duplex streaming v2 pipeline 2026-04-11 17:38:21 +05:00
Yera All fc976804e4 feat(voice): add admin-configurable elevenlabs tts 2026-04-11 16:46:43 +05:00
Yera All 9d0b76deca fix(voice): make fast ack more audible 2026-04-11 02:27:49 +05:00
Yera All 05dc31855d feat(voice): add controlled emotive ack layer 2026-04-11 02:14:53 +05:00
Yera All 5588f99db9 fix(voice): fast fallback for off-domain requests 2026-04-11 01:55:28 +05:00
Yera All 6413beeba1 feat(voice): emit immediate ack on turn close 2026-04-11 01:40:04 +05:00
Yera All c39fad7e2d feat(voice): add phase 1.1 partial asr fast ack 2026-04-11 01:24:21 +05:00
Yera All bfaec370f9 chore: remove dead supervisor analytics and archived tooling 2026-04-08 15:59:07 +05:00
Yera All fa2ea1ef03 fix(voice): preserve llm name corrections in downstream turns 2026-04-08 12:49:14 +05:00
Yera All a4b1eb2818 feat(voice): auto-populate name from known customer on repeat calls
When a new voice session starts and the customer already has a trusted
display_name on file (e.g. from a previous call), automatically set
name_status to 'name_obtained' so the AI greets them by name instead
of asking again.
2026-04-08 01:19:40 +05:00