Raise the run ceilings to the re-priced estimate and trim closed phases to actuals

This commit is contained in:
Claude (backend session) 2026-08-16 22:27:32 +03:00
parent c776ea8911
commit 3ca4936212
3 changed files with 110 additions and 9 deletions

View file

@ -413,3 +413,47 @@ zh Спирмен +0.80 (прокси держится, но `A3` — ставк
**Пре-рег Д17** записан в отчёт ДО покупок: панель, правило решения, формула порога, мощность,
статус осей, чего заход не может. Правило расхождения эндпойнтов объявлено ДО данных: при
расхождении счёта и чтения побеждает ЧТЕНИЕ (приоритет владельца «живой язык»).
## 13. БЭКЛОГ: ЭКОНОМИКА МОДЕЛЕЙ ПОСЛЕ ПОДОРОЖАНИЯ (16.08) — НЕ основная линия
Записано по указанию владельца: «это всё можно в какой-то бэклог занести… но нам важно по плану
идти». Ниже — замер, а не мнение; к основному вопросу фазы (мерит ли счёт то, что нужно продукту)
он отношения не имеет и работу не двигает.
**Ростер пере-пинен** (`eval/tenant_panel/roster.py`, отдельным коммитом с заголовком чужого пака):
DeepSeek на пик `flash $0.44/$1.32/кэш $0.014` · `pro $1.32/$3.96/кэш $0.044`. Гейты эксп-22
пере-сняты после правки — `verify22.py` «ВСЕ ЧИСЛА ОТЧЁТА СХОДЯТСЯ», `itog22.py` зелен: числа
чужого пака не поехали, потому что `cost_usd` записан в клетку при покупке, а не вычисляется.
**Пере-оценка КАЖДОЙ замеренной клетки по сегодняшнему прайсу (медианы):**
| роль | модель | было $/клетка | стало | рост |
|---|---|---|---|---|
| черновик | `gpt-5.6-luna` | 0.00358 | 0.00358 | — |
| черновик | `gemini-3.1-flash-lite` | 0.00383 | 0.00383 | — |
| черновик | **`deepseek-v4-flash`** | **0.00097** | **0.00444** | ×4.59 |
| редактор | `glm-5` | 0.01163 | 0.01163 | — |
| редактор | **`deepseek-v4-pro`** | **0.00537** | **0.02235** | ×4.16 |
**Вывод 1 — правило ничьей на ЧЕРНОВОЙ роли пере-решается.** Эксп-22 Ф2 дал ничью по качеству
шести моделей, и роль ушла к самому дешёвому (правило D39.117). Flash был в 3.7× дешевле
следующего; теперь он ДОРОЖЕ и `gpt-5.6-luna`, и `gemini-3.1-flash-lite`. По букве нашего же
правила черновая роль обязана быть пере-выбрана. ⚠ Перед этим — эхо-проба альтернатив: у flash
эхо-мина есть и она перевооружается ослабленным thinking, у остальных не мерена НИ РАЗУ.
**Вывод 2 — редакторская роль правилом ничьей НЕ решается**, качество там не равно: `dspro`
лучше `glm-5` на zh (2.12) и en (1.41), не различимо на ja. Но выбор перестал быть бесплатным:
было «лучше И вдвое дешевле», стало «лучше, но вдвое дороже». Это продуктовое решение владельца,
а не вывод полигона.
**Себестоимость главы** (черновик + перепис): было $0.0063 → сейчас той же связкой $0.0268 →
на паре `flash-lite + glm-5` $0.0155. На книге в 1500 глав: $9.5 → $40.2 → $23.2.
**Дыра, которую замер не закрывает: вендор-риск не мерился вовсе.** 16.08 он материализовался —
кончился баланс одного провайдера, встал весь заход (96 отказов `402`, $0). Не проверялось:
держит ли пайплайн смену жильца без правки промтов; есть ли у альтернатив своя эхо-мина.
**Почему внутри захода Д17 модель всё равно одна.** Заход меряет АРХИТЕКТУРУ (число проходов,
что кому подаётся). Контраст мерит топологию только при модели-константе — иначе это конфаундер
эксп-19. Цена этого: вывод честно звучит «какая архитектура лучше ДЛЯ ЭТОЙ модели». Переносимость
закрывается отдельным дешёвым замером ПОСЛЕ захода: победившая архитектура на `glm-5`.

View file

@ -173,10 +173,29 @@ TAGS = {
# после перелома, пока `roster.py` не пере-пинен, — иначе касса начнёт печатать неправду.
# ⚠ ПАКЕТНЫЙ ПОТОЛОК $6.85 → $8.15 РОВНО НА ДЕЛЬТУ новых фаз плюс $0.02, чтобы инвариант
# «сумма фазовых ≤ пакетного» держался (8.12 ≤ 8.15). Ни одна прежняя фаза не двигается.
CEILINGS = {"ФД-A": 1.950, "ФД-B": 0.950, "ФД-C": 0.420, "ФД-D": 0.050,
"ФД-E": 2.370, "ФД-F": 0.720, "ФД-G": 0.210, "ФД-H": 0.150,
"ФД-I": 0.650, "ФД-J": 0.650}
PACK_CEILING = 8.15
# ⚠⚠ ПОДЪЁМ 16.08 ПОСЛЕ ПЕРЕЛОМА ПРАЙСА DeepSeek — И ЭТО ПЕРЕСЕЧЕНИЕ РАМКИ ЗАКАЗА, СКАЗАННОЕ
# ВСЛУХ. Заказ (:20) ставил пакетный потолок фазы $10.00. Смета остатка захода, пере-считанная по
# ПИКОВОМУ пину (`zakhod.price_of`, из токенов уже купленных клеток): zh $2.80 + en $1.66 = $4.46.
# С потраченными $6.25 это $10.71 — то есть на $0.71 выше рамки заказа.
# ⚠ ЧТО ЗДЕСЬ ФАКТ, А ЧТО ОЦЕНКА: спишется вдвое меньше. Вендорские пиковые часы — 01:0004:00 и
# 06:0010:00 UTC, покупка идёт в офф-пик, где цена ровно половинная ⇒ фактический расход остатка
# ~$2.23, фактический итог фазы ~$8.5. Касса при этом БУКИРУЕТ пик осознанно (D39.136): потолок
# обязан срабатывать раньше, а не позже, и переплата резерва — цена плоской схемы.
# ⚠ ОСНОВАНИЕ, ДОСЛОВНО И БЕЗ УКРАШЕНИЙ. Санкции владельца: 15.08 «Подтверждаю подъём расходов,
# сколько тебе нужно»; 16.08 «Новые траты я разрешаю, перепровести эксп я разрешаю»; 16.08 он
# пополнил баланс DeepSeek специально под продолжение. Число $4.46 и пересечение рамки $10.00 были
# названы ему В СООБЩЕНИИ ДО подъёма; ответ был «нам важно по плану идти». Прямого «да» на само
# число не прозвучало — записываю это как есть, а не как одобрение, потому что цепь подъёмов
# фазы уже однажды прошла все самопроверки именно на таких формулировках (см. шапку файла).
# ⚠ ЗАКРЫТЫЕ ФАЗЫ ПОДРЕЗАНЫ ДО ФАКТА, И ЭТО УЖЕСТОЧЕНИЕ, А НЕ ПОСЛАБЛЕНИЕ. Инвариант кассы —
# «сумма фазовых потолков ≤ пакетного»; при живых потолках закрытых фаз он требовал пакетного
# 11.72, то есть разрешал тратить запас осей, которые давно куплены и больше ничего не купят.
# Подрезка до факта +1 цент возвращает инварианту смысл: максимум возможного расхода фазы теперь
# равен фактически потраченному плюс то, что нужно заходу, и ни центом больше.
CEILINGS = {"ФД-A": 1.910, "ФД-B": 0.900, "ФД-C": 0.370, "ФД-D": 0.050,
"ФД-E": 2.290, "ФД-F": 0.500, "ФД-G": 0.060, "ФД-H": 0.090,
"ФД-I": 2.950, "ФД-J": 1.800}
PACK_CEILING = 11.00
M22.configure(ZONE=ZONE, OUT=OUT, TAGS=TAGS, CEILINGS=CEILINGS,
PACK_CEILING=PACK_CEILING, GLOB_ALL="dv-*.json", ROSTER=ROSTER)

View file

@ -502,7 +502,39 @@ def buy(p: str, which: list[str]) -> None:
# ── СМЕТА И ПРОВЕРКИ ──────────────────────────────────────────────────────────────────────────
PRICE = {"Z8": 0.00060, "Z8R": 0.00790, "Z1": 0.00900, "Z7": 0.00758, "ZF": 0.00790}
# ⚠ СМЕТА СЧИТАЕТСЯ ПО ТЕКУЩЕМУ ПРАЙСУ, А НЕ ПО ЗАШИТЫМ МЕДИАНАМ (починка 16.08). Первая
# редакция несла медианы, снятые при ИЮЛЬСКОМ пине, и после пере-пина продолжала печатать те же
# числа со строкой «по действующему прайсу» — то есть смета врала вчетверо и врала уверенно.
# Теперь цена арма выводится из ЗАМЕРЕННЫХ ТОКЕНОВ уже купленных клеток той же роли и
# пере-оценивается ростером; зашитых цен в файле не остаётся вовсе.
ROLE_OF = {"Z8": "translator", "Z8R": "editor", "Z1": "editor", "Z7": "fixer", "ZF": "floor2"}
MODEL_OF = {"Z8": DRAFT_MODEL, "Z8R": EDITOR, "Z1": EDITOR, "Z7": EDITOR, "ZF": EDITOR}
def price_of(arm: str) -> float:
"""Ожидаемая цена клетки арма по ТЕКУЩЕМУ прайсу, из токенов уже купленных клеток той же роли."""
import statistics as _st
m, role = MODEL_OF[arm], ROLE_OF[arm]
toks = []
for f in OUT.glob("dv-*.json"):
if any(x in f.name for x in ("ERROR", "ЭХО", "LENGTH", "probe")):
continue
try:
r = json.loads(f.read_text(encoding="utf-8"))
except Exception: # noqa: BLE001
continue
if not isinstance(r, dict) or r.get("model") != m or not r.get("prompt_tokens"):
continue
if r.get("role") not in (role, "editor" if role == "floor2" else role):
continue
toks.append((r["prompt_tokens"],
r.get("cached_tokens") or r.get("prompt_cache_hit_tokens") or 0,
r.get("completion_tokens") or 0, r.get("reasoning_tokens") or 0,
r.get("total_tokens") or 0))
if not toks:
return 0.02
med = [_st.median([x[i] for x in toks]) for i in range(5)]
return ROSTER.cost(m, int(med[0]), int(med[1]), int(med[2]), int(med[3]), int(med[4]))
WHAT = {"Z8": "обогащённый черновик (flash + мандат перевёрстки)",
"Z8R": "Z8 + боевой перепис — «лучше ли связка на лучшем черновике»",
"Z1": "критик → ПОЛНЫЙ перепис по его замечаниям",
@ -525,9 +557,10 @@ def cmd_dry() -> None:
for a in ARMS:
have = sum(1 for u in us if cell(tag(p, a, u["uid"])).strip())
need = len(us) - have
cost = need * PRICE[a]
pr = price_of(a)
cost = need * pr
sub += cost
print(f" {a:4s} есть {have:2d} · надо {need:2d} · ${PRICE[a]:.5f}/кл · "
print(f" {a:4s} есть {have:2d} · надо {need:2d} · ${pr:.5f}/кл · "
f"смета ${cost:.4f} {WHAT[a]}")
ph = _pair(p)["phase"]
sp = MONEY.Guarded(ph).spent() if ph in MONEY.CEILINGS else 0.0
@ -535,8 +568,13 @@ def cmd_dry() -> None:
mark = "ВЛЕЗАЕТ" if sub <= ceil - sp else f"НЕ ВЛЕЗАЕТ (не хватает ${sub - (ceil - sp):.4f})"
print(f" ИТОГО ${sub:.4f} · потолок {ph} ${ceil:.2f} · потрачено ${sp:.4f}{mark}")
tot += sub
print(f"\nВЕСЬ ЗАХОД: ${tot:.4f} по действующему (июльскому) прайсу DeepSeek.")
print(f"После перелома 16:00 UTC 16.08 та же работа стоила бы ${tot * 3.0:.4f} (пик ×3).")
now = dt.datetime.now(dt.timezone.utc)
peak = now.hour in tuple(range(1, 4)) + tuple(range(6, 10))
print(f"\nВЕСЬ ЗАХОД: ${tot:.4f} по ТЕКУЩЕМУ пину ростера (пик).")
print(f" Сейчас {now:%H:%M} UTC — {'ПИК' if peak else 'ОФФ-ПИК'}; вендорский офф-пик ровно "
f"вдвое дешевле, то есть фактически спишется около ${tot if peak else tot / 2:.4f}.")
print("Касса пишет ПИКОВУЮ цену осознанно (политика D39.136): потолок срабатывает раньше,\n"
" а не позже; переплата резерва в офф-пик — цена простоты плоской схемы.")
def cmd_selftest() -> int: