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..1b712031 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{ @@ -771,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 }