Repository navigation
feat(voice): add a native streaming transcription toggle - #34380
UtkarshUsername wants to merge 1 commit into
Conversation
ApprovabilityVerdict: Approved at Macroscope's review found this PR approvable — Adds a device-local option to transcribe after recording stops while preserving streaming by default. It reuses the existing consent-checked batch path and selected model, with limited, reversible impact. You can add or adjust custom eligibility rules. Learn more. |
|
No actionable comments were generated in the recent review. Walkthrough
Merge Risk:
|
|
Note Written by Verified in a real dev environmentHead Before (main): Advanced settings have no streaming option. Dictating with this model always opens After (PR): Streaming transcription appears under Advanced. It is on by default.
Streaming OFF: no live text while recording, and the transcript appears after Finish: Video: dictation with streaming off (16 s mp4) Streaming ON (default): live preview while recording, as on main: Video: dictation with streaming on (29 s mp4) Not verified
|



Problem
Native streaming can fall behind while dictating on some machines, as reported in #32050. Web and desktop currently choose native streaming whenever the selected model supports it, with no way to use that same model after recording stops.
Change
Add Streaming transcription under Settings → Voice → Advanced, enabled by default. Turning it off retains the recording locally until stop and sends it through the existing authorized batch path. The choice is captured for the recording, including retries. Availability follows the selected transcription destination and model; unsupported models disable the control without changing the saved device preference. Non-native chunked previews and cloud transcription keep their existing behavior.
The native worker now plans batch audio from the actual run mode, so a streaming-capable model receives the existing bounded chunks, silence handling, and batch error recovery. The shared web voice controller covers composer dictation, shortcuts, text fields, comments/annotations, and model tests. Desktop uses that same web implementation; no mobile UI is added.
Scope and approval
This is focused configuration of the existing native-streaming and batch transcription capability. It keeps today's default and the selected model. Related to #32050 as an opt-out/workaround, without claiming to resolve the entire performance issue. No engine update, GPU Auto policy, feed-interval tuning, pre-roll change, or benchmark/recommendation system is included.
Verification
vp run check:changed: format, lint, knip, GraphQL validation, typechecks of 37 affected packages including mobile/desktop consumers, and 161 focused tests passed.Model input limit exceeded, then passed with bounded offline chunks and no streaming session.transcribe.cpp/samples/whole-earth.wavsample injected as microphone input. ON opened one native session and showed evolving text while recording. OFF reached the realPOST /api/voice/transcribebatch endpoint and returned HTTP 200. A direct production-worker run of the same sample also returned the expected sentence with silence filtering enabled.Before
After
Implemented with GPT-6.1 Sol through the Codex harness.