feat: density-calibrated countTokens (Phase 2 of token calibration) - #97
feat: density-calibrated countTokens (Phase 2 of token calibration)#97Tyan66666 wants to merge 21 commits into
Conversation
…y convergence, MIN_DELTA_EST tradeoff)
…ens verified (calibrated semantics, not regression)
…e index/runtime conflicts
|
今早发现用了后缓存重建太频繁,是个 bug,还在修 |
…rs, all inline-bundle)
…nSnapshot, kernel-first order)
kernel c49fab3 先发后 adapter 生效:旧 .acp.json 无该字段时回落
fresh.tokenSnapshot({}), 兼容加载不报错 (F1)。165/165 tests pass.
|
这个现象已被定位,正是 issue §11 分析的核心问题,根因和修复方案都已就绪: 根因(§11.1):density 校准期, 实测证据:校准期 density 振荡序列 修复方案(§11,已定稿 + 实现):标签 token 数在消息首次渲染时确定并存入 实现状态:
下一步:acp-kernel #51 合并发布后,adapter 的 tokenSnapshot 改动即生效,缓存重建从"每轮一次"降到"每次压缩一次"(压缩本来就会改前缀)。 |
|
CI test 失败原因: 的 |
|
补充:具体报错是 adapter 的 src/state.ts:69 使用 tokenSnapshot 字段,但类型 CompressionState(来自 npm 的 acp-kernel@0.0.17)还没有该字段。kernel 本地分支已实现(types.ts:69),发布新版本后 adapter bump 依赖即通过。 |
|
我处理完其他pr和issue 然后建立更加完善的测试体系后回来处理这个问题.以避免每次合并后需要手动跑一个很长的任务做回归. |
好明天我先处理下这个代码的冲突 |
关联 Issue
Part of #96 Token 校准:让 pending 计算对齐 provider 真实 token
TL;DR(大白话)
问题:系统判断"该不该提示压缩"靠
chars/4估算 token(1 字符 = 0.25 token)。中文 1 字符实际 ≈ 1 token,被低估 2-4 倍 → 上下文已占窗口 18%,系统却觉得"没到阈值"一直不提示压缩。为什么不能直接用 provider 数字:provider 只给总数不给分类(哪些可压缩/哪些要保护);压缩提示要在发请求前决定,真实数字是请求后才知道的;压缩会让总数暴跌,拿它当增长量会误判。
本 PR 做什么(Phase 2):密度校准器——每轮用"真实增量 ÷ 估算增量"算当前会话换算系数(density)乘到估算上,中文多的会话系数自动变高,完全自适应。§11 再修一个衍生 bug:density 校准期导致消息标签每轮重算 → 缓存前缀反复失效("缓存重建"),标签数字改为首次渲染时快照定死。
状态:已实现 + 真实会话验证通过(nudge 正常触发、density 收敛)。
改动
src/density.ts(新建) — 累积锚点密度估计器:Map<modelId, Estimator>存储 + 模型切换重置Δreal/Δest同窗口累积增量,clamp[0.5, 2.5],MIN_DELTA_EST=50门槛postCompressionSkip)src/runtime.ts—createCore({ countTokens: (t) => density.estimateWithDensity(modelId, t) });暴露density访问器 +setCountModel(modelId)src/index.ts— session_start 重置密度;context 事件绑定 modelId + 更新密度(含 postCompression 检测);debug 日志加modelId/density字段src/compress-tool.ts—beforeTokens乘 density(显示层对齐)src/state.ts(§11 方案 A 第 6 处)—mergeInitialState补tokenSnapshot字段(kernelc49fab3先发后 adapter 生效,旧.acp.json无该字段回落空快照兼容加载)测试
tests/density.test.ts(13)+tests/compress-tool.test.ts(2)+ §11 state 相关,全量 165/165 通过。实测(真实会话,见 issue §10)
T1 59725 >= 50000)MIN_DELTA_EST=50门槛权衡分析见 issue §10.3