mirror of
https://github.com/mudler/LocalAI.git
synced 2025-05-20 10:35:01 +00:00
feat(grammar): add llama3.1 schema (#3015)
* 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>
This commit is contained in:
parent
fee52942eb
commit
2169c3497d
14 changed files with 609 additions and 148 deletions
|
@ -7,6 +7,7 @@ import (
|
|||
"regexp"
|
||||
"strings"
|
||||
|
||||
"github.com/mudler/LocalAI/pkg/functions/grammars"
|
||||
"github.com/mudler/LocalAI/pkg/utils"
|
||||
"github.com/rs/zerolog/log"
|
||||
)
|
||||
|
@ -22,7 +23,9 @@ type GrammarConfig struct {
|
|||
MixedMode bool `yaml:"mixed_mode"`
|
||||
|
||||
// NoMixedFreeString disables the mixed mode for free strings
|
||||
// In this way if the LLM selects a free string, it won't be mixed necessarly with JSON objects
|
||||
// In this way if the LLM selects a free string, it won't be mixed necessarly with JSON objects.
|
||||
// For example, if enabled the LLM or returns a JSON object or a free string, but not a mix of both
|
||||
// If disabled(default): the LLM can return a JSON object surrounded by free strings (e.g. `this is the JSON result: { "bar": "baz" } for your question`). This forces the LLM to return at least a JSON object, but its not going to be strict
|
||||
NoMixedFreeString bool `yaml:"no_mixed_free_string"`
|
||||
|
||||
// NoGrammar disables the grammar parsing and parses the responses directly from the LLM
|
||||
|
@ -39,6 +42,10 @@ type GrammarConfig struct {
|
|||
// for instance name,arguments will make print { "name": "foo", "arguments": { "bar": "baz" } }
|
||||
// instead of { "arguments": { "bar": "baz" }, "name": "foo" }
|
||||
PropOrder string `yaml:"properties_order"`
|
||||
|
||||
// SchemaType can be configured to use a specific schema type to force the grammar
|
||||
// available : json, llama3.1
|
||||
SchemaType string `yaml:"schema_type"`
|
||||
}
|
||||
|
||||
// FunctionsConfig is the configuration for the tool/function call.
|
||||
|
@ -92,28 +99,36 @@ type FuncCallResults struct {
|
|||
Arguments string
|
||||
}
|
||||
|
||||
func (g GrammarConfig) Options() []func(o *GrammarOption) {
|
||||
opts := []func(o *GrammarOption){}
|
||||
if g.MixedMode {
|
||||
opts = append(opts, EnableMaybeString)
|
||||
func (g FunctionsConfig) GrammarOptions() []func(o *grammars.GrammarOption) {
|
||||
opts := []func(o *grammars.GrammarOption){}
|
||||
if g.GrammarConfig.MixedMode {
|
||||
opts = append(opts, grammars.EnableMaybeString)
|
||||
}
|
||||
if g.ParallelCalls {
|
||||
opts = append(opts, EnableMaybeArray)
|
||||
if g.GrammarConfig.ParallelCalls {
|
||||
opts = append(opts, grammars.EnableMaybeArray)
|
||||
}
|
||||
if g.DisableParallelNewLines {
|
||||
opts = append(opts, DisableParallelNewLines)
|
||||
if g.GrammarConfig.DisableParallelNewLines {
|
||||
opts = append(opts, grammars.DisableParallelNewLines)
|
||||
}
|
||||
if g.Prefix != "" {
|
||||
opts = append(opts, SetPrefix(g.Prefix))
|
||||
if g.GrammarConfig.Prefix != "" {
|
||||
opts = append(opts, grammars.SetPrefix(g.GrammarConfig.Prefix))
|
||||
}
|
||||
if g.NoMixedFreeString {
|
||||
opts = append(opts, NoMixedFreeString)
|
||||
if g.GrammarConfig.NoMixedFreeString {
|
||||
opts = append(opts, grammars.NoMixedFreeString)
|
||||
}
|
||||
if g.ExpectStringsAfterJSON {
|
||||
opts = append(opts, ExpectStringsAfterJSON)
|
||||
if g.GrammarConfig.ExpectStringsAfterJSON {
|
||||
opts = append(opts, grammars.ExpectStringsAfterJSON)
|
||||
}
|
||||
|
||||
opts = append(opts, SetPropOrder(g.PropOrder))
|
||||
if g.GrammarConfig.SchemaType != "" {
|
||||
opts = append(opts, grammars.WithSchemaType(grammars.NewType(g.GrammarConfig.SchemaType)))
|
||||
}
|
||||
|
||||
if g.FunctionNameKey != "" {
|
||||
opts = append(opts, grammars.WithFunctionName(g.FunctionNameKey))
|
||||
}
|
||||
|
||||
opts = append(opts, grammars.SetPropOrder(g.GrammarConfig.PropOrder))
|
||||
return opts
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue