Skip to content

iPaper 1.12.1 — 额度边界修复(时间增额、部署上限、重译计划、实际用量)

Choose a tag to compare

@ifzzh ifzzh released this 21 Sep 10:07
· 32 commits to main since this release

iPaper 1.12.1 修复 1.12.0 独立复核确认的四类额度边界缺陷。仅 Web 变化;Translation/Document Worker 复用已验证的 1.2.0 摘要。

R1 仅延长时间也能继续;时间耗尽不再被判为可续跑

  • 续跑计划独立判定时间维度:有计划中工作且累计时间已用满时返回 sufficient=false、time.exhausted=true、overage.seconds.required = 已用+1(下限,不是剩余耗时估计)。
  • POST …/resume 在时间耗尽且仍有工作时拒绝入队(budget_time_exhausted 带 minimum),不会入队后立刻再次超时;只调整小时数即可继续,其他维度无需改动,累计用量不清零。
  • 前端"是否确有变化"改为考虑四个维度(此前遗漏 seconds,只延长小时数时按钮仍禁用),并显示"累计执行时间已用完(X 分钟 / 上限 Y 分钟)"。
  • 反向也同样修正:已无待发请求时续跑只做发布,不因时间耗尽失败(状态/取消检查与执行时间检查分离,逐块循环只在真正需要工作时检查时间)。

R2 所有预算路径都受部署上限约束

  • IPAPER_TRANSLATION_MAX_* 明确是最大值;校验作用于最终合成额度(默认、空预算、部分字段、显式预算四条路径逐维度比对)。
  • 上限低于内置默认值时有效默认值被压到该上限(启动日志说明,预览返回 defaultCappedByCeiling),不会出现"上限 100、默认 500 仍准入";显式超限返回 invalid_budget 并指出维度;合成异常超限返回 500 类 invalid_budget_configuration,不静默通过。

R3 单块重译的续跑计划与执行一致

  • resume_plan 使用与执行侧相同的 force=True(kind == 'retranslate')重译语义:旧成功译文不再被当作本次重译已完成,当前任务已保存的有效子单元仍从估算中扣除;预览与执行对同一块给出相同请求数。

R4 实际用量按输入/输出分别记完整性

  • actual_usage 分别统计输入与输出(inputComplete/outputComplete、各自缺失次数);只有两个维度都有合法供应商数据才 complete。单项缺失显示未知/部分统计,未按 0 记,也未改变事前预留或推断未计费。

回归

  • 复核的四项私有复现已纳入 tests/test_translation_budget.py,并按修复后的契约补充:降上限后较小范围可准入、四条预算路径均受上限约束、无待发请求时耗尽时钟仍能完成发布、五种供应商用量形状、零请求与进行中请求。
  • 修正两处弱断言:截图量级执行改用真实预扣的计数假模型(usage.requests == calls 且 200 ≤ requests ≤ 245);"低于已用量"分支改用两请求任务真正走到。
  • tests/test_daily_scheduler_state.py 改为按运行时日期推导期望(此前硬编码日期,跨过"今天"后会误判)。
  • 浏览器套件新增 R1 回归:耗尽时间的任务只把累计小时数从 1 改到 4、其余维度不动即可提交成功。

组件

仓库 版本 Registry 摘要
ifzzh520/ipaper 1.12.1 sha256:0d04b51819dcc79c4b29aaaa66f3017681a094ba9136259cfa95faa6b72e2ad1
ifzzh520/ipaper-translation-worker 1.2.0 sha256:a5fa3b4316802c15e99a7387baa49604166fb6092a1aca34b8c5e34de3d52003
ifzzh520/ipaper-document-worker 1.2.0 sha256:2c501ad68bdfc2e282518a813c46e548f598b1af85acc1069058741a45587298

源码提交 d8748f0。

限制与回退

  • 时间维度只能判断"是否已耗尽",无法预估剩余时长;额度仍是准入上限,不承诺必然完成。
  • 回退基线 Web 1.12.0 + Workers 1.2.0;无 schema 改动,回退只切镜像。