mirror of
https://github.com/coaidev/coai.git
synced 2025-05-22 22:40:14 +09:00
104 lines
2.2 KiB
Go
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
|
|
}
|