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:
|
if conversations:
|
||||||
latest = conversations[0]
|
latest = conversations[0]
|
||||||
conv_id = latest.get("id")
|
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}")
|
print(f"[WebTerminal] 已加载最近对话: {conv_id}")
|
||||||
return
|
return
|
||||||
|
|
||||||
@ -112,23 +114,16 @@ class WebTerminal(MainTerminal):
|
|||||||
"""
|
"""
|
||||||
prefer_defaults = thinking_mode is None and run_mode is None
|
prefer_defaults = thinking_mode is None and run_mode is None
|
||||||
thinking_mode_explicit = thinking_mode is not None
|
thinking_mode_explicit = thinking_mode is not None
|
||||||
|
|
||||||
|
# 先加载个性化默认配置(用于 start_new_conversation 的 metadata)
|
||||||
|
prefs = {}
|
||||||
|
preferred_model = None
|
||||||
if prefer_defaults:
|
if prefer_defaults:
|
||||||
# 优先回到个性化/默认配置;没有配置时退回快速模式 + 默认模型
|
|
||||||
try:
|
try:
|
||||||
prefs = load_personalization_config(self.data_dir)
|
prefs = load_personalization_config(self.data_dir)
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
prefs = {}
|
|
||||||
logger.warning("加载个性化偏好失败,将使用内置默认: %s", exc)
|
logger.warning("加载个性化偏好失败,将使用内置默认: %s", exc)
|
||||||
|
|
||||||
# 新对话视为“干净”会话,清除图片限制便于切换模型
|
|
||||||
self.context_manager.has_images = False
|
|
||||||
|
|
||||||
preferred_model = prefs.get("default_model")
|
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_mode = prefs.get("default_run_mode")
|
||||||
preferred_permission_mode = prefs.get("default_permission_mode") or None
|
preferred_permission_mode = prefs.get("default_permission_mode") or None
|
||||||
if preferred_permission_mode not in ("readonly", "approval", "auto_approval", "unrestricted"):
|
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)
|
self.set_permission_mode(preferred_permission_mode, persist=False)
|
||||||
except Exception:
|
except Exception:
|
||||||
self.set_permission_mode("unrestricted", persist=False)
|
self.set_permission_mode("unrestricted", persist=False)
|
||||||
thinking_mode = self.thinking_mode
|
|
||||||
|
|
||||||
if isinstance(run_mode, str):
|
if isinstance(run_mode, str):
|
||||||
try:
|
try:
|
||||||
@ -169,6 +163,8 @@ class WebTerminal(MainTerminal):
|
|||||||
thinking_mode = self.thinking_mode
|
thinking_mode = self.thinking_mode
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
# 先创建新对话。start_new_conversation 会先 save_current_conversation(),
|
||||||
|
# 此时 terminal.model_key 仍是旧对话的模型,避免把旧对话覆盖成默认模型。
|
||||||
conversation_id = self.context_manager.start_new_conversation(
|
conversation_id = self.context_manager.start_new_conversation(
|
||||||
project_path=self.project_path,
|
project_path=self.project_path,
|
||||||
thinking_mode=thinking_mode,
|
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:
|
if self.thinking_mode:
|
||||||
self.api_client.start_new_task()
|
self.api_client.start_new_task()
|
||||||
@ -240,6 +262,12 @@ class WebTerminal(MainTerminal):
|
|||||||
self.set_network_permission(network_permission)
|
self.set_network_permission(network_permission)
|
||||||
except Exception:
|
except Exception:
|
||||||
pass
|
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_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_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
|
self.pending_network_permission = str(meta.get("pending_network_permission") or "").strip().lower() or None
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user