| package functions |
|
|
| import ( |
| "encoding/json" |
|
|
| "github.com/mudler/LocalAI/pkg/functions/grammars" |
| ) |
|
|
| type Item struct { |
| Type string `json:"type"` |
| Properties map[string]interface{} `json:"properties"` |
| } |
|
|
| type JSONFunctionStructure struct { |
| OneOf []Item `json:"oneOf,omitempty"` |
| AnyOf []Item `json:"anyOf,omitempty"` |
| Defs map[string]interface{} `json:"$defs,omitempty"` |
| } |
|
|
| func (j JSONFunctionStructure) Grammar(options ...func(*grammars.GrammarOption)) (string, error) { |
| grammarOpts := &grammars.GrammarOption{} |
| grammarOpts.Apply(options...) |
|
|
| dat, err := json.Marshal(j) |
| if err != nil { |
| return "", err |
| } |
|
|
| converter := NewSchemaConverter(*grammarOpts) |
| return converter.GrammarFromBytes(dat, options...) |
| } |
|
|
| type SchemaConverter interface { |
| GrammarFromBytes([]byte, ...func(*grammars.GrammarOption)) (string, error) |
| } |
|
|
| func NewSchemaConverter(opt grammars.GrammarOption) SchemaConverter { |
| switch { |
| case opt.SchemaType == grammars.LLama31Schema: |
| return grammars.NewLLama31SchemaConverter(opt.FunctionName) |
| } |
| return grammars.NewJSONSchemaConverter(opt.PropOrder) |
| } |
|
|