Handle Gemini inline data in asset and size processing

This commit is contained in:
2026-06-15 00:14:40 +08:00
parent b860ef37e8
commit 10ec25d87b
10 changed files with 380 additions and 18 deletions
@@ -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",