- middleware:soft 档升两段式——越软停线置软停+on_acting 拦新增生成面工具(write_file/write_source/scaffold_init, 收尾类 finish/check/build/跑门/只读恒放行);越硬地板(软停线×rmb_hard_floor_ratio=1.5)fail-closed 抛熔断, spent>floor 后 est≥0 使下次调用必拦 → 整局 ¥ ≤ floor+单笔,上界数学可证明;hard 档单段语义逐字不变 - genconfig+generation.yaml:rmb_hard_limit 3.0(spike 占位)→50.0(富档软停线裁决值)、新增 rmb_hard_floor_ratio=1.5 / cheap_rmb_hard_limit=10.0 登内置默认,带裁决出处中文注释 - cheap_budget.build_cheap_breaker:便宜档 breaker 唯一装配点——CLI(cheap_studio,原 hard 单段 ¥10 改两段)与 生产 Service(cheap_service_app,原 soft 无地板补地板)同源读 genconfig,档位参数不可被 overrides 改 - 测试:两段式 11 用例(软停区间放行/生成工具拒·收尾放行/硬地板到线即停/spent>floor 次调必拦/工厂同源 env 同变); test_budget_soft_stop 旧「soft 无界」口径按裁决更新为两段式并补越地板用例;既有 hard 档测试全量不动全绿 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
39 lines
2.2 KiB
Python
39 lines
2.2 KiB
Python
"""cheap_budget.py — 便宜档预算两段式的单一装配点(W-ARCH②,创始人 2026-07-03 一次性裁决)。
|
||
|
||
裁决口径:软停线 ¥10(便宜档)——越线只许收尾类动作(finish/构建/跑门,新增生成调用被 on_acting 拦);
|
||
整局 RMB 硬地板 = 软停线 ×1.5 = ¥15,middleware fail-closed 强制,与轮数/墙钟闸任一先到即停,数学上封死
|
||
¥ 上界(软停不等于无界)。富档对应 ¥50/¥75,走 genconfig budget.rmb_hard_limit 同一机制。
|
||
|
||
为什么要这个模块:此前 CLI(cheap_studio.py)是 hard 单段 ¥10、生产 Service(cheap_service_app.py)是
|
||
soft 无地板,同一条安全红线两处取值/行为不同(对账发现一)。本模块把「便宜档 breaker 怎么配」收敛成唯一
|
||
工厂——CLI 与 Service 都调 build_cheap_breaker(),数值同源 genconfig(generation.yaml budget 区,带中文注释),
|
||
改值只改 YAML、两处同时生效。
|
||
"""
|
||
|
||
from worker import genconfig
|
||
from worker.middleware import CircuitBreakerMiddleware
|
||
|
||
|
||
def cheap_soft_limit() -> float:
|
||
"""便宜档单局 ¥ 软停线(裁决 ¥10;唯一取数点=genconfig budget.cheap_rmb_hard_limit)。"""
|
||
return float(genconfig.get("budget", "cheap_rmb_hard_limit", 10.0))
|
||
|
||
|
||
def build_cheap_breaker(**overrides) -> CircuitBreakerMiddleware:
|
||
"""组便宜档两段式 breaker(CLI 与生产 Service 的唯一装配点,三处引用同源)。
|
||
|
||
固定口径(裁决,调用方不可改):enable_rmb_gate=True、soft_budget=True(两段式:软停 ¥10 +
|
||
硬地板 ¥15=×1.5 由 middleware 按 genconfig budget.rmb_hard_floor_ratio 自动派生)。
|
||
其余旋钮(max_tool_calls / 超时等)按调用方场景经 overrides 透传:Service 传失控兜底 150 + 续修
|
||
放大超时,CLI 用 middleware 默认。overrides 里试图改 rmb_hard_limit/soft_budget 会被本工厂覆盖
|
||
(单源纪律:预算档位只在这里定)。
|
||
"""
|
||
overrides.pop("rmb_hard_limit", None)
|
||
overrides.pop("soft_budget", None)
|
||
return CircuitBreakerMiddleware(
|
||
enable_rmb_gate=True,
|
||
rmb_hard_limit=cheap_soft_limit(), # 软停线 ¥10(soft 档语义;硬地板 = ×1.5 middleware 内派生)
|
||
soft_budget=True, # 两段式:越软停线只许收尾、越硬地板 fail-closed(裁决)
|
||
**overrides,
|
||
)
|