2026-07-10 04:27:17 -07:00

39 lines
2.2 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""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,
)