Repository navigation
feat(context): add local truncation fallback for overflowed conversations - #3484
Open
uiharuayako wants to merge 3 commits into
Open
uiharuayako wants to merge 3 commits into
uiharuayako wants to merge 3 commits into
Conversation
3 tasks done
Contributor
Author
|
@wgqqqqq 我希望能关注一下这个pr,因为token数难以在本地精确计算,上下文压缩机制有时会误判,如果token超限了,这种情况下对话就彻底“没救了“,除非用户手动去分叉。加这个不依赖大模型的上下文压缩可以提供一种兜底的可能。现在官方的端点1M上下文确实很难超,但是本地部署模型,开256k甚至128k的场景,这个问题感觉还是有点严重的 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
为已经触发上下文超限的会话增加本地截断恢复路径,让用户有机会继续当前对话。
当模型 API 因上下文过长拒绝请求时,普通
/compact的摘要请求也可能被同样拒绝。此时继续依赖模型生成摘要可能无法恢复会话。本 PR 增加/compact force,无需调用摘要模型或解析模型凭据即可截断较早的工作上下文;同时提供全局策略,让用户选择在模型明确报告上下文超限后自动使用这条保底路径。Type and Areas
Motivation / Impact
核心意义是为“已经超限,连压缩请求都可能发不出去”的情况提供恢复手段,减少用户被迫新建会话、重新交代任务背景的情况。
设置 → 模型 → 使用本地截断 是执行主机的全局配置,对所有模型生效:
/compact force显式使用本地截断。/compact force始终执行本地截断;CLI 的/summarize force别名保持相同语义。Verification
本轮再次合并上游
724bf2f39:仅两个生成能力表发生冲突,已从合并后的源注册表重新生成;核心截断、三态设置及可恢复 Error 准入逻辑未改动,PR 仍保持80个文件的原有功能范围。新增验证:远程能力契约20项、前端6个文件158项及pnpm run check:web全部通过;对象大小与差异检查通过。上一轮b87b81808的 CI 已全部通过,包含三平台 CLI / Rust 和前端构建;本次合并由新一轮 CI 验证。上一轮合并上游
616c3f262时,已验证:cargo test --locked -p openbitfun-core --no-default-features --features agent-runtime,git --lib -- compression compaction local_truncation user_dialog_retry_is_allowed_from_error:79 项通过。包含真正的“先因上下文超限失败,再从可恢复 Error 状态执行强制截断”的完整入口回归,同时验证不可恢复错误仍被拒绝、原始历史保留、无需可用模型。pnpm run check:web、pnpm run i18n:audit(零警告)、pnpm run check:core-boundaries通过;能力表重新生成,PR 范围内42个 Rust 文件定向格式检查、差异检查及 Git 对象大小检查通过。openbitfun-computer-use时被缺失的系统依赖gstreamer-1.0.pc阻塞,测试尚未执行。补充 App Server 集成测试因本机剩余磁盘空间不足而停止,未取得新的测试结果。没有修改依赖、绕过编译检查或删除用户文件,后续以 CI 结果为准。Reviewer Notes
本轮最小化审查保留跨版本安全边界,移除可证实的重复实现:
自动压缩的本地 / 模型路径共用历史引用创建;删除仅供测试使用的私有包装方法,并在入口固定有效策略,避免继续传递重复的 force / policy 状态。
派发记录仅用
kind=localTruncation持久化强制语义,不再重复保存 force 布尔值;仍能读取上一版 PR 的有效记录。App Server 单个能力布尔值使用
AtomicBool,移除不必要的互斥锁和锁中毒处理;设置 UI 由可信配置状态推导加载状态。将摘要超限 / 摘要成功 / 非超限错误改为表驱动测试;合并重复的历史引用用例,并用完整失败后恢复入口取代只覆盖底层强制成功的用例。保留旧请求、预取追加消息、取消、工具调用配对、旧摘要不可改写和旧 worker 拒绝等不同风险的回归。
仅本地截断允许从可恢复 Error 状态启动;普通维护操作仍保持 idle-only,运行中及不可恢复错误不会被绕过。该增量是保障“已经超限后还能恢复”所必需的。
已检查最新 main 及相关开放 PR feat(context): compression config surface, structured handoff prompt, and summary-request elision #3532 / fix(web-ui): keep an admitted /compact out of the composer #3588;它们分别处理摘要请求裁剪 / 设置和命令残留,均未替代本 PR 的强制恢复路径。没有纳入这些 PR 的独立功能。
最终范围仅包含功能、必要兼容适配、测试、多语言、文档及生成契约;没有 Cargo / pnpm 依赖改动、构建产物、治理基线放宽或第三方代码格式化改动。
旧配置和普通压缩请求继续兼容;默认行为保持原有模型摘要路径。网络、鉴权等非上下文超限错误不会触发本地截断。
本地截断保留现有取消、提交锁及持久化流程;历史引用写入新标记,保留的旧消息及旧摘要不被改写。
Peer、派发、App Server 均先检查本地截断能力,旧目标明确返回不支持。Shared Runtime 私有 IPC 升至 v20,使用版本隔离的发现目录;升级后需重启客户端及 Runtime 主机。
派发强制截断不依赖模型就绪状态,并以独立的
localTruncation类型持久保存,防止降级后的旧 worker 忽略 force、误调用模型;旧 worker 解析失败会保留记录。手机 / IM 的聊天文本
/compact、/compact force命令仍明确回复不支持,保留待处理的权限 / 问答状态。上游新增的 HarmonyOS 命令面板普通压缩通过既有 HostInvokecompact_session执行,遵循目标主机策略;本 PR 未新增手机强制截断按钮。Checklist