mirror of
https://github.com/mattermost/mattermost.git
synced 2026-09-19 10:12:47 +08:00
Use one timeout config for requests to translation providers (#34957)
This commit is contained in:
+2
-14
@@ -9905,20 +9905,8 @@
|
||||
"translation": "Unsupported autotranslation provider."
|
||||
},
|
||||
{
|
||||
"id": "model.config.is_valid.autotranslation.timeouts.long.app_error",
|
||||
"translation": "Invalid long timeout for autotranslation settings. Must be a positive number."
|
||||
},
|
||||
{
|
||||
"id": "model.config.is_valid.autotranslation.timeouts.medium.app_error",
|
||||
"translation": "Invalid medium timeout for autotranslation settings. Must be a positive number."
|
||||
},
|
||||
{
|
||||
"id": "model.config.is_valid.autotranslation.timeouts.notification.app_error",
|
||||
"translation": "Invalid notification timeout for autotranslation settings. Must be a positive number."
|
||||
},
|
||||
{
|
||||
"id": "model.config.is_valid.autotranslation.timeouts.short.app_error",
|
||||
"translation": "Invalid short timeout for autotranslation settings. Must be a positive number."
|
||||
"id": "model.config.is_valid.autotranslation.timeout.app_error",
|
||||
"translation": "Invalid timeout for autotranslation settings. Must be a positive number."
|
||||
},
|
||||
{
|
||||
"id": "model.config.is_valid.cache_type.app_error",
|
||||
|
||||
@@ -2787,24 +2787,11 @@ type AutoTranslationSettings struct {
|
||||
Enable *bool `access:"site_localization,cloud_restrictable"`
|
||||
Provider *string `access:"site_localization,cloud_restrictable"`
|
||||
TargetLanguages *[]string `access:"site_localization,cloud_restrictable"`
|
||||
TimeoutsMs *AutoTranslationTimeoutsInMs `access:"site_localization,cloud_restrictable"`
|
||||
TimeoutMs *int `access:"site_localization,cloud_restrictable"`
|
||||
LibreTranslate *LibreTranslateProviderSettings `access:"site_localization,cloud_restrictable"`
|
||||
Agents *AgentsProviderSettings `access:"site_localization,cloud_restrictable"`
|
||||
}
|
||||
|
||||
// AutoTranslationTimeoutsInMs defines content-aware timeout thresholds.
|
||||
// Based on LibreTranslate benchmark findings, timeouts are set according to content length:
|
||||
// - Short: ≤200 runes
|
||||
// - Medium: ≤500 runes
|
||||
// - Long: >500 runes
|
||||
// - Notification: preserved for notification-specific timeout requirements
|
||||
type AutoTranslationTimeoutsInMs struct {
|
||||
Short *int `access:"site_localization,cloud_restrictable"` // ≤200 runes, default: 1200ms
|
||||
Medium *int `access:"site_localization,cloud_restrictable"` // ≤500 runes, default: 2500ms
|
||||
Long *int `access:"site_localization,cloud_restrictable"` // >500 runes, default: 6000ms
|
||||
Notification *int `access:"site_localization,cloud_restrictable"` // Notification timeout, default: 300ms
|
||||
}
|
||||
|
||||
// LibreTranslateProviderSettings configures the LibreTranslate translation provider.
|
||||
type LibreTranslateProviderSettings struct {
|
||||
URL *string `access:"site_localization,cloud_restrictable"` // LibreTranslate server URL
|
||||
@@ -2828,10 +2815,9 @@ func (s *AutoTranslationSettings) SetDefaults() {
|
||||
s.TargetLanguages = &[]string{"en"}
|
||||
}
|
||||
|
||||
if s.TimeoutsMs == nil {
|
||||
s.TimeoutsMs = &AutoTranslationTimeoutsInMs{}
|
||||
if s.TimeoutMs == nil {
|
||||
s.TimeoutMs = NewPointer(5000)
|
||||
}
|
||||
s.TimeoutsMs.SetDefaults()
|
||||
|
||||
if s.LibreTranslate == nil {
|
||||
s.LibreTranslate = &LibreTranslateProviderSettings{}
|
||||
@@ -2844,24 +2830,6 @@ func (s *AutoTranslationSettings) SetDefaults() {
|
||||
s.Agents.SetDefaults()
|
||||
}
|
||||
|
||||
func (s *AutoTranslationTimeoutsInMs) SetDefaults() {
|
||||
if s.Short == nil {
|
||||
s.Short = NewPointer(1200)
|
||||
}
|
||||
|
||||
if s.Medium == nil {
|
||||
s.Medium = NewPointer(2500)
|
||||
}
|
||||
|
||||
if s.Long == nil {
|
||||
s.Long = NewPointer(6000)
|
||||
}
|
||||
|
||||
if s.Notification == nil {
|
||||
s.Notification = NewPointer(300)
|
||||
}
|
||||
}
|
||||
|
||||
func (s *LibreTranslateProviderSettings) SetDefaults() {
|
||||
if s.URL == nil {
|
||||
s.URL = NewPointer("")
|
||||
@@ -4850,20 +4818,9 @@ func (s *AutoTranslationSettings) isValid() *AppError {
|
||||
return NewAppError("Config.IsValid", "model.config.is_valid.autotranslation.provider.unsupported.app_error", nil, "", http.StatusBadRequest)
|
||||
}
|
||||
|
||||
// Validate timeouts if set
|
||||
if s.TimeoutsMs != nil {
|
||||
if s.TimeoutsMs.Short != nil && *s.TimeoutsMs.Short <= 0 {
|
||||
return NewAppError("Config.IsValid", "model.config.is_valid.autotranslation.timeouts.short.app_error", nil, "", http.StatusBadRequest)
|
||||
}
|
||||
if s.TimeoutsMs.Medium != nil && *s.TimeoutsMs.Medium <= 0 {
|
||||
return NewAppError("Config.IsValid", "model.config.is_valid.autotranslation.timeouts.medium.app_error", nil, "", http.StatusBadRequest)
|
||||
}
|
||||
if s.TimeoutsMs.Long != nil && *s.TimeoutsMs.Long <= 0 {
|
||||
return NewAppError("Config.IsValid", "model.config.is_valid.autotranslation.timeouts.long.app_error", nil, "", http.StatusBadRequest)
|
||||
}
|
||||
if s.TimeoutsMs.Notification != nil && *s.TimeoutsMs.Notification <= 0 {
|
||||
return NewAppError("Config.IsValid", "model.config.is_valid.autotranslation.timeouts.notification.app_error", nil, "", http.StatusBadRequest)
|
||||
}
|
||||
// Validate timeout if set (must be positive)
|
||||
if s.TimeoutMs != nil && *s.TimeoutMs <= 0 {
|
||||
return NewAppError("Config.IsValid", "model.config.is_valid.autotranslation.timeout.app_error", nil, "", http.StatusBadRequest)
|
||||
}
|
||||
|
||||
return nil
|
||||
|
||||
@@ -2649,10 +2649,7 @@ func TestAutoTranslationSettingsDefaults(t *testing.T) {
|
||||
|
||||
require.False(t, *c.AutoTranslationSettings.Enable)
|
||||
require.Equal(t, "", *c.AutoTranslationSettings.Provider)
|
||||
require.Equal(t, 1200, *c.AutoTranslationSettings.TimeoutsMs.Short)
|
||||
require.Equal(t, 2500, *c.AutoTranslationSettings.TimeoutsMs.Medium)
|
||||
require.Equal(t, 6000, *c.AutoTranslationSettings.TimeoutsMs.Long)
|
||||
require.Equal(t, 300, *c.AutoTranslationSettings.TimeoutsMs.Notification)
|
||||
require.Equal(t, 5000, *c.AutoTranslationSettings.TimeoutMs)
|
||||
require.Equal(t, "", *c.AutoTranslationSettings.LibreTranslate.URL)
|
||||
require.Equal(t, "", *c.AutoTranslationSettings.LibreTranslate.APIKey)
|
||||
// TODO: Enable Agents provider in future release
|
||||
|
||||
Reference in New Issue
Block a user