fix(openai): sanitize empty base64 input images
This commit is contained in:
@@ -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))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user