Files

76 lines
1.7 KiB
Go

package reasoningmode
import "strings"
type CommandKind string
const (
CommandEnable CommandKind = "enable"
CommandDisable CommandKind = "disable"
CommandSingle CommandKind = "single"
CommandHelp CommandKind = "help"
CommandInvalid CommandKind = "invalid"
)
type Command struct {
Kind CommandKind
Query string
}
func ParseCommand(raw string) (Command, bool) {
value := strings.TrimSpace(raw)
fields := strings.Fields(value)
if len(fields) == 0 {
return Command{}, false
}
name := strings.ToLower(fields[0])
switch name {
case "/help", "/帮助", "/h":
if len(fields) != 1 {
return Command{Kind: CommandInvalid}, true
}
return Command{Kind: CommandHelp}, true
case "/开启推理":
if len(fields) != 1 {
return Command{Kind: CommandInvalid}, true
}
return Command{Kind: CommandEnable}, true
case "/关闭推理", "/rag":
if len(fields) != 1 {
return Command{Kind: CommandInvalid}, true
}
return Command{Kind: CommandDisable}, true
case "/think":
default:
return Command{}, false
}
if len(fields) == 1 {
return Command{Kind: CommandEnable}, true
}
second := strings.ToLower(fields[1])
switch second {
case "on", "start":
if len(fields) != 2 {
return Command{Kind: CommandInvalid}, true
}
return Command{Kind: CommandEnable}, true
case "off", "end":
if len(fields) != 2 {
return Command{Kind: CommandInvalid}, true
}
return Command{Kind: CommandDisable}, true
default:
query := strings.TrimSpace(value[len(fields[0]):])
if second == "+" {
query = strings.TrimSpace(strings.TrimPrefix(query, "+"))
}
if query == "" {
return Command{Kind: CommandInvalid}, true
}
return Command{Kind: CommandSingle, Query: query}, true
}
}