Conversation
|
Hey Hyeonseung, I took a quick look at PR #7394. CI is green and I didn't spot any blocking issues in the Airy TTS plugin code. The PR is still in draft, so the main thing left is to mark it ready for review when you're comfortable. Reviewer should mainly double-check the Airy API contract/defaults, since no live API smoke test was run without credentials. |
|
Thanks for the updates. CI is green and the trailing-silence additions look reasonable. I agree with Devin's remaining comment: redirects/non-2xx responses should go through |
|
@swigls CI is green and Devin's remaining comment is resolved. This looks ready for a final human review/approval pass. |
Adds
livekit-plugins-airyso LiveKit agents can use Airy Cloud TTS. Each complete utterance is sent to Airy's streaming speech endpoint, and the returned 24 kHz mono signed 16-bit PCM is forwarded as it arrives. The plugin also exposes Airy'strailing_silenceoption for natural pauses between sentences.Usage
Set
AIRY_API_KEY, then configure the session's TTS:languagealso supports"en". Model, voice, and style can be configured; otherwise the plugin uses Airy's documented defaults. The LiveKit plugin defaultstrailing_silenceto 0.3 seconds per utterance; Airy's API default remains 0. Set it to a value from 0 to 5, or passNoneto defer to the API default. See the streaming API documentation and the package README for installation and the runnable agent example.Behavior
POST /v1/audio/speech/streamwith progressive PCM output.streaming=Falsedescribes text input; LiveKit'sStreamAdaptersupplies complete sentences.trailing_silencewith each synthesis request by default; omits it when explicitly set toNone. Rejects non-finite and out-of-range values locally.APIConnectOptions.timeout.livekit-agents[airy]extra, documentation, and tests.Validation
uv run pytest tests/test_plugin_airy_tts.py tests/test_agent_tts_node.py tests/test_audio_byte_stream.py --unit -q— 125 passed after mergingmainat 1.8.3, including the 0.3-second default, explicit API-default omission, range, invalid-value, and redirect cases.make check— formatting, lint, and strict type checking passed for 686 source files.uv lock --check— resolved successfully with the current 1.8.3 workspace.0and0.5seconds and Gina at the plugin default of0.3seconds returned PCM. Gina's responses ended with exactly 7,200 zero samples (0.3 seconds) at 24 kHz.Limits
Retry-Afteris retained as error metadata; LiveKit's retry scheduler does not dynamically honor it.The Out of Set / Airy team intends to maintain this provider integration.