| name | tts-integration |
| description | Add or modify text-to-speech providers in assistant-api with transport-aware behavior (WS/SSE/SDK/HTTP), packet lifecycle correctness, and UI/provider wiring. |
TTS Integration Skill
Mission
Integrate TTS providers with correct stream/flush/interruption lifecycle and stable tts_latency_ms metrics.
Inputs expected from user
- Output transport: WS, SSE/chunked HTTP, SDK callback, or HTTP flush.
- Voice/model requirements.
- Provider output format constraints.
If missing:
- Choose closest transport baseline and preserve existing packet behavior.
Hard boundaries
In scope:
api/assistant-api/internal/transformer/<provider>/tts.go (+ option/normalizer helpers)
api/assistant-api/internal/transformer/transformer.go
- optional shared contracts:
tts_transformer.go, packet.go
- provider TTS metadata and UI components
Out of scope:
- STT-only internals
- telephony internals
- EOS/VAD internals
Packet contract
Input packets:
LLMResponseDeltaPacket
LLMResponseDonePacket
InterruptionPacket
Required outputs:
TextToSpeechAudioPacket
TextToSpeechEndPacket
ConversationEventPacket{Name:"tts", ...}
MessageMetricPacket{Name:"tts_latency_ms"} once per utterance
Implementation workflow
- Pick transport baseline (
deepgram/rime/sarvam, minimax, azure/google, aws).
- Implement provider package.
- Register in TTS factory switch.
- Wire UI provider voice/model config.
- Verify interruption clears pending state correctly.
- Add provider + integration tests.
Validation commands
go test ./api/assistant-api/internal/transformer/... -run TestTTS
go test ./api/assistant-api/internal/transformer/<provider>/...
cd ui && yarn test providers
./skills/tts-integration/scripts/validate.sh --check-diff --provider <provider>
References
references/checklist.md
references/tts-checklist.md
examples/sample.md