Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 12 additions & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -441,7 +441,7 @@ revision stale so a later send retries.
失效」的兼容代码。通用路径只留一个兜底调用点,判定逻辑全在这里,便于上游修好
之后整块删掉。**不硬编码服务地址、模型名、业务名词,只按报文特征判定。**

当前三条,前两条围绕同一个症状(内网模型的最大上下文声明值不准,会提前报 400),第三条是它们的兜底:
当前四条,前两条围绕同一个症状(内网模型的最大上下文声明值不准,会提前报 400),第三条是它们的兜底,第四条是「限流绝不能被当成超限」:

1. **上下文超限错误认不出**(`pa_quirks`)。实测报文
`{"object":"error","message":"请求上下文过大","type":"BadRequestError","code":400}`
Expand All @@ -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 的窗口砍到
Expand Down
12 changes: 10 additions & 2 deletions docs/daemon-api.md
Original file line number Diff line number Diff line change
Expand Up @@ -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`
Expand Down Expand Up @@ -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`。
Expand All @@ -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`,并仅允许经
Expand Down
1 change: 1 addition & 0 deletions docs/help-source/group3.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
section("crud", "添加、编辑与删除",
'''<p>模型页的<strong>已保存模型</strong>列表支持搜索、刷新和新增。每条预设显示名称、Provider、Model ID 与能力标识,可编辑、设为默认或删除。</p><ol><li><strong>添加:</strong>点击新增模型,选择 Provider 和 Model ID,填写连接信息,保存模型。</li><li><strong>批量添加:</strong>新增时,支持多选的模型目录或探测窗口可选择多个 ID;此时别名字段变为<strong>别名前缀</strong>(默认为服务商名),每个模型保存为“前缀-Model ID”,重名自动追加 (1)、(2)。</li><li><strong>编辑:</strong>打开已有预设,修改需要的字段,再点击保存修改。编辑时保留原有 Provider 身份。</li><li><strong>删除:</strong>核对弹窗中的名称后删除预设;会话记录仍保留。</li></ol>''',
'''<p>已保存密钥不会明文回填。编辑时不填写新密钥通常保留原凭据;需要删除凭据时勾选<strong>清除已保存密钥</strong>。新增时的<strong>别名</strong>会随所选模型自动填入,手动改过后不再被覆盖。</p><p>名称冲突时,界面提供覆盖已有预设、另存为或取消。不要为绕过冲突随意覆盖还在使用的连接。运行中的会话使用该预设时,删除可能显示<strong>会话使用中</strong>并被阻止,先结束或切换相关任务。</p>''',
'<p>使用 OpenAI 或自定义 OpenAI 兼容服务时,编辑模型连接中的<strong>API 协议</strong>可选择 <strong>Chat Completions</strong> 或 <strong>Responses</strong>。需要 Responses 的模型请选择后者,再点击密钥旁的<strong>检测</strong>并保存。已有预设默认保持 Chat Completions,不会按模型名自动切换。Base URL 模式填写基础地址(如 <code>https://api.openai.com/v1</code>),客户端追加 <code>/responses</code>;完整端点模式则填写服务要求的完整 URL。协议必须与服务端实际支持的接口一致。</p>',
figure("MD-05", "已保存模型与编辑操作", "展示默认标识、编辑与删除按钮,以及名称冲突弹窗的覆盖、另存为和取消选项。")),
section("defaults", "默认模型与会话模型",
'''<p>在已保存模型列表中<strong>设为默认</strong>,决定新任务使用的默认预设。已经打开的任务有自己的模型选择,可在输入框下方切换。不要把修改默认值理解成自动改写每条历史任务选择的预设名称。</p><p>编辑一个预设则是在更新该连接的地址、认证和能力参数。历史任务继续使用这个预设时,应使用更新后的配置;若页面仍显示旧信息,刷新模型列表并检查实际选中的预设。正在执行的请求已发出,不会把新参数倒回已经完成的请求。</p>''',
Expand Down
4 changes: 2 additions & 2 deletions docs/help/assets/search-index.js
Original file line number Diff line number Diff line change
Expand Up @@ -510,15 +510,15 @@ 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": "添加与管理模型",
"group": "模型与服务商",
"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": "添加与管理模型",
Expand Down
Loading
Loading