Repository navigation
fix(live): avoid hangs at fractional transcript grouping deadlines - #3970
Conversation
Castiron custom code✅ No new custom-code files detected. 47 mixed files remain; 0 existing customizations changed. Compared 47 existing customizations unchanged
7 more in the full report. A changed generated baseline means this report cannot reliably identify which handwritten lines changed. Inspect the custom-code diffDownload the exact patch produced by this run (requires repository access): gh run download 36338900263 --repo openai/openai-python \
--name castiron-custom-code-36338900263-1 --dir /tmp/castiron-custom-code-36338900263-1
git apply --stat /tmp/castiron-custom-code-36338900263-1/custom-code.patch
cat /tmp/castiron-custom-code-36338900263-1/custom-code.patchOr reproduce it from an SDK checkout containing the vendored reporter: git fetch --no-tags origin 43443d14c5ab8b9bc9d7aaf31263351f071afca2 7fbc8b75e566b0aa5a4cc1d3f035b7224bbace5e
python3 scripts/castiron/custom_code_report.py report \
--base 43443d14c5ab8b9bc9d7aaf31263351f071afca2 \
--head 7fbc8b75e566b0aa5a4cc1d3f035b7224bbace5e --fetch --require-head-hash --public \
--out /tmp/castiron-custom-code-7fbc8b75e566
cat /tmp/castiron-custom-code-7fbc8b75e566/custom-code.patchThis is the current full custom patch for mixed files, not an attribution of only the handwritten lines changed by this PR. |
jbeckwith-oai
left a comment
There was a problem hiding this comment.
Reviewed 7fbc8b75e566b0aa5a4cc1d3f035b7224bbace5e: no blocking findings.
Using the same sums as deadline() fixes the fractional-boundary non-progress loop without changing public signatures, defaults or async dispatch ownership.
I independently exercised assistant-silence, speaker-separation and backchannel-isolation cases through both actual sync and async grouper methods: all six baseline processes timed out, and all six current-head cases completed with the expected closed segments/reasons. These in-memory probes used the actual listener/state/policy/dataclass modules, a controlled monotonic clock and synthetic event/error types; they did not exercise Pydantic or rerun the full package suite. I reviewed the complete diff and surrounding timer/closure paths. Exact-head hosted checks, including the Pydantic-v1 lane, are green.
Automated Release PR --- ## [3.20.0](openai/openai-python@v3.19.2...v3.20.0) (2026-09-28) ### Features * **api:** add Agents credential and session options ([openai#3967](openai#3967)) ([bb68198](openai@bb68198)) * **api:** add Cyber access programs to Responses ([openai#3956](openai#3956)) ([09c5b6f](openai@09c5b6f)) * **responses:** opt in to incremental WebSocket text and tool snapshots ([openai#3973](openai#3973)) ([d0207b4](openai@d0207b4)) * **responses:** preserve detailed WebSocket accumulator snapshots ([openai#3981](openai#3981)) ([a380cf2](openai@a380cf2)) ### Bug Fixes * **client:** retry unmapped TLS transport errors ([openai#3982](openai#3982)) ([0d35a26](openai@0d35a26)) * **live:** avoid hangs at fractional transcript grouping deadlines ([openai#3970](openai#3970)) ([4ef4129](openai@4ef4129)) * **live:** keep query parameters out of WebSocket endpoint paths ([openai#3972](openai#3972)) ([f9c458b](openai@f9c458b)) * **live:** preserve caller queues and prevent uncertain WebSocket replay ([openai#3980](openai#3980)) ([80e9686](openai@80e9686)) * **realtime:** preserve base URL queries in WebSocket upgrades ([openai#3971](openai#3971)) ([f7bd4a7](openai@f7bd4a7)) * **realtime:** retain configured queues without replaying attempted sends ([openai#3978](openai#3978)) ([a52805c](openai@a52805c)) ### Chores * **api:** clarify documented API error responses ([openai#3965](openai#3965)) ([384fee3](openai@384fee3)) * **api:** document batch error responses ([openai#3961](openai#3961)) ([6e4a79c](openai@6e4a79c)) * **api:** document files and uploads error responses ([openai#3960](openai#3960)) ([a9d727f](openai@a9d727f)) * **api:** document fine-tuning and model errors ([openai#3964](openai#3964)) ([5d4003c](openai@5d4003c)) * **api:** document Responses not-found errors ([openai#3959](openai#3959)) ([63099e7](openai@63099e7)) * **api:** document stored chat completion errors ([openai#3963](openai#3963)) ([a73fe0c](openai@a73fe0c)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: openai-sdks[bot] <284451331+openai-sdks[bot]@users.noreply.github.com>
Valid fractional Live transcript grouping timeouts can hang on the next transcript event. For example, after a fragment ends at 200 ms, a timeout of 0.1 ms is scheduled for 200.1; subtracting 200 later rounds to less than 0.1, so the scheduler never consumes that deadline.
Compare absolute times against the same deadlines that the scheduler creates. This preserves the existing API and options and adds bounded sync/async regressions for assistant silence, speaker separation, and isolated backchannels.
Validation: