Документация

Laya Snake: локальное терминальное демо

Настоящая игра Snake, управляемая предсказаниями Laya MLX на Apple silicon, с терминальной раскладкой, рассчитанной на читаемый социальный клип. Левая панель показывает поле, счёт, длину и лучший счёт. Правая панель показывает четыре вероятности направлений, выполненный ход, две оценки модели, измеренное время вывода, частоту решений и локальный/офлайн-статус.

Реальный записанный запуск Snake

Запуск

Из этого репозитория на Mac с Apple silicon:

uv run --extra demo laya-snake

Модель по умолчанию — aac6fef/laya-multilingual-mlx, использующая исходные веса FP16. Демо сначала проверяет models/hub/laya-multilingual-mlx и models/laya-multilingual, затем локальный кэш Hugging Face. Оно никогда не скачивает отсутствующую модель во время игры. При первом клонировании скачайте веса один раз заранее:

uv run --extra demo hf download aac6fef/laya-multilingual-mlx \
  --local-dir models/hub/laya-multilingual-mlx
uv run --extra demo laya-snake

Используйте терминал размером не менее 104 столбцов × 35 строк с моноширинным шрифтом и истинным цветом. Menlo хорошо работает на macOS. Меньший терминал ставит игру на паузу до изменения размера. Размер поля по умолчанию — 24 × 16, начальная длина — 6, а цель презентации — 12 решений в секунду.

Живой дисплей уважает NO_COLOR. Если ваша оболочка задаёт его, используйте env -u NO_COLOR uv run --extra demo laya-snake для цветной презентации. Бенчмарк явно включает истинный цвет, чтобы эта настройка окружения не могла молча изменить его рабочую нагрузку рендеринга.

Управление Действие
Пробел Пауза / продолжить
↑ / ↓, или + / − Увеличить / уменьшить заданный темп на 2 решения в секунду
R Начать новый раунд со следующим seed
Q или Ctrl-C Выйти и восстановить терминал

Полезные режимы:

# Every move waits for a new inference, with no pacing delay.
uv run --extra demo laya-snake --max-speed

# Optional measured compilation + prefix-reuse path.
uv run --extra demo laya-snake --optimize --max-speed

# Use the fixed computation-budget setting validated on the recorded M3 Max.
uv run --extra demo laya-snake --fps 20

# Execute the model's raw first choice without the execution safety shield.
uv run --extra demo laya-snake --unassisted

# A finite run without a terminal display.
uv run --extra demo laya-snake --headless --steps 600 --max-speed

--model принимает локальный каталог или уже закэшированный Hub ID. --width, --height, --seed и --initial-length настраивают запуск. Поля должны быть не менее 4 × 4 с одним чётным измерением, потому что планировщик безопасности использует гамильтонов цикл. Клавиши скорости влияют на режим с темпом; --max-speed всегда продвигается, как только текущее решение завершено.

Запись и экспорт

Запись содержит реальные состояния поля, исходные вероятности модели, выполненные действия, тайминги, происхождение модели и сводки запуска. Каждое поле сопоставлено с предсказанием, сделанным до его следующего хода.

uv run --extra demo laya-snake --fps 12 --duration 100 \
  --record artifacts/snake/run.jsonl

# ffmpeg is required for video export; on macOS: brew install ffmpeg
uv run --extra demo laya-snake export artifacts/snake/run.jsonl \
  --start 65 --seconds 30 --output artifacts/snake/demo.mp4 \
  --gif artifacts/snake/demo.gif

uv run --extra demo laya-snake export artifacts/snake/run.jsonl \
  --start 85 --output artifacts/snake/poster.png

Экспорт MP4 по умолчанию — 1920 × 1080, 30 видео кадров/секунду, H.264 и оригинальная скорость реального времени. Он рендерит те же ячейки терминала из записанных данных; это отрендеренное воспроизведение, а не захват экрана. Видимая метка RECORDED RUN · 1× и JSON-сайдкар идентифицируют это. Экспорт при 30 FPS не превращает игру с 12 решениями/секунду в игру с 30 решениями/секунду. На каждой временной метке видео экспортёр использует самый свежий реальный исходный кадр. Быстрые записи могут содержать больше решений, чем может отобразить выбранная частота кадров видео.

Используйте --headless при записи без подключённого терминала. Вывод модели всё равно происходит на каждый ход; живая отрисовка терминала опускается. Выходные файлы не перезаписываются. Начинайте новую запись при смене презентации или скорости, а не смешивайте паузы или сбросы в коротком социальном фрагменте.

MP4 по умолчанию занимает 30-секундный фрагмент, а --gif экспортирует его первые 15 секунд в том же оригинальном темпе. Используйте --gif-seconds, чтобы изменить длительность GIF. Поставляемые социальные ресурсы включают оба формата плюс PNG-постер.

Что делает ИИ

Это демо нейронного решения с вспомогательными признаками, использующее существующий чекпойнт Laya без обучения на Snake. Детерминированный планировщик описывает допустимые направления, безопасный прогресс цикла и текущую связность пустых ячеек. Laya получает эти описания, включая то, какое безопасное направление даёт наибольший прогресс. Она возвращает распределение по UP, DOWN, LEFT и RIGHT. Столбцы вероятностей — это исходные выходы модели.

Щит безопасности по умолчанию выполняет допустимое направление модели с наибольшей вероятностью. Если исходный первый выбор недопустим, UI сохраняет это исходное распределение и помечает выполненный ход как SHIELD; счётчик вмешательств увеличивается. Запуск по умолчанию помечен Laya + cycle safety. --unassisted отключает это ограничение выполнения; он всё равно даёт модели признаки планировщика. Ни один из режимов не устанавливает, что чекпойнт может выводить стратегию Snake из необработанного поля.

Один вызов Agent.predict объединяет в пакет три реальных вопроса на ход:

Отображение Реальное значение
NEXT MOVE вероятности choice Laya по четырём описанным направлениям
DEAD-END RISK 1 − P(safe route available), из ответа noul Laya
FOOD REACHABLE ответ noul Laya о предоставленной сводке текущей достижимости пустых ячеек
INFERENCE синхронизированное настенное время Agent.predict, включая токенизацию и преобразование результата
DECISIONS недавняя измеренная частота завершённых решений
NETWORK OFFLINE локальная загрузка чекпойнта и локальный вывод с офлайн-режимом Hub; это не выключает Wi-Fi на Mac

Две оценки — это выходы модели, а не калиброванные вероятности смерти в Snake. Текущая достижимость пустых ячеек также отличается от будущей достижимости после движения хвоста. Риск может оставаться низким долгое время, потому что планировщик предоставляет безопасный маршрут. Во время живой игры не подставляются никакие случайные значения или предзаписанные предсказания.

Щит цикла сохраняет циклический порядок тела и никогда не продвигается за хвост или еду. Каждое допущенное действие даёт положительный прогресс к текущей еде. Для изначально корректного поля это даёт доступного безопасного преемника и конечную границу прогресса к еде. Тесты перебирают произвольные выборы среди допустимых действий, пока поле не заполнится.

Воспроизведение теста скорости

uv run --extra demo laya-snake benchmark \
  --rates 10,12,15,18,20,25,30,35,40,45,50,60 \
  --sweep-steps 120 --soak-steps 600 --seeds 101,102,103,104 \
  --output artifacts/snake/benchmark.json

Используйте --resume --output artifacts/snake/benchmark.json, чтобы сохранить завершённые эпизоды и возобновить записанную конфигурацию. Каждый отчёт идентифицирует чекпойнт, промпт, окружение и хеш источника. Проваленная частота не требует дальнейших seed; прошедшая частота должна завершить каждый запрошенный seed.

Бенчмарк измеряет вывод модели, планирование, композицию Rich, сериализацию ANSI в память и обновления игры. Он исключает загрузку модели, прогрев и собственную отрисовку эмулятора терминала. Эпизоды без ограничения скорости измеряют реальные устойчивые ходы/секунду. Эпизоды с темпом отдельно проверяют, укладывается ли не менее 99% активных тиков в запрошенный вычислительный бюджет, на каждом seed. Превышение из-за сна ОС остаётся включённым в сообщаемую достигнутую частоту.

Финальный запуск истинного цвета на M3 Max завершил 8 160 решений с нулём смертей, включая 2 400 шагов без ограничения скорости при 63.61 шагов/секунду в целом. Его наибольшая прошедшая протестированная настройка вычислительного бюджета — 20 FPS, с достигнутой частотой с темпом 18.69–18.94 шагов/секунду. Более высокие настройки с темпом не прошли заявленный критерий дедлайна, при этом игра оставалась живой. См. полный отчёт о бенчмарке Snake для результатов по seed, вмешательств и ограничений.

Для социального клипа цель по умолчанию 12 FPS даёт зрителям время увидеть выбранное направление и растущий счёт. --max-speed демонстрирует измеренную пропускную способность. Включённое 30-секундное видео сохраняет оригинальный темп своего исходного запуска.