| package grammars_test |
|
|
| import ( |
| "strings" |
|
|
| . "github.com/mudler/LocalAI/pkg/functions/grammars" |
| . "github.com/onsi/ginkgo/v2" |
| . "github.com/onsi/gomega" |
| ) |
|
|
| const ( |
| testllama31Input1 = ` |
| { |
| "oneOf": [ |
| { |
| "type": "object", |
| "properties": { |
| "function": {"const": "create_event"}, |
| "arguments": { |
| "type": "object", |
| "properties": { |
| "title": {"type": "string"}, |
| "date": {"type": "string"}, |
| "time": {"type": "string"} |
| } |
| } |
| } |
| }, |
| { |
| "type": "object", |
| "properties": { |
| "function": {"const": "search"}, |
| "arguments": { |
| "type": "object", |
| "properties": { |
| "query": {"type": "string"} |
| } |
| } |
| } |
| } |
| ] |
| }` |
| |
| testllama31inputResult1 = `root-0-function ::= "create_event" |
| freestring ::= ( |
| [^"\\] | |
| "\\" (["\\/bfnrt] | "u" [0-9a-fA-F] [0-9a-fA-F] [0-9a-fA-F] [0-9a-fA-F]) |
| )* space |
| root-0 ::= "<function=" root-0-function ">{" root-0-arguments "}</function>" |
| root-1-arguments ::= "{" space "\"query\"" space ":" space string "}" space |
| root ::= root-0 | root-1 |
| space ::= " "? |
| root-0-arguments ::= "{" space "\"date\"" space ":" space string "," space "\"time\"" space ":" space string "," space "\"title\"" space ":" space string "}" space |
| root-1 ::= "<function=" root-1-function ">{" root-1-arguments "}</function>" |
| string ::= "\"" ( |
| [^"\\] | |
| "\\" (["\\/bfnrt] | "u" [0-9a-fA-F] [0-9a-fA-F] [0-9a-fA-F] [0-9a-fA-F]) |
| )* "\"" space |
| root-1-function ::= "search"` |
| ) |
|
|
| var _ = Describe("JSON schema grammar tests", func() { |
| Context("JSON", func() { |
| It("generates a valid grammar from JSON schema", func() { |
| grammar, err := NewLLama31SchemaConverter("function").GrammarFromBytes([]byte(testllama31Input1)) |
| Expect(err).ToNot(HaveOccurred()) |
| results := strings.Split(testllama31inputResult1, "\n") |
| for _, r := range results { |
| if r != "" { |
| Expect(grammar).To(ContainSubstring(r)) |
| } |
| } |
| Expect(len(results)).To(Equal(len(strings.Split(grammar, "\n")))) |
| }) |
| }) |
| }) |
|
|