Wiss_2b / README.md
Wafflebyte's picture
Update README.md
25207e9 verified
|
Raw History Blame Contribute Delete
7.16 kB
---
license: apache-2.0
base_model: Qwen/Qwen3.5-2B
base_model_relation: finetune
library_name: transformers
tags:
- wiss-ai
- qwen3.5
- tool-use
- function-calling
- reasoning
- coding
- vision
- lora
- unsloth
---
# Wiss 2B
**Wiss 2B** is a small (2B) assistant fine-tuned from [Qwen3.5-2B](https://huggingface.co/Qwen/Qwen3.5-2B) for
**coding, multi-step tool use and short, finished reasoning**. It keeps the base model's image understanding
(the image encoder and projector are unchanged).
It is a narrow fine-tune, not a general upgrade: on standard benchmarks it is **behind the base model on instruction
following, hard math and code**, and ahead on BBH-style logic puzzles. The tables below show every number we measured.
> **A note from the team:** we were stumped by these results. We aimed for a model that was better at coding and tool
> use without giving up general ability, and on standard benchmarks it fell short of the base model in several places.
> We are releasing it anyway, openly and with all the numbers, because it is still useful for what it was built for.
> Our next model, Wiss2, will try our best to fix this: more general-purpose training data, replay of earlier data to stop
> forgetting, and release checks measured against the base model.
> Due to some technical issues, we are unable to release the model right now.
## Benchmarks
All models were run by us with the same settings: [lm-evaluation-harness](https://github.com/EleutherAI/lm-evaluation-harness)
on vLLM, each model's own chat template, **thinking mode off**, greedy decoding, bf16. IFEval through MMLU-Pro are the
[Open LLM Leaderboard v2](https://huggingface.co/docs/leaderboards/open_llm_leaderboard/about) tasks (raw scores, not the
leaderboard's normalized ones). GSM8K is 5-shot strict match; HumanEval is pass@1 (instruct prompt). IFEval, MATH-hard,
GSM8K and HumanEval use the full test sets. BBH, MuSR and MMLU-Pro use only the first 60 questions of every subtask /
subject (the same questions for both models), so differences of a few points on those are noise.
| Benchmark | Wiss 2B | Qwen3.5-2B (base) | Difference |
|---|---|---|---|
| IFEval, prompt-level strict | 49.5 | **67.3** | −17.8 |
| IFEval, instruction-level strict | 60.4 | **76.0** | −15.6 |
| IFEval, prompt-level loose | 54.0 | **71.2** | −17.2 |
| IFEval, instruction-level loose | 64.4 | **79.4** | −15.0 |
| MATH-hard (exact match) | 11.9 | **31.2** | −19.3 |
| GSM8K | 61.8 | **63.8** | −2.0 |
| HumanEval (pass@1) | 42.7 | **50.0** | −7.3 |
| BBH (acc_norm) | **48.4** | 39.4 | +9.0 |
| MuSR (acc_norm) | **41.7** | 38.3 | +3.3 |
| MMLU-Pro (acc) | 25.0 | **26.7** | −1.7 (within noise) |
### With thinking on (GSM8K, first 500 test questions)
Standard prompt ("reason step by step, and put your final answer within \boxed{}"), greedy decoding, a 2,048-token
budget for both models. An answer counts only if the model finished thinking and its final answer is right.
| Model | GSM8K |
|---|---|
| Wiss 2B | **66.8** |
| Qwen3.5-2B (base) | 17.8 |
The base model's low score here is mostly a budget effect: it thinks at such length that most answers are cut off
at 2,048 tokens before a final answer. Wiss thinks briefly and finishes inside the budget. This is **not** evidence
that Wiss is a better mathematician than the base model with a larger budget (see the non-thinking table above, where
the base model is ahead on math).
## Usage
Needs `transformers >= 5`.
```python
from transformers import AutoModelForImageTextToText, AutoProcessor
model_id = "Wiss-2B" # path or Hub id of this model
processor = AutoProcessor.from_pretrained(model_id)
model = AutoModelForImageTextToText.from_pretrained(model_id, dtype="auto", device_map="auto")
messages = [{"role": "user", "content": [{"type": "text", "text": "Write a Python function that merges two sorted lists."}]}]
# pictures: add {"type": "image", "image": "photo.jpg"} to the content list
inputs = processor.apply_chat_template(messages, add_generation_prompt=True, tokenize=True, return_dict=True,
return_tensors="pt", enable_thinking=True).to(model.device)
out = model.generate(**inputs, max_new_tokens=1024, do_sample=True, temperature=0.6, top_p=0.95, top_k=20)
print(processor.decode(out[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True))
```
Recommended sampling: thinking on `temperature=0.6, top_p=0.95, top_k=20`; thinking off
`temperature=0.7, top_p=0.8, top_k=20`. Tools are passed in the standard OpenAI format through the chat template
(`tools=[...]`).
For llama.cpp (text and images), use the GGUF build with its image projector:
```bash
llama-server -m Wiss-2B-Q5_K_M.gguf --mmproj mmproj-Wiss-2B-f16.gguf --jinja --image-max-tokens 2048
```
## Training
- **Method:** LoRA (r=32, α=64) on every linear projection of the language model, including the Gated DeltaNet
linear-attention layers, merged into the weights. The image encoder and projector are unchanged from Qwen3.5-2B.
- **Schedule:** 2 epochs, peak LR 1e-4 with cosine decay, max length 2,048 tokens, loss only on assistant turns.
- **Compute:** one RTX 4090, about 22 minutes, with [Unsloth](https://github.com/unslothai/unsloth).
- **Data:** 2,974 verified synthetic conversations (2,362 with reasoning, 697 without), plus 85 held out; multi-step
conversations train every assistant turn, giving 4,442 training examples. Every row passed an automatic check
(unit tests, exact tool-call matching or answer matching) before it was kept.
| Family | Conversations |
|---|---|
| Code | 800 |
| Reasoning | 697 |
| Agent (multi-step tool use) | 678 |
| Instruction following | 346 |
| Grounded answers | 253 |
| Single-call tools | 200 |
Exact and near duplicates were removed, and the set was checked for 13-gram overlap with GSM8K, MATH-500,
HumanEval, MBPP and IFEval (0 overlaps found). It was not checked against MMLU-Pro, GPQA, BBH or MuSR.
- **Not trained on:** general-knowledge text, competition-level math, or any replay of the base model's own outputs.
## Limitations
- **Weaker than the base model at instruction following and hard math** (see the benchmark table), and somewhat
weaker at code on HumanEval. If you need strict format-following or competition math, use Qwen3.5-2B.
- Tool use and vision were the training goals, but the benchmarks above do not measure them.
- A 2B model: it makes small mistakes, especially in code details. Test what it writes.
- Vision was not fine-tuned. It describes pictures well but can invent details in dense screenshots; give it a high
image-token budget or crop to the part that matters.
- English only in training; other languages come from the base model.
- Single runs; the multiple-choice sets are small, so differences of a few points are within noise.
## License
Apache 2.0, the license of the base model [Qwen3.5-2B](https://huggingface.co/Qwen/Qwen3.5-2B). Synthetic training data
was generated with [gpt-oss-120b](https://huggingface.co/openai/gpt-oss-120b) (Apache 2.0), Pixel Canary (a model offered
on the Vercel AI Gateway) and Ling 3.1 Flash (inclusionAI).