Handle Gemini inline data in asset and size processing
This commit is contained in:
@@ -533,7 +533,8 @@ func strictRequestBase64Field(key string, path []string) bool {
|
||||
lower == "b64" ||
|
||||
strings.Contains(lower, "base64") ||
|
||||
strings.Contains(lower, "_b64") ||
|
||||
(parent == "input_audio" && lower == "data")
|
||||
(parent == "input_audio" && lower == "data") ||
|
||||
((parent == "inlinedata" || parent == "inline_data") && lower == "data")
|
||||
}
|
||||
|
||||
func likelyRequestBase64MediaField(key string, path []string, value string) bool {
|
||||
|
||||
@@ -37,6 +37,22 @@ func TestRequestAssetFromValueDetectsDataURLAndRawBase64(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestRequestAssetFromValueDetectsGeminiInlineData(t *testing.T) {
|
||||
payload := base64.StdEncoding.EncodeToString([]byte("inline gemini image"))
|
||||
decoded, ok, err := requestAssetFromValue(
|
||||
"data",
|
||||
[]string{"contents", "[0]", "parts", "[0]", "inlineData"},
|
||||
payload,
|
||||
map[string]any{"mimeType": "image/png"},
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("decode Gemini inlineData: %v", err)
|
||||
}
|
||||
if !ok || decoded.ContentType != "image/png" || string(decoded.Bytes) != "inline gemini image" {
|
||||
t.Fatalf("unexpected Gemini inlineData asset: ok=%v decoded=%+v", ok, decoded)
|
||||
}
|
||||
}
|
||||
|
||||
func TestCanonicalConversationMessageHashUsesTextAndAssetRefs(t *testing.T) {
|
||||
message := map[string]any{
|
||||
"role": "user",
|
||||
|
||||
Reference in New Issue
Block a user