|
package functions_test |
|
|
|
import ( |
|
. "github.com/mudler/LocalAI/pkg/functions" |
|
. "github.com/onsi/ginkgo/v2" |
|
. "github.com/onsi/gomega" |
|
) |
|
|
|
var _ = Describe("LocalAI grammar functions", func() { |
|
Describe("ToJSONStructure()", func() { |
|
It("converts a list of functions to a JSON structure that can be parsed to a grammar", func() { |
|
var functions Functions = []Function{ |
|
{ |
|
Name: "create_event", |
|
Parameters: map[string]interface{}{ |
|
"properties": map[string]interface{}{ |
|
"event_name": map[string]interface{}{ |
|
"type": "string", |
|
}, |
|
"event_date": map[string]interface{}{ |
|
"type": "string", |
|
}, |
|
}, |
|
}, |
|
}, |
|
{ |
|
Name: "search", |
|
Parameters: map[string]interface{}{ |
|
"properties": map[string]interface{}{ |
|
"query": map[string]interface{}{ |
|
"type": "string", |
|
}, |
|
}, |
|
}, |
|
}, |
|
} |
|
|
|
js := functions.ToJSONStructure("function", "arguments") |
|
Expect(len(js.OneOf)).To(Equal(2)) |
|
fnName := js.OneOf[0].Properties["function"].(FunctionName) |
|
fnArgs := js.OneOf[0].Properties["arguments"].(Argument) |
|
Expect(fnName.Const).To(Equal("create_event")) |
|
Expect(fnArgs.Properties["event_name"].(map[string]interface{})["type"]).To(Equal("string")) |
|
Expect(fnArgs.Properties["event_date"].(map[string]interface{})["type"]).To(Equal("string")) |
|
|
|
fnName = js.OneOf[1].Properties["function"].(FunctionName) |
|
fnArgs = js.OneOf[1].Properties["arguments"].(Argument) |
|
Expect(fnName.Const).To(Equal("search")) |
|
Expect(fnArgs.Properties["query"].(map[string]interface{})["type"]).To(Equal("string")) |
|
|
|
|
|
jsN := functions.ToJSONStructure("name", "arguments") |
|
Expect(len(jsN.OneOf)).To(Equal(2)) |
|
|
|
fnName = jsN.OneOf[0].Properties["name"].(FunctionName) |
|
fnArgs = jsN.OneOf[0].Properties["arguments"].(Argument) |
|
|
|
Expect(fnName.Const).To(Equal("create_event")) |
|
Expect(fnArgs.Properties["event_name"].(map[string]interface{})["type"]).To(Equal("string")) |
|
Expect(fnArgs.Properties["event_date"].(map[string]interface{})["type"]).To(Equal("string")) |
|
|
|
fnName = jsN.OneOf[1].Properties["name"].(FunctionName) |
|
fnArgs = jsN.OneOf[1].Properties["arguments"].(Argument) |
|
|
|
Expect(fnName.Const).To(Equal("search")) |
|
Expect(fnArgs.Properties["query"].(map[string]interface{})["type"]).To(Equal("string")) |
|
}) |
|
}) |
|
Context("Select()", func() { |
|
It("selects one of the functions and returns a list containing only the selected one", func() { |
|
var functions Functions = []Function{ |
|
{ |
|
Name: "create_event", |
|
}, |
|
{ |
|
Name: "search", |
|
}, |
|
} |
|
|
|
functions = functions.Select("create_event") |
|
Expect(len(functions)).To(Equal(1)) |
|
Expect(functions[0].Name).To(Equal("create_event")) |
|
}) |
|
}) |
|
}) |
|
|