From 9f587160dec5379b12731fa1af9013c787833d65 Mon Sep 17 00:00:00 2001 From: locnguyen1986 Date: Thu, 18 Dec 2025 18:18:44 +0700 Subject: [PATCH 1/2] setting improve --- .../domain/usersettings/user_settings.go | 52 ++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/services/llm-api/internal/domain/usersettings/user_settings.go b/services/llm-api/internal/domain/usersettings/user_settings.go index bff15c42..6015c1dd 100644 --- a/services/llm-api/internal/domain/usersettings/user_settings.go +++ b/services/llm-api/internal/domain/usersettings/user_settings.go @@ -119,6 +119,43 @@ func DefaultPreferences() map[string]interface{} { } } +// ValidateAndNormalizePreferences validates preference values and applies special rules. +// Rules: +// 1. If enable_deep_research=true, then enable_search and enable_thinking must be true +// 2. If enable_browser=true, then enable_deep_research and enable_search must be false +func ValidateAndNormalizePreferences(prefs map[string]interface{}) error { + if prefs == nil { + return nil + } + + // Helper function to get bool value + getBool := func(key string) bool { + if val, ok := prefs[key]; ok { + if b, ok := val.(bool); ok { + return b + } + } + return false + } + + enableDeepResearch := getBool("enable_deep_research") + enableBrowser := getBool("enable_browser") + + // Rule 1: If enable_deep_research=true, enforce enable_search and enable_thinking to be true + if enableDeepResearch { + prefs["enable_search"] = true + prefs["enable_thinking"] = true + } + + // Rule 2: If enable_browser=true, enforce enable_deep_research and enable_search to be false + if enableBrowser { + prefs["enable_deep_research"] = false + prefs["enable_search"] = false + } + + return nil +} + // DefaultUserSettings returns settings with safe defaults. func DefaultUserSettings(userID uint) *UserSettings { return &UserSettings{ @@ -160,7 +197,13 @@ func (s *UserSettings) Apply(req UpdateRequest) { s.EnableTools = *req.EnableTools } if req.Preferences != nil { - s.Preferences = req.Preferences + // Merge preferences instead of replacing them + if s.Preferences == nil { + s.Preferences = DefaultPreferences() + } + for key, value := range req.Preferences { + s.Preferences[key] = value + } } } @@ -276,6 +319,13 @@ func (s *Service) UpdateSettings(ctx context.Context, userID uint, req UpdateReq return nil, err } + // Validate and normalize preferences before applying + if req.Preferences != nil { + if err := ValidateAndNormalizePreferences(req.Preferences); err != nil { + return nil, err + } + } + settings.Apply(req) if err := s.repo.Update(ctx, settings); err != nil { From dc667de83b653383f982b961e01a142774cda6c0 Mon Sep 17 00:00:00 2001 From: locnguyen1986 Date: Thu, 18 Dec 2025 18:28:32 +0700 Subject: [PATCH 2/2] remove hard code rules --- .../domain/usersettings/user_settings.go | 44 ------------------- 1 file changed, 44 deletions(-) diff --git a/services/llm-api/internal/domain/usersettings/user_settings.go b/services/llm-api/internal/domain/usersettings/user_settings.go index 6015c1dd..28ef347a 100644 --- a/services/llm-api/internal/domain/usersettings/user_settings.go +++ b/services/llm-api/internal/domain/usersettings/user_settings.go @@ -119,43 +119,6 @@ func DefaultPreferences() map[string]interface{} { } } -// ValidateAndNormalizePreferences validates preference values and applies special rules. -// Rules: -// 1. If enable_deep_research=true, then enable_search and enable_thinking must be true -// 2. If enable_browser=true, then enable_deep_research and enable_search must be false -func ValidateAndNormalizePreferences(prefs map[string]interface{}) error { - if prefs == nil { - return nil - } - - // Helper function to get bool value - getBool := func(key string) bool { - if val, ok := prefs[key]; ok { - if b, ok := val.(bool); ok { - return b - } - } - return false - } - - enableDeepResearch := getBool("enable_deep_research") - enableBrowser := getBool("enable_browser") - - // Rule 1: If enable_deep_research=true, enforce enable_search and enable_thinking to be true - if enableDeepResearch { - prefs["enable_search"] = true - prefs["enable_thinking"] = true - } - - // Rule 2: If enable_browser=true, enforce enable_deep_research and enable_search to be false - if enableBrowser { - prefs["enable_deep_research"] = false - prefs["enable_search"] = false - } - - return nil -} - // DefaultUserSettings returns settings with safe defaults. func DefaultUserSettings(userID uint) *UserSettings { return &UserSettings{ @@ -319,13 +282,6 @@ func (s *Service) UpdateSettings(ctx context.Context, userID uint, req UpdateReq return nil, err } - // Validate and normalize preferences before applying - if req.Preferences != nil { - if err := ValidateAndNormalizePreferences(req.Preferences); err != nil { - return nil, err - } - } - settings.Apply(req) if err := s.repo.Update(ctx, settings); err != nil {