Instructions to use guildlm/go-lora-adapters with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- MLX
How to use guildlm/go-lora-adapters with MLX:
# Make sure mlx-lm is installed # pip install --upgrade mlx-lm # if on a CUDA device, also pip install mlx[cuda] # Generate text with mlx-lm from mlx_lm import load, generate model, tokenizer = load("guildlm/go-lora-adapters") prompt = "Once upon a time in" text = generate(model, tokenizer, prompt=prompt, verbose=True) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- LM Studio
- MLX LM
How to use guildlm/go-lora-adapters with MLX LM:
Generate or start a chat session
# Install MLX LM uv tool install mlx-lm # Generate some text mlx_lm.generate --model "guildlm/go-lora-adapters" --prompt "Once upon a time"
- Atomic Chat
GuildLM · go-lora-adapters
Every LoRA adapter the GuildLM Code Guild trained for Go, in one place, with the number each one scored.
This is the archive behind the three fused specialists (guildlm/go-dev · guildlm/go-test · guildlm/go-review).
The fused models are convenient to run; the adapters are what was actually learned, and they are ~100× smaller.
Any fused model can be rebuilt from here in one command (see Rebuild a fused model).
Why publish the losers too. GuildLM's bet is that a small specialist wins through the algorithm around it (compile-and-test loop, retrieval, deterministic gates), not through its weights. Measuring that honestly means keeping every adapter that failed to beat its base, with its score. Most of the adapters below are net-negative on the hard unit benchmark. That result is the finding, not a mistake to hide.
The headline measurement (go_dev_bench v2, 48 tasks, greedy, real go build + go test)
Same harness for every row (crucible/mlx_bench.py, direct MLX load, <|im_end|> registered as EOS,
generations committed and re-scorable offline with rescore_dev_bench.py).
| adapter | recipe | raw | +goimports | vs base (+goimports) |
|---|---|---|---|---|
| (none — base Qwen2.5-Coder-7B-Instruct-4bit) | — | 39 | 44 | — |
go-dev-mixed-v4 |
SFT, mixed data, 1200 iters, r=8 | 33 | 40 | −4 |
go-dev-dapt-replay |
DAPT (Kaggle) + ~13% chat replay | 30 | 36 | −8 |
go-dev-final |
SFT | 32 | 35 | −9 |
go-dev-dapt600 |
DAPT (Kaggle), 600 steps | 29 | 33 | −11 |
go-dev-mixed-v5 |
SFT, mixed data v5 | 29 | 32 | −12 |
go-dev-dapt300 |
DAPT (Kaggle), 300 steps | 26 | 31 | −13 |
go-dev-mined |
SFT on GitHub-mined data | 23 | 24 | −20 |
| (none — base Qwen2.5-Coder-14B-Instruct-4bit) | — | 36 | 43 | — |
go-dev-14b |
SFT on the 14B base | 27 | 40 | −3 |
Reading: every specialist ≤ its base at both 7B and 14B, and most of the deficit is Go hygiene
(goimports closes most of it), not reasoning. The one place the adapters earn their keep is as
complementary ensemble members: the union of base + all specialists solves 47/48, and adding the 14B
members reaches 48/48. No single adapter beats the base. Full log: crucible/RESULT-go-dev-bench-v2.txt
in guildlm/guild-code.
Secondary benches (test / review / edit) tell the same story; go-test's apparent +3/18 on the mutation
bench turned out to be a validity premium that base + goimports also captures (14/18 vs 11/18).
Details: crucible/AUDIT-secondary-benchmarks.txt.
What is in this repo
adapters/<name>/adapter_config.json exact mlx_lm.lora config (base, data dir, iters, rank, lr)
adapters/<name>/adapters.safetensors the final adapter
adapters/<name>/NNNNNNN_adapters.safetensors intermediate checkpoints where they were kept
kaggle-dapt/session1, session2 HF-PEFT checkpoints from the Kaggle DAPT runs (free T4)
kaggle-dapt/replay-session1 the replay-mix DAPT run
kaggle-dapt/ckpt-dataset, replay-dataset the Kaggle dataset bundles those runs were resumed from
Adapter inventory (from each adapter_config.json)
| adapter | base | data dir | iters | rank | lr | final weights | kept checkpoints |
|---|---|---|---|---|---|---|---|
go-dapt |
Qwen2.5-Coder-7B-Instruct-4bit | dapt |
6000 | 8 | 0.0001 | no final | 0 |
go-dapt-core-smoke |
Qwen2.5-Coder-7B-Instruct-4bit | .mlx-data-dapt-core-smoke |
600 | 8 | 5e-05 | yes | 3 |
go-dapt-replay-smoke |
Qwen2.5-Coder-7B-Instruct-4bit | .mlx-data-dapt-replay-smoke |
600 | 8 | 5e-05 | yes | 3 |
go-dev |
Qwen2.5-Coder-7B-Instruct-4bit | .mlx-data |
400 | 8 | 0.0001 | yes | 4 |
go-dev-0000200 |
Qwen2.5-Coder-7B-Instruct-4bit | .mlx-data |
400 | 8 | 0.0001 | yes | 0 |
go-dev-0000300 |
Qwen2.5-Coder-7B-Instruct-4bit | .mlx-data |
400 | 8 | 0.0001 | yes | 0 |
go-dev-14b |
Qwen2.5-Coder-14B-Instruct-4bit | .mlx-data |
300 | 8 | 8e-05 | yes | 3 |
go-dev-15b-mixed-v3 |
Qwen2.5-Coder-1.5B-Instruct-4bit | .mlx-data-godev-mixed-v3 |
1200 | 8 | 0.0001 | yes | 6 |
go-dev-dapt-replay |
/Users/fatihturker/Desktop/Personal/Dev/guildlm/.mlx-fused/go-dapt-replay-4bit | .mlx-data-godev-mixed2 |
1200 | 8 | 0.0001 | yes | 6 |
go-dev-dapt300 |
/Users/fatihturker/Desktop/Personal/Dev/guildlm/.mlx-fused/go-dapt-7b-4bit | .mlx-data-godev-mixed2 |
1200 | 8 | 0.0001 | yes | 6 |
go-dev-dapt300-ck0000400 |
/Users/fatihturker/Desktop/Personal/Dev/guildlm/.mlx-fused/go-dapt-7b-4bit | .mlx-data-godev-mixed2 |
1200 | 8 | 0.0001 | yes | 0 |
go-dev-dapt300-ck0000800 |
/Users/fatihturker/Desktop/Personal/Dev/guildlm/.mlx-fused/go-dapt-7b-4bit | .mlx-data-godev-mixed2 |
1200 | 8 | 0.0001 | yes | 0 |
go-dev-dapt300-ck0001000 |
/Users/fatihturker/Desktop/Personal/Dev/guildlm/.mlx-fused/go-dapt-7b-4bit | .mlx-data-godev-mixed2 |
1200 | 8 | 0.0001 | yes | 0 |
go-dev-dapt300-ck0001200 |
/Users/fatihturker/Desktop/Personal/Dev/guildlm/.mlx-fused/go-dapt-7b-4bit | .mlx-data-godev-mixed2 |
1200 | 8 | 0.0001 | yes | 0 |
go-dev-dapt600 |
/Users/fatihturker/Desktop/Personal/Dev/guildlm/.mlx-fused/go-dapt600-7b-4bit | .mlx-data-godev-mixed2 |
1200 | 8 | 0.0001 | yes | 6 |
go-dev-dapt600-ck0001000 |
/Users/fatihturker/Desktop/Personal/Dev/guildlm/.mlx-fused/go-dapt600-7b-4bit | .mlx-data-godev-mixed2 |
1200 | 8 | 0.0001 | yes | 0 |
go-dev-dapt600-ck0001200 |
/Users/fatihturker/Desktop/Personal/Dev/guildlm/.mlx-fused/go-dapt600-7b-4bit | .mlx-data-godev-mixed2 |
1200 | 8 | 0.0001 | yes | 0 |
go-dev-final |
Qwen2.5-Coder-7B-Instruct-4bit | .mlx-data-godev-scaled |
300 | 8 | 8e-05 | yes | 0 |
go-dev-id |
Qwen2.5-Coder-7B-Instruct-4bit | .mlx-data-id |
200 | 8 | 0.0001 | yes | 0 |
go-dev-maint |
Qwen2.5-Coder-7B-Instruct-4bit | .mlx-data-godev-maint |
160 | 8 | 6e-05 | yes | 0 |
go-dev-mined |
Qwen2.5-Coder-7B-Instruct-4bit | godev2048 |
4000 | 8 | 0.0001 | yes | 6 |
go-dev-mixed |
Qwen2.5-Coder-7B-Instruct-4bit | .mlx-data-godev-mixed |
1200 | 8 | 0.0001 | yes | 6 |
go-dev-mixed-v2 |
Qwen2.5-Coder-7B-Instruct-4bit | .mlx-data-godev-mixed2 |
1200 | 8 | 0.0001 | yes | 6 |
go-dev-mixed-v3 |
Qwen2.5-Coder-7B-Instruct-4bit | .mlx-data-godev-mixed-v3-7b |
1200 | 8 | 0.0001 | yes | 6 |
go-dev-mixed-v4 |
Qwen2.5-Coder-7B-Instruct-4bit | .mlx-data-godev-mixed-v4-7b |
1200 | 8 | 0.0001 | yes | 6 |
go-dev-mixed-v5 |
Qwen2.5-Coder-7B-Instruct-4bit | .mlx-data-godev-mixed-v5-7b |
1200 | 8 | 0.0001 | yes | 1 |
go-dev-mixed-v5b |
Qwen2.5-Coder-7B-Instruct-4bit | .mlx-data-godev-mixed-v5-7b |
1000 | 8 | 0.0001 | yes | 5 |
go-dev-v2 |
Qwen2.5-Coder-7B-Instruct-4bit | .mlx-data |
300 | 8 | 8e-05 | yes | 3 |
go-dev-v2-id |
Qwen2.5-Coder-7B-Instruct-4bit | .mlx-data-godev-v2 |
260 | 8 | 0.0001 | yes | 0 |
go-dev-v3-id |
Qwen2.5-Coder-7B-Instruct-4bit | .mlx-data-godev-v2 |
90 | 8 | 4e-05 | yes | 0 |
go-review |
Qwen2.5-Coder-7B-Instruct-4bit | .mlx-data-review |
180 | 8 | 0.0001 | yes | 2 |
go-review-id |
Qwen2.5-Coder-7B-Instruct-4bit | .mlx-data-review-id |
150 | 8 | 0.0001 | yes | 0 |
go-review-mined |
Qwen2.5-Coder-7B-Instruct-4bit | goreview |
1200 | 8 | 0.0001 | yes | 6 |
go-review-mined-ck0000200 |
Qwen2.5-Coder-7B-Instruct-4bit | goreview |
1200 | 8 | 0.0001 | yes | 0 |
go-review-mined-ck0000400 |
Qwen2.5-Coder-7B-Instruct-4bit | goreview |
1200 | 8 | 0.0001 | yes | 0 |
go-review-mined-ck0000600 |
Qwen2.5-Coder-7B-Instruct-4bit | goreview |
1200 | 8 | 0.0001 | yes | 0 |
go-review-mined-ck0001000 |
Qwen2.5-Coder-7B-Instruct-4bit | goreview |
1200 | 8 | 0.0001 | yes | 0 |
go-review-mined-ck0001200 |
Qwen2.5-Coder-7B-Instruct-4bit | goreview |
1200 | 8 | 0.0001 | yes | 0 |
go-review-scaled |
Qwen2.5-Coder-7B-Instruct-4bit | .mlx-data-goreview-scaled |
200 | 8 | 0.0001 | yes | 0 |
go-test |
Qwen2.5-Coder-7B-Instruct-4bit | .mlx-data-test |
150 | 8 | 0.0001 | yes | 2 |
go-test-id |
Qwen2.5-Coder-7B-Instruct-4bit | .mlx-data-test-id |
150 | 8 | 0.0001 | yes | 0 |
go-test-scaled |
Qwen2.5-Coder-7B-Instruct-4bit | .mlx-data-gotest-scaled |
220 | 8 | 0.0001 | yes | 0 |
go-test-v2 |
Qwen2.5-Coder-7B-Instruct-4bit | .mlx-data-test |
120 | 8 | 8e-05 | yes | 2 |
Use an adapter directly (Apple Silicon, MLX)
pip install mlx-lm huggingface_hub
hf download guildlm/go-lora-adapters --include "adapters/go-dev-mixed-v4/*" --local-dir ./go-lora
python -m mlx_lm.generate \
--model mlx-community/Qwen2.5-Coder-7B-Instruct-4bit \
--adapter-path ./go-lora/adapters/go-dev-mixed-v4 \
--prompt "Write an idiomatic Go function that reverses a string by runes."
Rebuild a fused model
python -m mlx_lm.fuse \
--model mlx-community/Qwen2.5-Coder-7B-Instruct-4bit \
--adapter-path ./go-lora/adapters/go-dev-mixed-v4 \
--save-path ./go-dev-mixed-v4-fused
The go-dev-14b adapter fuses onto mlx-community/Qwen2.5-Coder-14B-Instruct-4bit and
go-dev-15b-mixed-v3 onto mlx-community/Qwen2.5-Coder-1.5B-Instruct-4bit. The *-smoke and *-id adapters are pipeline smoke tests and
identity probes and carry no benchmark claim. Each adapter's adapter_config.json names its base; the
inventory below is rendered from those files, so it cannot drift from the weights.
Reproduce a score
git clone https://github.com/guildlm/guild-code && cd guild-code/go/crucible
python mlx_bench.py --model mlx-community/Qwen2.5-Coder-7B-Instruct-4bit \
--adapter ./go-lora/adapters/go-dev-mixed-v4 --save-generations out.jsonl
python rescore_dev_bench.py --generations out.jsonl --repair imports
Provenance
- Base models:
mlx-community/Qwen2.5-Coder-{1.5B,7B,14B}-Instruct-4bit(Apache-2.0). - SFT data: compile-verified Go generated with Claude as teacher, plus GitHub-mined Go for the
minedand DAPT runs. - Compute: Apple M1 Max (MLX) for SFT and evaluation; Kaggle free T4 for DAPT. Total spend: $0.
- Every number above was produced by the real Go toolchain, never by an LLM judge.
Part of GuildLM — small, sharp, open specialists, and an honest log of what they can and cannot do.
Quantized
Model tree for guildlm/go-lora-adapters
Base model
Qwen/Qwen2.5-7B