fix(openai): sanitize empty base64 input images

This commit is contained in:
YanzheL
2026-04-01 00:46:38 +08:00
parent 936fce68d0
commit f00351c106
2 changed files with 189 additions and 0 deletions

View File

@@ -1,6 +1,7 @@
package service
import (
"encoding/json"
"net/http/httptest"
"testing"
@@ -139,3 +140,61 @@ func TestGetOpenAIRequestBodyMap_WriteBackContextCache(t *testing.T) {
require.True(t, ok)
require.Equal(t, got, cachedMap)
}
func TestSanitizeEmptyBase64InputImagesInOpenAIRequestBodyMap(t *testing.T) {
var reqBody map[string]any
require.NoError(t, json.Unmarshal([]byte(`{
"model":"gpt-5.4",
"input":[
{"role":"user","content":[
{"type":"input_text","text":"Describe this"},
{"type":"input_image","image_url":"data:image/png;base64, "},
{"type":"input_image","image_url":"data:image/png;base64,abc123"}
]},
{"role":"user","content":[
{"type":"input_image","image_url":"data:image/png;base64,"}
]},
{"type":"input_image","image_url":"data:image/png;base64,"},
{"type":"input_image","image_url":"data:image/png;base64,top-level-valid"}
]
}`), &reqBody))
require.True(t, sanitizeEmptyBase64InputImagesInOpenAIRequestBodyMap(reqBody))
normalized, err := json.Marshal(reqBody)
require.NoError(t, err)
require.JSONEq(t, `{
"model":"gpt-5.4",
"input":[
{"role":"user","content":[
{"type":"input_text","text":"Describe this"},
{"type":"input_image","image_url":"data:image/png;base64,abc123"}
]},
{"type":"input_image","image_url":"data:image/png;base64,top-level-valid"}
]
}`, string(normalized))
}
func TestSanitizeEmptyBase64InputImagesInOpenAIBody(t *testing.T) {
body, changed, err := sanitizeEmptyBase64InputImagesInOpenAIBody([]byte(`{
"model":"gpt-5.4",
"stream":true,
"input":[
{"role":"user","content":[
{"type":"input_text","text":"Describe this"},
{"type":"input_image","image_url":"data:image/png;base64,"}
]}
]
}`))
require.NoError(t, err)
require.True(t, changed)
require.JSONEq(t, `{
"model":"gpt-5.4",
"stream":true,
"input":[
{"role":"user","content":[
{"type":"input_text","text":"Describe this"}
]}
]
}`, string(body))
}