• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

digiteinfotech / kairon / 35689131303
92%

Build:
DEFAULT BRANCH: master
Ran 22 Sep 2026 06:07AM UTC
Jobs 1
Files 443
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

22 Sep 2026 05:02AM UTC coverage: 91.743% (+0.1%) from 91.594%
35689131303

push

github

web-flow
Voice integration exotel (#2436)

* Add Exotel voice scaffolding (P0): provider-agnostic STT/TTS layer + config

Scaffolding only — provider-agnostic, no vendor SDKs, no call behavior yet.
Exotel is added alongside Twilio (not a replacement); everything is bot-scoped.

- constants: VoiceProviderTypes.exotel + VoiceServiceType/STTProviderTypes/TTSProviderTypes
- metadata/integrations.yml: voice_channels.exotel; metadata-driven secret_fields
  (validate_voice_provider now reads secret_fields from metadata, Twilio-compatible)
- metadata/stt_providers.yml, tts_providers.yml: versioned provider registries
  (models per sample-rate, languages, required/secret fields)
- system.yaml voice: global section (8kHz default, 320-byte chunk rule,
  fallback order, per-provider global keys)
- VoiceProviderCredential: bot-scoped, encrypted BYO-provider credentials
- BotSettings.voice (VoiceIntegrationSettings): per-bot STT/TTS selection
- BaseSTT/BaseTTS ABCs + STTFactory/TTSFactory registries
- Unit tests: metadata load, Exotel channel validation, factories, settings

* Add Exotel streaming voice call loop (P1): WS gateway + Sarvam STT + Polly TTS

- exotel/protocol.py: Exotel Voice Streaming frame parse/build (connected/start/
  media/dtmf/mark/stop/clear), base64<->PCM helpers
- exotel/audio.py: AudioChunker re-framing TTS output to Exotel's 320-byte-multiple
  rule with silence padding; RMS/silence detection
- exotel/session.py: ExotelCallSession orchestrating caller-audio->STT->agent->TTS
  with real-time pacing, welcome greeting, and hangup handling
- stt/sarvam.py, tts/polly.py: concrete streaming adapters (vendor SDKs lazy-imported)
- stt/tts factories: lazy self-registration of built-in adapters
- chat WebSocket route + ExotelStreamHandler bridging to AgentProcessor/VoiceOutput
- unit tests for protocol, audio, Sarvam parsing, and the full session loop
- add boto3/websockets to prod requirements

* Add voice resilience & quality layer (P2): fallback, TTS cach... (continued)

1287 of 1349 new or added lines in 29 files covered. (95.4%)

12 existing lines in 1 file now uncovered.

34175 of 37251 relevant lines covered (91.74%)

0.92 hits per line

Uncovered Changes

Lines Coverage ∆ File
15
60.53
kairon/api/app/routers/bot/speech_provider_config.py
14
89.03
-8.81% kairon/chat/handlers/channels/voice.py
13
89.84
kairon/shared/voice/processor.py
5
84.85
-15.15% kairon/chat/routers/voice.py
4
84.0
kairon/shared/voice/stt/base.py
2
75.86
-1.41% kairon/chat/handlers/channels/clients/voice/base.py
2
97.18
kairon/shared/voice/exotel/audio.py
2
96.67
kairon/shared/voice/tts/sarvam.py
1
96.34
-0.26% kairon/shared/data/utils.py
1
93.4
-0.05% kairon/shared/utils.py
1
97.87
kairon/shared/voice/exotel/outbound.py
1
90.91
kairon/shared/voice/tts/base.py
1
97.3
kairon/shared/voice/tts/factory.py

Coverage Regressions

Lines Coverage ∆ File
12
88.62
0.03% kairon/shared/pos/processor.py
Jobs
ID Job ID Ran Files Coverage
1 35689131303.1 22 Sep 2026 06:08AM UTC 443
91.74
GitHub Action Run
Source Files on build 35689131303
  • Tree
  • List 443
  • Changed 18
  • Source Changed 0
  • Coverage Changed 18
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • fae016db on github
  • Prev Build on master (#35580628591)
  • Next Build on master (#35689113778)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc