From 3f9c9591bd972399ace5e5f5a3f0278dedbdbec5 Mon Sep 17 00:00:00 2001 From: dannycreations <44817214+dannycreations@users.noreply.github.com> Date: Wed, 4 Feb 2026 11:00:37 +0700 Subject: [PATCH] feat(gemini-cli): support image content in Claude request conversion - Add logic to handle `image` content type during request translation. - Map Claude base64 image data to Gemini's `inlineData` structure. - Support automatic extraction of `media_type` and `data` for image parts. --- .../gemini-cli/claude/gemini-cli_claude_request.go | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/internal/translator/gemini-cli/claude/gemini-cli_claude_request.go b/internal/translator/gemini-cli/claude/gemini-cli_claude_request.go index f4a51e8b..0f896c6e 100644 --- a/internal/translator/gemini-cli/claude/gemini-cli_claude_request.go +++ b/internal/translator/gemini-cli/claude/gemini-cli_claude_request.go @@ -116,6 +116,19 @@ func ConvertClaudeRequestToCLI(modelName string, inputRawJSON []byte, _ bool) [] part, _ = sjson.Set(part, "functionResponse.name", funcName) part, _ = sjson.Set(part, "functionResponse.response.result", responseData) contentJSON, _ = sjson.SetRaw(contentJSON, "parts.-1", part) + + case "image": + source := contentResult.Get("source") + if source.Get("type").String() == "base64" { + mimeType := source.Get("media_type").String() + data := source.Get("data").String() + if mimeType != "" && data != "" { + part := `{"inlineData":{"mime_type":"","data":""}}` + part, _ = sjson.Set(part, "inlineData.mime_type", mimeType) + part, _ = sjson.Set(part, "inlineData.data", data) + contentJSON, _ = sjson.SetRaw(contentJSON, "parts.-1", part) + } + } } return true })