diff --git a/CLAUDE.md b/CLAUDE.md index f1a14766a..cbaeeb4f2 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -441,7 +441,7 @@ revision stale so a later send retries. 失效」的兼容代码。通用路径只留一个兜底调用点,判定逻辑全在这里,便于上游修好 之后整块删掉。**不硬编码服务地址、模型名、业务名词,只按报文特征判定。** -当前三条,前两条围绕同一个症状(内网模型的最大上下文声明值不准,会提前报 400),第三条是它们的兜底: +当前四条,前两条围绕同一个症状(内网模型的最大上下文声明值不准,会提前报 400),第三条是它们的兜底,第四条是「限流绝不能被当成超限」: 1. **上下文超限错误认不出**(`pa_quirks`)。实测报文 `{"object":"error","message":"请求上下文过大","type":"BadRequestError","code":400}` @@ -467,6 +467,17 @@ revision stale so a later send retries. 60s 的退避等待最多 12 次,只有等待耗尽才报错。兜底后的那次重发跳过自动 压缩(`skip_auto_compact_once_`);请求被收下即清零 episode,同回合再被拒 重新开始。学习器只记每个 episode 最初确认拒收的规模,紧急档请求永远不记。 +4. **限流报文不是超限**(`pa_quirks` 的 `FaultKind::RateLimited`,2026-10-08)。 + 内网网关限速「100 次 / 10 分钟」报 `{"message":"您的请求频率已达到限制 (100次/10分钟)…","code":429}`, + 用户反馈它「像被当成超限,会话一直在压缩」且码不可信。按「请求频率 / 过于 + 频繁 / 限流」文案判定,**排在超限与瞬时故障之前**;`is_context_overflow_error` + 对它直接 false,所以学习器与兜底都进不去。`retry_policy` 让文案压过状态码: + 超限文案一律不重试(429 / 5xx 也不,否则同一个超大请求困在无上限退避里进不了 + 压缩链),限流文案一律重试(400 / 451 也重试),硬配额仍终止。限流的本地退避 + 封顶 1 分钟(`kProviderRateLimitRetryMaxDelayMs`,Retry-After 优先),进度文案 + 「服务端限流,等待重试」。配套:`CompactionController::run_auto` 在用户取消时 + 不再走机械修剪 —— 摘要请求被限流、用户按停止,旧实现把「Compaction cancelled.」 + 当摘要失败真丢一段历史,这正是「一直在压缩」的观感来源之一。 **改这块前必读 README 里那三条坑**:观测「要么可信要么整条丢弃」没有中间态 (第一版拿可信下限当收敛下界用,一次 2726 token 的拒绝把 128000 的窗口砍到 diff --git a/docs/daemon-api.md b/docs/daemon-api.md index d3df6db23..1cacfebf2 100644 --- a/docs/daemon-api.md +++ b/docs/daemon-api.md @@ -2860,7 +2860,7 @@ cannot be disabled and return `409 {"error":"HOOK_MANAGED"}`. 返回所有运行时已启用的模型配置。该路由要求通过 Web 认证,响应包含 `api_key` 原值和 `has_api_key` 布尔值,供编辑表单默认遮罩回填;调用方必须把整个响应视为 敏感数据,日志与错误消息仍不得包含密钥。高级字段有值时会原样返回,包括 -`endpoint_mode`、`max_output_tokens`、`capabilities_source`、`reasoning`、 +`endpoint_mode`、`api_protocol`、`max_output_tokens`、`capabilities_source`、`reasoning`、 `request_headers`、`context_window` 与 `stream_timeout_ms`。 ### `POST /api/models` @@ -2894,6 +2894,14 @@ cannot be disabled and return `409 {"error":"HOOK_MANAGED"}`. } ``` +`api_protocol` 仅适用于 `provider:"openai"`,接受 `chat_completions` 或 +`responses`;省略时继续使用 Chat Completions。模型设置的 **API 协议** 下拉框可 +选择 Responses,保存和连接检测使用同一协议。`base_url` 模式下 Responses 会向 +基础地址追加 `/responses`;`full_url` 模式直接使用给定 URL。协议由该字段决定, +不会根据 URL 或模型名称自动推断。更新时省略该字段保留原值,传 `null` 清除并恢复 +默认 Chat Completions;切换到其他 Provider 会清除该字段,其他 Provider 显式传入 +则返回 `UNSUPPORTED_MODEL_OPTION`,未知协议值返回 `INVALID_API_PROTOCOL`。 + 返回包含 `api_key` 原值的模型配置。校验错误使用 `BAD_JSON`、`BAD_REQUEST` 或 `SavedModelEditError` 字符串;持久化失败会回滚内存并返回 `500 PERSIST_FAILED`。 @@ -2908,7 +2916,7 @@ cannot be disabled and return `409 {"error":"HOOK_MANAGED"}`. 路径仍区分大小写。 省略 `base_url`、`context_window`、`stream_timeout_ms`、`capabilities`、 -`endpoint_mode`、`max_output_tokens`、`capabilities_source`、`reasoning` 或 +`endpoint_mode`、`api_protocol`、`max_output_tokens`、`capabilities_source`、`reasoning` 或 `request_headers` 会保留原值。显式空 `request_headers` 会清空请求头;对应高级 字段传 `null` 时按各字段合同清除。外部登录器留下的 legacy `readonly:true` 只是 兼容元数据,不阻止编辑。响应包含 `api_key` 原值与 `has_api_key`,并仅允许经 diff --git a/docs/help-source/group3.py b/docs/help-source/group3.py index 8b6b71d85..07ef72f79 100644 --- a/docs/help-source/group3.py +++ b/docs/help-source/group3.py @@ -42,6 +42,7 @@ section("crud", "添加、编辑与删除", '''
模型页的已保存模型列表支持搜索、刷新和新增。每条预设显示名称、Provider、Model ID 与能力标识,可编辑、设为默认或删除。
已保存密钥不会明文回填。编辑时不填写新密钥通常保留原凭据;需要删除凭据时勾选清除已保存密钥。新增时的别名会随所选模型自动填入,手动改过后不再被覆盖。
名称冲突时,界面提供覆盖已有预设、另存为或取消。不要为绕过冲突随意覆盖还在使用的连接。运行中的会话使用该预设时,删除可能显示会话使用中并被阻止,先结束或切换相关任务。
''', + '使用 OpenAI 或自定义 OpenAI 兼容服务时,编辑模型连接中的API 协议可选择 Chat Completions 或 Responses。需要 Responses 的模型请选择后者,再点击密钥旁的检测并保存。已有预设默认保持 Chat Completions,不会按模型名自动切换。Base URL 模式填写基础地址(如 https://api.openai.com/v1),客户端追加 /responses;完整端点模式则填写服务要求的完整 URL。协议必须与服务端实际支持的接口一致。
在已保存模型列表中设为默认,决定新任务使用的默认预设。已经打开的任务有自己的模型选择,可在输入框下方切换。不要把修改默认值理解成自动改写每条历史任务选择的预设名称。
编辑一个预设则是在更新该连接的地址、认证和能力参数。历史任务继续使用这个预设时,应使用更新后的配置;若页面仍显示旧信息,刷新模型列表并检查实际选中的预设。正在执行的请求已发出,不会把新参数倒回已经完成的请求。
''', diff --git a/docs/help/assets/search-index.js b/docs/help/assets/search-index.js index 935994342..05d9f3690 100644 --- a/docs/help/assets/search-index.js +++ b/docs/help/assets/search-index.js @@ -510,7 +510,7 @@ window.ACECODE_HELP_INDEX = [ "title": "添加与管理模型", "url": "manage-models.html", "description": "管理可供任务使用的模型预设,并区分新任务默认值与当前任务的模型选择。", - "text": "添加、编辑与删除 模型页的 已保存模型 列表支持搜索、刷新和新增。每条预设显示名称、Provider、Model ID 与能力标识,可编辑、设为默认或删除。 添加: 点击新增模型,选择 Provider 和 Model ID,填写连接信息,保存模型。 批量添加: 新增时,支持多选的模型目录或探测窗口可选择多个 ID;此时别名字段变为 别名前缀 (默认为服务商名),每个模型保存为“前缀-Model ID”,重名自动追加 (1)、(2)。 编辑: 打开已有预设,修改需要的字段,再点击保存修改。编辑时保留原有 Provider 身份。 删除: 核对弹窗中的名称后删除预设;会话记录仍保留。 已保存密钥不会明文回填。编辑时不填写新密钥通常保留原凭据;需要删除凭据时勾选 清除已保存密钥 。新增时的 别名 会随所选模型自动填入,手动改过后不再被覆盖。 名称冲突时,界面提供覆盖已有预设、另存为或取消。不要为绕过冲突随意覆盖还在使用的连接。运行中的会话使用该预设时,删除可能显示 会话使用中 并被阻止,先结束或切换相关任务。 模型列表显示本地预设名称和默认标识,行内可进入编辑或设置默认模型。操作前先核对要修改的预设名称。 Windows 实际界面 · 点击图片查看原图 默认模型与会话模型 在已保存模型列表中 设为默认 ,决定新任务使用的默认预设。已经打开的任务有自己的模型选择,可在输入框下方切换。不要把修改默认值理解成自动改写每条历史任务选择的预设名称。 编辑一个预设则是在更新该连接的地址、认证和能力参数。历史任务继续使用这个预设时,应使用更新后的配置;若页面仍显示旧信息,刷新模型列表并检查实际选中的预设。正在执行的请求已发出,不会把新参数倒回已经完成的请求。 TUI 命令 生效范围 /model NAME 切换当前会话。 /model --cwd NAME 切换并保存当前工作目录的模型覆盖。 /model --default NAME 切换并更新全局默认模型名称。 这些 NAME 使用 预设名称 。脚本中的 acecode -p --model NAME 同样如此;print 模式恢复会话而没有显式传模型时,会保留会话已保存的模型选择。" + "text": "添加、编辑与删除 模型页的 已保存模型 列表支持搜索、刷新和新增。每条预设显示名称、Provider、Model ID 与能力标识,可编辑、设为默认或删除。 添加: 点击新增模型,选择 Provider 和 Model ID,填写连接信息,保存模型。 批量添加: 新增时,支持多选的模型目录或探测窗口可选择多个 ID;此时别名字段变为 别名前缀 (默认为服务商名),每个模型保存为“前缀-Model ID”,重名自动追加 (1)、(2)。 编辑: 打开已有预设,修改需要的字段,再点击保存修改。编辑时保留原有 Provider 身份。 删除: 核对弹窗中的名称后删除预设;会话记录仍保留。 已保存密钥不会明文回填。编辑时不填写新密钥通常保留原凭据;需要删除凭据时勾选 清除已保存密钥 。新增时的 别名 会随所选模型自动填入,手动改过后不再被覆盖。 名称冲突时,界面提供覆盖已有预设、另存为或取消。不要为绕过冲突随意覆盖还在使用的连接。运行中的会话使用该预设时,删除可能显示 会话使用中 并被阻止,先结束或切换相关任务。 使用 OpenAI 或自定义 OpenAI 兼容服务时,编辑模型连接中的 API 协议 可选择 Chat Completions 或 Responses 。需要 Responses 的模型请选择后者,再点击密钥旁的 检测 并保存。已有预设默认保持 Chat Completions,不会按模型名自动切换。Base URL 模式填写基础地址(如 https://api.openai.com/v1 ),客户端追加 /responses ;完整端点模式则填写服务要求的完整 URL。协议必须与服务端实际支持的接口一致。 模型列表显示本地预设名称和默认标识,行内可进入编辑或设置默认模型。操作前先核对要修改的预设名称。 Windows 实际界面 · 点击图片查看原图 默认模型与会话模型 在已保存模型列表中 设为默认 ,决定新任务使用的默认预设。已经打开的任务有自己的模型选择,可在输入框下方切换。不要把修改默认值理解成自动改写每条历史任务选择的预设名称。 编辑一个预设则是在更新该连接的地址、认证和能力参数。历史任务继续使用这个预设时,应使用更新后的配置;若页面仍显示旧信息,刷新模型列表并检查实际选中的预设。正在执行的请求已发出,不会把新参数倒回已经完成的请求。 TUI 命令 生效范围 /model NAME 切换当前会话。 /model --cwd NAME 切换并保存当前工作目录的模型覆盖。 /model --default NAME 切换并更新全局默认模型名称。 这些 NAME 使用 预设名称 。脚本中的 acecode -p --model NAME 同样如此;print 模式恢复会话而没有显式传模型时,会保留会话已保存的模型选择。" }, { "page": "添加与管理模型", @@ -518,7 +518,7 @@ window.ACECODE_HELP_INDEX = [ "title": "添加、编辑与删除", "url": "manage-models.html#crud", "description": "添加、编辑与删除 模型页的 已保存模型 列表支持搜索、刷新和新增。每条预设显示名称、Provider、Model ID 与能力标识,可编辑、设为默认或删除。 添加: 点击新增模型,选择 Provider 和 Model ID,填写连接信息,保存模型。", - "text": "添加、编辑与删除 模型页的 已保存模型 列表支持搜索、刷新和新增。每条预设显示名称、Provider、Model ID 与能力标识,可编辑、设为默认或删除。 添加: 点击新增模型,选择 Provider 和 Model ID,填写连接信息,保存模型。 批量添加: 新增时,支持多选的模型目录或探测窗口可选择多个 ID;此时别名字段变为 别名前缀 (默认为服务商名),每个模型保存为“前缀-Model ID”,重名自动追加 (1)、(2)。 编辑: 打开已有预设,修改需要的字段,再点击保存修改。编辑时保留原有 Provider 身份。 删除: 核对弹窗中的名称后删除预设;会话记录仍保留。 已保存密钥不会明文回填。编辑时不填写新密钥通常保留原凭据;需要删除凭据时勾选 清除已保存密钥 。新增时的 别名 会随所选模型自动填入,手动改过后不再被覆盖。 名称冲突时,界面提供覆盖已有预设、另存为或取消。不要为绕过冲突随意覆盖还在使用的连接。运行中的会话使用该预设时,删除可能显示 会话使用中 并被阻止,先结束或切换相关任务。 模型列表显示本地预设名称和默认标识,行内可进入编辑或设置默认模型。操作前先核对要修改的预设名称。 Windows 实际界面 · 点击图片查看原图" + "text": "添加、编辑与删除 模型页的 已保存模型 列表支持搜索、刷新和新增。每条预设显示名称、Provider、Model ID 与能力标识,可编辑、设为默认或删除。 添加: 点击新增模型,选择 Provider 和 Model ID,填写连接信息,保存模型。 批量添加: 新增时,支持多选的模型目录或探测窗口可选择多个 ID;此时别名字段变为 别名前缀 (默认为服务商名),每个模型保存为“前缀-Model ID”,重名自动追加 (1)、(2)。 编辑: 打开已有预设,修改需要的字段,再点击保存修改。编辑时保留原有 Provider 身份。 删除: 核对弹窗中的名称后删除预设;会话记录仍保留。 已保存密钥不会明文回填。编辑时不填写新密钥通常保留原凭据;需要删除凭据时勾选 清除已保存密钥 。新增时的 别名 会随所选模型自动填入,手动改过后不再被覆盖。 名称冲突时,界面提供覆盖已有预设、另存为或取消。不要为绕过冲突随意覆盖还在使用的连接。运行中的会话使用该预设时,删除可能显示 会话使用中 并被阻止,先结束或切换相关任务。 使用 OpenAI 或自定义 OpenAI 兼容服务时,编辑模型连接中的 API 协议 可选择 Chat Completions 或 Responses 。需要 Responses 的模型请选择后者,再点击密钥旁的 检测 并保存。已有预设默认保持 Chat Completions,不会按模型名自动切换。Base URL 模式填写基础地址(如 https://api.openai.com/v1 ),客户端追加 /responses ;完整端点模式则填写服务要求的完整 URL。协议必须与服务端实际支持的接口一致。 模型列表显示本地预设名称和默认标识,行内可进入编辑或设置默认模型。操作前先核对要修改的预设名称。 Windows 实际界面 · 点击图片查看原图" }, { "page": "添加与管理模型", diff --git a/docs/help/manage-models.html b/docs/help/manage-models.html index e94dba0bc..23256277c 100644 --- a/docs/help/manage-models.html +++ b/docs/help/manage-models.html @@ -39,6 +39,7 @@模型页的已保存模型列表支持搜索、刷新和新增。每条预设显示名称、Provider、Model ID 与能力标识,可编辑、设为默认或删除。
已保存密钥不会明文回填。编辑时不填写新密钥通常保留原凭据;需要删除凭据时勾选清除已保存密钥。新增时的别名会随所选模型自动填入,手动改过后不再被覆盖。
名称冲突时,界面提供覆盖已有预设、另存为或取消。不要为绕过冲突随意覆盖还在使用的连接。运行中的会话使用该预设时,删除可能显示会话使用中并被阻止,先结束或切换相关任务。
+使用 OpenAI 或自定义 OpenAI 兼容服务时,编辑模型连接中的API 协议可选择 Chat Completions 或 Responses。需要 Responses 的模型请选择后者,再点击密钥旁的检测并保存。已有预设默认保持 Chat Completions,不会按模型名自动切换。Base URL 模式填写基础地址(如 https://api.openai.com/v1),客户端追加 /responses;完整端点模式则填写服务要求的完整 URL。协议必须与服务端实际支持的接口一致。

在已保存模型列表中设为默认,决定新任务使用的默认预设。已经打开的任务有自己的模型选择,可在输入框下方切换。不要把修改默认值理解成自动改写每条历史任务选择的预设名称。
编辑一个预设则是在更新该连接的地址、认证和能力参数。历史任务继续使用这个预设时,应使用更新后的配置;若页面仍显示旧信息,刷新模型列表并检查实际选中的预设。正在执行的请求已发出,不会把新参数倒回已经完成的请求。
| TUI 命令 | 生效范围 |
|---|---|
/model NAME | 切换当前会话。 |
/model --cwd NAME | 切换并保存当前工作目录的模型覆盖。 |
/model --default NAME | 切换并更新全局默认模型名称。 |