后端: 1.获取agent聊天历史记录接口做了如下更改: (1)对reasoning_content也做了存储,同步更改了mysql和redis缓存的读写逻辑 (2)为了承接前端的重试/修改消息的逻辑,进行了一些代码和表单上的改动 前端: 1.agent页面新增了很多小组件,改善交互体验 2.新增重试消息/修改消息并重新发送功能,前者有bug,可能前后端都有问题,待修复。
144 lines
7.2 KiB
Go
144 lines
7.2 KiB
Go
package model
|
|
|
|
import "time"
|
|
|
|
type UserSendMessageRequest struct {
|
|
ConversationID string `json:"conversation_id,omitempty"`
|
|
Message string `json:"message" binding:"required"`
|
|
Model string `json:"model,omitempty"`
|
|
Thinking bool `json:"thinking,omitempty"`
|
|
Extra map[string]any `json:"extra,omitempty"`
|
|
}
|
|
|
|
type ChatHistoryPersistPayload struct {
|
|
UserID int `json:"user_id"`
|
|
ConversationID string `json:"conversation_id"`
|
|
Role string `json:"role"`
|
|
Message string `json:"message"`
|
|
ReasoningContent string `json:"reasoning_content,omitempty"`
|
|
ReasoningDurationSeconds int `json:"reasoning_duration_seconds,omitempty"`
|
|
RetryGroupID *string `json:"retry_group_id,omitempty"`
|
|
RetryIndex *int `json:"retry_index,omitempty"`
|
|
RetryFromUserMessageID *int `json:"retry_from_user_message_id,omitempty"`
|
|
RetryFromAssistantMessageID *int `json:"retry_from_assistant_message_id,omitempty"`
|
|
TokensConsumed int `json:"tokens_consumed"`
|
|
}
|
|
|
|
type ChatTokenUsageAdjustPayload struct {
|
|
UserID int `json:"user_id"`
|
|
ConversationID string `json:"conversation_id"`
|
|
TokensDelta int `json:"tokens_delta"`
|
|
Reason string `json:"reason"`
|
|
TriggeredAt time.Time `json:"triggered_at"`
|
|
}
|
|
|
|
type GetConversationMetaResponse struct {
|
|
ConversationID string `json:"conversation_id"`
|
|
Title string `json:"title"`
|
|
HasTitle bool `json:"has_title"`
|
|
MessageCount int `json:"message_count"`
|
|
LastMessageAt *time.Time `json:"last_message_at,omitempty"`
|
|
Status string `json:"status"`
|
|
}
|
|
|
|
type GetConversationListItem struct {
|
|
ConversationID string `json:"conversation_id"`
|
|
Title string `json:"title"`
|
|
HasTitle bool `json:"has_title"`
|
|
MessageCount int `json:"message_count"`
|
|
LastMessageAt *time.Time `json:"last_message_at,omitempty"`
|
|
Status string `json:"status"`
|
|
CreatedAt *time.Time `json:"created_at,omitempty"`
|
|
}
|
|
|
|
type GetConversationListResponse struct {
|
|
List []GetConversationListItem `json:"list"`
|
|
Page int `json:"page"`
|
|
PageSize int `json:"page_size"`
|
|
Limit int `json:"limit"`
|
|
Total int64 `json:"total"`
|
|
HasMore bool `json:"has_more"`
|
|
}
|
|
|
|
type GetConversationHistoryItem struct {
|
|
ID int `json:"id,omitempty"`
|
|
Role string `json:"role"`
|
|
Content string `json:"content"`
|
|
CreatedAt *time.Time `json:"created_at,omitempty"`
|
|
ReasoningContent string `json:"reasoning_content,omitempty"`
|
|
ReasoningDurationSeconds int `json:"reasoning_duration_seconds,omitempty"`
|
|
RetryGroupID *string `json:"retry_group_id"`
|
|
RetryIndex *int `json:"retry_index"`
|
|
RetryTotal *int `json:"retry_total"`
|
|
}
|
|
|
|
type SchedulePlanPreviewCache struct {
|
|
UserID int `json:"user_id"`
|
|
ConversationID string `json:"conversation_id"`
|
|
TraceID string `json:"trace_id,omitempty"`
|
|
Summary string `json:"summary"`
|
|
CandidatePlans []UserWeekSchedule `json:"candidate_plans"`
|
|
TaskClassIDs []int `json:"task_class_ids,omitempty"`
|
|
HybridEntries []HybridScheduleEntry `json:"hybrid_entries,omitempty"`
|
|
AllocatedItems []TaskClassItem `json:"allocated_items,omitempty"`
|
|
GeneratedAt time.Time `json:"generated_at"`
|
|
}
|
|
|
|
type GetSchedulePlanPreviewResponse struct {
|
|
ConversationID string `json:"conversation_id"`
|
|
TraceID string `json:"trace_id,omitempty"`
|
|
Summary string `json:"summary"`
|
|
CandidatePlans []UserWeekSchedule `json:"candidate_plans"`
|
|
GeneratedAt time.Time `json:"generated_at"`
|
|
}
|
|
|
|
type SSEResponse struct {
|
|
Event string `json:"event"`
|
|
ID int `json:"id,omitempty"`
|
|
Retry int64 `json:"retry,omitempty"`
|
|
Data SSEMessageData `json:"data"`
|
|
}
|
|
|
|
type SSEMessageData struct {
|
|
Step int `json:"step,omitempty"`
|
|
Message string `json:"message,omitempty"`
|
|
}
|
|
|
|
type AgentChat struct {
|
|
ID int64 `gorm:"column:id;primaryKey;autoIncrement;comment:自增ID"`
|
|
ChatID string `gorm:"column:chat_id;type:varchar(36);not null;uniqueIndex:uk_chat_id;comment:会话UUID"`
|
|
UserID int `gorm:"column:user_id;not null;index:idx_user_last,priority:1;index:idx_user_status,priority:1;comment:所属用户ID"`
|
|
Title *string `gorm:"column:title;type:varchar(255);comment:会话标题"`
|
|
SystemPrompt *string `gorm:"column:system_prompt;type:text;comment:系统提示词"`
|
|
Model *string `gorm:"column:model;type:varchar(100);comment:模型标识"`
|
|
MessageCount int `gorm:"column:message_count;not null;default:0;comment:消息总数"`
|
|
TokensTotal int `gorm:"column:tokens_total;not null;default:0;comment:累计Token"`
|
|
LastMessageAt *time.Time `gorm:"column:last_message_at;comment:最后消息时间"`
|
|
Status string `gorm:"column:status;type:varchar(32);not null;default:active;index:idx_user_status,priority:2;comment:会话状态"`
|
|
CreatedAt *time.Time `gorm:"column:created_at;autoCreateTime"`
|
|
UpdatedAt *time.Time `gorm:"column:updated_at;autoUpdateTime"`
|
|
DeletedAt *time.Time `gorm:"column:deleted_at;comment:软删除时间"`
|
|
}
|
|
|
|
func (AgentChat) TableName() string { return "agent_chats" }
|
|
|
|
type ChatHistory struct {
|
|
ID int `gorm:"column:id;primaryKey;autoIncrement"`
|
|
ChatID string `gorm:"column:chat_id;type:varchar(36);not null;index:idx_user_chat,priority:2;index:idx_chat_id;comment:会话UUID"`
|
|
UserID int `gorm:"column:user_id;not null;index:idx_user_chat,priority:1"`
|
|
MessageContent *string `gorm:"column:message_content;type:text;comment:消息内容"`
|
|
ReasoningContent *string `gorm:"column:reasoning_content;type:text;comment:deep reasoning text"`
|
|
ReasoningDurationSeconds int `gorm:"column:reasoning_duration_seconds;not null;default:0;comment:deep reasoning duration seconds"`
|
|
RetryGroupID *string `gorm:"column:retry_group_id;type:varchar(64);index:idx_retry_group;comment:retry group id"`
|
|
RetryIndex *int `gorm:"column:retry_index;comment:retry page index"`
|
|
RetryFromUserMessageID *int `gorm:"column:retry_from_user_message_id;comment:source user message id"`
|
|
RetryFromAssistantMessageID *int `gorm:"column:retry_from_assistant_message_id;comment:source assistant message id"`
|
|
Role *string `gorm:"column:role;type:varchar(32);comment:消息角色"`
|
|
TokensConsumed int `gorm:"column:tokens_consumed;not null;default:0;comment:本轮消耗Token"`
|
|
CreatedAt *time.Time `gorm:"column:created_at;autoCreateTime"`
|
|
|
|
Chat AgentChat `gorm:"foreignKey:ChatID;references:ChatID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE"`
|
|
}
|
|
|
|
func (ChatHistory) TableName() string { return "chat_histories" }
|