decision-lfm2.5-1.2b

Non-generative decision model built from LiquidAI/LFM2.5-1.2B-Instruct: the autoregressive LM head is discarded and replaced with a scalar decision head, then LoRA fine-tuned with the Open-Jev recipe so a single forward pass scores candidates β€” typed probabilities (Choice / Noul / Score) without any token generation.

baseline (zero-shot Yes/No readout) pilot (2.4K rows) scale1 (48K rows)
test brier 0.715 0.557 0.369
test acc 43.8% 54.7% 68.0%
OOD brier β€” 0.513 0.318
OOD acc β€” 58.3% 75.0%
  • Recipe ported from Zefan-Cai/Open-Jev (MIT)
  • Trained on ZefanCai/Open-Jev-v1.1 community-hard-mix-v2-redistributable (train 147K; 6K steps consumed 48K rows)
  • LoRA r=8, Ξ±=16 on in/out_projΒ·q/k/v/o_proj; head initialized from the pretrained lm_head["Yes"] βˆ’ lm_head["No"] rows (weight-tied to input embeddings)
  • Loss = NLL + 0.1 Γ— Brier; calibrated with a fitted temperature (T = 1.821, calibration split n=256)
  • Training cost: RTX 3090 via Vast.ai, ~40 min, ~$0.40

What "tearing out the gen loop" means

  1. Load AutoModelForCausalLM, keep the transformer trunk (full.model), drop lm_head
  2. Decision head Linear(hidden, 1) initialized from lm_head["Yes"] βˆ’ lm_head["No"] β€” reuses the pretrained Yes/No readout
  3. Each candidate gets an independent prompt (Context / Question / Proposed answer / Is this correct?) passed through the trunk
  4. Last hidden state β†’ scalar score; softmax over candidates within a record β†’ probabilities. No token generation anywhere.

Usage

git clone https://github.com/pinion05/decision-lfm2.5-1.2b.git
python scripts/train_jev_lfm.py --base LiquidAI/LFM2.5-1.2B-Instruct \
  --data-dir <open-jev-v1.1 parquet dir> --steps 6000 --output runs/scale1

# stdlib-only HTTP server, same wire format as the jev server contract
python scripts/serve_jev_lfm.py 8321
curl -s localhost:8321/decide -d '{"state": {...}, "questions": {"q1": {"type": "choice", "instructions": "...", "criteria": {"a": null, "b": null}}}}'

This repo ships the LoRA adapter + decision head + temperature for two runs (pilot1 2.4K rows, scale1 48K rows) β€” it is not a merged model. Base weights stay under the LFM Open License v1.0 from LiquidAI/LFM2.5-1.2B-Instruct; load them with AutoModelForCausalLM.from_pretrained then PeftModel.from_pretrained(backbone, "adapter") and head.load_state_dict(torch.load("head.pt")) (see scripts/train_jev_lfm.py: LfmDecisionModel.load).

Files

runs/scale1/checkpoint/   # adapter/ (LoRA), head.pt, temperature.json, model.json
runs/pilot1/checkpoint/   # same layout, pilot run

License

  • Base model: LFM Open License v1.0 (Liquid AI) β€” reproduction & distribution of Derivative Works allowed with license copy + change notices; commercial use by entities above $10M revenue is not licensed. See license_link.
  • This repository's code & LoRA adapter additions: MIT (recipe origin Zefan-Cai/Open-Jev is MIT).
Downloads last month
-
Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support

Model tree for myeongcheol/decision-lfm2.5-1.2b

Adapter
(113)
this model