feat: maximize sorter demo realism and add safe agent MVP

Wire live classifyItem into continuous playback, add jam/E-stop cases,
presenter controls (seek/speed/hotkeys), quality modes, demo scripts,
audit docs, and a verify-only autonomous agent CLI with hard safety limits.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Даня Архипов
2026-07-15 16:53:35 +00:00
parent e89c728dd2
commit 985f7c327d
40 changed files with 3358 additions and 453 deletions

View File

@@ -0,0 +1,176 @@
# Отчёт о ёмкости сервера
**Хост:** OwlPrime (контейнеризованный Ubuntu 24.04)
**Дата измерений:** 2026-07-15
**Приложение:** OZON Tech Sorter Simulation → nginx `127.0.0.1:3100`, tunnel → https://arhipovdan.ru/
Легенда типов данных: **Измерено** = получено диагностикой на сервере; **Оценка** = вывод по мощности без полного бенчмарка нагрузки.
---
## 1. Точные характеристики сервера
| Ресурс | Фактическое значение | Тип |
| ------ | -------------------: | --- |
| CPU | Intel i5-9400F, 6 ядер, 2.9–4.1 GHz | Измерено |
| RAM | 15 GiB (≈13 GiB available) | Измерено |
| Swap | 15 GiB | Измерено |
| Диск | NVMe ~452 G, ~201 G свободно (~54% used) | Измерено |
| GPU | 2× NVIDIA GTX 1080 8 GB, driver 580.126.09, CUDA 13.0 | Измерено |
| GPU load | idle | Измерено |
| Load average | ~0.5–0.6 | Измерено |
| OS | Ubuntu 24.04 (containerized) | Измерено |
| Node (build env) | 20.20.2 | Измерено |
| Docker CLI в этой среде | отсутствует | Измерено |
| PM2 | отсутствует | Измерено |
| App listen | nginx 127.0.0.1:3100 | Измерено |
| Public | cloudflared → https://arhipovdan.ru/ | Измерено |
| Git repo | `/home/coder/arhipovdan/app` | Измерено |
---
## 2. Текущая нагрузка
| Показатель | Значение | Вывод |
| ---------- | -------: | ----- |
| Load avg | 0.5–0.6 при 6 cores | Большой запас CPU |
| GPU | idle | Можно зарезервировать под LLM/CV, но с осторожностью |
| Disk free | ~201 G | Достаточно для node_modules, dist, Playwright cache, артефактов агента |
| Swap | 15 GiB | Есть подушка, но swap thrash недопустим для демо |
**Оценка:** сервер сейчас в «лёгком» режиме (статика nginx + tunnel). Основная 3D-нагрузка — на **клиентском** WebGL, не на сервере.
---
## 3. Доступные ресурсы (безопасный остаток)
| Ресурс | Оценка свободного бюджета | Тип |
| ------ | ------------------------: | --- |
| CPU | 4–5 ядер можно отдавать фону при лимите 1 тяжёлого worker | Оценка |
| RAM | ~8–10 GiB «мягкий» бюджет до давления на swap | Оценка |
| VRAM (2×8 GB) | теоретически хватает на 7B quant; на практике тяжело и конкурирует | Оценка |
| Disk | десятки GB под кэши/отчёты без риска | Оценка |
---
## 4. Допустимые фоновые процессы
| Процесс | Допустимо 24/7? | Условия |
| ------- | --------------- | ------- |
| nginx + cloudflared (prod static) | Да | Без изменения без явного deploy |
| Vite preview :3101 (demo) | Краткосрочно | Не путать с prod :3100 |
| Vitest / build по запросу | Да | Последовательно, не параллельно с LLM |
| Playwright Chromium (1 worker) | Да, по расписанию | Не во время живого показа жюри |
| Agent MVP (verify-only) | Да, с лимитами | См. ниже |
| Локальная LLM 7B+ | Только эксперименты | Предпочтительно внешний API |
| CV training | Нет как 24/7 | Вынести на dedicated GPU / внешний |
| Server-side Three.js offscreen | Возможно, не нужно | Клиентский WebGL достаточен |
---
## 5. Возможность локальных моделей (LLM)
| Вариант | Вердикт | Комментарий |
| ------- | ------- | ----------- |
| Локальная 7B+ на 2×1080 | **Возможна технически, тяжело** | VRAM суммарно 16 GB; квантизация нужна; CPU/RAM конкурируют с Playwright |
| Внешний LLM API | **Рекомендуется** | Hybrid Variant C |
| Полностью локальный агент (Variant A) | Не рекомендуется на этом хосте | Риск OOM / деградации демо |
**Вывод:** локальный инференс — опциональный research-path; production-агент должен использовать **внешний API** с бюджетом.
---
## 6. Возможность Playwright / Chromium
| Критерий | Вердикт |
| -------- | ------- |
| CPU + RAM | Достаточно (**Измерено** ресурсы; **Оценка** нагрузки) |
| Параллелизм | **1 worker** |
| 24/7 непрерывный прогон | Нежелателен; лучше nightly / по событию |
| Конфликт с живой демо | Высокий — не запускать во время показа |
---
## 7. Возможность автономного агента
**Однозначный вывод: возможен с ограничениями.**
| Параметр | Лимит |
| -------- | ----- |
| Parallel workers | 1 |
| LLM | Hybrid (внешний API primary) |
| Auto merge to main | Запрещено |
| Auto production deploy | Запрещено |
| Режим MVP | verify-only (dry-run / run-once), без auto-patch |
| Kill switch | `agent/state/KILL` |
Подробности: `AI_AGENT_SAFETY_LIMITS.md`, `AUTONOMOUS_AI_AGENT_ARCHITECTURE.md`.
---
## 8. Рекомендуемые лимиты
| Лимит | Значение | Источник |
| ----- | -------: | -------- |
| maxParallelWorkers | 1 | Agent MVP + ёмкость |
| maxCycleMinutes | 25 | `agent/cli.mjs` LIMITS |
| maxChangedFiles | 12 | Agent LIMITS |
| maxDiffLines | 800 | Agent LIMITS |
| dailyLlmBudgetUsd | 5 | Agent LIMITS |
| Playwright workers | 1 | Capacity |
| CPU soft cap для агента | ≤50% одного ядра в idle-poll; burst на test/build | Оценка |
| RAM soft cap агент+Chromium | ≤4 GiB | Оценка |
| Запрет | merge main, prod deploy, чтение секретов в логи | Policy |
---
## 9. Режимы эксплуатации
| Режим | Что запущено | Параллелизм | Назначение |
| ----- | ------------ | ----------: | ---------- |
| Минимальный безопасный | nginx :3100 + tunnel | 0 background jobs | Стабильный публичный показ |
| Оптимальный | + редкие `agent dry-run`, nightly tests | 1 | Поддержание качества |
| Максимальный | + Playwright 1w + внешний LLM | 1 | Исследования (не во время демо) |
| Демонстрация | Только prod или preview; агент STOP | 0 | Живое жюри |
| Автономное AI-улучшение | Agent + external LLM, ветки feature/*, no deploy | 1 | Улучшения с human gate |
---
## 10. Сводная таблица ёмкости
| Ресурс | Фактическое значение | Текущая нагрузка | Безопасный лимит | Вывод |
| ------ | -------------------: | ---------------: | ---------------: | ----- |
| CPU 6c | i5-9400F | load ~0.5–0.6 | 1 тяжёлый worker | Запас есть |
| RAM 15 GiB | ≈13 available | низкая | ≤4 GiB агент+browser | OK |
| Swap 15 GiB | — | не давить | Избегать thrash | OK как подушка |
| Disk ~452G | ~201G free | 54% used | Оставить ≥50G free | OK |
| GPU 2×1080 | idle | 0% | Не для prod demo loop | LLM/CV опционально |
| Playwright | — | нет | 1 worker | Да |
| Agent 24/7 | — | MVP | с ограничениями | Да |
| Local LLM 7B+ | — | нет | эксперимент | Тяжело; лучше API |
| CV training | — | нет | external | Не на этом хосте 24/7 |
| Server 3D | — | нет | не требуется | Клиент WebGL |
---
## 11. Риски ёмкости
| Риск | Вероятность | Влияние | Митигация |
| ---- | ----------- | ------- | --------- |
| OOM при локальной LLM + Playwright | Средняя | Падение демо | Не совмещать; API LLM |
| Swap thrash во время показа | Низкая | Лаги tunnel/nginx | Режим «Демонстрация» = stop agent |
| Disk fill артефактами | Низкая | Сборка падает | Ротация `agent/reports`, screenshot dirs |
| Старый dist на :3100 | Высокая (процесс) | Жюри видит не то | Явный redeploy после merge |
| Нет docker CLI здесь | Факт | Сложнее ops | Документировать внешний deploy path |
---
## 12. Нужен ли дополнительный сервер?
| Вопрос | Ответ |
| ------ | ----- |
| Отдельный staging | Желателен при частом агенте; на текущем хосте можно эмулировать preview :3101 |
| Dedicated GPU server | Да, если цель — CV training / тяжёлый local LLM |
| Доп. сервер для static demo | Нет — текущий nginx достаточен |
**Итог:** для demo + ограниченного агента текущий сервер **достаточен**. Для тяжёлого ML — вынести.