harness/decision.py — клиент /v1/systemone по схеме router42 бенча: механика — быстрый путь, decision-модель — арбитр, недоступна → фолбэк. - порядок батча задач: из 9 старейших первой — самая ценная для AUM (on); - тема инициативной реплики: выбор вместо round-robin (on); - серая зона гейта (только warn/info): P(нужен LLM) < 0.35 → тихий такт (shadow); - cli.py decide: статус бэкендов, вопрос 2–9 вариантов / P(да), --stats. Бэкенды: облако clef:27b (~0.7 с, SIMBIOT_DECISION_API_KEY) → nimble на CPU (10–30 с); предохранитель на бэкенд, кеш детерминированных ответов, DecisionMade (backend/model/ms/applied) — policy trace для GA-сшивки. Дефолт SIMBIOT_DECISION=off — старые тесты герметичны. Тест: tests/test_decision.py 34 PASS (фейковый эндпоинт); полный набор — без регрессий. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
106 lines
7.5 KiB
Markdown
106 lines
7.5 KiB
Markdown
---
|
||
name: systemone-bench
|
||
description: Use when choosing between 3+ non-numeric action options via local Ollama decision endpoint (/v1/systemone, model nimble), or when optimizing action sequences with GA against a simulator. Turns "which of many options" into a measured, hierarchical choice instead of free-form LLM guessing.
|
||
metadata:
|
||
origin: t-261005074437-39a9b0 (внедрение systemone-bench в архитектуру харнеса)
|
||
code: /root/systemone-bench (clone symbiot/systemone-bench @ git.cil.by; README.md там же)
|
||
scope: любые тики харнеса, где нужен выбор действия из каталога >9 кандидатов; симуляция политик стартапа
|
||
---
|
||
|
||
# systemone-bench: decision-эндпоинт + GA-оптимизация выбора
|
||
|
||
## Trigger rule
|
||
|
||
- [ ] Нужно выбрать ОДНО действие из >9 однородных опций (команды, конфиги, политики)
|
||
- [ ] Опции разбиты (или разбиваются) на группы по 2–8 в группе
|
||
- [ ] Есть критерий качества выбора (fitness / AUM / метрика), хотя бы приблизительный
|
||
- [ ] Нужен выбор на симуляторе перед применением в бою (бесплатные прогоны)
|
||
|
||
Не использовать: для бинарных решений (это noul), для абсолютных оценок тяжести
|
||
(score плох на абсолютных шкалах — подтверждено сюитом), если опций ≤ 9 (делай
|
||
обычный choice без иерархии).
|
||
|
||
## Steps
|
||
|
||
### 1. Проверка окружения
|
||
|
||
```bash
|
||
curl -s http://127.0.0.1:11434/api/tags | grep -o '"nimble"' # модель на месте
|
||
cd /root/systemone-bench && python3 ga/ga.py --smoke # ~13с, должен быть зелёный
|
||
cd /root/systemone-bench && python3 harness/hier.py --model nimble --quick # ~мин, e2e ~81% на quick-16
|
||
```
|
||
|
||
Контракт эндпоинта: `choice` — criteria **объект**, 2–26 опций; `score` —
|
||
criteria **массив** 2–26 уровней, `score = Σ i·pᵢ`; `noul` — вероятность «да».
|
||
1–64 вопроса на запрос, тело ≤ 64 KiB, промпт ≤ 8194 токенов. `confidence` =
|
||
концентрация распределения, НЕ вероятность правильности — не опирайся на него
|
||
как на calibration.
|
||
|
||
### 2. Схема выбора: top-2 группы → choice по шортлисту ≤ 9
|
||
|
||
Главная рекомендация (README, рекомендация №1): flat-choice по всем 64 командам
|
||
падает до 0% (эндпоинт режет >26 и точность падает), иерархия:
|
||
|
||
1. **stage1 (score)**: по группам (8 групп) — взять **top-2** группы, не top-1
|
||
(top-2 hit 93.8–84.4% vs top-1 87.5–64.1% — у ~40% команд легитимный
|
||
«второй дом» в таксономии).
|
||
2. **stage2 (choice)**: объединённый шортлист кандидатов из двух групп —
|
||
**строго ≤ 9** (точность 100% на шортлисте 6 → 50% на 10).
|
||
3. **stage3 (score)**: если выбранная команда имеет параметры — ранжирование
|
||
значений score-массивом (gold #1 в 96.9–100%).
|
||
|
||
Расчётный эффект: e2e 57.8% → ~78% (top-2 выборка × stage2 92%). Латентность
|
||
полного конвейера ~520–580 мс — годится для тика, не для realtime.
|
||
|
||
### 3. GA: поиск последовательностей действий
|
||
|
||
```bash
|
||
cd /root/systemone-bench && python3 ga/ga.py # полный прогон (pop 200 × 100 gen, ~17с)
|
||
python3 ga/ga2.py --neardeath # при каком runway GA берёт опасные команды (layoff/delay_payroll)
|
||
python3 ga/ga2.py --robust # максимин по crunch/base/growth/dying
|
||
```
|
||
|
||
Фитнес = терминальный AUM основателя. GA бьёт greedy на +27–43% (8 нед) и
|
||
random search до +59%. Что уже известно (не переоткрывать):
|
||
|
||
- GA эмерджентно строит цепочки пререкрешитов (pricing_power → raise_prices_10).
|
||
- Опасные команды не выбирает при runway ≥ 2.5 мес — сигналят о реальном риске.
|
||
- **Дыра (найдена smoke-прогоном)**: `sell_secondary` даёт +100 personal cash и
|
||
спасает dying без опасных команд — симулятор вознаграждает личный кэш без
|
||
штрафа за health компании. Обход: гейт по здоровью компании (напр., фитнес
|
||
умножается на флаг health > порога, или штраф за dilution в personal cash).
|
||
|
||
### 4. Интеграция в тик харнеса
|
||
|
||
Внедрено: `harness/decision.py` (README харнеса, раздел «Decision-модель
|
||
nimble») — порядок батча задач, тема инициативы, серая зона гейта (shadow),
|
||
CLI `cli.py decide -q "вопрос" -o ключ=описание ... -s "ситуация"` для
|
||
выбора из 2–9 вариантов прямо из тика. Бэкенды: Ollama Cloud `clef:27b`
|
||
(~0.7 с, ключ SIMBIOT_DECISION_API_KEY) → запасная локальная nimble на
|
||
CPU (10–30 с). Из decision-моделей облака проверены: clef:27b — работает;
|
||
beam, muse-spark-open, glm-5.3-flash и прочие LLM — «not a decision
|
||
model»; nimble в облаке нет. Батчи вопросы в один запрос (до 64).
|
||
|
||
Исходная схема:
|
||
|
||
На тиках, где нужен выбор действия: собрать кандидатов → разбить на группы →
|
||
stage1 score (top-2) → choice ≤9 → применить → записать выбор и исход событием
|
||
в стор (для последующей GA-сшивки policy trace с fitness).
|
||
|
||
## Quality gates
|
||
|
||
- Шортлист stage2 **всегда ≤ 9**; если объединение top-2 групп даёт >9 — режь
|
||
по stage1-score внутри групп.
|
||
- stage1 всегда top-2, никогда top-1.
|
||
- Для тяжести/абсолютов не использовать score — только ранжирование однородного.
|
||
- Прогон ga/ga.py --smoke обязателен перед использованием GA-результатов.
|
||
- Результат каждого GA-эксперимента фиксировать событием на доску (cli.py task/complete
|
||
или event), не оставлять только в ga2-results.json.
|
||
- Не доверять `confidence` как вероятности правильности.
|
||
|
||
## References
|
||
|
||
- README.md репо /root/systemone-bench — контракт эндпоинта, все метрики сессии 2026-10-04
|
||
- harness/eval.py — 5 сюитов (шортлист, permutation, noul, score-тяжесть, батчинг)
|
||
- ga/ga.py, ga/ga2.py — GA и сценарные эксперименты; ga-results.json, ga2-results.json
|
||
- docs/systemone-bench-integration.md (репо харнеса) — интеграция и связь с AUM-петлёй
|