coai/conversation/conversation.go
2023-08-09 17:54:38 +08:00

104 lines
2.2 KiB
Go

package conversation
import (
"chat/types"
"chat/utils"
"errors"
)
type Conversation struct {
Username string `json:"username"`
Id int64 `json:"id"`
Message []types.ChatGPTMessage `json:"message"`
}
type FormMessage struct {
Message string `json:"message" binding:"required"`
}
func NewConversation(username string, id int64) *Conversation {
return &Conversation{
Username: username,
Id: id,
Message: []types.ChatGPTMessage{},
}
}
func (c *Conversation) GetUsername() string {
return c.Username
}
func (c *Conversation) GetId() int64 {
return c.Id
}
func (c *Conversation) GetMessage() []types.ChatGPTMessage {
return c.Message
}
func (c *Conversation) GetMessageSize() int {
return len(c.Message)
}
func (c *Conversation) GetMessageSegment(length int) []types.ChatGPTMessage {
if length > len(c.Message) {
return c.Message
}
return c.Message[len(c.Message)-length:]
}
func (c *Conversation) GetLastMessage() types.ChatGPTMessage {
return c.Message[len(c.Message)-1]
}
func (c *Conversation) AddMessage(message types.ChatGPTMessage) {
c.Message = append(c.Message, message)
}
func (c *Conversation) AddMessageFromUser(message string) {
c.Message = append(c.Message, types.ChatGPTMessage{
Role: "user",
Content: message,
})
}
func (c *Conversation) AddMessageFromAssistant(message string) {
c.Message = append(c.Message, types.ChatGPTMessage{
Role: "assistant",
Content: message,
})
}
func (c *Conversation) AddMessageFromSystem(message string) {
c.Message = append(c.Message, types.ChatGPTMessage{
Role: "system",
Content: message,
})
}
func GetMessage(data []byte) (string, error) {
form, err := utils.Unmarshal[FormMessage](data)
if err != nil {
return "", err
}
if len(form.Message) == 0 {
return "", errors.New("message is empty")
}
return form.Message, nil
}
func (c *Conversation) AddMessageFromUserForm(data []byte) (string, error) {
form, err := utils.Unmarshal[FormMessage](data)
if err != nil {
return "", err
} else if len(form.Message) == 0 {
return "", errors.New("message is empty")
}
c.Message = append(c.Message, types.ChatGPTMessage{
Role: "user",
Content: form.Message,
})
return form.Message, nil
}