geekai/server/db.go
2023-03-27 21:45:02 +08:00

87 lines
1.6 KiB
Go

package server
import (
"encoding/json"
"openai/types"
"openai/utils"
)
const (
TokenPrefix = "chat/tokens/"
ChatRolePrefix = "chat/roles/"
ChatHistoryPrefix = "chat/history/"
)
var db *utils.LevelDB
func init() {
leveldb, err := utils.NewLevelDB("data")
if err != nil {
panic(err)
}
db = leveldb
}
// GetTokens 获取 token 信息
// chat/tokens
func GetTokens() []types.Token {
items := db.Search(TokenPrefix)
var tokens = make([]types.Token, 0)
for _, v := range items {
var token types.Token
err := json.Unmarshal([]byte(v), &token)
if err != nil {
continue
}
tokens = append(tokens, token)
}
return tokens
}
func PutToken(token types.Token) error {
key := TokenPrefix + token.Name
return db.Put(key, token)
}
func GetToken(name string) (types.Token, error) {
key := TokenPrefix + name
token, err := db.Get(key)
if err != nil {
return types.Token{}, err
}
return token.(types.Token), nil
}
func RemoveToken(token string) error {
key := TokenPrefix + token
return db.Delete(key)
}
// GetChatRoles 获取聊天角色
// chat/roles
func GetChatRoles() map[string]types.ChatRole {
items := db.Search(ChatRolePrefix)
var roles = make(map[string]types.ChatRole)
for _, v := range items {
var role types.ChatRole
err := json.Unmarshal([]byte(v), &role)
if err != nil {
continue
}
roles[role.Key] = role
}
return roles
}
func PutChatRole(role types.ChatRole) error {
key := ChatRolePrefix + role.Key
return db.Put(key, role)
}
// GetChatHistory 获取聊天历史记录
// chat/history/{token}/{role}
func GetChatHistory() []types.Message {
return nil
}