diff --git a/schema/object.go b/schema/object.go index a5828e7..3dd733d 100644 --- a/schema/object.go +++ b/schema/object.go @@ -18,28 +18,48 @@ type object struct { func (o object) OpenAIParameters() openai.FunctionParameters { var properties = map[string]openai.FunctionParameters{} + var required []string for k, v := range o.fields { properties[k] = v.OpenAIParameters() + if v.Required() { + required = append(required, k) + } } - return openai.FunctionParameters{ + var res = openai.FunctionParameters{ "type": "object", "description": o.Description(), "properties": properties, } + + if len(required) > 0 { + res["required"] = required + } + + return res } func (o object) GoogleParameters() *genai.Schema { var properties = map[string]*genai.Schema{} + var required []string for k, v := range o.fields { properties[k] = v.GoogleParameters() + if v.Required() { + required = append(required, k) + } } - return &genai.Schema{ + var res = &genai.Schema{ Type: genai.TypeObject, Description: o.Description(), Properties: properties, } + + if len(required) > 0 { + res.Required = required + } + + return res } func (o object) FromAny(val any) (reflect.Value, error) {