mirror of
https://github.com/mudler/LocalAI.git
synced 2024-12-19 04:37:53 +00:00
2169c3497d
* wip Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * get rid of panics Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * expose it properly from the config Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * Simplify Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * forgot to commit Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * Remove focus on test Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * Small fixups Signed-off-by: Ettore Di Giacinto <mudler@localai.io> --------- Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
44 lines
1.1 KiB
Go
44 lines
1.1 KiB
Go
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)
|
|
}
|