гора.
GoraGen — платформа AI-генерации видео

Админ-панель

Что видит платформенный админ: персоны, очередь job'ов, провижениг GPU, LoRA-доска, events feed, Plan-100 control plane.

~4 мин чтения · 801 слов

TL;DR

Админка — отдельная React 19 SPA, доступная только админ-ролу. Управляет cross-workspace ресурсами: системными персонами, рецептами промптов, LoRA-моделями, очередью job'ов, Vast.ai инстансами, провижеинг-правилами, биллингом, аудитом. Главная новая фишка — Plan-100 Control Plane Console с координатором/раннером/реконсилером и shadow-tables для cutover'а.

Обзор админки

Админка GoraGen — это операционная диспетчерская. Через неё команда платформы видит что происходит со всем продуктом одновременно: сколько GPU арендовано, какие job'ы зависли, какие пользователи тратят больше всех, какие модели работают плохо.

Шелл — AdminShell.tsx с боковой панелью и keyboard shortcuts для быстрой навигации.

Dashboard

Главный экран — KPI и live-метрики:

  • Активные job'ы (по типам: video, storyboard, kling, lora_training)
  • Глубина очереди и средний lead time
  • Счётчик ошибок за последние 5/15/60 минут с фильтром по severity
  • Текущие Vast.ai instances и их состояние (booting / ready / running / cancelling / destroyed)

Через /admin/system/workers-health мониторится heartbeat-loop из workers-контейнера — если последний heartbeat старше 60 секунд, на dashboard загорается алерт «workers down».

Пользователи

/admin/users — браузер пользователей. По клику на user_id — детали: workspace, история генераций, баланс кредитов, daily-spend профиль, plan, IP'шники последних логинов.

Админ может:

  • Изменить план пользователя (Free → Starter → Pro)
  • Добавить/списать кредиты руками
  • Заимперсонэйтить (cookie с флагом impersonated_by=:admin_id) — для разбора жалоб «у меня не работает X»

Все эти действия пишутся в domain_events и видны в compliance для аудита.

Personas / Presets / Workflows

Три отдельных раздела CRUD для контентного «backbone» платформы:

  • /personas — системные персонажи. Каждая имеет lookbook (12+ кадров), пресеты (камера, фон, освещение), список LoRA-моделей.
  • /presets — библиотека шаблонов промптов и движений камеры.
  • /workflows — шаблоны ComfyUI-графов. Шаблон может быть привязан к модели (WAN, Hunyuan, LTX) и использоваться рендером.

Tasks

/admin/tasks — консоль job-очереди. Четыре вкладки: queued / live / recent / failed.

По клику на конкретный job — полные детали: workspace, user, instance, входные параметры, лог выполнения, прогрессовые WS-сообщения, оценка Gemini, итоговая стоимость. Если фейл — стек-трейс с Sentry-event-id.

Из live можно отменить (graceful — даём текущей итерации завершиться, не запускаем следующую). Из failed можно перезапустить (новый job с теми же параметрами).

Instances

/admin/instances — Vast.ai instance browser. Каждый instance:

  • offer_id, image, region, цена $/час
  • состояние (booting / ready / running / cancelling / destroyed)
  • текущий job (если есть)
  • стоимость с начала запуска
  • кнопки terminate / SSH-connect / re-init

Все ручные операции с инстансами теперь идут через Control Plane (см. ниже), а не как раньше — прямой вызов Vast API.

LoRA dashboard

/admin/lora — кросс-workspace вид всех LoRA-тренировок. Для каждой:

  • статус (preparing / captioning / training / validating / done / failed)
  • прогресс в процентах, ETA
  • ссылка на validation-grid (превью результата)
  • стоимость, длительность

Админ может убить зависшую тренировку, перезапустить failed-задачу, посмотреть лог kohya_ss.

System

/admin/system — техническая часть админки, разделена на под-вкладки:

  • audit — лог админских действий
  • health — расширенная health-страница (Phase 9): workers heartbeat, DB latency, disk usage, queue depth
  • provisioning — правила авто-провижеинга (когда платформа сама арендует новый instance, когда тушит)
  • spend — финансовая сводка по GPU-часам и API-вызовам Anthropic / Gemini / Kling
  • events — Phase 9 domain events feed (append-only, last 1000 событий) с JSON-модалкой для каждого

Plan-100 Control Plane Console

/admin/system/control-plane — отдельная страница для управления координированной системой провижеинга.

Это переход с прямой работы с Vast API на оркестрационную модель, где между админкой и Vast стоят три loop'а:

  • Coordinator — читает instance_requests (заявки на провижеинг), проверяет parallel-limits, velocity-guard, инсертит provision_attempts.
  • Runner — берёт claimed attempts, вызывает scripts/vast_provision.ensure_instance(...), применяет terminal reducer.
  • Reconciler — раз в N секунд сканирует stale leases, force-terminates застрявшие в cancelling, освобождает destroyed instances.

Все три — leader-elected через provision_leader таблицу. Если контейнер с лидером умирает, второй (если есть) перехватывает лидерство через 60 секунд.

На странице:

  • Live-статус трёх loop'ов (running / lost / draining)
  • Метрики observability: 7 чисел (active requests, queued attempts, success rate, etc.)
  • Кнопка Pause — emergency-флаг, который останавливает все три loop'а через 30 секунд
  • Кнопка Resume — снимает emergency-pause

Под капотом — 5 cutover-флагов с TTL-кэшем 60 секунд: workflow_spawn, auto_provisioner, parallel_limits, provisioning_cutover_admin_rule_action, provisioning_emergency_pause. Можно flip'нуть отдельно — например, отключить auto-provisioner, оставив остальные.

Settings

/admin/settings — системные настройки, рантайм-тюнируемые:

  • maintenance_mode — глобальный 503 для не-админов
  • prices — стоимости генерации (per-shot, per-second, per-LoRA-train)
  • retention — сроки хранения видео, событий, идемпотентных ключей

Изменение настройки сразу видно всем worker'ам через polling раз в 60 секунд.

Events feed

Phase 9 ввёл append-only domain_events. Каждое значимое событие в платформе (новый user, новый job, фейл провижеинга, апгрейд плана) пишется отдельной строкой с типом, актором, payload-JSON.

В админке /admin/system/events — реактивная лента с фильтрами по типу события, актору, диапазону дат. Двойной клик — модалка с pretty-printed JSON.

Это даёт две вещи: forensic-аудит (что произошло за последние сутки) и event-source для интеграций (выкладка событий в external webhooks через webhook_dispatcher).

GoraGen — обзор админки и Control Plane · hiregora.com