Results
Same LLM judge (Claude Haiku 5.5, against the oracle's reply) for every model. Single run, greedy decoding.
Table with columns: Model, Spec-adherence, Robustness, Drift: conversations held| Model | Spec-adherence | Robustness | Drift: conversations held |
|---|
| Qwen3-4B-Instruct base, full spec + tables in the prompt | 12.0% | 23.3% | 0.0% |
| This adapter (one-line system prompt) | 72.0% | 87.4% | 91.4% |
| Claude Sonnet 5.5, best prompt, reasoning on | 88.7% | 90.0% | 76.4% |
| Mistral Large 4, best prompt, reasoning on | 97.3% | 92.9% | 57.1% |
Spec-adherence: 50 clean single-turn scenarios. Robustness: 47 adversarial and multi-turn scenarios (153 turns in
total; differences under about 8 points are noise). Drift: 70 conversations, 485 turns (about 10 points of noise).
Use
The adapter was trained with exactly this system prompt; use it verbatim:
You convert date-times between timezones under the tz-convert spec. Reply with exactly one line.
from vllm import LLM, SamplingParamsfrom vllm.lora.request import LoRARequestfrom huggingface_hub import snapshot_download llm = LLM("Qwen/Qwen3-4B-Instruct-2507", enable_lora=True, max_lora_rank=64)lora = LoRARequest("tz", 1, snapshot_download("debudash/qwen3-4b-tz-convert-v5-n18000", revision="f90209fce510b83466fc4d2784256d6b9003f281"))msgs = [{"role": "system", "content": "You convert date-times between timezones under the tz-convert spec. Reply with exactly one line."}, {"role": "user", "content": "Convert 2026-11-01 09:30 America/Chicago to Asia/Tokyo"}]print(llm.chat(msgs, SamplingParams(temperature=0, max_tokens=64), lora_request=lora)[0].outputs[0].text)
One-command eval: python eval.py --model debudash/qwen3-4b-tz-convert-v5-n18000 --revision f90209fce510b83466fc4d2784256d6b9003f281 --eval-set cases/ceiling.jsonl (code).
Training
QLoRA: base in 4-bit NF4 (bf16 compute), LoRA r=16, alpha=32, dropout=0.05
on q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj. Loss on assistant tokens only. 3 epochs, lr 0.0002 with
3% warmup and cosine decay, batch 8 x grad-accum 2, max length
1536, seed 7. 78.0 min on one H100 (Modal). Every checkpoint
in the project used the same hyperparameters; each improvement came from a data change.
Limitations
- Conversion arithmetic is the main weakness: most remaining failures are a wrong hour (often exactly 1 h), which
then carries through later turns of a conversation.
- Closed world: zones outside the 24 listed, unlisted abbreviations and dates outside 2020-2030 are
INVALID by
design.
- In-distribution caveat: the seven drift patterns appear in the training data (different wording and values),
so the drift score tests the patterns in distribution.
- DST arithmetic (ISSUE-003, open): on 80 conversions between two DST zones it gets 68 right (v3: 58; Sonnet and
Mistral with reasoning: 74.5 and 79.5). Most misses are exactly 1 h off. Clean single-turn accuracy is 72%.
- Fixed in this version's data: a zone change that doesn't say which zone it replaces ("Make that Asia/Tokyo.")
after an ambiguous-source flag now stays
AMBIGUOUS (8/8 on the ISSUE-002 probe; v3 0/8).