Objetivo deste post

Este post publica todo o código-fonte do MariaGO que implementa o que foi explicado passo a passo nos posts 1 a 7. São muitos arquivos, então eles estão recolhidos por pasta, e o código só é carregado quando você abre um arquivo.

Modelos usados

  • Modelo em produção: Qwen3-VL-8B-Instruct + adaptador LoRA lora_mix_qwen_r5 (rank 16, alpha 32)
  • Forma de entrada: modo text-only, que envia um tabuleiro em texto alinhado com dois dígitos (aligned) em vez de uma imagem do tabuleiro
  • Ambiente de treinamento e inferência: treinamento e serviço do LoRA com MLX (mlx-vlm) em um Mac Studio (Apple Silicon)
  • Dados de treinamento: registros SGF do KGS de 4 dan para cima, do u-go.net, com foco nas jogadas do vencedor e peso extra nas posições de atari e captura, misturados com dados exclusivos de leitura de coordenadas
  • Ordem de treinamento: partindo do adaptador exclusivo de coordenadas, cinco rodadas de treinamento de r1 a r5, mudando a proporção entre dados de coordenadas e de jogadas. A cada rodada, só os adaptadores que passaram com 90% ou mais no teste de coordenadas seguiram para a rodada seguinte

O primeiro modelo que tentamos

No começo, acoplamos um LoRA (rank 8, depois 16) ao Gemma 4 E4B-it 4bit (mlx-community). Observamos que o modelo lia as coordenadas puxando para um lado, então unificamos o formato do tabuleiro no treinamento e no serviço como aligned e trocamos o modelo base para o Qwen3-VL-8B.

O que usamos como apoio

  • KataGo (b18c384nbt): análise de posição e um experimento de julgamento em ensemble que escolhe um entre os candidatos propostos por vários adaptadores
  • Política MLP de duas camadas em NumPy: experimento de autojogo com REINFORCE usando máscara de jogadas legais (rl_env)
  • IA heurística em C++: rede de segurança para responder a atari e jogada substituta quando o modelo falha em responder

Estrutura de pastas

  • src, tests: cliente de go em Qt6/C++, motor de regras (goboard), contagem (gamejudge), IA heurística
  • vlm_server: leitura de SGF, geração de dados de treinamento, treinamento do LoRA, teste de coordenadas, servidor de recomendação de jogadas
  • rl_env: experimentos de aprendizado por reforço com NumPy
  • mariago-web: tela de partida na web em Next.js e API de salvamento de registros de partidas

As configurações de implantação do servidor, os scripts de acesso remoto e monitoramento, os scripts de automação de treinamento e de experimentos, e os dados de treinamento e pesos dos modelos (centenas de GB) ficaram de fora da publicação. O código de operação da web, como anúncios, login e ranking, os arquivos de configuração, as ferramentas de depuração e o antigo script de download do modelo Gemma também foram retirados, por isso alguns imports apontam para arquivos não publicados. Caminhos no código como /Volumes/MY_WORK/... se referem ao Mac do autor, então troque pelos seus próprios caminhos ao executar.

Código-fonte completo

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

Raiz do projeto2 arquivos
CMakeLists.txttext · 34 linhas · 759B

Carregando o código…

README.mdmarkdown · 63 linhas · 5KB

Carregando o código…

mariago-web/25 arquivos
mariago-web/app/api/analyze/route.tstypescript · 86 linhas · 2KB

Carregando o código…

mariago-web/app/api/game/[code]/route.tstypescript · 57 linhas · 2KB

Carregando o código…

mariago-web/app/api/game/list/route.tstypescript · 17 linhas · 545B

Carregando o código…

mariago-web/app/api/game/route.tstypescript · 24 linhas · 914B

Carregando o código…

mariago-web/app/api/player/route.tstypescript · 12 linhas · 420B

Carregando o código…

mariago-web/app/globals.csscss · 53 linhas · 995B

Carregando o código…

mariago-web/app/kibo/kibo.module.csscss · 149 linhas · 2KB

Carregando o código…

mariago-web/app/kibo/page.tsxtsx · 115 linhas · 4KB

Carregando o código…

mariago-web/app/layout.tsxtsx · 33 linhas · 935B

Carregando o código…

mariago-web/app/page.tsxtsx · 40 linhas · 982B

Carregando o código…

mariago-web/app/play/page.tsxtsx · 1.104 linhas · 34KB

Carregando o código…

mariago-web/app/play/play.module.csscss · 252 linhas · 4KB

Carregando o código…

mariago-web/components/GoBoard.module.csscss · 115 linhas · 2KB

Carregando o código…

mariago-web/components/GoBoard.tsxtsx · 71 linhas · 3KB

Carregando o código…

mariago-web/components/ModelSelector.module.csscss · 38 linhas · 636B

Carregando o código…

mariago-web/components/ModelSelector.tsxtsx · 53 linhas · 1KB

Carregando o código…

mariago-web/lib/board.tstypescript · 260 linhas · 7KB

Carregando o código…

mariago-web/lib/db.tstypescript · 431 linhas · 13KB

Carregando o código…

mariago-web/lib/gameTypes.tstypescript · 67 linhas · 1KB

Carregando o código…

mariago-web/lib/guest.tstypescript · 40 linhas · 1KB

Carregando o código…

mariago-web/lib/katagoTypes.tstypescript · 14 linhas · 284B

Carregando o código…

mariago-web/lib/vlmClient.tstypescript · 98 linhas · 3KB

Carregando o código…

mariago-web/lib/vlmModels.tstypescript · 39 linhas · 2KB

Carregando o código…

mariago-web/package.jsonjson · 28 linhas · 708B

Carregando o código…

mariago-web/README.mdmarkdown · 53 linhas · 2KB

Carregando o código…

rl_env/11 arquivos
rl_env/__init__.pypython · 18 linhas · 500B

Carregando o código…

rl_env/board.pypython · 196 linhas · 6KB

Carregando o código…

rl_env/env.pypython · 79 linhas · 2KB

Carregando o código…

rl_env/eval_policy.pypython · 68 linhas · 2KB

Carregando o código…

rl_env/policy_numpy.pypython · 157 linhas · 5KB

Carregando o código…

rl_env/requirements-train.txttext · 2 linhas · 104B

Carregando o código…

rl_env/test_legal.pypython · 76 linhas · 2KB

Carregando o código…

rl_env/test_phase2.pypython · 34 linhas · 917B

Carregando o código…

rl_env/test_phase3.pypython · 35 linhas · 1003B

Carregando o código…

rl_env/train_reinforce.pypython · 90 linhas · 3KB

Carregando o código…

rl_env/train_selfplay.pypython · 137 linhas · 5KB

Carregando o código…

src/13 arquivos
src/aiplayer.cppc++ · 531 linhas · 20KB

Carregando o código…

src/aiplayer.hc++ · 26 linhas · 1KB

Carregando o código…

src/boardwidget.cppc++ · 309 linhas · 10KB

Carregando o código…

src/boardwidget.hc++ · 72 linhas · 3KB

Carregando o código…

src/gamejudge.cppc++ · 427 linhas · 15KB

Carregando o código…

src/gamejudge.hc++ · 95 linhas · 4KB

Carregando o código…

src/goboard.cppc++ · 419 linhas · 12KB

Carregando o código…

src/goboard.hc++ · 189 linhas · 7KB

Carregando o código…

src/main.cppc++ · 23 linhas · 662B

Carregando o código…

src/mainwindow.cppc++ · 2.698 linhas · 107KB

Carregando o código…

src/mainwindow.hc++ · 288 linhas · 12KB

Carregando o código…

src/tcpvlmclient.cppc++ · 469 linhas · 15KB

Carregando o código…

src/tcpvlmclient.hc++ · 91 linhas · 4KB

Carregando o código…

tests/4 arquivos
tests/atari_smoketest.cppc++ · 341 linhas · 13KB

Carregando o código…

tests/test_cross_lessons.pypython · 129 linhas · 4KB

Carregando o código…

tests/test_monitor_heuristic.pypython · 135 linhas · 5KB

Carregando o código…

tests/test_pass_guard.pypython · 192 linhas · 6KB

Carregando o código…

vlm_server/21 arquivos
vlm_server/__init__.pypython · 6 linhas · 202B

Carregando o código…

vlm_server/__main__.pypython · 372 linhas · 13KB

Carregando o código…

vlm_server/cross_lessons.pypython · 428 linhas · 13KB

Carregando o código…

vlm_server/dataset_baduk.pypython · 734 linhas · 26KB

Carregando o código…

vlm_server/dataset_coords.pypython · 190 linhas · 6KB

Carregando o código…

vlm_server/dataset_hogu.pypython · 214 linhas · 8KB

Carregando o código…

vlm_server/dataset_ladder.pypython · 396 linhas · 16KB

Carregando o código…

vlm_server/dataset_opening.pypython · 127 linhas · 4KB

Carregando o código…

vlm_server/eval_vlm_vs_vlm.pypython · 458 linhas · 16KB

Carregando o código…

vlm_server/ladder.pypython · 322 linhas · 10KB

Carregando o código…

vlm_server/policy_backend.pypython · 164 linhas · 5KB

Carregando o código…

vlm_server/README.mdmarkdown · 91 linhas · 3KB

Carregando o código…

vlm_server/requirements.txttext · 7 linhas · 195B

Carregando o código…

vlm_server/server.pypython · 2.474 linhas · 99KB

Carregando o código…

vlm_server/sgf_download.pypython · 215 linhas · 7KB

Carregando o código…

vlm_server/sgf_parser.pypython · 196 linhas · 6KB

Carregando o código…

vlm_server/shapes.pypython · 83 linhas · 3KB

Carregando o código…

vlm_server/train_lora.pypython · 294 linhas · 11KB

Carregando o código…

vlm_server/TRAINING.mdmarkdown · 437 linhas · 18KB

Carregando o código…

vlm_server/verify_board.pypython · 331 linhas · 11KB

Carregando o código…

vlm_server/verify_coords.pypython · 418 linhas · 13KB

Carregando o código…