refactor: simplify ConvertCodexResponseToClaudeNonStream by removing bufio.Scanner usage and restructuring response parsing logic
This commit is contained in:
Luis Pater
2025-10-18 06:22:42 +08:00
parent 9cdef937af
commit 735b21394c

View File

@@ -7,7 +7,6 @@
package claude package claude
import ( import (
"bufio"
"bytes" "bytes"
"context" "context"
"encoding/json" "encoding/json"
@@ -180,29 +179,16 @@ func ConvertCodexResponseToClaude(_ context.Context, _ string, originalRequestRa
// Returns: // Returns:
// - string: A Claude Code-compatible JSON response containing all message content and metadata // - string: A Claude Code-compatible JSON response containing all message content and metadata
func ConvertCodexResponseToClaudeNonStream(_ context.Context, _ string, originalRequestRawJSON, _ []byte, rawJSON []byte, _ *any) string { func ConvertCodexResponseToClaudeNonStream(_ context.Context, _ string, originalRequestRawJSON, _ []byte, rawJSON []byte, _ *any) string {
scanner := bufio.NewScanner(bytes.NewReader(rawJSON))
buffer := make([]byte, 20_971_520)
scanner.Buffer(buffer, 20_971_520)
revNames := buildReverseMapFromClaudeOriginalShortToOriginal(originalRequestRawJSON) revNames := buildReverseMapFromClaudeOriginalShortToOriginal(originalRequestRawJSON)
for scanner.Scan() { rootResult := gjson.ParseBytes(rawJSON)
line := scanner.Bytes()
if !bytes.HasPrefix(line, dataTag) {
continue
}
payload := bytes.TrimSpace(line[len(dataTag):])
if len(payload) == 0 {
continue
}
rootResult := gjson.ParseBytes(payload)
if rootResult.Get("type").String() != "response.completed" { if rootResult.Get("type").String() != "response.completed" {
continue return ""
} }
responseData := rootResult.Get("response") responseData := rootResult.Get("response")
if !responseData.Exists() { if !responseData.Exists() {
continue return ""
} }
response := map[string]interface{}{ response := map[string]interface{}{
@@ -345,9 +331,6 @@ func ConvertCodexResponseToClaudeNonStream(_ context.Context, _ string, original
return string(responseJSON) return string(responseJSON)
} }
return ""
}
// buildReverseMapFromClaudeOriginalShortToOriginal builds a map[short]original from original Claude request tools. // buildReverseMapFromClaudeOriginalShortToOriginal builds a map[short]original from original Claude request tools.
func buildReverseMapFromClaudeOriginalShortToOriginal(original []byte) map[string]string { func buildReverseMapFromClaudeOriginalShortToOriginal(original []byte) map[string]string {
tools := gjson.GetBytes(original, "tools") tools := gjson.GetBytes(original, "tools")