mirror of https://github.com/ollama/ollama.git
api: implement stringer for ToolFunctionParameters (#12038)
This commit is contained in:
parent
4bcb04ad88
commit
d3450dd52e
17
api/types.go
17
api/types.go
|
@ -286,16 +286,23 @@ func mapToTypeScriptType(jsonType string) string {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type ToolFunction struct {
|
type ToolFunctionParameters struct {
|
||||||
Name string `json:"name"`
|
|
||||||
Description string `json:"description"`
|
|
||||||
Parameters struct {
|
|
||||||
Type string `json:"type"`
|
Type string `json:"type"`
|
||||||
Defs any `json:"$defs,omitempty"`
|
Defs any `json:"$defs,omitempty"`
|
||||||
Items any `json:"items,omitempty"`
|
Items any `json:"items,omitempty"`
|
||||||
Required []string `json:"required"`
|
Required []string `json:"required"`
|
||||||
Properties map[string]ToolProperty `json:"properties"`
|
Properties map[string]ToolProperty `json:"properties"`
|
||||||
} `json:"parameters"`
|
}
|
||||||
|
|
||||||
|
func (t *ToolFunctionParameters) String() string {
|
||||||
|
bts, _ := json.Marshal(t)
|
||||||
|
return string(bts)
|
||||||
|
}
|
||||||
|
|
||||||
|
type ToolFunction struct {
|
||||||
|
Name string `json:"name"`
|
||||||
|
Description string `json:"description"`
|
||||||
|
Parameters ToolFunctionParameters `json:"parameters"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *ToolFunction) String() string {
|
func (t *ToolFunction) String() string {
|
||||||
|
|
|
@ -436,3 +436,50 @@ func TestThinking_UnmarshalJSON(t *testing.T) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestToolFunctionParameters_String(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
params ToolFunctionParameters
|
||||||
|
expected string
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "simple object with string property",
|
||||||
|
params: ToolFunctionParameters{
|
||||||
|
Type: "object",
|
||||||
|
Required: []string{"name"},
|
||||||
|
Properties: map[string]ToolProperty{
|
||||||
|
"name": {
|
||||||
|
Type: PropertyType{"string"},
|
||||||
|
Description: "The name of the person",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
expected: `{"type":"object","required":["name"],"properties":{"name":{"type":"string","description":"The name of the person"}}}`,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "marshal failure returns empty string",
|
||||||
|
params: ToolFunctionParameters{
|
||||||
|
Type: "object",
|
||||||
|
Defs: func() any {
|
||||||
|
// Create a cycle that will cause json.Marshal to fail
|
||||||
|
type selfRef struct {
|
||||||
|
Self *selfRef
|
||||||
|
}
|
||||||
|
s := &selfRef{}
|
||||||
|
s.Self = s
|
||||||
|
return s
|
||||||
|
}(),
|
||||||
|
Properties: map[string]ToolProperty{},
|
||||||
|
},
|
||||||
|
expected: "",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, test := range tests {
|
||||||
|
t.Run(test.name, func(t *testing.T) {
|
||||||
|
result := test.params.String()
|
||||||
|
assert.Equal(t, test.expected, result)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -41,13 +41,7 @@ func TestParser(t *testing.T) {
|
||||||
Function: api.ToolFunction{
|
Function: api.ToolFunction{
|
||||||
Name: "get_temperature",
|
Name: "get_temperature",
|
||||||
Description: "Retrieve the temperature for a given location",
|
Description: "Retrieve the temperature for a given location",
|
||||||
Parameters: struct {
|
Parameters: api.ToolFunctionParameters{
|
||||||
Type string `json:"type"`
|
|
||||||
Defs any `json:"$defs,omitempty"`
|
|
||||||
Items any `json:"items,omitempty"`
|
|
||||||
Required []string `json:"required"`
|
|
||||||
Properties map[string]api.ToolProperty `json:"properties"`
|
|
||||||
}{
|
|
||||||
Type: "object",
|
Type: "object",
|
||||||
Required: []string{"city"},
|
Required: []string{"city"},
|
||||||
Properties: map[string]api.ToolProperty{
|
Properties: map[string]api.ToolProperty{
|
||||||
|
@ -69,13 +63,7 @@ func TestParser(t *testing.T) {
|
||||||
Function: api.ToolFunction{
|
Function: api.ToolFunction{
|
||||||
Name: "get_conditions",
|
Name: "get_conditions",
|
||||||
Description: "Retrieve the current weather conditions for a given location",
|
Description: "Retrieve the current weather conditions for a given location",
|
||||||
Parameters: struct {
|
Parameters: api.ToolFunctionParameters{
|
||||||
Type string `json:"type"`
|
|
||||||
Defs any `json:"$defs,omitempty"`
|
|
||||||
Items any `json:"items,omitempty"`
|
|
||||||
Required []string `json:"required"`
|
|
||||||
Properties map[string]api.ToolProperty `json:"properties"`
|
|
||||||
}{
|
|
||||||
Type: "object",
|
Type: "object",
|
||||||
Properties: map[string]api.ToolProperty{
|
Properties: map[string]api.ToolProperty{
|
||||||
"location": {
|
"location": {
|
||||||
|
@ -105,13 +93,7 @@ func TestParser(t *testing.T) {
|
||||||
Function: api.ToolFunction{
|
Function: api.ToolFunction{
|
||||||
Name: "get_address",
|
Name: "get_address",
|
||||||
Description: "Get the address of a given location",
|
Description: "Get the address of a given location",
|
||||||
Parameters: struct {
|
Parameters: api.ToolFunctionParameters{
|
||||||
Type string `json:"type"`
|
|
||||||
Defs any `json:"$defs,omitempty"`
|
|
||||||
Items any `json:"items,omitempty"`
|
|
||||||
Required []string `json:"required"`
|
|
||||||
Properties map[string]api.ToolProperty `json:"properties"`
|
|
||||||
}{
|
|
||||||
Type: "object",
|
Type: "object",
|
||||||
Properties: map[string]api.ToolProperty{
|
Properties: map[string]api.ToolProperty{
|
||||||
"location": {
|
"location": {
|
||||||
|
@ -127,13 +109,7 @@ func TestParser(t *testing.T) {
|
||||||
Function: api.ToolFunction{
|
Function: api.ToolFunction{
|
||||||
Name: "add",
|
Name: "add",
|
||||||
Description: "Add two numbers",
|
Description: "Add two numbers",
|
||||||
Parameters: struct {
|
Parameters: api.ToolFunctionParameters{
|
||||||
Type string `json:"type"`
|
|
||||||
Defs any `json:"$defs,omitempty"`
|
|
||||||
Items any `json:"items,omitempty"`
|
|
||||||
Required []string `json:"required"`
|
|
||||||
Properties map[string]api.ToolProperty `json:"properties"`
|
|
||||||
}{
|
|
||||||
Type: "object",
|
Type: "object",
|
||||||
Properties: map[string]api.ToolProperty{
|
Properties: map[string]api.ToolProperty{
|
||||||
"a": {
|
"a": {
|
||||||
|
|
Loading…
Reference in New Issue