From 9399d3f41e1d8a6d5562cb75aa4cab727f7e5e15 Mon Sep 17 00:00:00 2001 From: JOJO <1498581755@qq.com> Date: Tue, 2 Jun 2026 20:36:51 +0800 Subject: [PATCH] fix(models): preserve session model selection --- core/main_terminal_parts/tools_policy.py | 4 ++-- server/context.py | 24 +++++++++++++++++++++++- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/core/main_terminal_parts/tools_policy.py b/core/main_terminal_parts/tools_policy.py index b0652df..cdec0ea 100644 --- a/core/main_terminal_parts/tools_policy.py +++ b/core/main_terminal_parts/tools_policy.py @@ -116,7 +116,7 @@ class MainTerminalToolsPolicyMixin: continue self.tool_category_states[key] = bool(value) - def apply_personalization_preferences(self, config: Optional[Dict[str, Any]] = None): + def apply_personalization_preferences(self, config: Optional[Dict[str, Any]] = None, *, apply_default_model: bool = True): """Apply persisted personalization settings that affect runtime behavior.""" try: effective_config = config or load_personalization_config(self.data_dir) @@ -176,7 +176,7 @@ class MainTerminalToolsPolicyMixin: # 默认模型偏好(优先应用,再处理运行模式) preferred_model = effective_config.get("default_model") - if isinstance(preferred_model, str) and preferred_model != self.model_key: + if apply_default_model and isinstance(preferred_model, str) and preferred_model != self.model_key: try: self.set_model(preferred_model) except Exception as exc: diff --git a/server/context.py b/server/context.py index 58709a8..b38d4ef 100644 --- a/server/context.py +++ b/server/context.py @@ -67,7 +67,29 @@ def _apply_workspace_personalization_preferences(terminal: WebTerminal, workspac """Apply persisted workspace personalization after policy/workspace resolution.""" try: config = load_personalization_config(workspace.data_dir) - terminal.apply_personalization_preferences(config) + session_model = None + if has_request_context(): + raw_session_model = session.get("model_key") + if isinstance(raw_session_model, str) and raw_session_model.strip(): + session_model = raw_session_model.strip() + + # default_model 是“新会话初始偏好”,不能在每次 /api/status、任务创建、 + # 加载资源时覆盖用户已经在当前会话里手动切换的模型。 + if session_model and session_model != getattr(terminal, "model_key", None): + try: + terminal.set_model(session_model) + except Exception as exc: + debug_log(f"[Personalization] 恢复会话模型失败: {session_model} ({exc})") + + apply_default_model = not bool(session_model) and not bool( + getattr(terminal, "_workspace_default_model_applied", False) + ) + terminal.apply_personalization_preferences(config, apply_default_model=apply_default_model) + if apply_default_model: + try: + terminal._workspace_default_model_applied = True + except Exception: + pass if has_request_context(): session["run_mode"] = getattr(terminal, "run_mode", session.get("run_mode")) session["thinking_mode"] = getattr(terminal, "thinking_mode", session.get("thinking_mode"))