97 lines
3.6 KiB
Go
97 lines
3.6 KiB
Go
package domain
|
||
|
||
import (
|
||
"errors"
|
||
"time"
|
||
)
|
||
|
||
var (
|
||
ErrNotFound = errors.New("inspire not found")
|
||
ErrForbidden = errors.New("inspire forbidden")
|
||
ErrValidation = errors.New("inspire validation")
|
||
ErrRemoved = errors.New("legacy inspire API removed")
|
||
)
|
||
|
||
func NowNano() int64 { return time.Now().UTC().UnixNano() }
|
||
|
||
type TrendItem struct {
|
||
ID string `bson:"_id" json:"id"`
|
||
OwnerUID int64 `bson:"owner_uid" json:"owner_uid"` // 0 = global seed
|
||
Kind string `bson:"kind" json:"kind"`
|
||
Label string `bson:"label" json:"label"`
|
||
Summary string `bson:"summary" json:"summary"`
|
||
Heat int `bson:"heat" json:"heat"`
|
||
Keywords []string `bson:"keywords" json:"keywords"`
|
||
Samples []string `bson:"samples" json:"samples"`
|
||
SourceLabel string `bson:"source_label" json:"source_label"`
|
||
ObservedAt int64 `bson:"observed_at" json:"observed_at"`
|
||
}
|
||
|
||
type Element struct {
|
||
ID string `bson:"_id" json:"id"`
|
||
OwnerUID int64 `bson:"owner_uid" json:"owner_uid"`
|
||
Kind string `bson:"kind" json:"kind"`
|
||
Title string `bson:"title" json:"title"`
|
||
Body string `bson:"body" json:"body"`
|
||
RefID string `bson:"ref_id,omitempty" json:"ref_id,omitempty"`
|
||
Reusable bool `bson:"reusable" json:"reusable"`
|
||
CreatedAt int64 `bson:"created_at" json:"created_at"`
|
||
UpdatedAt int64 `bson:"updated_at" json:"updated_at"`
|
||
}
|
||
|
||
type ChatMessage struct {
|
||
ID string `bson:"id" json:"id"`
|
||
Role string `bson:"role" json:"role"` // user|assistant|system
|
||
Text string `bson:"text" json:"text"`
|
||
Draft *ChatDraft `bson:"draft,omitempty" json:"draft,omitempty"`
|
||
CreatedAt int64 `bson:"created_at" json:"created_at"`
|
||
}
|
||
|
||
type ChatDraft struct {
|
||
Title string `bson:"title,omitempty" json:"title,omitempty"`
|
||
Body string `bson:"body" json:"body"`
|
||
}
|
||
|
||
// Session — 一位會員可有多則靈感對話;active 由 Repository 的 active 指標維護。
|
||
type Session struct {
|
||
ID string `bson:"_id" json:"id"`
|
||
OwnerUID int64 `bson:"owner_uid" json:"owner_uid"`
|
||
Title string `bson:"title,omitempty" json:"title,omitempty"`
|
||
Messages []ChatMessage `bson:"messages" json:"messages"`
|
||
PinnedElementIDs []string `bson:"pinned_element_ids" json:"pinned_element_ids"`
|
||
// ContextSummary — 舊對話摺疊摘要;AI 無狀態,不能只靠「同一個 session」記住
|
||
// 每 inspireSummarizeEvery 則訊息才重算,平常只帶摘要 + 最近幾則
|
||
ContextSummary string `bson:"context_summary,omitempty" json:"context_summary,omitempty"`
|
||
SummaryMsgCount int `bson:"summary_msg_count,omitempty" json:"summary_msg_count,omitempty"`
|
||
CreatedAt int64 `bson:"created_at" json:"created_at"`
|
||
UpdatedAt int64 `bson:"updated_at" json:"updated_at"`
|
||
}
|
||
|
||
// SessionSummary — 列表用輕量摘要(不含完整 messages)。
|
||
type SessionSummary struct {
|
||
ID string `json:"id"`
|
||
Title string `json:"title"`
|
||
Preview string `json:"preview"`
|
||
MessageCount int `json:"message_count"`
|
||
UpdatedAt int64 `json:"updated_at"`
|
||
CreatedAt int64 `json:"created_at"`
|
||
Active bool `json:"active"`
|
||
}
|
||
|
||
type ResearchHit struct {
|
||
ID string `json:"id"`
|
||
Title string `json:"title"`
|
||
Snippet string `json:"snippet"`
|
||
URL string `json:"url"`
|
||
Summary string `json:"summary,omitempty"`
|
||
LearnPoints []string `json:"learn_points,omitempty"`
|
||
ReplyHooks []string `json:"reply_hooks,omitempty"`
|
||
SourceLabel string `json:"source_label,omitempty"`
|
||
}
|
||
|
||
type GeneratedImage struct {
|
||
ID string `json:"id"`
|
||
URL string `json:"url"`
|
||
Prompt string `json:"prompt"`
|
||
}
|