Ctrl K
ComunidadGuías…

internal/domain/ai.go

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
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
}