feat: add configurable generation timeout
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
@@ -44,6 +44,34 @@ func New(s store.Store, dataDir string, logger *logrus.Logger, llmEndpoint, llmK
|
||||
}
|
||||
}
|
||||
|
||||
func normalizeSettings(settings *store.Settings) {
|
||||
// Default Text Generation Timeout
|
||||
if settings.TextGenerationTimeoutMinutes == 0 {
|
||||
settings.TextGenerationTimeoutMinutes = 5
|
||||
}
|
||||
|
||||
// Validate Text Generation Timeout
|
||||
switch settings.TextGenerationTimeoutMinutes {
|
||||
case 1, 5, 10, 15, 30:
|
||||
return
|
||||
default:
|
||||
settings.TextGenerationTimeoutMinutes = 5
|
||||
}
|
||||
}
|
||||
|
||||
func (a *API) textGenerationTimeout() time.Duration {
|
||||
// Load Settings
|
||||
settings, err := a.store.GetSettings()
|
||||
if err != nil {
|
||||
a.logger.WithError(err).Error("failed to retrieve settings for text generation timeout")
|
||||
return 5 * time.Minute
|
||||
}
|
||||
|
||||
// Normalize Timeout
|
||||
normalizeSettings(settings)
|
||||
return time.Duration(settings.TextGenerationTimeoutMinutes) * time.Minute
|
||||
}
|
||||
|
||||
func (a *API) GetSettings(w http.ResponseWriter, r *http.Request) {
|
||||
log := a.logger.WithField("handler", "GetSettingsHandler")
|
||||
|
||||
@@ -54,6 +82,9 @@ func (a *API) GetSettings(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
|
||||
// Normalize Settings
|
||||
normalizeSettings(settings)
|
||||
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
if err := json.NewEncoder(w).Encode(settings); err != nil {
|
||||
log.WithError(err).Error("failed to encode application settings response")
|
||||
@@ -72,6 +103,9 @@ func (a *API) PostSettings(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
|
||||
// Normalize Settings
|
||||
normalizeSettings(&newSettings)
|
||||
|
||||
if err := a.store.SaveSettings(&newSettings); err != nil {
|
||||
log.WithError(err).Error("failed to save settings")
|
||||
http.Error(w, "Failed to save application settings", http.StatusInternalServerError)
|
||||
@@ -589,7 +623,7 @@ func (a *API) startMessageGeneration(chatID uuid.UUID, chatModel, userMessage st
|
||||
|
||||
func (a *API) runMessageGeneration(apiClient *client.Client, chat *store.Chat, assistantMsg *store.Message, chatModel string, gen *generation) {
|
||||
// Create Generation Context
|
||||
ctx, cancel := context.WithTimeout(gen.ctx, time.Minute*5)
|
||||
ctx, cancel := context.WithTimeout(gen.ctx, a.textGenerationTimeout())
|
||||
defer cancel()
|
||||
|
||||
// Send Message
|
||||
|
||||
Reference in New Issue
Block a user