Objetivo de esta entrada

Publicamos el código fuente que usamos en los experimentos de la IA de sudoku. El código solo se carga cuando abres un archivo.

Modelos utilizados

  • Qwen3-VL-2B-Instruct: se usó para el primer entrenamiento (lora_stoku), el entrenamiento por ensayo y error (lora_move), la búsqueda de casillas seguras (lora_cell) y las versiones 2B de la lectura del tablero y del juicio del número 1.
  • Qwen3-VL-8B-Instruct: se entrenó para la lectura del tablero (lora_board_read_8b) y las casillas imposibles por número (lora_digit1_illegal_8b). La resolución de la entrada 4 se hizo con el adaptador de 15 ciclos, y la importación desde foto usa el adaptador de lectura del tablero.
  • LoRA: peft, r=8, alpha=16. Todos los adaptadores usan la misma configuración.
  • Qwen2.5-1.5B-Instruct: distingue si un mensaje del chat web es una petición de jugada.
  • Gemma 4 (31B, E4B, mlx 4bit): solo se probó si podía leer las coordenadas del tablero.
  • Jugadas en la web: por ahora se eligen las jugadas seguras solo con código, sin el VLM.

Estructura de carpetas

  • dataset_*.py en la raíz: generación de datos de entrenamiento
  • *_train_loop.py y train_vlm.py en la raíz: entrenamiento LoRA y repetición de ciclos
  • sudoku_engine.py, sudoku_human_solver.py, vlm_digit_strategy.py: generación de sudokus, resolución al estilo humano y búsqueda de jugadas seguras
  • human_judge_*.py: la demo de juicios de la entrada 4
  • sudoku_vlm_server.py, chat_bridge_server.py: servidor de VLM y servidor de chat
  • main.py, main_window.py, photo_board_*.py: app de PyQt6 e importación desde foto
  • web: pantalla del sudoku web en Next.js, registros de resolución (db.ts) y panel de chat con la IA
  • solve.md: documento que describe cómo resuelven las personas

La configuración de despliegue del servidor, los scripts de monitorización y automatización, los datos de entrenamiento y los registros, y los pesos de los modelos quedan fuera de lo publicado. También se omitieron el código de operación web, como los anuncios y la lista de otros juegos, y los archivos de configuración, por lo que algunos import apuntan a archivos no publicados.

Código fuente completo

75 archivos · 19.630 líneas — abre una carpeta y haz clic en un archivo para cargar su código.

Raíz del proyecto48 archivos
board_read_demo.pypython · 256 líneas · 10KB

Cargando el código…

chat_bridge_server.pypython · 415 líneas · 13KB

Cargando el código…

dataset_digit_illegal.pypython · 128 líneas · 4KB

Cargando el código…

dataset_experience.pypython · 116 líneas · 4KB

Cargando el código…

dataset_human_solver.pypython · 205 líneas · 7KB

Cargando el código…

dataset_sudoku_coords.pypython · 159 líneas · 5KB

Cargando el código…

dataset_sudoku_read.pypython · 147 líneas · 5KB

Cargando el código…

dataset_sudoku.pypython · 104 líneas · 3KB

Cargando el código…

human_judge_one_game.pypython · 369 líneas · 14KB

Cargando el código…

human_judge_solve_cycle.pypython · 598 líneas · 22KB

Cargando el código…

main_window.pypython · 1348 líneas · 47KB

Cargando el código…

main.pypython · 30 líneas · 662B

Cargando el código…

make_board_snapshot.pypython · 107 líneas · 3KB

Cargando el código…

photo_board_prep.pypython · 761 líneas · 25KB

Cargando el código…

photo_board_read.pypython · 132 líneas · 4KB

Cargando el código…

README.mdmarkdown · 70 líneas · 2KB

Cargando el código…

requirements-train.txttext · 3 líneas · 62B

Cargando el código…

requirements-vlm.txttext · 7 líneas · 107B

Cargando el código…

requirements.txttext · 1 líneas · 13B

Cargando el código…

solve.mdmarkdown · 45 líneas · 6KB

Cargando el código…

sudoku_engine.pypython · 259 líneas · 9KB

Cargando el código…

sudoku_human_solver.pypython · 997 líneas · 33KB

Cargando el código…

sudoku_vlm_server.pypython · 825 líneas · 30KB

Cargando el código…

sudoku_vlm_solver.pypython · 111 líneas · 4KB

Cargando el código…

train_vlm.pypython · 491 líneas · 17KB

Cargando el código…

vlm_agent.pypython · 212 líneas · 7KB

Cargando el código…

vlm_board_read_sim.pypython · 527 líneas · 18KB

Cargando el código…

vlm_board_read_train_loop.pypython · 767 líneas · 23KB

Cargando el código…

vlm_board.pypython · 701 líneas · 22KB

Cargando el código…

vlm_cell_train_loop.pypython · 852 líneas · 28KB

Cargando el código…

vlm_coord_probe_gemma.pypython · 392 líneas · 12KB

Cargando el código…

vlm_coord_sim.pypython · 349 líneas · 12KB

Cargando el código…

vlm_curriculum_loop.pypython · 496 líneas · 15KB

Cargando el código…

vlm_diag.pypython · 426 líneas · 14KB

Cargando el código…

vlm_digit_illegal_sim.pypython · 181 líneas · 5KB

Cargando el código…

vlm_digit_illegal_train_loop.pypython · 717 líneas · 22KB

Cargando el código…

vlm_digit_strategy.pypython · 304 líneas · 10KB

Cargando el código…

vlm_experience.pypython · 279 líneas · 9KB

Cargando el código…

vlm_human_probe.pypython · 331 líneas · 10KB

Cargando el código…

vlm_human_train_loop.pypython · 177 líneas · 5KB

Cargando el código…

vlm_human.pypython · 137 líneas · 4KB

Cargando el código…

vlm_loader.pypython · 95 líneas · 3KB

Cargando el código…

vlm_play_sim.pypython · 454 líneas · 14KB

Cargando el código…

vlm_play_train_loop.pypython · 380 líneas · 13KB

Cargando el código…

vlm_prompt.pypython · 386 líneas · 16KB

Cargando el código…

vlm_protocol.pypython · 310 líneas · 8KB

Cargando el código…

vlm_qwen8b_base_probe.pypython · 274 líneas · 9KB

Cargando el código…

vlm_stage_sim.pypython · 357 líneas · 11KB

Cargando el código…

web/27 archivos
web/next.config.mjsjavascript · 4 líneas · 92B

Cargando el código…

web/package.jsonjson · 26 líneas · 569B

Cargando el código…

web/postcss.config.mjsjavascript · 8 líneas · 135B

Cargando el código…

web/src/app/api/chat/route.tstypescript · 78 líneas · 2KB

Cargando el código…

web/src/app/api/session/move/route.tstypescript · 60 líneas · 2KB

Cargando el código…

web/src/app/api/session/route.tstypescript · 146 líneas · 4KB

Cargando el código…

web/src/app/globals.csscss · 33 líneas · 564B

Cargando el código…

web/src/app/layout.tsxtsx · 43 líneas · 1KB

Cargando el código…

web/src/app/page.tsxtsx · 5 líneas · 112B

Cargando el código…

web/src/components/AiChatPanel.tsxtsx · 117 líneas · 4KB

Cargando el código…

web/src/components/BottomNav.tsxtsx · 65 líneas · 2KB

Cargando el código…

web/src/components/GameScreen.tsxtsx · 382 líneas · 13KB

Cargando el código…

web/src/components/HomeScreen.tsxtsx · 197 líneas · 8KB

Cargando el código…

web/src/components/Logo.tsxtsx · 45 líneas · 1KB

Cargando el código…

web/src/components/NumberPad.tsxtsx · 35 líneas · 991B

Cargando el código…

web/src/components/SettingsScreen.tsxtsx · 63 líneas · 3KB

Cargando el código…

web/src/components/SudokuApp.tsxtsx · 716 líneas · 19KB

Cargando el código…

web/src/components/SudokuBoard.tsxtsx · 96 líneas · 3KB

Cargando el código…

web/src/lib/db.tstypescript · 283 líneas · 7KB

Cargando el código…

web/src/lib/device-id.tstypescript · 21 líneas · 659B

Cargando el código…

web/src/lib/move-kinds.tstypescript · 1 líneas · 60B

Cargando el código…

web/src/lib/notes.tstypescript · 31 líneas · 916B

Cargando el código…

web/src/lib/sudoku.tstypescript · 232 líneas · 6KB

Cargando el código…

web/src/lib/types.tstypescript · 73 líneas · 2KB

Cargando el código…

web/src/types/node-sqlite.d.tstypescript · 13 líneas · 326B

Cargando el código…

web/tailwind.config.tstypescript · 43 líneas · 970B

Cargando el código…

web/tsconfig.jsonjson · 26 líneas · 578B

Cargando el código…