From bbdd68a8b47dcfc33489f0b2fa0da6a3b57e96b5 Mon Sep 17 00:00:00 2001 From: Luis Pater Date: Mon, 6 Oct 2025 04:44:45 +0800 Subject: [PATCH] feat(registry/runtime): add Gemini 2.5 model and increase buffer sizes - Added new "Gemini 2.5 Flash Image Preview" model definition, with enhanced image generation capabilities. - Increased scanner buffer size to 20,971,520 bytes across executors and translators to handle larger payloads. --- internal/registry/model_definitions.go | 14 ++++++++++++++ internal/runtime/executor/claude_executor.go | 4 ++-- internal/runtime/executor/codex_executor.go | 4 ++-- internal/runtime/executor/gemini_cli_executor.go | 4 ++-- internal/runtime/executor/gemini_executor.go | 4 ++-- internal/runtime/executor/iflow_executor.go | 4 ++-- .../runtime/executor/openai_compat_executor.go | 4 ++-- internal/runtime/executor/qwen_executor.go | 4 ++-- .../claude/gemini/claude_gemini_response.go | 4 ++-- .../responses/claude_openai-responses_response.go | 4 ++-- .../codex/claude/codex_claude_response.go | 4 ++-- .../codex/gemini/codex_gemini_response.go | 4 ++-- .../responses/codex_openai-responses_response.go | 4 ++-- 13 files changed, 38 insertions(+), 24 deletions(-) diff --git a/internal/registry/model_definitions.go b/internal/registry/model_definitions.go index 0dd537b4..72ac3324 100644 --- a/internal/registry/model_definitions.go +++ b/internal/registry/model_definitions.go @@ -152,6 +152,20 @@ func GetGeminiCLIModels() []*ModelInfo { OutputTokenLimit: 65536, SupportedGenerationMethods: []string{"generateContent", "countTokens", "createCachedContent", "batchGenerateContent"}, }, + { + ID: "gemini-2.5-flash-image-preview", + Object: "model", + Created: time.Now().Unix(), + OwnedBy: "google", + Type: "gemini", + Name: "models/gemini-2.5-flash-image-preview", + Version: "2.5", + DisplayName: "Gemini 2.5 Flash Image Preview", + Description: "State-of-the-art image generation and editing model.", + InputTokenLimit: 1048576, + OutputTokenLimit: 8192, + SupportedGenerationMethods: []string{"generateContent", "countTokens", "createCachedContent", "batchGenerateContent"}, + }, } } diff --git a/internal/runtime/executor/claude_executor.go b/internal/runtime/executor/claude_executor.go index 10ec6923..5c942b12 100644 --- a/internal/runtime/executor/claude_executor.go +++ b/internal/runtime/executor/claude_executor.go @@ -144,8 +144,8 @@ func (e *ClaudeExecutor) ExecuteStream(ctx context.Context, auth *cliproxyauth.A defer close(out) defer func() { _ = resp.Body.Close() }() scanner := bufio.NewScanner(resp.Body) - buf := make([]byte, 1024*1024) - scanner.Buffer(buf, 1024*1024) + buf := make([]byte, 20_971_520) + scanner.Buffer(buf, 20_971_520) var param any for scanner.Scan() { line := scanner.Bytes() diff --git a/internal/runtime/executor/codex_executor.go b/internal/runtime/executor/codex_executor.go index 48209153..38c0507d 100644 --- a/internal/runtime/executor/codex_executor.go +++ b/internal/runtime/executor/codex_executor.go @@ -189,8 +189,8 @@ func (e *CodexExecutor) ExecuteStream(ctx context.Context, auth *cliproxyauth.Au defer close(out) defer func() { _ = resp.Body.Close() }() scanner := bufio.NewScanner(resp.Body) - buf := make([]byte, 1024*1024) - scanner.Buffer(buf, 1024*1024) + buf := make([]byte, 20_971_520) + scanner.Buffer(buf, 20_971_520) var param any for scanner.Scan() { line := scanner.Bytes() diff --git a/internal/runtime/executor/gemini_cli_executor.go b/internal/runtime/executor/gemini_cli_executor.go index 6643417a..a96ca063 100644 --- a/internal/runtime/executor/gemini_cli_executor.go +++ b/internal/runtime/executor/gemini_cli_executor.go @@ -212,8 +212,8 @@ func (e *GeminiCLIExecutor) ExecuteStream(ctx context.Context, auth *cliproxyaut defer func() { _ = resp.Body.Close() }() if opts.Alt == "" { scanner := bufio.NewScanner(resp.Body) - buf := make([]byte, 1024*1024) - scanner.Buffer(buf, 1024*1024) + buf := make([]byte, 20_971_520) + scanner.Buffer(buf, 20_971_520) var param any for scanner.Scan() { line := scanner.Bytes() diff --git a/internal/runtime/executor/gemini_executor.go b/internal/runtime/executor/gemini_executor.go index 38c55742..2015e15d 100644 --- a/internal/runtime/executor/gemini_executor.go +++ b/internal/runtime/executor/gemini_executor.go @@ -173,8 +173,8 @@ func (e *GeminiExecutor) ExecuteStream(ctx context.Context, auth *cliproxyauth.A defer close(out) defer func() { _ = resp.Body.Close() }() scanner := bufio.NewScanner(resp.Body) - buf := make([]byte, 1024*1024) - scanner.Buffer(buf, 1024*1024) + buf := make([]byte, 20_971_520) + scanner.Buffer(buf, 20_971_520) var param any for scanner.Scan() { line := scanner.Bytes() diff --git a/internal/runtime/executor/iflow_executor.go b/internal/runtime/executor/iflow_executor.go index 7768fd84..c8d23366 100644 --- a/internal/runtime/executor/iflow_executor.go +++ b/internal/runtime/executor/iflow_executor.go @@ -141,8 +141,8 @@ func (e *IFlowExecutor) ExecuteStream(ctx context.Context, auth *cliproxyauth.Au defer func() { _ = resp.Body.Close() }() scanner := bufio.NewScanner(resp.Body) - buf := make([]byte, 1024*1024) - scanner.Buffer(buf, 1024*1024) + buf := make([]byte, 20_971_520) + scanner.Buffer(buf, 20_971_520) var param any for scanner.Scan() { line := scanner.Bytes() diff --git a/internal/runtime/executor/openai_compat_executor.go b/internal/runtime/executor/openai_compat_executor.go index 356681cd..7d409f5d 100644 --- a/internal/runtime/executor/openai_compat_executor.go +++ b/internal/runtime/executor/openai_compat_executor.go @@ -133,8 +133,8 @@ func (e *OpenAICompatExecutor) ExecuteStream(ctx context.Context, auth *cliproxy defer close(out) defer func() { _ = resp.Body.Close() }() scanner := bufio.NewScanner(resp.Body) - buf := make([]byte, 1024*1024) - scanner.Buffer(buf, 1024*1024) + buf := make([]byte, 20_971_520) + scanner.Buffer(buf, 20_971_520) var param any for scanner.Scan() { line := scanner.Bytes() diff --git a/internal/runtime/executor/qwen_executor.go b/internal/runtime/executor/qwen_executor.go index 072a1b4f..dcc02474 100644 --- a/internal/runtime/executor/qwen_executor.go +++ b/internal/runtime/executor/qwen_executor.go @@ -126,8 +126,8 @@ func (e *QwenExecutor) ExecuteStream(ctx context.Context, auth *cliproxyauth.Aut defer close(out) defer func() { _ = resp.Body.Close() }() scanner := bufio.NewScanner(resp.Body) - buf := make([]byte, 1024*1024) - scanner.Buffer(buf, 1024*1024) + buf := make([]byte, 20_971_520) + scanner.Buffer(buf, 20_971_520) var param any for scanner.Scan() { line := scanner.Bytes() diff --git a/internal/translator/claude/gemini/claude_gemini_response.go b/internal/translator/claude/gemini/claude_gemini_response.go index 23950fdb..0c90398e 100644 --- a/internal/translator/claude/gemini/claude_gemini_response.go +++ b/internal/translator/claude/gemini/claude_gemini_response.go @@ -331,8 +331,8 @@ func ConvertClaudeResponseToGeminiNonStream(_ context.Context, modelName string, streamingEvents := make([][]byte, 0) scanner := bufio.NewScanner(bytes.NewReader(rawJSON)) - buffer := make([]byte, 10240*1024) - scanner.Buffer(buffer, 10240*1024) + buffer := make([]byte, 20_971_520) + scanner.Buffer(buffer, 20_971_520) for scanner.Scan() { line := scanner.Bytes() // log.Debug(string(line)) diff --git a/internal/translator/claude/openai/responses/claude_openai-responses_response.go b/internal/translator/claude/openai/responses/claude_openai-responses_response.go index ab88ab32..77507f97 100644 --- a/internal/translator/claude/openai/responses/claude_openai-responses_response.go +++ b/internal/translator/claude/openai/responses/claude_openai-responses_response.go @@ -445,8 +445,8 @@ func ConvertClaudeResponseToOpenAIResponsesNonStream(_ context.Context, _ string // Use a simple scanner to iterate through raw bytes // Note: extremely large responses may require increasing the buffer scanner := bufio.NewScanner(bytes.NewReader(rawJSON)) - buf := make([]byte, 10240*1024) - scanner.Buffer(buf, 10240*1024) + buf := make([]byte, 20_971_520) + scanner.Buffer(buf, 20_971_520) for scanner.Scan() { line := scanner.Bytes() if !bytes.HasPrefix(line, dataTag) { diff --git a/internal/translator/codex/claude/codex_claude_response.go b/internal/translator/codex/claude/codex_claude_response.go index e78eae05..5023f381 100644 --- a/internal/translator/codex/claude/codex_claude_response.go +++ b/internal/translator/codex/claude/codex_claude_response.go @@ -181,8 +181,8 @@ func ConvertCodexResponseToClaude(_ context.Context, _ string, originalRequestRa // - string: A Claude Code-compatible JSON response containing all message content and metadata func ConvertCodexResponseToClaudeNonStream(_ context.Context, _ string, originalRequestRawJSON, _ []byte, rawJSON []byte, _ *any) string { scanner := bufio.NewScanner(bytes.NewReader(rawJSON)) - buffer := make([]byte, 10240*1024) - scanner.Buffer(buffer, 10240*1024) + buffer := make([]byte, 20_971_520) + scanner.Buffer(buffer, 20_971_520) revNames := buildReverseMapFromClaudeOriginalShortToOriginal(originalRequestRawJSON) for scanner.Scan() { diff --git a/internal/translator/codex/gemini/codex_gemini_response.go b/internal/translator/codex/gemini/codex_gemini_response.go index 20d255a4..b0bd8cba 100644 --- a/internal/translator/codex/gemini/codex_gemini_response.go +++ b/internal/translator/codex/gemini/codex_gemini_response.go @@ -153,8 +153,8 @@ func ConvertCodexResponseToGemini(_ context.Context, modelName string, originalR // - string: A Gemini-compatible JSON response containing all message content and metadata func ConvertCodexResponseToGeminiNonStream(_ context.Context, modelName string, originalRequestRawJSON, requestRawJSON, rawJSON []byte, _ *any) string { scanner := bufio.NewScanner(bytes.NewReader(rawJSON)) - buffer := make([]byte, 10240*1024) - scanner.Buffer(buffer, 10240*1024) + buffer := make([]byte, 20_971_520) + scanner.Buffer(buffer, 20_971_520) for scanner.Scan() { line := scanner.Bytes() // log.Debug(string(line)) diff --git a/internal/translator/codex/openai/responses/codex_openai-responses_response.go b/internal/translator/codex/openai/responses/codex_openai-responses_response.go index f29c2663..8f8d5347 100644 --- a/internal/translator/codex/openai/responses/codex_openai-responses_response.go +++ b/internal/translator/codex/openai/responses/codex_openai-responses_response.go @@ -30,8 +30,8 @@ func ConvertCodexResponseToOpenAIResponses(ctx context.Context, modelName string // from a non-streaming OpenAI Chat Completions response. func ConvertCodexResponseToOpenAIResponsesNonStream(_ context.Context, modelName string, originalRequestRawJSON, requestRawJSON, rawJSON []byte, _ *any) string { scanner := bufio.NewScanner(bytes.NewReader(rawJSON)) - buffer := make([]byte, 10240*1024) - scanner.Buffer(buffer, 10240*1024) + buffer := make([]byte, 20_971_520) + scanner.Buffer(buffer, 20_971_520) dataTag := []byte("data:") for scanner.Scan() { line := scanner.Bytes()