Skip to content

fix(ai): replay native hosted tool items - #45038

Closed
rekram1-node wants to merge 1 commit into
v2from
hosted-tool-replay
Closed

rekram1-node wants to merge 1 commit into
v2from
hosted-tool-replay

Conversation

@rekram1-node

Copy link
Copy Markdown
Collaborator

Summary

  • replay completed provider-hosted tool items in their original native Responses shape when continuing with the same provider and store: false
  • preserve existing portable message fallback when switching providers, when item IDs do not match provider metadata, or when the result is an image/error rather than a replayable JSON item
  • retain stored-response item references and existing hosted image generation behavior
  • cover OpenAI native replay, OpenAI-to-xAI provider switches, mismatched item IDs, and xAI-native hosted tools

Before and after

A completed hosted search produces the provider-native item:

{ "type": "web_search_call", "id": "ws_1", "status": "completed" }

Before: A subsequent stateless request rewrote that item as a synthetic user message:

{ "role": "user", "content": [{ "type": "input_text", "text": "{\"type\":\"web_search_call\",\"id\":\"ws_1\",\"status\":\"completed\"}" }] }

After: Continuing with the same provider preserves the original item, matching Codex history replay:

{ "type": "web_search_call", "id": "ws_1", "status": "completed" }

If the next model belongs to another provider, the original item is not replayed as foreign provider state; its portable text representation remains available instead. Hosted generated images likewise continue to replay as input images.

Verification

  • bun test test/partial-json.test.ts test/tool-stream.test.ts test/provider/openai-responses.test.ts test/provider/openai-compatible-responses.test.ts test/provider/openai-responses-images.recorded.test.ts test/provider/openai-responses-websocket.recorded.test.ts test/provider/openai-chat.test.ts test/provider/anthropic-messages.test.ts test/provider/bedrock-converse.test.ts test/provider/xai-responses.test.ts test/response.test.ts test/tool-runtime.test.ts --timeout 30000 --only-failures (367 passing)
  • RECORDED_PREFIX=openai-responses bun test test/provider/golden.recorded.test.ts --timeout 30000 --only-failures
  • bun typecheck from packages/ai
  • bunx prettier --check packages/ai/src/protocols/open-responses.ts packages/ai/test/provider/openai-responses.test.ts packages/ai/test/provider/xai-responses.test.ts

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