Documentação

Laya Snake: demonstração local no terminal

Um jogo Snake real conduzido por previsões do Laya MLX em Apple silicon, com um layout de terminal concebido para um clipe social legível. O painel esquerdo mostra o tabuleiro, a pontuação, o comprimento e a melhor pontuação. O painel direito mostra quatro probabilidades de direção, o movimento executado, duas estimativas do modelo, o tempo de inferência medido, a taxa de decisões e o estado local/offline.

Uma execução Snake real gravada

Executar

A partir deste repositório, num Mac com Apple silicon:

uv run --extra demo laya-snake

O modelo predefinido é aac6fef/laya-multilingual-mlx, usando os pesos FP16 originais. A demonstração verifica primeiro models/hub/laya-multilingual-mlx e models/laya-multilingual, depois a cache local do Hugging Face. Nunca descarrega um modelo em falta durante o jogo. Numa cópia de trabalho nova, descarrega os pesos uma vez antes:

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

Usa um terminal com pelo menos 104 colunas × 35 linhas, com uma fonte monoespaçada e true color. O Menlo funciona bem no macOS. Um terminal mais pequeno pausa o jogo até ser redimensionado. O tamanho predefinido do tabuleiro é 24 × 16, o comprimento inicial é 6 e o objetivo de apresentação é 12 decisões/segundo.

O ecrã em direto respeita a variável NO_COLOR. Se a tua shell a definir, usa env -u NO_COLOR uv run --extra demo laya-snake para a apresentação a cores. O benchmark ativa explicitamente o true color para que esta definição de ambiente não possa alterar silenciosamente a sua carga de trabalho de renderização.

Controlo Ação
Barra de espaços Pausar / retomar
↑ / ↓, ou + / − Aumentar / diminuir o alvo com ritmo em 2 decisões/segundo
R Iniciar uma nova ronda com a seed seguinte
Q ou Ctrl-C Sair e restaurar o terminal

Modos úteis:

# 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 aceita um diretório local ou um ID do Hub já em cache. --width, --height, --seed e --initial-length configuram uma execução. Os tabuleiros têm de ter pelo menos 4 × 4, com uma dimensão par, porque o planeador de segurança usa um ciclo hamiltoniano. As teclas de velocidade afetam o modo com ritmo; --max-speed avança sempre assim que a decisão atual estiver concluída.

Gravar e exportar

A gravação contém estados reais do tabuleiro, probabilidades originais do modelo, ações executadas, tempos, proveniência do modelo e resumos da execução. Cada tabuleiro é emparelhado com a previsão feita antes do movimento seguinte.

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

A exportação MP4 usa por predefinição 1920 × 1080, 30 fotogramas de vídeo/segundo, H.264 e velocidade real original. Renderiza as mesmas células de terminal a partir dos dados gravados; é uma reprodução renderizada, e não uma captura de ecrã. Um rótulo visível RECORDED RUN · 1× e um sidecar JSON identificam isto. Exportar a 30 FPS não transforma um jogo de 12 decisões/segundo num jogo de 30 decisões/segundo. Em cada instante do vídeo, o exportador usa o fotograma de origem real mais recente. As gravações rápidas podem ter mais decisões do que a taxa de fotogramas de vídeo escolhida consegue mostrar.

Usa --headless ao gravar sem um terminal associado. A inferência do modelo continua a acontecer a cada movimento; o desenho em direto no terminal é omitido. Os ficheiros de saída não são substituídos. Inicia uma nova gravação quando mudares a apresentação ou a velocidade, em vez de misturares pausas ou reinícios num pequeno excerto social.

O MP4 usa por predefinição um excerto de 30 segundos, e --gif exporta os primeiros 15 segundos ao mesmo ritmo original. Usa --gif-seconds para alterar a duração do GIF. Os recursos sociais fornecidos incluem ambos os formatos, além de um cartaz PNG.

O que a IA faz

Esta é uma demonstração de decisão neural assistida por características, que usa o checkpoint Laya existente sem treino em Snake. Um planeador determinístico descreve as direções legais, o progresso seguro no ciclo e a conectividade atual das células vazias. O Laya recebe essas descrições, incluindo qual a direção segura que faz mais progresso. Devolve uma distribuição sobre UP, DOWN, LEFT e RIGHT. As barras de probabilidade são essas saídas originais do modelo.

O escudo de segurança predefinido executa a direção admissível de maior probabilidade do modelo. Se a primeira escolha em bruto for inadmissível, a UI mantém essa distribuição original e marca o movimento executado com SHIELD; o contador de intervenções aumenta. A execução predefinida é rotulada Laya + cycle safety. --unassisted desativa essa restrição de execução; ainda fornece ao modelo as características do planeador. Nenhum dos modos estabelece que o checkpoint consegue inferir a estratégia de Snake a partir de um tabuleiro não processado.

Uma chamada Agent.predict agrupa três perguntas reais por movimento:

Apresentação Significado real
NEXT MOVE probabilidades choice do Laya sobre as quatro direções descritas
DEAD-END RISK 1 − P(safe route available), a partir de uma resposta noul do Laya
FOOD REACHABLE resposta noul do Laya sobre o resumo fornecido da acessibilidade atual das células vazias
INFERENCE tempo real sincronizado de Agent.predict, incluindo tokenização e conversão do resultado
DECISIONS taxa recente medida de decisões concluídas
NETWORK OFFLINE carregamento local do checkpoint e inferência local com o modo offline do Hub; isto não desliga o Wi-Fi do Mac

As duas estimativas são saídas do modelo, não probabilidades calibradas de morte no Snake. A acessibilidade atual das células vazias também difere da acessibilidade futura depois de a cauda se mover. O risco pode manter-se baixo durante muito tempo porque o planeador fornece uma rota segura. Nenhum valor aleatório nem previsão pré-gravada é substituído durante o jogo em direto.

O escudo de ciclo preserva a ordem cíclica do corpo e nunca avança para lá da cauda ou da comida. Cada ação admitida faz progresso positivo em direção à comida atual. Para um tabuleiro inicialmente válido, isto dá um sucessor seguro disponível e um limite finito de progresso da comida. Os testes exercitam escolhas arbitrárias entre ações admissíveis até um tabuleiro ficar cheio.

Reproduzir o teste de velocidade

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

Usa --resume --output artifacts/snake/benchmark.json para manter os episódios concluídos e retomar a configuração gravada. Cada relatório identifica o checkpoint, o prompt, o ambiente e o hash da origem. Uma taxa falhada não precisa de mais seeds; uma taxa aprovada tem de completar todas as seeds pedidas.

O benchmark mede a inferência do modelo, o planeamento, a composição Rich, a serialização ANSI para memória e as atualizações do jogo. Exclui o carregamento do modelo, o warmup e a pintura do próprio emulador de terminal. Os episódios sem limite medem os movimentos/segundo reais sustentados. Os episódios com ritmo verificam separadamente se pelo menos 99% dos ticks ativos cabem no orçamento de computação pedido, em cada seed. O excesso de suspensão do SO permanece incluído na taxa alcançada reportada.

A execução final truecolor no M3 Max completou 8,160 decisões com zero mortes, incluindo 2,400 passos sem limite a 63.61 passos/segundo no total. A sua definição de orçamento de computação testada mais alta que passou foi 20 FPS, com uma taxa com ritmo alcançada de 18.69–18.94 passos/segundo. Definições com ritmo mais alto falharam o critério de prazo indicado, embora o jogo tenha permanecido vivo. Vê o relatório completo do benchmark Snake para resultados por seed, intervenções e limitações.

Para um clipe social, o alvo predefinido de 12 FPS dá tempo aos espectadores para ver a direção selecionada e a pontuação a crescer. --max-speed demonstra o débito medido. O vídeo de 30 segundos incluído preserva o ritmo original da sua execução de origem.