Skip to content

fix(provider): flush each OpenAI reasoning item as independent Thinking block#161

Merged
yishuiliunian merged 2 commits into
mainfrom
fix/openai-multiple-reasoning-items
May 15, 2026
Merged

fix(provider): flush each OpenAI reasoning item as independent Thinking block#161
yishuiliunian merged 2 commits into
mainfrom
fix/openai-multiple-reasoning-items

Conversation

@yishuiliunian
Copy link
Copy Markdown
Contributor

Summary

  • OpenAI emits one reasoning item per web_search_call in a single response, but the old code overwrote thinking_signature on each ThinkingSignature chunk, keeping only the last ID
  • On multi-turn replay, N-1 web_search_call items lacked their required reasoning predecessor, causing API 400 errors
  • Fix: on each ThinkingSignature, immediately flush accumulated thinking text + signature as a ContentBlock::Thinking into server_blocks, preserving the 1:1 pairing

Changes

  • crates/loopal-runtime/src/agent_loop/llm_chunk.rs — flush ThinkingSignature into server_blocks instead of overwriting single field
  • crates/loopal-provider/tests/suite/openai_reasoning_test.rs — add multi-reasoning pairing test

Test plan

  • bazel test //crates/loopal-provider:loopal-provider_test passes
  • bazel test //crates/loopal-runtime:loopal-runtime_test passes
  • bazel test //crates/loopal-context:loopal-context_test passes
  • bazel build //crates/loopal-runtime:loopal-runtime --config=clippy zero warnings
  • CI passes

…ng block (#161)

OpenAI emits one reasoning item per web_search_call in a single response.
The old code overwrote `thinking_signature` on each ThinkingSignature chunk,
keeping only the last ID. On multi-turn replay, 4 of 5 web_search_call items
lacked their required reasoning predecessor, causing API 400 errors.

Fix: on each ThinkingSignature, immediately flush accumulated thinking text
+ signature as a ContentBlock::Thinking into server_blocks, preserving the
1:1 pairing between reasoning and web_search_call in stream order.
@yishuiliunian yishuiliunian merged commit d3e926c into main May 15, 2026
4 checks passed
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