fix: apply string protection in shared tool formatters

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
shern-point
2026-04-28 13:27:41 +08:00
parent b2903c35ed
commit 206c3d5479
4 changed files with 9 additions and 7 deletions

View File

@@ -9,7 +9,7 @@ import (
func TestFormatOpenAIStreamToolCalls(t *testing.T) {
formatted := FormatOpenAIStreamToolCalls([]ParsedToolCall{
{Name: "search", Input: map[string]any{"q": "test"}},
})
}, nil)
if len(formatted) != 1 {
t.Fatalf("expected 1, got %d", len(formatted))
}

View File

@@ -7,9 +7,10 @@ import (
"github.com/google/uuid"
)
func FormatOpenAIToolCalls(calls []ParsedToolCall) []map[string]any {
func FormatOpenAIToolCalls(calls []ParsedToolCall, toolsRaw any) []map[string]any {
normalized := NormalizeParsedToolCallsForSchemas(calls, toolsRaw)
out := make([]map[string]any, 0, len(calls))
for _, c := range calls {
for _, c := range normalized {
args, _ := json.Marshal(c.Input)
out = append(out, map[string]any{
"id": "call_" + strings.ReplaceAll(uuid.NewString(), "-", ""),
@@ -23,9 +24,10 @@ func FormatOpenAIToolCalls(calls []ParsedToolCall) []map[string]any {
return out
}
func FormatOpenAIStreamToolCalls(calls []ParsedToolCall) []map[string]any {
func FormatOpenAIStreamToolCalls(calls []ParsedToolCall, toolsRaw any) []map[string]any {
normalized := NormalizeParsedToolCallsForSchemas(calls, toolsRaw)
out := make([]map[string]any, 0, len(calls))
for i, c := range calls {
for i, c := range normalized {
args, _ := json.Marshal(c.Input)
out = append(out, map[string]any{
"index": i,

View File

@@ -6,7 +6,7 @@ import (
)
func TestFormatOpenAIToolCalls(t *testing.T) {
formatted := FormatOpenAIToolCalls([]ParsedToolCall{{Name: "search", Input: map[string]any{"q": "x"}}})
formatted := FormatOpenAIToolCalls([]ParsedToolCall{{Name: "search", Input: map[string]any{"q": "x"}}}, nil)
if len(formatted) != 1 {
t.Fatalf("expected 1, got %d", len(formatted))
}

View File

@@ -20,7 +20,7 @@ func BuildOpenAIChatCompletion(completionID, model, finalPrompt, finalThinking,
}
if len(detected) > 0 {
finishReason = "tool_calls"
messageObj["tool_calls"] = toolcall.FormatOpenAIToolCalls(detected)
messageObj["tool_calls"] = toolcall.FormatOpenAIToolCalls(detected, nil)
messageObj["content"] = nil
}
promptTokens := EstimateTokens(finalPrompt)