Skip to content

Add Gandr TTS plugin - #2270

Open
AALG123 wants to merge 3 commits into
livekit:mainfrom
AALG123:add-gandr
Open

Add Gandr TTS plugin#2270
AALG123 wants to merge 3 commits into
livekit:mainfrom
AALG123:add-gandr

Conversation

@AALG123

@AALG123 AALG123 commented Aug 12, 2026

Copy link
Copy Markdown

Adds @livekit/agents-plugin-gandr, a TTS provider plugin for Gandr, mirroring the shape of the python plugin (livekit/agents PR #6814).

  • TTS extends the agents tts.TTS base, ChunkedStream extends tts.ChunkedStream
  • Gandr's /v1/audio/speech OpenAI-compatible endpoint, response_format wav/pcm (mp3 returns a deliberate 400, the door has no mp3 encoder)
  • 11 OpenAI voice aliases map onto stock gandr-* voices; gandr-* ids pass through
  • speed clamped 0.6-1.5; free key 50,000 tokens at gandr.ai
  • unit tests + a live-gated harness

Happy to adjust anything to match house style.

Adds @livekit/agents-plugin-gandr, a TTS provider plugin for Gandr,
mirroring the shape of the python plugin (livekit/agents PR #6814).

- TTS extends the agents tts.TTS base, ChunkedStream extends tts.ChunkedStream
- Gandr's /v1/audio/speech OpenAI-compatible endpoint, response_format wav/pcm
  (mp3 returns a deliberate 400, the door has no mp3 encoder)
- 11 OpenAI voice aliases map onto stock gandr-* voices; gandr-* ids pass through
- speed clamped 0.6-1.5; free key 100,000 tokens at gandr.ai
- unit tests + a live-gated harness
@AALG123
AALG123 requested a review from a team as a code owner August 12, 2026 05:46
@changeset-bot

changeset-bot Bot commented Aug 12, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 0149cf2

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 40 packages
Name Type
@livekit/agents-plugin-gandr Major
@livekit/agents Major
@livekit/agents-plugin-anam Major
@livekit/agents-plugin-anthropic Major
@livekit/agents-plugin-assemblyai Major
@livekit/agents-plugin-azure Major
@livekit/agents-plugin-baseten Major
@livekit/agents-plugin-bey Major
@livekit/agents-plugin-cartesia Major
@livekit/agents-plugin-cerebras Major
@livekit/agents-plugin-deepgram Major
@livekit/agents-plugin-did Major
@livekit/agents-plugin-elevenlabs Major
@livekit/agents-plugin-fishaudio Major
@livekit/agents-plugin-google Major
@livekit/agents-plugin-hedra Major
@livekit/agents-plugin-hume Major
@livekit/agents-plugin-inworld Major
@livekit/agents-plugin-krisp Major
@livekit/agents-plugin-lemonslice Major
@livekit/agents-plugin-liveavatar Major
@livekit/agents-plugin-livekit Major
@livekit/agents-plugin-minimax Major
@livekit/agents-plugin-mistral Major
@livekit/agents-plugin-mistralai Major
@livekit/agents-plugin-neuphonic Major
@livekit/agents-plugin-openai Major
@livekit/agents-plugin-perplexity Major
@livekit/agents-plugin-phonic Major
@livekit/agents-plugin-protoface Major
@livekit/agents-plugin-resemble Major
@livekit/agents-plugin-rime Major
@livekit/agents-plugin-runway Major
@livekit/agents-plugin-sarvam Major
@livekit/agents-plugin-silero Major
@livekit/agents-plugin-soniox Major
@livekit/agents-plugin-tavus Major
@livekit/agents-plugin-trugen Major
@livekit/agents-plugin-xai Major
@livekit/agents-plugins-test Major

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

devin-ai-integration[bot]

This comment was marked as resolved.

Numbers and order IDs are not read correctly in the target language; the
reddit lesson proved they render in English. Removed the claim from the
Accuracy section. WER stays, it is verified.
devin-ai-integration[bot]

This comment was marked as resolved.

- rethrow AbortError instead of wrapping as retryable APIConnectionError
- pass the Uint8Array view to AudioByteStream.write, not the pooled buffer
- flush AudioByteStream before the final frame so the tail is not dropped
- cancel the body reader in finally so cancelled requests release the connection
- LiveKit copyright header on all new files
- drop hand-written CHANGELOG.md, add a changeset instead
- run prettier on the plugin files
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant