From 9f512fc0cb0764b40110f24ab3f9e04b51d58587 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 14 Jul 2026 22:45:48 +0000 Subject: [PATCH 1/2] Consolidate OpenAI tool schema conversion Share the internal schema conversion helper between chat completions and responses tool request construction so the Go provider shape stays closer to the central .NET FunctionDefinition model without changing API or request behavior. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- provider/openaiprovider/chat.go | 19 ++++--------------- provider/openaiprovider/responses.go | 19 ++++--------------- 2 files changed, 8 insertions(+), 30 deletions(-) diff --git a/provider/openaiprovider/chat.go b/provider/openaiprovider/chat.go index 5195109c..25949273 100644 --- a/provider/openaiprovider/chat.go +++ b/provider/openaiprovider/chat.go @@ -308,21 +308,10 @@ func buildCompletionParams(model string, messages []*message.Message, opts []age } case tool.FuncTool: name, description := tl.Name(), tl.Description() - var funcParams map[string]any - switch schema := tl.Schema().(type) { - case map[string]any: - funcParams = schema - default: - if schema == nil { - break - } - data, err := json.Marshal(schema) - if err == nil { - err = json.Unmarshal(data, &funcParams) - } - if err != nil { - return openai.ChatCompletionNewParams{}, fmt.Errorf("failed to convert function tool schema to JSON format: %w", err) - } + schema := tl.Schema() + funcParams, err := schemaToMap(schema) + if err != nil { + return openai.ChatCompletionNewParams{}, fmt.Errorf("failed to convert function tool schema to JSON format: %w", err) } params.Tools = append(params.Tools, openai.ChatCompletionToolUnionParam{ OfFunction: &openai.ChatCompletionFunctionToolParam{ diff --git a/provider/openaiprovider/responses.go b/provider/openaiprovider/responses.go index 371e0801..a7d3c77b 100644 --- a/provider/openaiprovider/responses.go +++ b/provider/openaiprovider/responses.go @@ -327,21 +327,10 @@ func responsesBuildCompletionParams(config AgentConfig, messages []*message.Mess switch tl := tl.(type) { case tool.FuncTool: name, description := tl.Name(), tl.Description() - var funcParams map[string]any - switch schema := tl.Schema().(type) { - case map[string]any: - funcParams = schema - default: - if schema == nil { - break - } - data, err := json.Marshal(schema) - if err == nil { - err = json.Unmarshal(data, &funcParams) - } - if err != nil { - return responses.ResponseNewParams{}, fmt.Errorf("failed to convert schema for function tool %q (type %T) to JSON format: %w", name, schema, err) - } + schema := tl.Schema() + funcParams, err := schemaToMap(schema) + if err != nil { + return responses.ResponseNewParams{}, fmt.Errorf("failed to convert schema for function tool %q (type %T) to JSON format: %w", name, schema, err) } params.Tools = append(params.Tools, responses.ToolUnionParam{ OfFunction: &responses.FunctionToolParam{ From 98bb1cbbc4b902457d2f5def2213c1d4679f4935 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 17 Jul 2026 21:21:32 +0000 Subject: [PATCH 2/2] Guard schemaToMap against nil schema to preserve original behavior Co-authored-by: michelle-clayton-work <262183035+michelle-clayton-work@users.noreply.github.com> --- provider/openaiprovider/responses.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/provider/openaiprovider/responses.go b/provider/openaiprovider/responses.go index a7d3c77b..1b712031 100644 --- a/provider/openaiprovider/responses.go +++ b/provider/openaiprovider/responses.go @@ -760,6 +760,9 @@ func responsesBuildMessageParam(msg *message.Message, resp responses.ResponseInp } func schemaToMap(schema any) (map[string]any, error) { + if schema == nil { + return nil, nil + } if schemaMap, ok := schema.(map[string]any); ok { return schemaMap, nil }