Skip to content

feat: 完善模型配置与聊天模型选择 - #163

Merged
wangkailang merged 1 commit into
mainfrom
codex/model-configuration
Jul 31, 2026
Merged

feat: 完善模型配置与聊天模型选择#163
wangkailang merged 1 commit into
mainfrom
codex/model-configuration

Conversation

@wangkailang

Copy link
Copy Markdown
Owner

Summary

  • 将「LLM 渠道配置」统一为「模型配置」,重组配置卡片与编辑流程(界面布局参考 agegr/pi-web)
  • 支持 ChatGPT Plus/Pro Browser login,包含 PKCE 回调、令牌刷新、401 重试与断开连接
  • 在聊天区列出配置目录中的可用模型,支持按配置切换模型与覆盖推理强度
  • 新增 DeepSeek、Kimi 官方 API Key 配置,内置官方端点、推荐模型、模型发现与能力推断

Runtime and data

  • 扩展 OpenAI Compatible、Copilot 与 Responses 路由及健康检查
  • 为 reasoning 模型保留 reasoning_content,并把 Kimi 最高推理档映射为官方 max
  • 增加 Kimi/provider 数据库迁移、IPC 类型、国际化和配置文档

Test Plan

  • pnpm lint
  • pnpm typecheck
  • pnpm test(381 个测试文件、3532 项测试)
  • pnpm build

改动明细:

- 将「LLM 渠道配置」统一为「模型配置」,重组配置卡片与编辑流程(界面布局参考 pi-web)

- 支持 ChatGPT Plus/Pro Browser login、PKCE 回调、令牌刷新与断开连接

- 在聊天区展示可用模型,支持按配置切换模型和调整推理强度

- 新增 DeepSeek、Kimi 官方 API Key 预设、模型发现、能力推断与上下文限制

- 完善 OpenAI Compatible、Copilot、Responses 路由、健康检查与运行时回退

- 补充数据库迁移、IPC 类型、国际化、文档及回归测试
Copilot AI review requested due to automatic review settings July 31, 2026 04:23
@wangkailang
wangkailang merged commit b29451f into main Jul 31, 2026
4 checks passed

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

该 PR 将设置中的「LLM 渠道配置」体系升级为更完整的「模型配置」,并打通聊天区的“按配置选择模型 + 会话级模型覆盖 + 推理强度覆盖”。同时新增 ChatGPT Plus/Pro(Codex)浏览器登录(PKCE/OAuth)、以及 DeepSeek/Kimi 官方 API Key 配置、模型发现与能力推断,扩展了主进程运行时路由与连接健康检查。

Changes:

  • 重构设置页模型配置面板与编辑弹窗:按订阅登录 / API 服务 / 本地自定义分组展示,支持设为默认、连接状态与更丰富的供应商信息展示。
  • 新增 ChatGPT Plus/Pro(openai-codex)Browser login:本地回调、授权完成、令牌刷新与 401 重试、断开连接等完整链路。
  • 聊天区新增模型目录驱动的模型选择与会话级 overrides(modelId / reasoningEffort),并扩展 Kimi/DeepSeek 的官方端点、模型能力推断与数据库迁移/IPC 类型。

Reviewed changes

Copilot reviewed 41 out of 41 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
src/shared/model-context-window.ts 增补 Kimi 型号的 context window 预设,用于上下文预算估算。
src/renderer/i18n/zh-CN/index.ts 更新“模型配置”文案、新增分组说明与 ChatGPT Plus/Pro 登录文案、补充 chat_reasoningAuto。
src/renderer/i18n/ja/index.ts 同步日文“模型配置”文案与 ChatGPT Plus/Pro 登录文案、补充 chat_reasoningAuto。
src/renderer/i18n/i18n-types.ts i18n 类型定义更新以匹配新增/变更的文案 key。
src/renderer/i18n/en/index.ts 英文“模型配置”文案与 ChatGPT Plus/Pro 登录文案、补充 chat_reasoningAuto。
src/renderer/components/settings/LlmConfigPanel.tsx 设置页模型配置面板重做:分组卡片、摘要统计、空态、设为默认等交互。
src/renderer/components/settings/LlmConfigEditModal.tsx 编辑弹窗扩展 provider(Kimi/openai-codex)、官方默认值、模型发现策略与 ChatGPT 浏览器登录流程 UI。
src/renderer/components/settings/tests/LlmConfigPanel.test.tsx 为分组逻辑(订阅/API/本地)新增单测覆盖。
src/renderer/components/settings/tests/LlmConfigEditModal.test.ts 为 Kimi/DeepSeek 默认值、字段策略、openai-codex 行为与模型发现请求构造新增单测。
src/renderer/components/chat/useChatSession.ts 持久化会话级 modelId 与 reasoningEffort,并将 overrides 传入 executeTask。
src/renderer/components/chat/ModelSelector.tsx 聊天模型选择器升级:按配置模型目录展示可选模型、支持推理强度“Auto + 档位”切换。
src/renderer/components/chat/ChatPanel.tsx 将新的模型选择/推理强度参数接入 ChatPanel,并改进 context window 初始估算逻辑。
src/renderer/components/chat/tests/useChatSession.test.tsx 覆盖会话级 modelId 与 reasoningEffort overrides 的 IPC 入参断言与 localStorage 持久化。
src/renderer/components/chat/tests/ModelSelector.test.ts 覆盖“配置→可用模型列表”的展开逻辑与显示模型解析逻辑。
src/preload/index.ts 扩展 IPC 类型:模型发现 draft provider(deepseek/kimi)、executeTask overrides、openai-codex auth IPC。
src/main/ipc/openai-codex-session.ts 新增:openai-codex token 维护(过期刷新、并发去重、落库更新)。
src/main/ipc/openai-codex-auth.ts 新增:ChatGPT Plus/Pro PKCE/OAuth 浏览器登录流程、回调 server、token exchange/refresh、元数据序列化。
src/main/ipc/llm-config-models.ts 扩展能力推断:识别 Kimi 模型的 reasoning/vision 能力。
src/main/ipc/llm-config-handlers.ts 扩展 provider:kimi/openai-codex;模型目录刷新支持官方 provider;新增 openai-codex 连接/断开/取消等 handler。
src/main/ipc/llm-config-connection.ts 连接测试新增 openai-codex Responses 请求构造;增加 kimi 默认 baseUrl。
src/main/ipc/ai-models.ts 运行时选模增加会话级 overrides(modelId/reasoningEffort),并将 catalog 元信息用于限制与 capabilities。
src/main/ipc/ai-handlers.ts executeTask 支持 modelId/reasoningEffort overrides,并将最终 modelId 贯穿预算、压缩、日志与 usage 记录。
src/main/ipc/tests/openai-codex-session.test.ts 覆盖 openai-codex access token 复用、刷新与并发去重。
src/main/ipc/tests/openai-codex-auth.test.ts 覆盖 PKCE URL 生成、auth metadata round-trip、accountId 提取与 refresh token 流程。
src/main/ipc/tests/llm-config-validate.test.ts 覆盖 openai-codex 无需手填 apiKey、以及 kimi/deepseek 官方配置校验规则。
src/main/ipc/tests/llm-config-models.test.ts 覆盖 Kimi 模型能力推断规则。
src/main/ipc/tests/llm-config-connection.test.ts 覆盖 kimi/deepseek 官方端点默认值与 openai-codex Responses 连接测试请求。
src/main/ipc/tests/ai-models.test.ts 覆盖 catalog 模型与 reasoning override 的运行时解析,以及 Kimi 默认端点与 context window 逻辑。
src/main/ipc/tests/ai-handlers-media-runtime.test.ts 覆盖 executeTask 将 modelId/reasoningEffort overrides 传入模型解析层。
src/main/db/schema.ts 扩展 llm_configs.provider enum:新增 kimi/openai-codex。
src/main/db/index.ts 数据库迁移:放宽 provider CHECK 以兼容 openai-codex/kimi;更新 LlmProvider 类型。
src/main/db/tests/automation-runs-migration.test.ts 覆盖 llm_configs provider CHECK 放宽到 kimi 的迁移断言。
src/main/ai/error-classifier.ts 更新错误文案:从“渠道配置”迁移到“模型配置”。
src/main/ai/adapters/openai.ts openai-codex 专用 fetch(headers/body/401 刷新一次/流式事件归一)与 provider options 调整。
src/main/ai/adapters/index.ts 将 kimi provider 路由到可保留 reasoning_content 的适配器实现。
src/main/ai/adapters/deepseek.ts 推理强度下发逻辑增强:Kimi 的档位映射(xhigh→max 等)与能力禁用时的兜底。
src/main/ai/adapters/base.ts ProviderConfig 增加 accountId 字段以支持 openai-codex 请求头。
src/main/ai/adapters/tests/resolve-adapter-name.test.ts 覆盖 kimi adapter 路由到 reasoning 兼容适配器。
src/main/ai/adapters/tests/openai.test.ts 覆盖 openai-codex fetch 的 header/body 强制策略与 401 刷新重试。
src/main/ai/adapters/tests/deepseek.test.ts 覆盖 DeepSeek/Kimi 推理强度 options 的生成与映射规则。
docs/llm-configuration.md 文档升级:模型配置分组、DeepSeek/Kimi 官方配置、openai-codex browser login 与运行时选模说明。

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +1565 to +1570
<button
type="button"
onClick={() => void handleStartOpenAICodexAuth()}
disabled={openAICodexBusy !== null}
className="inline-flex h-8 items-center gap-1.5 rounded-lg bg-foreground px-3 text-xs text-background hover:opacity-85 disabled:cursor-wait disabled:opacity-50"
>
Comment thread src/main/ipc/ai-models.ts
Comment on lines +144 to +155
const requestedModelId = overrides.modelId?.trim() || config.model;
const catalogModel =
requestedModelId === config.model
? null
: getLlmModelCatalog(config.id).find(
(entry) => entry.modelId === requestedModelId,
);
if (requestedModelId !== config.model && !catalogModel) {
throw new Error(
`模型 ${requestedModelId} 不属于当前模型配置,请重新选择可用模型。`,
);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants