package domain import "errors" const ( // The maximum AICompose text length follows the normal message body limit, so a huge client value cannot blow up the provider request. MaxAIComposeTextLength = MaxMessageTextLength // MaxAIComposeEntityCount limits the number of entities in TextWithEntities. MaxAIComposeEntityCount = MaxMessageEntityCount // The appConfig defaults for AICompose tones match the TDesktop/DrKLO consumers. 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 }