The B4=0.000 floor in mixed SFT is a corpus-density artifact, not a capacity gate.
Model
Corpus
Ratio
B4
Nano 42M (mixed SFT, N=4 seeds)
62K examples
1:211
0.000
Nano 42M + LoRA (N=4 seeds)
2,801 examples
1:21
0.145 ± 0.046
Base 260M (mixed SFT)
62K examples
1:211
0.000
Base 260M + LoRA
2,801 examples
1:21
0.580
Pro 3B + LoRA-64
62K examples
~1:10
0.600
Pro 7B + QLoRA-32
62K examples
~1:10
0.880
Nano LoRA Multi-Seed Results (N=4, Table 3 in paper)
Seed
B1 KW
B2 F1
B3 TM
B4
B5
42
0.008
0.200
0.029
0.220
0.500
7
0.017
0.200
0.029
0.140
0.600
13
0.006
0.200
0.000
0.120
0.600
23
0.014
0.205
0.029
0.100
0.600
Mean ± std
0.011 ± 0.004
0.201 ± 0.002
0.021 ± 0.012
0.145 ± 0.046
0.575 ± 0.043
Quick Start
1. Install dependencies
pip install -r requirements.txt
2. Download checkpoints
bash
1mkdir -p checkpoints
2# From HuggingFace (links TBD — see paper for GCS paths)3# Nano 42M post-SFT (503 MB)4# wget https://huggingface.co/vectrayx/nano-sft-v5/resolve/main/nano_sft_v5.pt \5# -O checkpoints/nano_sft_v5.pt6# Base 260M post-Phase3 (3.1 GB)7# wget https://huggingface.co/vectrayx/base-phase3/resolve/main/base_phase3_last.pt \8# -O checkpoints/base_phase3_last.pt9# Tokenizer (474 KB)10# wget https://huggingface.co/vectrayx/tokenizer/resolve/main/vectrayx_bpe.model \11# -O checkpoints/vectrayx_bpe.model
3. Run the full reproducibility suite
make repro
This runs:
make bench-nano — B1–B5 on Nano baseline (expected B4=0.000)
make bench-base — B1–B5 on Base baseline (expected B4=0.000)
make lora-nano — LoRA fine-tune Nano + eval (expected B4≈0.220 for seed=42)
make lora-base — LoRA fine-tune Base + eval (expected B4≈0.580 for seed=42)
4. Run individual experiments
bash
1# Benchmark only (no training)2make bench-nano
3make bench-base
45# LoRA fine-tune + benchmark6make lora-nano # ~30 min on A10G7make lora-base # ~45 min on A10G89# Regenerate corpus10make corpus
Reproducing the Pre-Training Pipeline
The full from-scratch pre-training pipeline (Phases 1–3 + SFT) is described in training_v2/README.md in the main repository. The key entry points are:
1@inproceedings{santillana2026vectrayx,
2 title = {VectraYX-Nano: A 42M-Parameter Spanish Cybersecurity Language Model
3 with Curriculum Learning and Native Tool Use},
4 author = {Santillana, Juan S.},
5 booktitle = {Preprint},
6 year = {2026}
7}