parser: add commands format

This commit is contained in:
Michael Yang 2024-04-24 18:49:14 -07:00
parent 4d08363580
commit 176ad3aa6e
3 changed files with 108 additions and 15 deletions

View file

@ -31,6 +31,33 @@ var (
errInvalidRole = errors.New("role must be one of \"system\", \"user\", or \"assistant\"")
)
func Format(cmds []Command) string {
var b bytes.Buffer
for _, cmd := range cmds {
name := cmd.Name
args := cmd.Args
switch cmd.Name {
case "model":
name = "from"
args = cmd.Args
case "license", "template", "system", "adapter":
args = quote(args)
// pass
case "message":
role, message, _ := strings.Cut(cmd.Args, ": ")
args = role + " " + quote(message)
default:
name = "parameter"
args = cmd.Name + " " + cmd.Args
}
fmt.Fprintln(&b, strings.ToUpper(name), args)
}
return b.String()
}
func Parse(r io.Reader) (cmds []Command, err error) {
var cmd Command
var curr state
@ -197,6 +224,18 @@ func parseRuneForState(r rune, cs state) (state, rune, error) {
}
}
func quote(s string) string {
if strings.Contains(s, "\n") || strings.HasSuffix(s, " ") {
if strings.Contains(s, "\"") {
return `"""` + s + `"""`
}
return strconv.Quote(s)
}
return s
}
func unquote(s string) (string, bool) {
if len(s) == 0 {
return "", false