Skip to content

fix(config): 过滤聊天候选中的非聊天模型#3487

Merged
esengine merged 1 commit into
esengine:main-v2from
SuMuxi66:fix/filter-non-chat-models-from-chat-candidates
Jun 8, 2026
Merged

fix(config): 过滤聊天候选中的非聊天模型#3487
esengine merged 1 commit into
esengine:main-v2from
SuMuxi66:fix/filter-non-chat-models-from-chat-candidates

Conversation

@SuMuxi66

@SuMuxi66 SuMuxi66 commented Jun 8, 2026

Copy link
Copy Markdown
Contributor

概述

修复 #3483

TTS/STT/ASR 等非聊天模型会出现在 Desktop 和 CLI 的聊天模型候选列表中。用户误选这类模型作为聊天模型后,请求仍按 Chat messages 格式发送,可能触发 Provider 400 错误,例如:

messages[0] system role is not allowed for TTS model

本 PR 在共享配置层新增聊天模型候选过滤,避免非聊天模型进入 Desktop / Settings / CLI 的聊天模型选择路径。

改动内容

  • 新增 config.IsLikelyChatModel(),使用通用 token-based heuristic 过滤明显非聊天模型
  • 新增 ProviderEntry.ChatModelList(),保留 ModelList() 原始语义不变
  • Desktop ModelSwitcher 改用 ChatModelList()
  • Desktop Settings 模型列表改用 ChatModelList()
  • CLI /model 列表改用 ChatModelList()
  • CLI /model Tab 补全改用 ChatModelList()
  • control 层 modelListText() 改用 ChatModelList()

设计说明

ModelList() 仍然返回 provider 原始模型列表,用于配置保存、诊断、模型解析、迁移等内部路径。

ChatModelList() 只用于聊天模型候选展示路径,避免前端局部过滤导致 Desktop 和 CLI 行为不一致。

Known limitation

如果用户历史配置中已经把默认模型设置为 TTS/ASR 等非聊天模型,DefaultModel() 仍可能解析到该模型。这个属于已有坏配置的回退问题,建议后续单独 follow-up 处理,避免本 PR 扩大到模型解析和配置迁移逻辑。

验证

  • git diff --check 通过
  • go test ./internal/config/ -v 通过
  • go test ./desktop/ -run "TestProviderViewFromEntry|TestSaveProvider|TestWithFresh" -v 通过
  • go test ./internal/control/ 通过
  • Desktop 手测通过:
    • 聊天模型下拉框不再显示 TTS/ASR 模型
    • Settings 模型列表不再显示 TTS/ASR 模型
    • 正常聊天模型仍然显示
  • CLI 手测通过:
    • /model 列表不再显示 TTS/ASR 模型
    • /model Tab 补全不再显示 TTS/ASR 模型
    • 正常聊天模型仍然可见并可切换

Fixes #3483

@github-actions github-actions Bot added v2 Go rewrite (1.x) — main-v2 branch, active development desktop Wails desktop app (desktop/**) tui Terminal UI / CLI (internal/cli, internal/control) agent Core agent loop (internal/agent, internal/control) config Configuration & setup (internal/config) labels Jun 8, 2026
@SuMuxi66 SuMuxi66 marked this pull request as ready for review June 8, 2026 01:42

@esengine esengine left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

过滤逻辑清晰,ChatModelList 包装不改 ModelList 原语义,测试覆盖到位。合入。

@esengine esengine merged commit 60f98f6 into esengine:main-v2 Jun 8, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agent Core agent loop (internal/agent, internal/control) config Configuration & setup (internal/config) desktop Wails desktop app (desktop/**) tui Terminal UI / CLI (internal/cli, internal/control) v2 Go rewrite (1.x) — main-v2 branch, active development

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: 模型选择器应过滤掉 TTS/STT 等非聊天模型

2 participants