From 05e4538883b00a5e26b5a08beab8721f183b5f3a Mon Sep 17 00:00:00 2001 From: Anton Bogdanovich <27antonb@gmail.com> Date: Tue, 5 May 2026 14:33:40 -0700 Subject: [PATCH] match codex image request payload --- pkg/providers/oauth/codex_image_generation.go | 17 +++++++++++++++-- .../oauth/codex_image_generation_test.go | 18 ++++++++++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/pkg/providers/oauth/codex_image_generation.go b/pkg/providers/oauth/codex_image_generation.go index 43d07e5a2..4fc6d9513 100644 --- a/pkg/providers/oauth/codex_image_generation.go +++ b/pkg/providers/oauth/codex_image_generation.go @@ -14,6 +14,7 @@ import ( const ( codexDefaultImageGenerationModel = "gpt-image-2" + codexDefaultImageGenerationSize = "1024x1024" maxImageGenerationResults = 4 maxImageGenerationSSEBytes = 64 * 1024 * 1024 maxImageGenerationEvents = 512 @@ -93,9 +94,14 @@ func (p *CodexProvider) requestOptions() ([]option.RequestOption, string, error) } func buildCodexImageParams(req ImageGenerationRequest) responses.ResponseNewParams { + size := strings.TrimSpace(req.Size) + if size == "" { + size = codexDefaultImageGenerationSize + } + tool := responses.ToolUnionParam{OfImageGeneration: &responses.ToolImageGenerationParam{ Model: req.Model, - Size: req.Size, + Size: size, }} if req.Quality != "" { tool.OfImageGeneration.Quality = req.Quality @@ -104,10 +110,17 @@ func buildCodexImageParams(req ImageGenerationRequest) responses.ResponseNewPara tool.OfImageGeneration.OutputFormat = req.OutputFormat } + content := responses.ResponseInputMessageContentListParam{ + responses.ResponseInputContentParamOfInputText(req.Prompt), + } + input := responses.ResponseInputParam{ + responses.ResponseInputItemParamOfMessage(content, responses.EasyInputMessageRoleUser), + } + return responses.ResponseNewParams{ Model: "gpt-5.4", Input: responses.ResponseNewParamsInputUnion{ - OfString: openai.Opt(req.Prompt), + OfInputItemList: input, }, Instructions: openai.Opt("You are an image generation assistant."), Tools: []responses.ToolUnionParam{tool}, diff --git a/pkg/providers/oauth/codex_image_generation_test.go b/pkg/providers/oauth/codex_image_generation_test.go index a1323b83f..cba902f04 100644 --- a/pkg/providers/oauth/codex_image_generation_test.go +++ b/pkg/providers/oauth/codex_image_generation_test.go @@ -2,6 +2,8 @@ package oauthprovider import ( "encoding/base64" + "encoding/json" + "strings" "testing" "github.com/openai/openai-go/v3/responses" @@ -51,6 +53,22 @@ func TestBuildCodexImageParams(t *testing.T) { if params.Model != "gpt-5.4" { t.Fatalf("request model = %q, want gpt-5.4", params.Model) } + if params.Input.OfString.Valid() { + t.Fatalf("input uses string form, want structured message input") + } + if len(params.Input.OfInputItemList) != 1 { + t.Fatalf("input item count = %d, want 1", len(params.Input.OfInputItemList)) + } + data, err := json.Marshal(params) + if err != nil { + t.Fatalf("marshal params: %v", err) + } + payload := string(data) + for _, want := range []string{`"input":[`, `"role":"user"`, `"type":"input_text"`, `"text":"make a tiny icon"`} { + if !strings.Contains(payload, want) { + t.Fatalf("payload missing %s: %s", want, payload) + } + } if len(params.Tools) != 1 || params.Tools[0].OfImageGeneration == nil { t.Fatalf("expected one image_generation tool, got %#v", params.Tools) }