|
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) |
|
} |
|
|