mirror of
https://github.com/mudler/LocalAI.git
synced 2024-06-07 19:40:48 +00:00
Add grammar_json to the request parameters to facilitate JSON generation
This commit is contained in:
parent
483fddccf9
commit
55befe396a
@ -145,6 +145,8 @@ type OpenAIRequest struct {
|
|||||||
|
|
||||||
// A grammar to constrain the LLM output
|
// A grammar to constrain the LLM output
|
||||||
Grammar string `json:"grammar" yaml:"grammar"`
|
Grammar string `json:"grammar" yaml:"grammar"`
|
||||||
|
// A grammar object
|
||||||
|
JSONFunctionGrammarObject *grammar.JSONFunctionStructure `json:"grammar_json_functions" yaml:"grammar_json_functions"`
|
||||||
|
|
||||||
TypicalP float64 `json:"typical_p" yaml:"typical_p"`
|
TypicalP float64 `json:"typical_p" yaml:"typical_p"`
|
||||||
}
|
}
|
||||||
@ -433,6 +435,8 @@ func chatEndpoint(cm *ConfigMerger, o *Option) func(c *fiber.Ctx) error {
|
|||||||
// Update input grammar
|
// Update input grammar
|
||||||
jsStruct := funcs.ToJSONStructure()
|
jsStruct := funcs.ToJSONStructure()
|
||||||
config.Grammar = jsStruct.Grammar("")
|
config.Grammar = jsStruct.Grammar("")
|
||||||
|
} else if input.JSONFunctionGrammarObject != nil {
|
||||||
|
config.Grammar = input.JSONFunctionGrammarObject.Grammar("")
|
||||||
}
|
}
|
||||||
|
|
||||||
// functions are not supported in stream mode (yet?)
|
// functions are not supported in stream mode (yet?)
|
||||||
@ -486,6 +490,7 @@ func chatEndpoint(cm *ConfigMerger, o *Option) func(c *fiber.Ctx) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
predInput = strings.Join(mess, "\n")
|
predInput = strings.Join(mess, "\n")
|
||||||
|
log.Debug().Msgf("Prompt (before templating): %s", predInput)
|
||||||
|
|
||||||
if toStream {
|
if toStream {
|
||||||
log.Debug().Msgf("Stream request received")
|
log.Debug().Msgf("Stream request received")
|
||||||
@ -522,7 +527,7 @@ func chatEndpoint(cm *ConfigMerger, o *Option) func(c *fiber.Ctx) error {
|
|||||||
log.Debug().Msgf("Template failed loading: %s", err.Error())
|
log.Debug().Msgf("Template failed loading: %s", err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Debug().Msgf("Prompt: %s", predInput)
|
log.Debug().Msgf("Prompt (after templating): %s", predInput)
|
||||||
if processFunctions {
|
if processFunctions {
|
||||||
log.Debug().Msgf("Grammar: %+v", config.Grammar)
|
log.Debug().Msgf("Grammar: %+v", config.Grammar)
|
||||||
}
|
}
|
||||||
|
@ -11,8 +11,8 @@ type Function struct {
|
|||||||
}
|
}
|
||||||
type Functions []Function
|
type Functions []Function
|
||||||
|
|
||||||
func (f Functions) ToJSONStructure() JSONStructure {
|
func (f Functions) ToJSONStructure() JSONFunctionStructure {
|
||||||
js := JSONStructure{}
|
js := JSONFunctionStructure{}
|
||||||
for _, function := range f {
|
for _, function := range f {
|
||||||
// t := function.Parameters["type"]
|
// t := function.Parameters["type"]
|
||||||
//tt := t.(string)
|
//tt := t.(string)
|
||||||
|
@ -211,12 +211,12 @@ type Item struct {
|
|||||||
Properties Properties `json:"properties"`
|
Properties Properties `json:"properties"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type JSONStructure struct {
|
type JSONFunctionStructure struct {
|
||||||
OneOf []Item `json:"oneOf,omitempty"`
|
OneOf []Item `json:"oneOf,omitempty"`
|
||||||
AnyOf []Item `json:"anyOf,omitempty"`
|
AnyOf []Item `json:"anyOf,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (j JSONStructure) Grammar(propOrder string) string {
|
func (j JSONFunctionStructure) Grammar(propOrder string) string {
|
||||||
dat, _ := json.Marshal(j)
|
dat, _ := json.Marshal(j)
|
||||||
return NewJSONSchemaConverter(propOrder).GrammarFromBytes(dat)
|
return NewJSONSchemaConverter(propOrder).GrammarFromBytes(dat)
|
||||||
}
|
}
|
||||||
|
@ -66,7 +66,7 @@ var _ = Describe("JSON schema grammar tests", func() {
|
|||||||
})
|
})
|
||||||
It("generates a valid grammar from JSON Objects", func() {
|
It("generates a valid grammar from JSON Objects", func() {
|
||||||
|
|
||||||
structuredGrammar := JSONStructure{
|
structuredGrammar := JSONFunctionStructure{
|
||||||
OneOf: []Item{
|
OneOf: []Item{
|
||||||
{
|
{
|
||||||
Type: "object",
|
Type: "object",
|
||||||
|
Loading…
Reference in New Issue
Block a user