Spaces:
Configuration error
Configuration error
| package grammars | |
| import ( | |
| "fmt" | |
| "strings" | |
| "github.com/mudler/LocalAI/pkg/utils" | |
| ) | |
| type Rules map[string]string | |
| func (rules Rules) ToGrammar(options ...func(*GrammarOption)) string { | |
| grammarOpts := &GrammarOption{} | |
| grammarOpts.Apply(options...) | |
| prefix := grammarOpts.Prefix | |
| maybeArray := grammarOpts.MaybeArray | |
| disableParallelNewLines := grammarOpts.DisableParallelNewLines | |
| maybeString := grammarOpts.MaybeString | |
| noMixedFreeString := grammarOpts.NoMixedFreeString | |
| var lines []string | |
| swapRoot := maybeArray || maybeString || prefix != "" | |
| // write down the computed rules. | |
| // if maybeArray is true, we need to add the array rule and slightly tweak the root rule | |
| for name, rule := range rules { | |
| if swapRoot && name == "root" { | |
| name = "realvalue" | |
| } | |
| lines = append(lines, fmt.Sprintf("%s ::= %s", name, rule)) | |
| } | |
| if !swapRoot { | |
| return strings.Join(lines, "\n") | |
| } | |
| newRoot := "realvalue" | |
| if maybeArray { | |
| newRoot = "arr | realvalue" | |
| } | |
| freestringRule := "mixedstring" | |
| if noMixedFreeString { | |
| freestringRule = "freestring" | |
| } | |
| if prefix != "" { | |
| // quote newlines in suffix | |
| prefix = utils.EscapeNewLines(prefix) | |
| if maybeArray && maybeString { | |
| newRoot = "(" + newRoot + ")" | |
| } | |
| if maybeString { | |
| //newRoot = "( (\"" + suffix + "\" " + newRoot + ") | freestring ) " | |
| newRoot = "( \"" + prefix + "\" " + newRoot + " | " + freestringRule + " ) " | |
| } else { | |
| newRoot = "\"" + prefix + "\" " + "" + newRoot + "" | |
| } | |
| } else if maybeString { | |
| if maybeArray { | |
| // newRoot = "(" + newRoot + ")" | |
| } | |
| newRoot = freestringRule + " | " + newRoot | |
| } | |
| lines = append(lines, fmt.Sprintf("%s ::= %s", "root", newRoot)) | |
| if disableParallelNewLines { | |
| lines = append(lines, array) | |
| } else { | |
| lines = append(lines, arrayNewLines) | |
| } | |
| if maybeArray { | |
| if grammarOpts.ExpectStringsAfterJSON { | |
| lines = append(lines, `mixedstring ::= freestring | freestring arr freestring | (freestring realvalue freestring)* | realvalue | arr`) | |
| } else { | |
| lines = append(lines, `mixedstring ::= freestring | freestring arr | freestring realvalue | realvalue | arr`) | |
| } | |
| } else { | |
| if grammarOpts.ExpectStringsAfterJSON { | |
| lines = append(lines, `mixedstring ::= freestring | (freestring realvalue freestring)* | realvalue`) | |
| } else { | |
| lines = append(lines, `mixedstring ::= freestring | freestring realvalue | realvalue`) | |
| } | |
| } | |
| return strings.Join(lines, "\n") | |
| } | |