Showcase / Compatibility test
57 models' prompt formats rebuilt in Affordance, each matching the official one token for token
Every chat model was trained on conversations written in one exact format, with its own markers for where each message starts and ends. If your prompt is off by one marker, the model is reading something it was never trained on. We rebuilt the format of 57 models in Affordance and checked each one against the official version, token for token.
What a prompt format is
You send a model a list of messages. The model reads one long run of tokens, which are numbers that each stand for a piece of a word. Something has to turn the first into the second, and every model family does it differently. Here is the same short conversation in the format of three models:
Qwen3.6 <|im_start|>system # Tools GLM-5.3 [gMASK]<sop><|system|>Reasoning Effort: Max<|system|> # Tools Llama 3.1 <|begin_of_text|><|start_header_id|>system<|end_header_id|>
The model's authors publish the format as a chat template, a small program in a template language called Jinja. They also publish a tokenizer, the program that splits text into tokens. Running one and then the other gives the official tokens.
What we built and how we checked it
For each of the 57 models we wrote the format as an Affordance app. Then we took 963 test conversations: plain chats, system messages, tools the model can call, the results of those calls, and the model's own reasoning. We ran every conversation through our app and through the model's official template and tokenizer, and compared the two lists of tokens.
| Across all 57 models | Conversations |
|---|---|
| Our app and the official tools gave the same tokens | 40,977 |
| The official template rejected the conversation, and so did our app | 13,914 |
| Different | 0 |
| Compared | 54,891 |
A template can reject a conversation it does not support. An older model with no tool format rejects any conversation that uses tools, for example. For those we checked that our app rejects the same conversations.
Why it is useful
These apps are what Affordance uses when you write an agent and name a model: the agent's prompt comes out in that model's format. They are also what we put inside SGLang and vLLM in place of the Jinja template.
The apps are in the repository under views/, one directory per model family. If a token ever differs from your model's template, open an issue and we will fix it.
Every model
| Model | Same tokens | Rejected by both | Different |
|---|---|---|---|
| Qwen | |||
| Qwen3-8B | 932 | 31 | 0 |
| Qwen1.5-7B-Chat | 650 | 313 | 0 |
| Qwen2-7B-Instruct | 650 | 313 | 0 |
| Qwen2.5-7B-Instruct | 723 | 240 | 0 |
| Qwen2.5-Coder-7B-Instruct | 723 | 240 | 0 |
| QwQ-32B | 656 | 307 | 0 |
| Qwen3-4B-Instruct-2507 | 932 | 31 | 0 |
| Qwen3-Next-80B-A3B-Instruct | 932 | 31 | 0 |
| Qwen3-4B-Thinking-2507 | 932 | 31 | 0 |
| Qwen3-Coder-30B-A3B-Instruct | 610 | 353 | 0 |
| Qwen3.5-9B | 740 | 223 | 0 |
| Qwen3.6-27B | 740 | 223 | 0 |
| Qwen3.8-27B | 638 | 325 | 0 |
| DeepSeek | |||
| DeepSeek-V3.1 | 471 | 492 | 0 |
| deepseek-llm-7b-chat | 650 | 313 | 0 |
| DeepSeek-V2.5 | 673 | 290 | 0 |
| DeepSeek-V3 | 654 | 309 | 0 |
| DeepSeek-V3-0324 | 471 | 492 | 0 |
| DeepSeek-R1 | 471 | 492 | 0 |
| DeepSeek-R1-0528 | 470 | 493 | 0 |
| DeepSeek-V3.1-Terminus | 471 | 492 | 0 |
| DeepSeek-V4.1-Flash | 827 | 136 | 0 |
| DeepSeek-V3.2 | 552 | 411 | 0 |
| DeepSeek-V4-Flash | 735 | 228 | 0 |
| DeepSeek-V4-Pro | 735 | 228 | 0 |
| gpt-oss | |||
| gpt-oss-20b | 615 | 348 | 0 |
| gpt-oss-120b | 615 | 348 | 0 |
| MiMo | |||
| MiMo-7B-RL | 723 | 240 | 0 |
| MiMo-V2-Flash | 610 | 353 | 0 |
| MiMo-V2.5 | 743 | 220 | 0 |
| MiMo-V2.5-Pro | 743 | 220 | 0 |
| MiMo-V2.6-Flash-RL | 963 | 0 | 0 |
| Llama | |||
| Llama-2-7b-chat-hf | 437 | 526 | 0 |
| Meta-Llama-3-8B-Instruct | 963 | 0 | 0 |
| Llama-3.1-8B-Instruct | 737 | 226 | 0 |
| Llama-3.2-3B-Instruct | 737 | 226 | 0 |
| Llama-3.3-70B-Instruct | 737 | 226 | 0 |
| Llama-4-Scout-17B-16E-Instruct | 864 | 99 | 0 |
| Mistral | |||
| Mistral-7B-Instruct-v0.3 | 631 | 332 | 0 |
| Mistral-Nemo-Instruct-2407 | 631 | 332 | 0 |
| Ministral-3-8B-Instruct-2512 | 927 | 36 | 0 |
| Mistral-Small-4-119B-2603 | 698 | 265 | 0 |
| Mistral-Medium-3.5-128B | 698 | 265 | 0 |
| Mistral-Small-3.2-24B-Instruct-2506 | 420 | 543 | 0 |
| Magistral-Small-2509 | 831 | 132 | 0 |
| GLM | |||
| glm-4-9b-chat-hf | 963 | 0 | 0 |
| GLM-4-9B-0414 | 963 | 0 | 0 |
| GLM-Z1-9B-0414 | 668 | 295 | 0 |
| GLM-4.5 | 794 | 169 | 0 |
| GLM-4.6 | 794 | 169 | 0 |
| GLM-4.7 | 794 | 169 | 0 |
| GLM-5 | 794 | 169 | 0 |
| GLM-5.1 | 794 | 169 | 0 |
| GLM-5.2 | 794 | 169 | 0 |
| GLM-5.3 | 794 | 169 | 0 |
| Kolibri | |||
| Kolibri-1 | 735 | 228 | 0 |
| Muse | |||
| Muse-Glimmer-30B | 729 | 234 | 0 |