Files
iomgaa 9a8f5cea5a docs: register the est_tokens design in the research wiki
Records the approved option, the four rejected alternatives with their
reasons, the intentionally dropped CHS migration item, and the two
defects the independent review caught. Links the entry to m1-core-design
as a refinement, since that milestone is where est_tokens froze with
both jobs attached.
2026-07-30 05:35:49 -04:00

3.8 KiB

type, node_id, title, date
type node_id title date
design design:est-tokens-decoupling est_tokens 解耦: 拆分限流预扣与遥测用量兜底(issue #2) 2026-07-30

est_tokens 解耦: 拆分限流预扣与遥测用量兜底(issue #2)

全文见 2026-07-30-est-tokens-decoupling-design.md。缘起是 Gitea issue #2(下游 CHSAnalyzer 提出)。

  • 缘起: SourceConfig.est_tokens 被派了两份对"保守"定义相反的差事——TPM 入场预扣(多押金 = 安全)与 usage 帧缺失时的遥测用量兜底(计费没有安全方向)。CHS config.py:55 自己就把它定义为"须 ≥ 最坏情形 token"的上界,而库把遥测拆 prompt/completion 两列后又将整个估值塞进单价更贵的 completion(openai_compat.py:146),形成双重系统性高估:实测算例 26 倍。
  • 第二个症状: types.py:125tpm > 0 ⇒ est_tokens > 0 把供应商配额(可从配额页抄)与库的实现细节(无人能正确取值)绑死,下游删掉猜测项后 tpm 只能填 0,被迫在自己配置模型里加校验绕开。
  • 方案(两个决策点,人类审批): ① usage 不可得时记 0/0 + usage_source 新增 unavailable + cost 记 NULL;② est_tokens 未填时由库派生 tpm // 60,字段降为可选调优覆盖(不删不改名,迁移兼容)。
  • 值域三态各有生产者: measured(正常)、estimated(打捞路径——收到 usage 帧但流被截断,数字真实而可信度降级)、unavailable(用量不可得)。故 estimated 不是空值域,历史行亦读兼容。
  • 被否决 · usage 兜底记 0 但沿用 estimated: cost 会算出 0.0,"免费"与"未知"在数据上不可区分,账目缺口无法量化。
  • 被否决 · 保留 est 兜底只修 prompt/completion 分配比例: 比例是又一个没有正确取值的魔数,且未触及"拿上界当实测"的根因,仍高估约 9 倍。
  • 被否决 · 固定默认常量(如 1000): 与配额规模无关,在途上限随规模乱飘(tpm=6000 只剩 6 个在途、tpm=600000 放行 600 个)。派生值尺度无关且语义可文档化("一次调用约占一秒钟的配额份额")。
  • 被否决 · issue 原建议的遥测 p90 自估: TelemetryRecorder 是纯只写端口,自估需新增读接口并强制所有后端(含 none)实现,公共 API 扩张远大于它要省掉的一个可选字段,且无实测证据表明派生默认值不够用。: 初稿曾以"把两条方向相反的降级铁律焊在一起"为主论据,经独立审查撤回——p90 可在遥测读失败时回退纯派生值,限流侧仍能 fail-closed。
  • 被否决 · 派生逻辑取全局与单源 tpm 的较紧者: 需改三处 QuotaGate 装配,且它修的是一个既有缺口(单源 tpm=0 而全局 tpm>0 时预扣为 0),属任务外,建议另开 issue。
  • 有意放弃的迁移保留项: migrations/chsanalyzer.md:151 曾把"usage 缺失按 est 估算"列为保留(理由"保守计量")。本设计推翻:CHS 只记单个 total_tokens 不存在分配问题,而"保守"在计费语境只有错误一个方向。反静默的原始意图仍保留——被放弃的只是"编一个数字"这个手段。
  • 独立审查(两轮)抓出的两处实质缺陷: ① 只改失败侧结算不够,retry.py:338/embedding.py:271成功侧取自同一返回值,改前 actual 恰等于预扣量使 delta==0,不同改则成功调用押金被整笔退回,对"从不回 usage 帧的网关源"构成系统性 TPM 失效;② OCR 行原判为"假陈述"是错的——types.py:51ocr.py:9 明示 OCR 的 0 token 属事实,且改标 unavailable 会灌水本方案赖以成立的缺口度量,已剔出。
  • 待办: 经 writing-plans 出实施计划;发版须同步 CHANGELOG 与 wiki(缺口查询口径须带 AND cache_hit = false),并回帖 issue #2。