--- base_model: allenai/Olmo-3-1025-7B library_name: peft pipeline_tag: text-generation datasets: - nvidia/OpenMathReasoning tags: - peft - lora - olmo3 - think - math - mt11 - openmathreasoning - dynamic-lora --- # MT11-OLMO3-THINK-OMR-R025-v1 Dynamic PEFT/LoRA adapter for `allenai/Olmo-3-1025-7B`, trained as the `BASE-MATH-R025-12M` OLMo B candidate. This repository contains adapter weights only. It does **not** contain merged, baked, or base-model weights. ## Formal result The locked EvalScope 1.9.1 exact240 contract produced **46/240** for this adapter and **41/240** for the independently recomputed fresh base. Paired outcomes were **19 wins / 14 losses / 207 ties** on identical `(seed, dataset, index)` identities. This is a positive formal evaluation signal, not a claim of broad benchmark superiority. ## Required disclosure: legacy training runner These weights were trained by the old context-truncating legacy runner. During training, the model forward pass was invoked separately for each 1,024-token slice, resetting sequence context at every slice boundary. The legacy scheduler also had a historical first-update warmup problem. Both issues were fixed and tested in the later runner, but **this adapter was not trained with the fixed runner** and must never be described that way. The formal exact240 result remains valid as an evaluation of these frozen weights: checkpoint identity, dynamic LoRA loading, template, stop IDs, prompt budget, and paired review identities were independently checked. The training defects limit causal and recipe-transfer claims; they do not rewrite the observed 46/240 versus 41/240 result. ## Runtime contract - Base: `allenai/Olmo-3-1025-7B` at `996971efdc504b81f0a6caf73a6c92f976254b9c` - Template/tokenizer: official `allenai/Olmo-3-7B-Think` `chat_template.jinja` at `d97e442d7cc678210054dbcc9b440894d62c89a4` - Template SHA-256: `6d549883b5ed12879e191845c256a30c7dfd4eced0a4f160060a3ea0199d9e3a` - Context: dynamic 32K; generation budget is `32768 - exact_prompt_tokens - 64` - Stop token IDs: `[100265, 100257]` - LoRA: rank 64, alpha 128, dropout 0; targets `q_proj`, `k_proj`, `v_proj`, `o_proj`, `gate_proj`, `up_proj`, `down_proj` ## Loading example ```python import torch from peft import PeftModel from transformers import AutoModelForCausalLM, AutoTokenizer base_id = "allenai/Olmo-3-1025-7B" base_revision = "996971efdc504b81f0a6caf73a6c92f976254b9c" template_id = "allenai/Olmo-3-7B-Think" template_revision = "d97e442d7cc678210054dbcc9b440894d62c89a4" adapter_id = "modrill/MT11-OLMO3-THINK-OMR-R025-v1" tokenizer = AutoTokenizer.from_pretrained( template_id, revision=template_revision ) base = AutoModelForCausalLM.from_pretrained( base_id, revision=base_revision, torch_dtype=torch.bfloat16, device_map="auto", ) model = PeftModel.from_pretrained(base, adapter_id) # dynamic; do not merge messages = [{"role": "user", "content": "Solve the problem step by step."}] rendered = tokenizer.apply_chat_template( messages, tokenize=False, add_generation_prompt=True, ) inputs = tokenizer(rendered, return_tensors="pt").to(model.device) max_new_tokens = 32768 - inputs.input_ids.shape[-1] - 64 outputs = model.generate( **inputs, max_new_tokens=max_new_tokens, do_sample=True, temperature=0.6, top_p=0.95, top_k=20, eos_token_id=[100265, 100257], ) ``` Verify that the resolved tokenizer actually uses the pinned official `chat_template.jinja`; do not substitute the base tokenizer's default template. ## Data and evaluation notes Training used a 4,096-row public-source-derived manifest from `nvidia/OpenMathReasoning` at the pinned revision documented in `DATA_PROVENANCE.json`. Raw rows and the full training set are intentionally not included. Only public summaries, manifests, revisions, and hashes are released. For termination diagnostics, the corrected cap definition counts runtime `stop_reason`/`finish_reason` values of either `max_tokens` or `length`. Under that definition the adapter had 162/240 cap terminations and 78/240 natural `stop` terminations; 43 natural stops were formally correct. The historical matched120 helper checked only `length`, while this runtime emitted `max_tokens`, so its reported zero-cap diagnostic must not be reused. Literal `\boxed` presence is diagnostic only and never changes the authoritative EvalScope score. See the JSON contracts in this repository for exact provenance, scoring scope, hashes, and limitations.