Skip to content

Commit 3fdfd4b

Browse files
fix: omit default OpenAI image partials
Only send partial_images when explicitly configured so Images API streaming requests avoid unsupported parameter errors and extra partial image cost. Co-authored-by: Cursor <cursoragent@cursor.com>
1 parent 5e49b80 commit 3fdfd4b

2 files changed

Lines changed: 14 additions & 13 deletions

File tree

backend/internal/infra/llm/openai_images.go

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -468,13 +468,12 @@ func applyOpenAIImageEditParams(fields map[string]string, model string, options
468468

469469
func applyOpenAIImageEditStreamParams(fields map[string]string, options map[string]interface{}) {
470470
value, ok := modelParamIntValue(options, "partial_images")
471-
if ok {
472-
if value > 0 {
473-
fields["partial_images"] = fmt.Sprintf("%d", value)
474-
}
471+
if !ok {
475472
return
476473
}
477-
fields["partial_images"] = "1"
474+
if value >= 0 {
475+
fields["partial_images"] = fmt.Sprintf("%d", value)
476+
}
478477
}
479478

480479
func writeOpenAIMultipartFile(writer *multipart.Writer, fieldName string, fileName string, mimeType string, data []byte) error {
@@ -552,13 +551,12 @@ func applyOpenAIImageGenerationParams(payload map[string]interface{}, model stri
552551
// applyOpenAIImageGenerationStreamParams 只处理流式图片端点支持的增量参数。
553552
func applyOpenAIImageGenerationStreamParams(payload map[string]interface{}, options map[string]interface{}) {
554553
value, ok := modelParamIntValue(options, "partial_images")
555-
if ok {
556-
if value > 0 {
557-
payload["partial_images"] = value
558-
}
554+
if !ok {
559555
return
560556
}
561-
payload["partial_images"] = 1
557+
if value >= 0 {
558+
payload["partial_images"] = value
559+
}
562560
}
563561

564562
func openAIImageGenerationModelSupportsStream(model string) bool {

backend/internal/infra/llm/openai_images_test.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,15 +65,18 @@ func TestBuildOpenAIImageGenerationStreamRequestBody(t *testing.T) {
6565
}
6666
}
6767

68-
func TestBuildOpenAIImageGenerationStreamRequestBodyDefaultsPartialImages(t *testing.T) {
68+
func TestBuildOpenAIImageGenerationStreamRequestBodyOmitsDefaultPartialImages(t *testing.T) {
6969
payload, err := buildOpenAIImageGenerationStreamRequestBody("gpt-image-1", GenerateInput{
7070
Messages: []Message{{Role: "user", Content: "A clean product render"}},
7171
})
7272
if err != nil {
7373
t.Fatalf("build image stream request body: %v", err)
7474
}
75-
if payload["partial_images"] != 1 {
76-
t.Fatalf("expected default partial_images=1, got %#v", payload)
75+
if payload["stream"] != true {
76+
t.Fatalf("expected stream request payload, got %#v", payload)
77+
}
78+
if _, ok := payload["partial_images"]; ok {
79+
t.Fatalf("partial_images must only be sent when explicitly configured, got %#v", payload)
7780
}
7881
}
7982

0 commit comments

Comments
 (0)