Objetivo deste post

Publicamos o código-fonte usado nos experimentos da IA de sudoku. O código só é carregado quando você abre um arquivo.

Modelos usados

  • Qwen3-VL-2B-Instruct: usado no primeiro treino (lora_stoku), no treino por tentativa e erro (lora_move), na busca de casas certas (lora_cell) e nas versões 2B da leitura de tabuleiro e do julgamento do número 1.
  • Qwen3-VL-8B-Instruct: treinado para leitura de tabuleiro (lora_board_read_8b) e para casas proibidas por número (lora_digit1_illegal_8b). A resolução do post 4 usou o adaptador de 15 ciclos, e a importação por foto usa o adaptador de leitura de tabuleiro.
  • LoRA: peft, r=8, alpha=16. Todos os adaptadores usam a mesma configuração.
  • Qwen2.5-1.5B-Instruct: decide se uma mensagem do chat na web é um pedido de jogada.
  • Gemma 4 (31B, E4B, mlx 4bit): testado apenas para ver se conseguia ler as coordenadas do tabuleiro.
  • Jogada na web: hoje é escolhida apenas por código, sem o VLM.

Estrutura de pastas

  • dataset_*.py na raiz: geração de dados de treino
  • *_train_loop.py e train_vlm.py na raiz: treino LoRA e repetição de ciclos
  • sudoku_engine.py, sudoku_human_solver.py, vlm_digit_strategy.py: geração de quebra-cabeças, resolução no estilo humano, busca de jogadas certas
  • human_judge_*.py: a demonstração de julgamento do post 4
  • sudoku_vlm_server.py, chat_bridge_server.py: servidor de VLM e servidor de chat
  • main.py, main_window.py, photo_board_*.py: app em PyQt6 e importação por foto
  • web: tela do sudoku na web em Next.js, registros de resolução (db.ts), painel de chat com a IA
  • solve.md: documento que descreve como as pessoas resolvem

As configurações de implantação do servidor, os scripts de monitoramento e automação, os dados de treino e logs e os pesos dos modelos ficaram de fora da publicação. O código de operação da web, como anúncios e a lista de outros jogos, e os arquivos de configuração também foram retirados, por isso alguns imports apontam para arquivos não publicados.

Código-fonte completo

75 arquivos · 19.630 linhas — abra uma pasta e clique em um arquivo para carregar o código.

Raiz do projeto48 arquivos
board_read_demo.pypython · 256 linhas · 10KB

Carregando o código…

chat_bridge_server.pypython · 415 linhas · 13KB

Carregando o código…

dataset_digit_illegal.pypython · 128 linhas · 4KB

Carregando o código…

dataset_experience.pypython · 116 linhas · 4KB

Carregando o código…

dataset_human_solver.pypython · 205 linhas · 7KB

Carregando o código…

dataset_sudoku_coords.pypython · 159 linhas · 5KB

Carregando o código…

dataset_sudoku_read.pypython · 147 linhas · 5KB

Carregando o código…

dataset_sudoku.pypython · 104 linhas · 3KB

Carregando o código…

human_judge_one_game.pypython · 369 linhas · 14KB

Carregando o código…

human_judge_solve_cycle.pypython · 598 linhas · 22KB

Carregando o código…

main_window.pypython · 1.348 linhas · 47KB

Carregando o código…

main.pypython · 30 linhas · 662B

Carregando o código…

make_board_snapshot.pypython · 107 linhas · 3KB

Carregando o código…

photo_board_prep.pypython · 761 linhas · 25KB

Carregando o código…

photo_board_read.pypython · 132 linhas · 4KB

Carregando o código…

README.mdmarkdown · 70 linhas · 2KB

Carregando o código…

requirements-train.txttext · 3 linhas · 62B

Carregando o código…

requirements-vlm.txttext · 7 linhas · 107B

Carregando o código…

requirements.txttext · 1 linhas · 13B

Carregando o código…

solve.mdmarkdown · 45 linhas · 6KB

Carregando o código…

sudoku_engine.pypython · 259 linhas · 9KB

Carregando o código…

sudoku_human_solver.pypython · 997 linhas · 33KB

Carregando o código…

sudoku_vlm_server.pypython · 825 linhas · 30KB

Carregando o código…

sudoku_vlm_solver.pypython · 111 linhas · 4KB

Carregando o código…

train_vlm.pypython · 491 linhas · 17KB

Carregando o código…

vlm_agent.pypython · 212 linhas · 7KB

Carregando o código…

vlm_board_read_sim.pypython · 527 linhas · 18KB

Carregando o código…

vlm_board_read_train_loop.pypython · 767 linhas · 23KB

Carregando o código…

vlm_board.pypython · 701 linhas · 22KB

Carregando o código…

vlm_cell_train_loop.pypython · 852 linhas · 28KB

Carregando o código…

vlm_coord_probe_gemma.pypython · 392 linhas · 12KB

Carregando o código…

vlm_coord_sim.pypython · 349 linhas · 12KB

Carregando o código…

vlm_curriculum_loop.pypython · 496 linhas · 15KB

Carregando o código…

vlm_diag.pypython · 426 linhas · 14KB

Carregando o código…

vlm_digit_illegal_sim.pypython · 181 linhas · 5KB

Carregando o código…

vlm_digit_illegal_train_loop.pypython · 717 linhas · 22KB

Carregando o código…

vlm_digit_strategy.pypython · 304 linhas · 10KB

Carregando o código…

vlm_experience.pypython · 279 linhas · 9KB

Carregando o código…

vlm_human_probe.pypython · 331 linhas · 10KB

Carregando o código…

vlm_human_train_loop.pypython · 177 linhas · 5KB

Carregando o código…

vlm_human.pypython · 137 linhas · 4KB

Carregando o código…

vlm_loader.pypython · 95 linhas · 3KB

Carregando o código…

vlm_play_sim.pypython · 454 linhas · 14KB

Carregando o código…

vlm_play_train_loop.pypython · 380 linhas · 13KB

Carregando o código…

vlm_prompt.pypython · 386 linhas · 16KB

Carregando o código…

vlm_protocol.pypython · 310 linhas · 8KB

Carregando o código…

vlm_qwen8b_base_probe.pypython · 274 linhas · 9KB

Carregando o código…

vlm_stage_sim.pypython · 357 linhas · 11KB

Carregando o código…

web/27 arquivos
web/next.config.mjsjavascript · 4 linhas · 92B

Carregando o código…

web/package.jsonjson · 26 linhas · 569B

Carregando o código…

web/postcss.config.mjsjavascript · 8 linhas · 135B

Carregando o código…

web/src/app/api/chat/route.tstypescript · 78 linhas · 2KB

Carregando o código…

web/src/app/api/session/move/route.tstypescript · 60 linhas · 2KB

Carregando o código…

web/src/app/api/session/route.tstypescript · 146 linhas · 4KB

Carregando o código…

web/src/app/globals.csscss · 33 linhas · 564B

Carregando o código…

web/src/app/layout.tsxtsx · 43 linhas · 1KB

Carregando o código…

web/src/app/page.tsxtsx · 5 linhas · 112B

Carregando o código…

web/src/components/AiChatPanel.tsxtsx · 117 linhas · 4KB

Carregando o código…

web/src/components/BottomNav.tsxtsx · 65 linhas · 2KB

Carregando o código…

web/src/components/GameScreen.tsxtsx · 382 linhas · 13KB

Carregando o código…

web/src/components/HomeScreen.tsxtsx · 197 linhas · 8KB

Carregando o código…

web/src/components/Logo.tsxtsx · 45 linhas · 1KB

Carregando o código…

web/src/components/NumberPad.tsxtsx · 35 linhas · 991B

Carregando o código…

web/src/components/SettingsScreen.tsxtsx · 63 linhas · 3KB

Carregando o código…

web/src/components/SudokuApp.tsxtsx · 716 linhas · 19KB

Carregando o código…

web/src/components/SudokuBoard.tsxtsx · 96 linhas · 3KB

Carregando o código…

web/src/lib/db.tstypescript · 283 linhas · 7KB

Carregando o código…

web/src/lib/device-id.tstypescript · 21 linhas · 659B

Carregando o código…

web/src/lib/move-kinds.tstypescript · 1 linhas · 60B

Carregando o código…

web/src/lib/notes.tstypescript · 31 linhas · 916B

Carregando o código…

web/src/lib/sudoku.tstypescript · 232 linhas · 6KB

Carregando o código…

web/src/lib/types.tstypescript · 73 linhas · 2KB

Carregando o código…

web/src/types/node-sqlite.d.tstypescript · 13 linhas · 326B

Carregando o código…

web/tailwind.config.tstypescript · 43 linhas · 970B

Carregando o código…

web/tsconfig.jsonjson · 26 linhas · 578B

Carregando o código…