Tyness BOE 2.6B Instruct — Pre-Alpha 3 (negative-reinforcement experiment)

Fifth pre-alpha from Tyness Train — an experimental release documenting a failed experiment, published with full numbers because negative results are results.

What changed vs pre-alpha-2: the training dataset gained 73 targeted entries built from an exact gap analysis against deepseek-v4-flash (see "What changed" below). Everything else — base model, hyperparameters, eval bank — is byte-identical, making this a controlled single-variable experiment.

Outcome in one line: five of seven question archetypes hit new records (focused mode 0.727, closed-book 0.227, multi-precept synthesis 0.95) — but refusal on absent data, the targeted behavior, got worse (0.72 → 0.55). By our adoption rule this model does not replace pre-alpha-2 for production use; it is released as the experimental evidence of why negative-reinforcement backfires on small models.

⚠️ Status: EXPERIMENTAL — not recommended over pre-alpha-2. This variant introduces a "refuse-then-invent" failure mode on absent-data questions. Use pre-alpha-2 for production; use this one to study the behavior.

What changed vs pre-alpha-2

Dataset boe-focused-adv-v5 = pre-alpha-2's dataset (1,397 entries, byte-identical) + 73 targeted entries designed from an exact gap analysis (run26 vs deepseek-v4-flash, 28.6-point gap decomposed into four behavioral causes):

Addition Entries Targeted cause Design
R1 — Reinforced negatives 36 Hallucination on absent data (invented amounts, annex tables, sanctions) Questions with plausible-but-absent data; the only correct target is a refusal. Each gate-verified: the asserted data must NOT exist in the norm text
R2 — Structured-case targets 34 Applied-case answers with broken syntax, missing enumeration, unnamed norm Targets must name the norm + BOE identifier, enumerate consequences point-by-point, and include a literal «quote» of the precept (verified in the norm text)
R4 — Metadata-field entries 3 Underused METADATOS fields (journal issue, pages) Questions about frontmatter fields; answer must contain the literal value (gate-checked)

26 candidate entries were dropped by the quality gates (teacher paraphrasing instead of literal grounding). No other change: same base model, hyperparameters, epochs, eval bank and judge.

Evaluation results (es-eval-v1.1-pilot10, 107 items × 3 modes, same judge)

Mode pre-alpha-2 pre-alpha-3 (this) Δ
focused (mean) 0.704 0.727 +2.3 ✅ record
closed-book 0.181 0.227 +4.6 ✅ record
full precept 0.718 0.712 −0.6 (within noise)
identifier traps (focused) 0.67 0.63 −0.04
negative "no-consta" (focused, n=20) 0.72 0.55 −0.17 ❌ the targeted metric

Per-archetype (focused): data sheets 0.85 (+0.08), content 0.77 (+0.06), applied cases 0.66 (+0.14), multi-precept synthesis 0.95 (+0.45), temporal 0.84 (+0.04), negatives 0.55 (−0.17), identifier traps 0.63 (−0.04). Reasoning leakage: 3/102 → 0/102.

The paradox in detail. Adding 36 refusal examples weakened refusal. The failed negative items show a new, specific behavior: refuse first, then invent — the model correctly states "This is not in the provided context" and then hallucinates the detail anyway ("La tarifa 4 se remite a…", invented 200 € fines, invented annex tables). It learned the surface formula of a refusal without learning when the refusal is correct.

Full details: eval-report.md.

Why release a failed experiment

  1. Hallucination on absent data is not a data-volume problem at the 2.6B + QLoRA scale: three data-side attempts (generic negatives, quote-to-cite reinforcement, reinforced negatives) failed to move it, and the last one backfired.
  2. The remaining levers are structurally different: preference optimization (DPO on refusal-vs-invention pairs), inference-side fact verification, or more model capacity.
  3. Publishing the regression analysis prevents the next practitioner from repeating the same 36-example experiment expecting the opposite result.

For production use, see pre-alpha-2 (FINAL 0.480, focused 0.640→use this one's bank comparison: 0.640 vs 0.727 here — pre-alpha-3 scores higher overall but fails the refusal requirement that matters for a legal assistant).

Model description

Base model LiquidAI/LFM2.5-2.6B (2.69B params, hybrid: 22 conv + 8 GQA layers)
Task Context-grounded Spanish law Q&A with exact official citations (BOE-A-AAAA-NNNNN)
Method QLoRA SFT (TRL, NF4, fp32 compute) — focused relevance-ORDERED contexts + METADATOS block + adversarial pairs (original 149 + 70 fresh quote-to-cite) + teacher–student dialogues (30) + reinforced negatives (36) + structured cases (34) + metadata entries (3) + empty-<think> targets
Hardware NVIDIA GTX 1060 6GB (Pascal, sm_61) — 2016 consumer GPU
Training 5 epochs · seq 2048 · 460 steps · final loss 0.774 · token accuracy 84.5%
Author jasonjimnz

Training data

Dataset boe-focused-adv-v5 (1,470 entries) = pre-alpha-2's boe-focused-adv-v4 (1,397: 1,148 grounded entries over 10 BOE articles with relevance-ORDERED contexts + METADATOS block, 149 original adversarial pairs, 70 fresh quote-to-cite pairs, 30 teacher–student multi-turn dialogues) + 73 targeted entries (R1/R2/R4 above). Sources: consolidated Spanish legislation (BOE open data) via legalize-es, teacher-generated ChatML entries. Loss on assistant tokens only; eval items never in any training split.

Training configuration

Parameter Value
LoRA r / alpha / dropout 16 / 32 / 0.05
Target modules q_proj, k_proj, v_proj, o_proj
Learning rate / scheduler 2e-4 / cosine
Epochs 5 (460 optimizer steps)
Effective batch 1 × 16
Sequence length 2048
Quantization NF4 4-bit, fp32 compute (Pascal: never bf16/fp16)
Optimizer paged_adamw_32bit
prepend_empty_think enabled (LFM2.5-2.6B forces <think> at generation start; targets prefixed with an empty think block)

How to run

llama.cpp (all quantizations included: F16 / Q8_0 / Q4_K_M)

llama-server -m tyness-boe-2.6b-pre-alpha-3-instruct-q4_k_m.gguf -ngl 99 -c 16384 --port 8080 --jinja
curl http://127.0.0.1:8080/v1/chat/completions -d '{
  "messages": [
    {"role":"system","content":"METADATOS: identificador BOE-A-2019-18746, Orden HAC/1270/2019, ...\\n\\nEres un jurista experto en el BOE. Responde ÚNICAMENTE con el CONTEXTO. Si un dato no consta: No consta en el contexto proporcionado. Si el usuario afirma algo incorrecto, corrígelo citando el precepto exacto."},
    {"role":"user","content":"CONTEXTO:\n<paste relevant norm paragraphs here>\n\nPREGUNTA: ¿…?"}
  ],
  "temperature": 0
}'

Transformers (note: thinking-capable base)

from transformers import AutoModelForCausalLM, AutoTokenizer

model = AutoModelForCausalLM.from_pretrained("jasonjimnz/tyness-boe-2.6b-pre-alpha-3-instruct", dtype="auto")
tok = AutoTokenizer.from_pretrained("jasonjimnz/tyness-boe-2.6b-pre-alpha-3-instruct")
# This model was SFT'd with empty <think> blocks: it opens and immediately closes the
# thinking section, then answers directly from the provided context.
messages = [{"role": "user", "content": "CONTEXTO:\n...\n\nPREGUNTA: ¿…?"}]
inputs = tok.apply_chat_template(messages, add_generation_prompt=True, return_tensors="pt")

Limitations

  • Refuse-then-invent on absent data (the experiment's finding): on questions about data not in the context, this model may refuse correctly and then hallucinate the detail anyway. Use pre-alpha-2 for production.
  • Specialized in the 10-norm trained scope; not a general legal advisor.
  • Parametric knowledge is weak by design (closed-book 0.227): always ground it with CONTEXTO + METADATOS.
  • Temporal/date arithmetic improved (0.84) but can still err.

Generated by Tyness Train on 2026-10-22. Base model © LiquidAI, LFM Open License v1.0.

Downloads last month
125
GGUF
Model size
3B params
Architecture
lfm2
Hardware compatibility
Log In to add your hardware

4-bit

8-bit

16-bit

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

Model tree for jasonjimnz/tyness-boe-2.6b-pre-alpha-3-instruct

Adapter
(27)
this model