From fd8decc3c344c9657b3d5bc2a5b12934b1bb7ebe Mon Sep 17 00:00:00 2001 From: JOJO <1498581755@qq.com> Date: Fri, 19 Jun 2026 01:08:46 +0800 Subject: [PATCH] fix: preserve conversation model_key when creating new conversation and loading existing ones --- core/web_terminal.py | 58 ++++++++++++++++++++++++++++++++------------ 1 file changed, 43 insertions(+), 15 deletions(-) diff --git a/core/web_terminal.py b/core/web_terminal.py index 249bd02..35f3ddd 100644 --- a/core/web_terminal.py +++ b/core/web_terminal.py @@ -36,9 +36,11 @@ class WebTerminal(MainTerminal): if conversations: latest = conversations[0] conv_id = latest.get("id") - if conv_id and self.context_manager.load_conversation_by_id(conv_id): - print(f"[WebTerminal] 已加载最近对话: {conv_id}") - return + if conv_id: + result = self.load_conversation(conv_id) + if result.get("success"): + print(f"[WebTerminal] 已加载最近对话: {conv_id}") + return conversation_id = self.context_manager.start_new_conversation( project_path=self.project_path, @@ -112,23 +114,16 @@ class WebTerminal(MainTerminal): """ prefer_defaults = thinking_mode is None and run_mode is None thinking_mode_explicit = thinking_mode is not None + + # 先加载个性化默认配置(用于 start_new_conversation 的 metadata) + prefs = {} + preferred_model = None if prefer_defaults: - # 优先回到个性化/默认配置;没有配置时退回快速模式 + 默认模型 try: prefs = load_personalization_config(self.data_dir) except Exception as exc: - prefs = {} logger.warning("加载个性化偏好失败,将使用内置默认: %s", exc) - - # 新对话视为“干净”会话,清除图片限制便于切换模型 - self.context_manager.has_images = False - preferred_model = prefs.get("default_model") - try: - self.set_model(preferred_model) - except Exception as exc: - logger.warning("忽略无效默认模型 %s: %s", preferred_model, exc) - preferred_mode = prefs.get("default_run_mode") preferred_permission_mode = prefs.get("default_permission_mode") or None if preferred_permission_mode not in ("readonly", "approval", "auto_approval", "unrestricted"): @@ -150,7 +145,6 @@ class WebTerminal(MainTerminal): self.set_permission_mode(preferred_permission_mode, persist=False) except Exception: self.set_permission_mode("unrestricted", persist=False) - thinking_mode = self.thinking_mode if isinstance(run_mode, str): try: @@ -169,6 +163,8 @@ class WebTerminal(MainTerminal): thinking_mode = self.thinking_mode try: + # 先创建新对话。start_new_conversation 会先 save_current_conversation(), + # 此时 terminal.model_key 仍是旧对话的模型,避免把旧对话覆盖成默认模型。 conversation_id = self.context_manager.start_new_conversation( project_path=self.project_path, thinking_mode=thinking_mode, @@ -183,6 +179,32 @@ class WebTerminal(MainTerminal): }, ) + # 新对话创建完成后再应用默认模型(此时旧对话已安全保存)。 + if prefer_defaults and preferred_model: + # 新对话视为“干净”会话,清除图片限制便于切换模型 + self.context_manager.has_images = False + self.context_manager.has_videos = False + try: + self.set_model(preferred_model) + except Exception as exc: + logger.warning("忽略无效默认模型 %s: %s", preferred_model, exc) + + # 把默认模型同步到新对话的 metadata + try: + self.context_manager.conversation_manager.save_conversation( + conversation_id=conversation_id, + messages=self.context_manager.conversation_history, + project_path=str(self.project_path), + todo_list=self.context_manager.todo_list, + thinking_mode=self.thinking_mode, + run_mode=self.run_mode, + model_key=self.model_key, + has_images=False, + has_videos=False, + ) + except Exception as exc: + logger.warning("保存新对话默认模型失败: %s", exc) + # 重置相关状态 if self.thinking_mode: self.api_client.start_new_task() @@ -240,6 +262,12 @@ class WebTerminal(MainTerminal): self.set_network_permission(network_permission) except Exception: pass + saved_model_key = meta.get("model_key") + if saved_model_key: + try: + self.set_model(saved_model_key) + except Exception as exc: + logger.warning("加载对话模型 %s 失败: %s", saved_model_key, exc) self.pending_permission_mode = str(meta.get("pending_permission_mode") or "").strip().lower() or None self.pending_execution_mode = str(meta.get("pending_execution_mode") or "").strip().lower() or None self.pending_network_permission = str(meta.get("pending_network_permission") or "").strip().lower() or None