bahnator-1.1-pro-preview

LoRA adapters for LiquidAI/d1-3B that check an agent's decision card for known traps before a person sees it: a stale GPS fix, a replaced instruction, a wrong escalation. They read text and photos.

Built for Controlane, a control room for car delivery, at the Prompt Operations Hackathon (24 to 25 Oct 2026). Live at https://controlane.bobs.build.

Results

On 4,395 synthetic test cases from 203 template families held out of training completely:

Checker Catch rate False alarms Time per check
bahnator (this model) 92% 5% 22 ms
Jev (typesafe/jev-1.14) 92% 13% 229 ms
Laya v6, fine-tuned 86% 8% 10 ms
d1-3B, as released 67% 33% 23 ms

93.5% correct overall. 32 of 34 on the hand-labelled set, 216 of 220 on photos and scans.

Training

  • LoRA rank 16, alpha 32, on q_proj k_proj v_proj out_proj in_proj w1 w2 w3; 24.5 M trainable parameters
  • 3 epochs, AdamW, learning rate 2e-4
  • Synthetic train split only; no test case was used
  • 24 minutes on one RTX 6000 Ada on Verda (Finland), about $1.33
  • Best of 7 training runs across 2 models

Use

d1-lora-v1.pt holds rank, alpha, targets and the A/B weights per layer. train_d1.py has add_lora and merge_lora:

import torch
from transformers import AutoModel
from train_d1 import add_lora, merge_lora

model = AutoModel.from_pretrained("LiquidAI/d1-3B", trust_remote_code=True, dtype=torch.bfloat16).to("cuda")
saved = torch.load("d1-lora-v1.pt")
lm = model.model.language_model
for name, lora in add_lora(lm, saved["rank"], saved["alpha"]).items():
    lora.A.data.copy_(saved["weights"][name]["A"])
    lora.B.data.copy_(saved["weights"][name]["B"])
merge_lora(lm)
model.eval()
model.system_one(state, questions, images=images)

All training data is synthetic and fictional.

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for silvekoski/bahnator-1.1-pro-preview

Finetuned
LiquidAI/d1-3B
Adapter
(4)
this model