fix: preserve conversation model_key when creating new conversation and loading existing ones
This commit is contained in:
parent
c2d460a706
commit
fd8decc3c3
@ -36,7 +36,9 @@ 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):
|
||||
if conv_id:
|
||||
result = self.load_conversation(conv_id)
|
||||
if result.get("success"):
|
||||
print(f"[WebTerminal] 已加载最近对话: {conv_id}")
|
||||
return
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user