fix(executor): increase buffer size for stream scanners to 50MB across multiple executors

This commit is contained in:
sususu
2025-12-10 23:20:04 +08:00
parent 94d61c7b2b
commit 76c563d161
11 changed files with 15 additions and 15 deletions

View File

@@ -38,7 +38,7 @@ const (
defaultAntigravityAgent = "antigravity/1.11.5 windows/amd64" defaultAntigravityAgent = "antigravity/1.11.5 windows/amd64"
antigravityAuthType = "antigravity" antigravityAuthType = "antigravity"
refreshSkew = 3000 * time.Second refreshSkew = 3000 * time.Second
streamScannerBuffer int = 20_971_520 streamScannerBuffer int = 52_428_800 // 50MB
) )
var randSource = rand.New(rand.NewSource(time.Now().UnixNano())) var randSource = rand.New(rand.NewSource(time.Now().UnixNano()))

View File

@@ -238,7 +238,7 @@ func (e *ClaudeExecutor) ExecuteStream(ctx context.Context, auth *cliproxyauth.A
// If from == to (Claude → Claude), directly forward the SSE stream without translation // If from == to (Claude → Claude), directly forward the SSE stream without translation
if from == to { if from == to {
scanner := bufio.NewScanner(decodedBody) scanner := bufio.NewScanner(decodedBody)
scanner.Buffer(nil, 20_971_520) scanner.Buffer(nil, 52_428_800) // 50MB
for scanner.Scan() { for scanner.Scan() {
line := scanner.Bytes() line := scanner.Bytes()
appendAPIResponseChunk(ctx, e.cfg, line) appendAPIResponseChunk(ctx, e.cfg, line)
@@ -261,7 +261,7 @@ func (e *ClaudeExecutor) ExecuteStream(ctx context.Context, auth *cliproxyauth.A
// For other formats, use translation // For other formats, use translation
scanner := bufio.NewScanner(decodedBody) scanner := bufio.NewScanner(decodedBody)
scanner.Buffer(nil, 20_971_520) scanner.Buffer(nil, 52_428_800) // 50MB
var param any var param any
for scanner.Scan() { for scanner.Scan() {
line := scanner.Bytes() line := scanner.Bytes()

View File

@@ -205,7 +205,7 @@ func (e *CodexExecutor) ExecuteStream(ctx context.Context, auth *cliproxyauth.Au
} }
}() }()
scanner := bufio.NewScanner(httpResp.Body) scanner := bufio.NewScanner(httpResp.Body)
scanner.Buffer(nil, 20_971_520) scanner.Buffer(nil, 52_428_800) // 50MB
var param any var param any
for scanner.Scan() { for scanner.Scan() {
line := scanner.Bytes() line := scanner.Bytes()

View File

@@ -309,7 +309,7 @@ func (e *GeminiCLIExecutor) ExecuteStream(ctx context.Context, auth *cliproxyaut
}() }()
if opts.Alt == "" { if opts.Alt == "" {
scanner := bufio.NewScanner(resp.Body) scanner := bufio.NewScanner(resp.Body)
scanner.Buffer(nil, 20_971_520) scanner.Buffer(nil, 52_428_800) // 50MB
var param any var param any
for scanner.Scan() { for scanner.Scan() {
line := scanner.Bytes() line := scanner.Bytes()

View File

@@ -243,7 +243,7 @@ func (e *GeminiExecutor) ExecuteStream(ctx context.Context, auth *cliproxyauth.A
} }
}() }()
scanner := bufio.NewScanner(httpResp.Body) scanner := bufio.NewScanner(httpResp.Body)
scanner.Buffer(nil, 20_971_520) scanner.Buffer(nil, 52_428_800) // 50MB
var param any var param any
for scanner.Scan() { for scanner.Scan() {
line := scanner.Bytes() line := scanner.Bytes()

View File

@@ -564,7 +564,7 @@ func (e *GeminiVertexExecutor) executeStreamWithServiceAccount(ctx context.Conte
} }
}() }()
scanner := bufio.NewScanner(httpResp.Body) scanner := bufio.NewScanner(httpResp.Body)
scanner.Buffer(nil, 20_971_520) scanner.Buffer(nil, 52_428_800) // 50MB
var param any var param any
for scanner.Scan() { for scanner.Scan() {
line := scanner.Bytes() line := scanner.Bytes()
@@ -678,7 +678,7 @@ func (e *GeminiVertexExecutor) executeStreamWithAPIKey(ctx context.Context, auth
} }
}() }()
scanner := bufio.NewScanner(httpResp.Body) scanner := bufio.NewScanner(httpResp.Body)
scanner.Buffer(nil, 20_971_520) scanner.Buffer(nil, 52_428_800) // 50MB
var param any var param any
for scanner.Scan() { for scanner.Scan() {
line := scanner.Bytes() line := scanner.Bytes()

View File

@@ -201,7 +201,7 @@ func (e *IFlowExecutor) ExecuteStream(ctx context.Context, auth *cliproxyauth.Au
}() }()
scanner := bufio.NewScanner(httpResp.Body) scanner := bufio.NewScanner(httpResp.Body)
scanner.Buffer(nil, 20_971_520) scanner.Buffer(nil, 52_428_800) // 50MB
var param any var param any
for scanner.Scan() { for scanner.Scan() {
line := scanner.Bytes() line := scanner.Bytes()

View File

@@ -206,7 +206,7 @@ func (e *OpenAICompatExecutor) ExecuteStream(ctx context.Context, auth *cliproxy
} }
}() }()
scanner := bufio.NewScanner(httpResp.Body) scanner := bufio.NewScanner(httpResp.Body)
scanner.Buffer(nil, 20_971_520) scanner.Buffer(nil, 52_428_800) // 50MB
var param any var param any
for scanner.Scan() { for scanner.Scan() {
line := scanner.Bytes() line := scanner.Bytes()

View File

@@ -181,7 +181,7 @@ func (e *QwenExecutor) ExecuteStream(ctx context.Context, auth *cliproxyauth.Aut
} }
}() }()
scanner := bufio.NewScanner(httpResp.Body) scanner := bufio.NewScanner(httpResp.Body)
scanner.Buffer(nil, 20_971_520) scanner.Buffer(nil, 52_428_800) // 50MB
var param any var param any
for scanner.Scan() { for scanner.Scan() {
line := scanner.Bytes() line := scanner.Bytes()

View File

@@ -331,8 +331,8 @@ func ConvertClaudeResponseToGeminiNonStream(_ context.Context, modelName string,
streamingEvents := make([][]byte, 0) streamingEvents := make([][]byte, 0)
scanner := bufio.NewScanner(bytes.NewReader(rawJSON)) scanner := bufio.NewScanner(bytes.NewReader(rawJSON))
buffer := make([]byte, 20_971_520) buffer := make([]byte, 52_428_800) // 50MB
scanner.Buffer(buffer, 20_971_520) scanner.Buffer(buffer, 52_428_800)
for scanner.Scan() { for scanner.Scan() {
line := scanner.Bytes() line := scanner.Bytes()
// log.Debug(string(line)) // log.Debug(string(line))

View File

@@ -445,8 +445,8 @@ func ConvertClaudeResponseToOpenAIResponsesNonStream(_ context.Context, _ string
// Use a simple scanner to iterate through raw bytes // Use a simple scanner to iterate through raw bytes
// Note: extremely large responses may require increasing the buffer // Note: extremely large responses may require increasing the buffer
scanner := bufio.NewScanner(bytes.NewReader(rawJSON)) scanner := bufio.NewScanner(bytes.NewReader(rawJSON))
buf := make([]byte, 20_971_520) buf := make([]byte, 52_428_800) // 50MB
scanner.Buffer(buf, 20_971_520) scanner.Buffer(buf, 52_428_800)
for scanner.Scan() { for scanner.Scan() {
line := scanner.Bytes() line := scanner.Bytes()
if !bytes.HasPrefix(line, dataTag) { if !bytes.HasPrefix(line, dataTag) {