Snake em Core ML: probabilidades ao vivo, inferência local
A demonstração de terminal roda um modelo Laya real a cada movimento. O painel esquerdo mostra o tabuleiro, a pontuação e o comprimento da cobra; o painel direito mostra as probabilidades de direção, o risco estimado de beco sem saída, a alcançabilidade da comida, o tempo de predição medido, o engine, zero tokens de saída e o status de inferência offline.
Inicie em um Mac Apple Silicon
pip install 'laya-coreml[demo]'
hf download aac6fef/laya-multilingual-coreml-ane --local-dir models/snake
laya-coreml-snake --model ./models/snake --fps 12
Use um terminal de pelo menos 104 colunas × 35 linhas com uma fonte monoespaçada e suporte a truecolor. O carregamento do modelo e a compilação inicial do Core ML acontecem antes de o jogo começar e podem levar dezenas de segundos na primeira execução. Doze decisões por segundo é uma velocidade de apresentação legível, não um máximo de hardware.
O caminho do modelo é totalmente local após o download explícito. Iniciar o jogo
com um ID do Hub não armazenado em cache falha com instruções em vez de baixar enquanto
exibe OFFLINE. O runtime não precisa de MLX, PyTorch nem Transformers.
| Controle | Ação |
|---|---|
| Espaço | Pausa ou retoma |
Cima / Baixo, ou + / - |
Aumenta ou diminui a taxa de decisão |
| R | Inicia a próxima rodada com semente |
| Q / Ctrl-C | Sai e restaura o terminal |
A interface espera quando o terminal é pequeno demais. --no-alt-screen deixa o quadro final
no scrollback; --headless roda o mesmo modelo/jogo sem a exibição.
Duas opções de implantação
O pacote ANE padrão tem batch um e comprimento 96. Cada passo do jogo responde a três perguntas sequencialmente. Seu benchmark de ~5 ms para uma única pergunta não é um tempo de quadro de jogo completo. O pacote Snake GPU comum usa B3/L64/K4 e faz batching dessas três perguntas:
hf download aac6fef/laya-multilingual-coreml-snake --local-dir models/snake-gpu
laya-coreml-snake --model ./models/snake-gpu --fps 12
O rótulo do engine descreve as compute units do Core ML selecionadas. O grafo ANE
dedicado tem evidência separada de plano de execução e de trace de hardware no
relatório do ANE; CPU+ANE ainda permite trabalho no host.
O que o modelo controla
O código calcula os movimentos legais, o progresso seguro ao longo de um ciclo hamiltoniano e se
a comida é alcançável por células vazias. O Laya recebe esses recursos e retorna
probabilidades de direção e booleanas. O risco exibido é 1 - P(safe route);
é uma estimativa do modelo, não uma probabilidade calibrada de morrer no próximo movimento.
O escudo de segurança padrão restringe os movimentos executados ao progresso seguro no ciclo. A
interface mantém as probabilidades originais do modelo visíveis, mostra a direção proposta e
executada e incrementa um contador de intervenções visível quando elas
diferem. --unassisted executa o top-1 bruto do modelo sem esse escudo. Zero mortes
com o escudo não estabelece inteligência de Snake sem auxílio nem sobrevivência ilimitada.
Grave uma execução real e exporte mídia compartilhável
laya-coreml-snake --model ./models/snake --fps 12 --seed 7 \
--duration 75 --record snake.jsonl
# Requires ffmpeg: brew install ffmpeg
laya-coreml-snake export snake.jsonl --start 45 --seconds 20 \
--output snake.mp4 --gif snake.gif --gif-seconds 15
laya-coreml-snake export snake.jsonl --start 55 --output snake.png
As gravações incluem a proveniência do modelo, cada tabuleiro antes da ação anunciada,
probabilidades reais, latência de inferência, carimbos de tempo decorridos e um resumo final.
O exportador reutiliza a composição do terminal ao vivo e preserva o tempo de relógio de parede de 1×.
O RECORDED RUN · 1× na tela identifica um replay. O sidecar registra
hashes da origem e do renderizador. O FPS do vídeo amostra a gravação; ele não muda
o número de decisões do modelo nem acelera a reprodução.
Os arquivos de saída devem ser caminhos novos. --max-speed desativa a cadência e espera por cada
predição nova antes de se mover. Ele não pula chamadas ao modelo:
laya-coreml-snake --model ./models/snake --max-speed \
--duration 20 --record snake-fast.jsonl
Meça uma taxa de decisão estável
laya-coreml-snake benchmark --model ./models/snake \
--rates 20,30,40,50,60 --sweep-steps 120 --soak-steps 600 \
--seeds 101,102,103 --raw-steps 200 --output snake-benchmark.json
O benchmark primeiro mede o comportamento sem escudo e a operação sem limite, varre taxas-alvo e depois testa as taxas aprovadas em episódios mais longos com várias sementes. Passar exige zero mortes, saídas finitas, ordem de ciclo e progresso da comida preservados e no máximo 1% dos ticks excedendo o orçamento de computação ativo.
A medição inclui predição do modelo, trabalho do planejador, composição truecolor com Rich, serialização ANSI e atualizações do jogo. Os testes cadenciados incluem sleeps reais. A pintura do emulador de terminal fica de fora deste teste de renderização em memória. O resultado é a maior taxa testada aprovada nesta máquina e com estas sementes, não um máximo universal. Veja SNAKE_BENCHMARKS.md para a execução de lançamento.