Skip to content

fix(provider): preserve OpenAI reasoning item for web_search_call multi-turn#159

Merged
yishuiliunian merged 2 commits into
mainfrom
fix/openai-reasoning-web-search-multiturn
May 15, 2026
Merged

fix(provider): preserve OpenAI reasoning item for web_search_call multi-turn#159
yishuiliunian merged 2 commits into
mainfrom
fix/openai-reasoning-web-search-multiturn

Conversation

@yishuiliunian
Copy link
Copy Markdown
Contributor

Summary

  • Fix GPT-5.5 400 error: web_search_call item was provided without its required reasoning item
  • Parse reasoning output item from OpenAI Responses API stream, storing its ID via ThinkingSignature
  • Convert ContentBlock::Thinking to OpenAI reasoning input item on multi-turn replay

Changes

  • crates/loopal-provider/src/openai/stream.rs — handle "reasoning" in parse_output_item_done
  • crates/loopal-provider/src/openai/input_builder.rs — emit reasoning item from ContentBlock::Thinking
  • crates/loopal-runtime/src/agent_loop/llm_record.rs — relax save condition for thinking blocks with server blocks
  • New test files: openai_reasoning_test.rs, openai_reasoning_e2e_test.rs

Test plan

  • bazel test //crates/loopal-provider:loopal-provider_test passes
  • bazel test //crates/loopal-provider:loopal-provider-unit-test passes
  • bazel test //crates/loopal-runtime:loopal-runtime-unit-test passes
  • bazel build //... --config=clippy zero warnings
  • CI passes

…ti-turn

GPT-5.5 requires a `reasoning` item to precede `web_search_call` in
conversation history. Three gaps caused the item to be lost:

1. stream.rs: `parse_output_item_done` did not handle `"reasoning"` type,
   so the reasoning ID was never captured as ThinkingSignature.
2. llm_record.rs: condition was too strict — thinking block was not saved
   when text was empty but server blocks existed.
3. input_builder.rs: ContentBlock::Thinking was silently ignored instead
   of being converted to the OpenAI `reasoning` input item.
@yishuiliunian yishuiliunian merged commit 657158e into main May 15, 2026
4 checks passed
@yishuiliunian yishuiliunian deleted the fix/openai-reasoning-web-search-multiturn branch May 15, 2026 11:27
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