diff --git a/internal/registry/model_definitions.go b/internal/registry/model_definitions.go index 0dd537b4f..72ac3324a 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 10ec69233..5c942b12f 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 48209153e..38c0507db 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 6643417a1..a96ca0631 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 38c55742d..2015e15d0 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 7768fd848..c8d233664 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 356681cda..7d409f5d5 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 072a1b4f2..dcc02474a 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 23950fdb4..0c90398ec 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 ab88ab324..77507f97b 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 e78eae05b..5023f381b 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 20d255a4b..b0bd8cba7 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 f29c26631..8f8d53479 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()