161 lines
4.4 KiB
Go
161 lines
4.4 KiB
Go
package domain
|
|
|
|
import (
|
|
"database/sql/driver"
|
|
"encoding/json"
|
|
"errors"
|
|
"time"
|
|
|
|
"github.com/cloudwego/eino/schema"
|
|
"github.com/lib/pq"
|
|
)
|
|
|
|
type Conversation struct {
|
|
ID string `json:"id"`
|
|
Nonce string `json:"nonce"`
|
|
|
|
KBID string `json:"kb_id" gorm:"index"`
|
|
AppID string `json:"app_id" gorm:"index"`
|
|
|
|
Subject string `json:"subject"` // subject for conversation, now is first question
|
|
|
|
RemoteIP string `json:"remote_ip"`
|
|
Info ConversationInfo `json:"info" gorm:"type:jsonb"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
}
|
|
|
|
type ConversationMessage struct {
|
|
ID string `json:"id" gorm:"primaryKey"`
|
|
ConversationID string `json:"conversation_id" gorm:"index"`
|
|
AppID string `json:"app_id" gorm:"index"`
|
|
KBID string `json:"kb_id"`
|
|
|
|
Role schema.RoleType `json:"role"`
|
|
Content string `json:"content"`
|
|
ImagePaths pq.StringArray `json:"image_paths" gorm:"type:text[];not null;default:{}"`
|
|
|
|
// model
|
|
Provider ModelProvider `json:"provider"`
|
|
Model string `json:"model"`
|
|
PromptTokens int `json:"prompt_tokens" gorm:"default:0"`
|
|
CompletionTokens int `json:"completion_tokens" gorm:"default:0"`
|
|
TotalTokens int `json:"total_tokens" gorm:"default:0"`
|
|
|
|
// stats
|
|
RemoteIP string `json:"remote_ip"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
|
|
// feedbackinfo
|
|
Info FeedBackInfo `json:"info" gorm:"column:info;type:jsonb"`
|
|
|
|
// parent_id
|
|
ParentID string `json:"parent_id"`
|
|
}
|
|
|
|
type FeedBackInfo struct {
|
|
Score ScoreType `json:"score"`
|
|
FeedbackType FeedbackType `json:"feedback_type"`
|
|
FeedbackContent string `json:"feedback_content"`
|
|
}
|
|
|
|
func (f *FeedBackInfo) Value() (driver.Value, error) {
|
|
return json.Marshal(f)
|
|
}
|
|
|
|
func (f *FeedBackInfo) Scan(value any) error {
|
|
b, ok := value.([]byte)
|
|
if !ok {
|
|
return errors.New("invalid feed back info type")
|
|
}
|
|
return json.Unmarshal(b, &f)
|
|
}
|
|
|
|
type ConversationReference struct {
|
|
ConversationID string `json:"conversation_id" gorm:"index"`
|
|
AppID string `json:"app_id"`
|
|
|
|
NodeID string `json:"node_id"`
|
|
Name string `json:"name"`
|
|
URL string `json:"url"`
|
|
}
|
|
|
|
type ConversationListReq struct {
|
|
KBID string `json:"kb_id" query:"kb_id" validate:"required"`
|
|
AppID *string `json:"app_id" query:"app_id"`
|
|
|
|
Subject *string `json:"subject" query:"subject"`
|
|
|
|
RemoteIP *string `json:"remote_ip" query:"remote_ip"`
|
|
|
|
Pager
|
|
}
|
|
|
|
type ConversationListItem struct {
|
|
ID string `json:"id"`
|
|
AppName string `json:"app_name"`
|
|
Info ConversationInfo `json:"info" gorm:"info;type:jsonb"` // 用户信息
|
|
AppType AppType `json:"app_type"`
|
|
Subject string `json:"subject"`
|
|
|
|
RemoteIP string `json:"remote_ip"`
|
|
|
|
IPAddress *IPAddress `json:"ip_address" gorm:"-"`
|
|
|
|
CreatedAt time.Time `json:"created_at"`
|
|
|
|
FeedBackInfo *FeedBackInfo `json:"feedback_info" gorm:"-"` // 用户反馈信息
|
|
}
|
|
|
|
type ConversationDetailResp struct {
|
|
ID string `json:"id"`
|
|
AppID string `json:"app_id"`
|
|
Subject string `json:"subject"`
|
|
RemoteIP string `json:"remote_ip"`
|
|
|
|
Messages []*ConversationMessage `json:"messages" gorm:"-"`
|
|
References []*ConversationReference `json:"references" gorm:"-"`
|
|
|
|
IPAddress *IPAddress `json:"ip_address" gorm:"-"`
|
|
|
|
CreatedAt time.Time `json:"created_at"`
|
|
}
|
|
|
|
type MessageListReq struct {
|
|
KBID string `json:"kb_id" query:"kb_id" validate:"required"`
|
|
Pager
|
|
}
|
|
|
|
type ConversationMessageListItem struct {
|
|
ID string `json:"id"`
|
|
ConversationID string `json:"conversation_id"`
|
|
AppID string `json:"app_id"`
|
|
AppType AppType `json:"app_type"`
|
|
|
|
Question string `json:"question"`
|
|
|
|
// stats
|
|
RemoteIP string `json:"remote_ip"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
|
|
// userInfo
|
|
ConversationInfo ConversationInfo `json:"conversation_info" gorm:"column:conversation_info;type:jsonb"`
|
|
// feedbackInfo
|
|
Info FeedBackInfo `json:"info" gorm:"column:info;type:jsonb"`
|
|
|
|
IPAddress *IPAddress `json:"ip_address" gorm:"-"`
|
|
}
|
|
|
|
type ShareConversationDetailResp struct {
|
|
ID string `json:"id"`
|
|
Subject string `json:"subject"`
|
|
Messages []*ShareConversationMessage `json:"messages" gorm:"-"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
}
|
|
|
|
type ShareConversationMessage struct {
|
|
Role schema.RoleType `json:"role"`
|
|
Content string `json:"content"`
|
|
ImagePaths pq.StringArray `json:"image_paths"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
}
|