The laya-mlx Snake, off the MacA cobrinha do laya-mlx, fora do Mac
Push the snake.
Watch it find its way back.
Empurra a cobrinha.
Vê ela achar o caminho de volta.
Laya, a small decision model, picks every move on an NVIDIA card or plain CPU, on Windows or Linux. Plus one thing the original doesn't have: you get in the way with the keyboard. O Laya, um modelo de decisão pequeno, escolhe cada jogada numa placa NVIDIA ou só no processador, no Windows ou no Linux. E uma coisa que o original não tem: você atrapalha pelo teclado.
Use sapiensinteticos.com/laya-snake-cuda to set up the Laya snake on my machine.
Usa sapiensinteticos.com/laya-snake-cuda pra instalar a cobrinha do Laya na minha máquina.
Free. Apache-2.0. NVIDIA card or plain CPU. Grátis. Apache-2.0. Placa NVIDIA ou só o processador.
--chaos; live, they come from your keys.
Uma partida real gravada numa RTX 3070, reproduzida em 1×. Aqui os empurrões vêm do --chaos. Ao vivo, vêm das suas teclas.
Credit firstCrédito primeiro
This is a port. Most of it isn't ours. Isto é um port. A maior parte não é nossa.
The demoO demo
mizorewww/laya-mlx
Game rules, safety planner, prompts, terminal UI and game loop. Runs on Apple Silicon with MLX.
Regras do jogo, planejador de segurança, prompts, tela do terminal e laço do jogo. Roda em Apple Silicon com MLX.
Apache-2.0The modelO modelo
Laya, Convai Innovations
The model and its runtime. The weights come from Hugging Face on first run and are not included here.
O modelo e o runtime. Os pesos vêm do Hugging Face na primeira execução e não estão incluídos aqui.
Apache-2.0- PyTorch instead of MLXPyTorch no lugar do MLXCUDA or CPU through Convai's
layapackage, with Windows keyboard input.CUDA ou CPU pelo pacotelayada Convai, com leitura de teclado no Windows. - Disturb modeModo atrapalharWASD or the arrows push the snake off its path; when you let go, it steers back to the food.WASD ou as setas empurram a cobra pra fora do caminho. Quando você solta, ela volta pra comida.
Every derived file says at its top what was changed. The NOTICE carries both upstream notices. Cada arquivo derivado diz no topo o que mudou. O NOTICE carrega os avisos dos dois projetos de origem.
What Laya does hereO que o Laya faz aqui
Laya picks. It doesn't plan. O Laya escolhe. Não planeja.
Each move is one forward pass that answers three typed questions at once: which direction, is there a safe route, is the food reachable. It returns probabilities, with zero output tokens.
Cada jogada é uma passada do modelo que responde três perguntas tipadas de uma vez: qual direção, existe rota segura, a comida está alcançável. Ele devolve probabilidades, com zero token de saída.
The route itself is not Laya's work. A deterministic planner describes each option in plain words and Laya picks one. So the demo shows how fast and well-formed a typed decision is, not a model that plans on its own.
A rota não é trabalho do Laya. Um planejador determinístico descreve cada opção em palavras e o Laya escolhe uma. Então o demo mostra quão rápida e bem formada é uma decisão tipada, não um modelo que planeja sozinho.
- › UPSafe. Best route to food.0.71
- LEFTSafe. Slower route.0.18
- RIGHTUnsafe. Traps the snake.0.08
- DOWNBlocked. Collision.0.03
An optional shield only lets safe moves through. --unassisted turns it off, so you see Laya's raw pick.
Um escudo opcional só deixa passar jogada segura. --unassisted desliga, pra você ver a escolha crua do Laya.
Disturb modeModo atrapalhar
You're in the way. The goal stays. Você está no caminho. O objetivo fica.
The snake is still after the food; you are just in the way. A push that would kill it is not obeyed, and Laya takes that move instead. When you let go, the panel counts the moves until it eats again.
A cobra continua atrás da comida. Você só está no caminho. Empurrão que mataria a cobra não é obedecido, e o Laya faz aquela jogada no lugar. Quando você solta, o painel conta as jogadas até ela comer de novo.
Upstream, the snake never dies because it rides a route that visits every cell of the board (a Hamiltonian cycle).
No original, a cobra nunca morre porque segue uma rota que passa por todas as casas do tabuleiro (um ciclo hamiltoniano).
A push breaks that route. Until the body is back in cycle order, a breadth-first planner computes the safe moves on the fly.
O empurrão quebra essa rota. Até o corpo voltar pra ordem do ciclo, um planejador em largura calcula as jogadas seguras na hora.
| KeyTecla | |
|---|---|
| WASD or arrowsou setas | Push the snake that way while you keep pressing. A tap lasts about 3 moves.Empurra a cobra pra aquele lado enquanto você segura. Um toque dura umas 3 jogadas. |
| +- | SpeedVelocidade |
| Space | PausePausa |
| R | New roundNova rodada |
| Q | QuitSai |
Numbers we measuredNúmeros que medimos
A 2020 card. ~50 ms a move. Placa de 2020. ~50 ms por jogada.
--max-speed~18 a 20 jogadas por segundo no --max-speedMultilingual checkpoint, 1.5 GB of VRAM at peak. The 3070 also drives the monitor; with another GPU job running at the same time we saw up to ~170 ms. Checkpoint multilíngue, 1,5 GB de memória de vídeo no pico. A 3070 também segura o monitor. Com outro trabalho na placa ao mesmo tempo, vimos até ~170 ms.
InstallInstalar
Four steps. GPU optional. Quatro passos. Placa opcional.
Python 3.10 or newer. laya-snake download fetches the checkpoint (~0.65 GB) as plain files, pinned to the revision this port was tested on, because the Hugging Face cache uses symlinks that Windows denies without admin rights.
Python 3.10 ou mais novo. O laya-snake download baixa o checkpoint (~0,65 GB) como arquivo comum, travado na revisão em que o port foi testado, porque o cache do Hugging Face usa symlink e o Windows nega symlink sem admin.
| --device cpu | Run on the CPU (or cuda:1 for a second card)Roda na CPU (ou cuda:1 pra uma segunda placa) |
| --lang pt | Disturb-mode text in PortugueseTexto do modo atrapalhar em português |
| --unassisted | Shield off: Laya's top pick, as isEscudo desligado: a escolha do Laya, crua |
| --max-speed | One move per finished inferenceUma jogada por inferência terminada |
| --chaos N | Automatic push every N movesEmpurrão automático a cada N jogadas |
| --record run.jsonl | Save every decision; laya-snake export turns it into videoGrava cada decisão. O laya-snake export vira vídeo |
-
Clone and make a virtual envClona e cria o ambiente virtual
git clone https://github.com/inhabitants/laya-snake-cuda cd laya-snake-cuda python -m venv .venv
-
Activate itAtiva
# Windows .venv\Scripts\activate # Linux source .venv/bin/activate
-
NVIDIA card: PyTorch with CUDA first (skip on CPU)Placa NVIDIA: PyTorch com CUDA antes (pula na CPU)
pip install torch --index-url https://download.pytorch.org/whl/cu128
-
Install, fetch the model, playInstala, baixa o modelo, joga
pip install -e . laya-snake download laya-snake
No GPU: laya-snake --device cpu --fps 3. On Windows the board needs a terminal of at least 104 × 35; scripts\play-windows.cmd opens Windows Terminal at the right size. RTX 50 series needs cu128 or newer.
Sem placa: laya-snake --device cpu --fps 3. No Windows o tabuleiro pede um terminal de pelo menos 104 × 35. O scripts\play-windows.cmd abre o Windows Terminal no tamanho certo. RTX série 50 pede cu128 ou mais novo.
FAQ
Before you push. Antes de empurrar.
Is it faster than the Mac version?
No. laya-mlx reports 75.4 moves per second on an M3 Max with its optimized MLX path; a 3070 does about 18 to 20. The point is that it runs at all on the cards and CPUs most people have.
Does Laya play Snake well?
It picks well from options a planner already described, fast and in a clean format. Choosing the route is the planner's job, and that's upstream's design, kept on purpose.
Does it need the internet?
Only to download the weights once. After that the panel reads OFFLINE, and every decision happens on your machine.
Want to see Laya judge for real?
Try the sibling, Laya Invaders: no "Best" written next to any option, and a one-line rule playing next to it.
Who maintains it?
Nobody, on purpose. Published as is, Apache-2.0 like both upstream projects.
É mais rápido que a versão do Mac?
Não. O laya-mlx reporta 75,4 jogadas por segundo num M3 Max com o caminho otimizado do MLX. Uma 3070 faz uns 18 a 20. A graça é rodar nas placas e processadores que a maioria das pessoas tem.
O Laya joga bem a cobrinha?
Ele escolhe bem entre opções que um planejador já descreveu, rápido e num formato limpo. Escolher a rota é trabalho do planejador, e esse é o desenho do original, mantido de propósito.
Precisa de internet?
Só pra baixar os pesos uma vez. Depois o painel mostra OFFLINE, e toda decisão acontece na sua máquina.
Quer ver o Laya julgando de verdade?
Testa o irmão, o Laya Invaders: nenhuma opção vem com "Best" escrito do lado, e uma regra de uma linha joga junto.
Quem mantém?
Ninguém, de propósito. Publicado como está, Apache-2.0 como os dois projetos de origem.