76 lines
1.7 KiB
Go
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
|
|
}
|
|
}
|