149 lines
3.6 KiB
Go
149 lines
3.6 KiB
Go
package domain
|
|
|
|
import "errors"
|
|
|
|
const (
|
|
// AICompose 最大文本长度沿用普通消息正文限制,避免 provider 请求被客户端巨大值打爆。
|
|
MaxAIComposeTextLength = MaxMessageTextLength
|
|
// MaxAIComposeEntityCount 限制 TextWithEntities 的实体数量。
|
|
MaxAIComposeEntityCount = MaxMessageEntityCount
|
|
// AICompose tone 的 appConfig 默认值与 TDesktop/DrKLO 消费点一致。
|
|
MaxAIComposeToneTitleLength = 12
|
|
MaxAIComposeTonePromptLength = 1024
|
|
AIComposeToneSavedLimitDefault = 5
|
|
AIComposeToneSavedLimitPremium = 20
|
|
AIComposeToneExamplesNum = 3
|
|
)
|
|
|
|
var (
|
|
ErrAIComposeDisabled = errors.New("ai compose disabled")
|
|
ErrAIComposeInvalid = errors.New("ai compose invalid")
|
|
ErrAIComposeToneInvalid = errors.New("ai compose tone invalid")
|
|
ErrAIComposeToneNotFound = errors.New("ai compose tone not found")
|
|
ErrAIComposeToneLimitExceeded = errors.New("ai compose tone limit exceeded")
|
|
ErrAIComposeRateLimited = errors.New("ai compose rate limited")
|
|
ErrAIComposeProviderUnavailable = errors.New("ai compose provider unavailable")
|
|
ErrAIComposeProviderTimeout = errors.New("ai compose provider timeout")
|
|
)
|
|
|
|
type AIComposeText struct {
|
|
Text string
|
|
Entities []MessageEntity
|
|
}
|
|
|
|
func (t AIComposeText) Clone() AIComposeText {
|
|
out := t
|
|
out.Entities = append([]MessageEntity(nil), t.Entities...)
|
|
return out
|
|
}
|
|
|
|
type AIComposeToneRefKind string
|
|
|
|
const (
|
|
AIComposeToneRefDefault AIComposeToneRefKind = "default"
|
|
AIComposeToneRefID AIComposeToneRefKind = "id"
|
|
AIComposeToneRefSlug AIComposeToneRefKind = "slug"
|
|
)
|
|
|
|
type AIComposeToneRef struct {
|
|
Kind AIComposeToneRefKind
|
|
DefaultTone string
|
|
ID int64
|
|
AccessHash int64
|
|
Slug string
|
|
}
|
|
|
|
func (r AIComposeToneRef) Empty() bool {
|
|
return r.Kind == "" && r.DefaultTone == "" && r.ID == 0 && r.Slug == ""
|
|
}
|
|
|
|
type AIComposeRequest struct {
|
|
UserID int64
|
|
Text AIComposeText
|
|
Proofread bool
|
|
Emojify bool
|
|
TranslateToLang string
|
|
Tone AIComposeToneRef
|
|
}
|
|
|
|
type AIComposeResult struct {
|
|
ResultText AIComposeText
|
|
DiffText *AIComposeText
|
|
}
|
|
|
|
type AITextGenerationRequest struct {
|
|
UserID int64
|
|
Text AIComposeText
|
|
Instruction string
|
|
}
|
|
|
|
type AIComposeTone struct {
|
|
Default bool
|
|
Creator bool
|
|
ID int64
|
|
AccessHash int64
|
|
OwnerUserID int64
|
|
Slug string
|
|
Title string
|
|
EmojiID int64
|
|
Prompt string
|
|
InstallsCount int
|
|
AuthorID int64
|
|
DisplayAuthor bool
|
|
CreatedAt int64
|
|
UpdatedAt int64
|
|
Saved bool
|
|
ExampleEnglish *AIComposeToneExample
|
|
}
|
|
|
|
func (t AIComposeTone) Clone() AIComposeTone {
|
|
out := t
|
|
if t.ExampleEnglish != nil {
|
|
ex := t.ExampleEnglish.Clone()
|
|
out.ExampleEnglish = &ex
|
|
}
|
|
return out
|
|
}
|
|
|
|
type AIComposeToneExample struct {
|
|
From AIComposeText
|
|
To AIComposeText
|
|
}
|
|
|
|
func (e AIComposeToneExample) Clone() AIComposeToneExample {
|
|
return AIComposeToneExample{
|
|
From: e.From.Clone(),
|
|
To: e.To.Clone(),
|
|
}
|
|
}
|
|
|
|
type AIComposeToneInput struct {
|
|
UserID int64
|
|
DisplayAuthor bool
|
|
EmojiID int64
|
|
Title string
|
|
Prompt string
|
|
}
|
|
|
|
type AIComposeToneUpdate struct {
|
|
Ref AIComposeToneRef
|
|
UserID int64
|
|
DisplayAuthor *bool
|
|
EmojiID *int64
|
|
Title *string
|
|
Prompt *string
|
|
}
|
|
|
|
type AIComposeTones struct {
|
|
Hash int64
|
|
Tones []AIComposeTone
|
|
}
|
|
|
|
func (t AIComposeTones) Clone() AIComposeTones {
|
|
out := t
|
|
out.Tones = make([]AIComposeTone, 0, len(t.Tones))
|
|
for _, tone := range t.Tones {
|
|
out.Tones = append(out.Tones, tone.Clone())
|
|
}
|
|
return out
|
|
}
|