feat(audio): expose streaming dictation and owned live calls - #4392
Conversation
|
Important Draft PR not reviewedDraft PRs are not automatically reviewed by default.
To automatically review draft PRs, update your CodeRabbit configuration: reviews:
auto_review:
drafts: true✨ Finishing Touches 💡 1🛠️ Fix failing CI checks 💡
📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
✅ Deterministic PR hygiene checks passed. |
리뷰 · 우선순위 57 / 80이 PR은 오디오 스택 wp2입니다. 부모는 draft #4391( 현재 스트리밍 받아쓰기는 keyed OpenAI를 400으로 거절하고 ChatGPT 구독 계정만
메인테이너의 판단이 필요한 지점
너의 추천 이 댓글은 grok-bot이 작성했습니다 |
Keep current origin/dev fixture and layout behavior, and retain the standalone transcription test mapping. Resolved conflicts: - gui/public/provider-icons/README.md: keep origin/dev Cline reuse note as the landed wording. - gui/tests/fr-localization.test.ts: keep origin/dev Cline skip comment. - gui/tests/integrations-api.test.ts: keep origin/dev test title; the registered client list already matches both sides. - tests/gui/integrations-invariants.test.ts: keep origin/dev census wording after the count was generalized. - tests/codex-integration/codex-inject-integration.test.ts: keep origin/dev real chmod denial, profile path, and later history-restore coverage. The transcription spy/mock path was superseded because ESM named imports never saw the mock. - scripts/test-layout/layout.json: keep origin/dev provider/client regexes (Cline plus context-compat/history exclusions) and restore audio-transcriptions.test.ts under server.
…skip ci] Carry the refreshed transcription base, including origin/dev layout regexes, and keep streaming's extra audio test mappings. Resolved conflicts: - scripts/test-layout/layout.json: keep transcription/dev provider and client regexes plus context-compat/history placement; restore audio-client, audio-dictation, and live-call-bindings under server next to audio-transcriptions.
origin/dev now mints contextPrincipalId on data-plane admission. The streaming browser-carrier fixture still owns kind/keyId/source; it should not fail closed on that extra identity field.
|
Maintainer integration record — audio stack lane, merged by @lidge-jun. This pull request is a non-tip link in the audio stack (#4391 → #4392 → #4395). Its head carries
Squashing with |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
⏳ DRAFT
What to do
Automatic draft conversion failed (token cannot change draft status). Please convert this pull request to a draft manually. The required |
…n and dashboard controls (#4395) Lands the cumulative audio lane in one commit: standalone transcription API, streaming dictation with owned live calls, and the dashboard dictation and live voice API controls. Also carries the content of #4392. Verified by Cross-platform CI run 34731037202 on the stack tip.
dev advanced by the squashed #4391, whose content this branch already carries as real commits. Every conflict was the same change landing twice, so the branch side (a strict superset) was taken.
|
Maintainer integration record — audio lane root, merged by @lidge-jun. This pull request is the
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 85bb3d80b4
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| try { | ||
| const offer = await parseExternalOffer(req, deadline.signal); | ||
| if (offer instanceof Response) return offer; | ||
| if (!options.bindings.hasCapacity()) return formatErrorResponse(503, "server_busy", "Live call capacity reached"); |
There was a problem hiding this comment.
Reserve call-binding capacity before creating upstream calls
When the registry is one slot below capacity, two concurrent requests can both pass this check and then yield during credential resolution, fetch, and body reading. Both upstream calls are created, but only the first request can add its binding; the second fails at bindings.create() and returns 503 after discarding an otherwise valid SDP answer and Location, leaving an inaccessible upstream call that may consume provider resources. Reserve a binding slot atomically before the first await that creates the upstream call, then commit or release that reservation on every exit path.
Useful? React with 👍 / 👎.
Summary
WS /v1/audio/transcriptions/streamand external GPT-Live through the existing Live/Realtime paths. Browser clients use an audio-specific encoded proxy-key carrier; upstream account credentials remain server-owned.codex/audio-transcription->dev) -> this PR (codex/audio-streaming) -> feat(dashboard): add dictation and live voice API controls #4395 (codex/audio-connections). Review this layer against its parent; leave the chain open.Verification
011f2dff5ca3667b88f090fe711c4b2c77efd190, parent71e22d967ffafbd3492935c299623c9127eaf17b: remote run 34687731903 passed audio-client 11, transcription 24, dictation/lifecycle 11 and call-bindings 4 cases, plus typecheck/privacy and 1,979 dashboard tests. Existing journal restore failures in test 2/4 and macOS 2/2 remain separate per explicit owner scope. This is not a whole-run-green claim; PR remains draft.git diff --checkpassed for patch whitespace only. It is not a product test.Checklist