Skip to content

feat: enable manual flushing in elevenlabs stt - #7287

Merged
chenghao-mou merged 8 commits into
chenghao/fix/AGT-3514-vad-eos-stt-flushfrom
chenghao/feat/AGT-3516-stt-plugin-manual-flush
Oct 20, 2026
Merged

chenghao-mou merged 8 commits into
chenghao/fix/AGT-3514-vad-eos-stt-flushfrom
chenghao/feat/AGT-3516-stt-plugin-manual-flush

Conversation

@chenghao-mou

@chenghao-mou chenghao-mou commented Sep 15, 2026 •

Copy link
Copy Markdown
Member

Enable framework-driven commits for ElevenLabs Scribe v2 realtime on #7285. Manual mode advertises manual_flush; provider errors reach the stream consumer with payloads confined to PII fields.

stt = elevenlabs.STT(model="scribe_v2_realtime", server_vad=None)

Adapts @longcw's #4043 for @IngLP's report #4087. Other providers are deferred to #7989. Short-utterance accuracy remains unverified.

Addresses AGT-3516

Initial prompt and agent context

Model: GPT-6

should we carry over the stt plugin flush support from Long's PR?

okay, let's create a new PR targeting 7285 to add those plugin support.

can you move the 11labs changes to the other PR?

should we move other plugins to a different PR and only leave 11labs in? Other plugins are working fine.

exactly

Adapt provider flush support from Long Chen’s #4043 to the session manual_flush capability. Preserve streaming connections across turn boundaries and enable the capability only in supported provider modes.

Co-authored-by: Long Chen <longch1024@gmail.com>
@chenghao-mou chenghao-mou added the review_effort:high Needs broad context and substantial validation label Sep 15, 2026
@chenghao-mou
chenghao-mou added this pull request to stack #7288 September 15, 2026 15:19
@chenghao-mou
chenghao-mou added this pull request to stack #7979 October 20, 2026 10:01
@chenghao-mou
chenghao-mou marked this pull request as ready for review October 20, 2026 12:30
@chenghao-mou
chenghao-mou requested a review from a team as a code owner October 20, 2026 12:30

@devin-ai-integration devin-ai-integration Bot left a comment •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note

Newer findings are available below. Devin Review posted a newer report on this PR, in addition to the findings presented here.

Devin Review found 2 potential issues.

1 flag not posted on this PR by your GitHub settings — view it in Devin Review. (Configure)

Devin Review

Comment on lines +408 to +409
if is_given(endpointing):
self._capabilities.manual_flush = opts.endpointing == "manual"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔴 Premature manual-flush mode switch

After update_options(endpointing="manual"), manual_flush turns on before active streams leave VAD mode. Their flushes send no speech_end, so a manual turn commit can time out.

Learn more

The capability is read dynamically by the session to decide whether it can flush an active STT stream. A realtime stream defers an endpointing change until its config.updated acknowledgement and the current utterance boundary; its flush handler only sends speech_end when _active_endpointing is manual. Updating the instance capability immediately makes those decisions disagree during the transition. The reverse change also suppresses needed flushes until the stream enters VAD mode.

Example: A stream is speaking in VAD mode. update_options(endpointing="manual") sets manual_flush=True, but _active_endpointing remains vad until the turn ends. A session commit flushes; the stream ignores the manual boundary and the commit waits without a forced final.

Recommended fix: Coordinate capability changes with the active streams' acknowledged endpointing transitions, or ensure that every flush accepted while manual_flush is true can finalize the current turn. Cover both directions and boundary-deferred updates.

Devin Review


Was this helpful? React with 👍 or 👎 to provide feedback.

Comment thread livekit-plugins/livekit-plugins-sarvam/livekit/plugins/sarvam/stt.py Outdated
@chenghao-mou chenghao-mou changed the title feat: enable manual flushing in supported stt plugins feat: enable manual flushing in elevenlabs stt Oct 20, 2026

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 1 new potential issue.

🐛 1 issue in files not directly in the diff

🐛 Sarvam flush discards subsequent speech

When a caller uses flush() between utterances, _process_audio ends the stream and stops consuming audio. Later frames on that stream never reach Sarvam.

Devin Review

@chenghao-mou
chenghao-mou merged commit 8a1ee68 into main Oct 20, 2026
24 checks passed
@chenghao-mou
chenghao-mou deleted the chenghao/feat/AGT-3516-stt-plugin-manual-flush branch October 20, 2026 18:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

review_effort:high Needs broad context and substantial validation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants