IOL-AI Qwen3.5-9B budgeted-reasoning solver

Self-contained budgeted-reasoning submission for IOL-AI 2026. The repository combines the Apache-2.0 unsloth/Qwen3.5-9B base at commit 005429cee5cb648998cf2b70eebdd83175989c9a, the final adapter from MikCil/IOL-AI-Qwen35-9B-IT-LoRA-full at commit 87ed34f643359862096c7c0a7a97a51710976a4c, and an audited offline runtime.

Inference

script.py reads only /tmp/data/test.csv and uses Qwen's documented two-generation thinking-budget method. It allows up to 2,048 thinking tokens; if reasoning has not closed, it appends Qwen's early-stopping instruction and the </think> marker, then allows up to 512 tokens for the answer. Only tokens after </think> are parsed and written to submission.csv. The improved compact-reasoning instruction is stored in system_prompt.txt; hidden reasoning is never written to the submission.

The five expected contest rows are decoded as one padded batch. Stage one treats </think> as an end token so each row can finish reasoning independently; batching preserves the per-problem budgets while keeping the T4 run inside the competition limit.

The base is loaded in NF4 with FP16 computation on one T4. Repository-local wheels are hash-checked and installed with --no-index --no-deps into an isolated directory under /tmp before importing Transformers or PEFT. The runtime does not download models, packages, or data.

Frozen configuration

  • Transformers 5.3.0, PEFT 0.19.1, bitsandbytes 0.49.2, Typer 0.25.1
  • matching torchvision 0.19.0+cu121, Pillow 11.3.0, and the HTTPX dependency stack
  • explicit enable_thinking=True while rendering the local chat template
  • Qwen's recommended general-thinking sampling: temperature 1.0, top-p 0.95, top-k 20, min-p 0.0, presence penalty 1.5, repetition penalty 1.0
  • 2,048-token thinking budget followed by a separate 512-token answer budget
  • Qwen's documented early-stopping continuation when reasoning reaches its cap
  • batch size 5 with independent stage-one </think> stopping
  • fixed seed 3407
  • 27.5-minute internal hard stop
  • exact answer-count validation and UTF-8 JSON serialization

The written competition instructions say runtime installation is unsupported, while a public runner-tested entry demonstrates that repository-local wheels currently execute. Organizer confirmation is still recommended before treating this modern-runtime entry as the only finalist.

Local contract tests

python -m unittest discover -s tests -v

The tests validate count inference over all 160 local Linguini rows, Unicode preservation, parsing, numbering, and serialization. A separate Colab notebook in the project runs the complete repository on five held-out Linguini rows on a real T4.

For faster repeated compatibility tests, use the persistent Modal runner:

pip install modal
modal setup
modal secret create huggingface HF_TOKEN=hf_...
modal run submission_qwen35_budgeted_v3/modal_smoke_test.py

Its iol-ai-submission-cache Volume retains the four base-model shards. After the first run, a new model-repository revision downloads only changed blobs and reuses the cached 19 GB base.

Licenses

The base model and core Hugging Face runtime are Apache-2.0. The model's LICENSE is included at repository root; wheel distributions retain their own embedded metadata and license files. The adapter was trained on the private MikCil/IOL-AI-SFT research dataset. No training examples or reference answers are included in this submission repository.

Downloads last month
-
Safetensors
Model size
10B params
Tensor type
BF16
·
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for MikCil/IOL-AI-Qwen35-9B-IT-LoRA-Budgeted-v3

Finetuned
Qwen/Qwen3.5-9B
Adapter
(99)
this model