smollm3-forest-lora

A small experimental LoRA adapter that fine-tunes SmolLM3-3B to act as the genome proposer for a Pokémon Red agent trying to cross Viridian Forest to Pewter City.

Given a rollout situation (current position, sub-beats reached, catchers beaten, and the current genome), the model is trained to respond with only a JSON genome — the battle/survival parameters (hp_run_threshold, hp_heal_threshold, move-pick weights, etc.) that decide whether the agent flees or fights wild encounters and when it heals. Navigation along the route is hand-driven; the genome controls survival.

It was produced by the autotune Try → Check → Reward → Nudge loop in pcc-labs/empirical-evidence as the only step where weights are updated.

⚠️ Scope: this is a proof-of-concept adapter trained on a tiny rejection-sampled set (4 train / 1 validation example, 8 iterations). It demonstrates the pipeline; it is not a general-purpose or heavily-tuned model.

Details

Base model EricFillion/smollm3-3b-mlx (MLX build of HuggingFaceTB/SmolLM3-3B)
Method LoRA (fine_tune_type: lora)
Trainer mlx_lm lora (Apple-Silicon backend)
LoRA rank / scale / dropout 16 / 16.0 / 0.05
Layers adapted 16
Learning rate 2e-5
Max sequence length 4096
Optimizer adam
Iterations 8
Data rejection-sampled chat SFT (system/user/assistant JSONL)

Files: adapter_config.json + adapters.safetensors (~54 MB).

Usage (MLX)

pip install mlx-lm huggingface_hub
hf download bdougie/smollm3-forest-lora --local-dir ./smollm3-forest-lora
from mlx_lm import load, generate

# Side-load the adapter against the base model
model, tokenizer = load(
    "EricFillion/smollm3-3b-mlx",
    adapter_path="./smollm3-forest-lora",
)

prompt = tokenizer.apply_chat_template(
    [
        {"role": "system", "content": "You tune a Pokemon Red agent's battle/survival genome to cross Viridian Forest to Pewter City. Respond with ONLY the JSON genome."},
        {"role": "user", "content": "This rollout reached forest beat 1 'Enter Viridian Forest' (reward 2.0 sub-beats, 1 catchers beaten, crossed=False). Current genome: {\"hp_run_threshold\": 0.2, \"hp_heal_threshold\": 0.3}"},
    ],
    add_generation_prompt=True,
)

print(generate(model, tokenizer, prompt=prompt, max_tokens=256))

To fuse the adapter into a standalone model instead of side-loading:

python -m mlx_lm fuse \
  --model EricFillion/smollm3-3b-mlx \
  --adapter-path ./smollm3-forest-lora \
  --save-path ./smollm3-forest-fused

Related

  • Project: pcc-labs/empirical-evidence — the training loop that produced this adapter — and pcc-labs/pokemon-kafka, the agent it drives.
  • Dataset: bdougie/pokemon-red-telemetry-sft — a broader multi-domain SFT corpus from the same project (battle-outcome, move-choice, narrator, …). Note: this adapter was trained on a separate, tiny forest-crossing genome corpus — not on that dataset, which trained a different multi-task model.

License

Inherits the base model's license (Apache-2.0).

Downloads last month

-

Downloads are not tracked for this model. How to track
MLX
Hardware compatibility
Log In to add your hardware

Quantized

Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for bdougie/smollm3-forest-lora

Adapter
(1)
this model