fix(openai): preserve Codex image function tools during bridge injection#4346
Merged
Wei-Shaw merged 1 commit intoJul 15, 2026
Merged
Conversation
Contributor
|
All contributors have signed the CLA. ✅ |
Contributor
Author
|
I have read the CLA Document and I hereby sign the CLA |
xiaohei210509
marked this pull request as ready for review
July 15, 2026 07:24
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
image_gen.imagegenfunctionsimage_generation, automatictool_choice, and hosted-bridge instructions when that client function is already presentRoot cause
PR #4104 made bridge injection reuse the image-tool detector for hosted tools and
namespace/image_gendeclarations. Some Codex clients and MCP adapters instead serialize the same client-side tool as one of these function shapes:{"type":"function","name":"image_gen.imagegen"} {"type":"function","function":{"name":"image_gen.imagegen"}}Those forms are not OpenAI hosted tools and are intentionally not part of
hasOpenAIImageGenerationTool. As a result, the bridge still appended a hostedimage_generationtool to the same request, which OpenAI rejects with:This change reuses the existing exact-name function parser before applying any hosted bridge additions. Similar names such as
image_gen.imagegeneratorcontinue through the existing injection path.This is a follow-up to #4104. Refs #4022 and #4249.
Validation
go test ./internal/service -count=1go test ./... -count=1go test -tags=unit ./... -count=1go test -tags=integrationacross all packages exceptinternal/pkg/tlsfingerprintgolangci-lint run ./... --timeout=30m(0 issues)The full integration command was also run. Its only failure was the unrelated external TLS fingerprint endpoint intermittently returning
unexpected EOF; all remaining integration packages passed locally.