feat: sync message translation support
This commit is contained in:
parent
cbccd6a8d9
commit
ea6cc72886
26 changed files with 1189 additions and 0 deletions
57
internal/domain/translation.go
Normal file
57
internal/domain/translation.go
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
package domain
|
||||
|
||||
import "errors"
|
||||
|
||||
const (
|
||||
// MaxTranslationTexts matches the largest batch currently issued by TDesktop's
|
||||
// whole-chat translation tracker.
|
||||
MaxTranslationTexts = 20
|
||||
// MaxTranslationInputBytes bounds one upstream request independently of the
|
||||
// MTProto frame limit. TDesktop starts a new batch at the same 24 KiB boundary.
|
||||
MaxTranslationInputBytes = 24 * 1024
|
||||
// MaxTranslationOutputBytes permits language expansion while bounding an
|
||||
// untrusted provider response before TL encoding.
|
||||
MaxTranslationOutputBytes = 4 * MaxTranslationInputBytes
|
||||
MaxTranslationToneRunes = 64
|
||||
)
|
||||
|
||||
var (
|
||||
ErrTranslationDisabled = errors.New("translation disabled")
|
||||
ErrTranslationInputEmpty = errors.New("translation input empty")
|
||||
ErrTranslationInputTooLong = errors.New("translation input too long")
|
||||
ErrTranslationLanguageInvalid = errors.New("translation language invalid")
|
||||
ErrTranslationMessageInvalid = errors.New("translation message invalid")
|
||||
ErrTranslationPeerInvalid = errors.New("translation peer invalid")
|
||||
ErrTranslationRateLimited = errors.New("translation rate limited")
|
||||
ErrTranslationProviderUnavailable = errors.New("translation provider unavailable")
|
||||
ErrTranslationTimeout = errors.New("translation timeout")
|
||||
)
|
||||
|
||||
// TranslationText is protocol-neutral text accepted or returned by the
|
||||
// translation service. Providers may omit entities when they cannot preserve
|
||||
// offsets safely; they must never return stale source offsets for changed text.
|
||||
type TranslationText struct {
|
||||
Text string
|
||||
Entities []MessageEntity
|
||||
}
|
||||
|
||||
func (t TranslationText) Clone() TranslationText {
|
||||
out := t
|
||||
out.Entities = append([]MessageEntity(nil), t.Entities...)
|
||||
return out
|
||||
}
|
||||
|
||||
type TranslationRequest struct {
|
||||
UserID int64
|
||||
// Peer+IDs selects stored messages. Texts selects caller-supplied text.
|
||||
// Exactly one mode must be used.
|
||||
Peer Peer
|
||||
IDs []int
|
||||
Texts []TranslationText
|
||||
ToLang string
|
||||
Tone string
|
||||
}
|
||||
|
||||
type TranslationResult struct {
|
||||
Texts []TranslationText
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue