Fix bos/eos token IDs + add enable_thinking to chat template
Summary
Fix token configuration and add enable_thinking support for the chat template.
Token ID fixes
The current bos_token and eos_token are both set to <|endoftext|> (id=0), which is incorrect for a ChatML-style model. This PR fixes them to match the actual chat format:
| Field | Before | After |
|---|---|---|
bos_token |
<|endoftext|> (0) |
<|im_start|> (1) |
eos_token |
<|endoftext|> (0) |
<|im_end|> (2) |
bos_token_id |
0 | 1 |
eos_token_id |
0 | 2 |
These are also set in config.json.
enable_thinking chat template support
The Ouro-Thinking model enters chain-of-thought reasoning mode when <think> is prepended to the assistant turn, but the current chat template does not support triggering this.
This PR adds enable_thinking parameter support (following the convention from Qwen3 and DeepSeek-R1), so that:
tokenizer.apply_chat_template(messages, add_generation_prompt=True, enable_thinking=True)
# produces: ...<|im_start|>assistant\n<think>\n
Backward compatible β default behavior is unchanged (no <think> unless explicitly requested).
This also enables proper integration with vLLM and lm-eval-harness, which pass enable_thinking=True to apply_chat_template().
Thanks to @sirorezka for identifying the bos/eos/pad token ID issues in PRs #3, #4, and #5. This PR bundles those fixes together with the enable_thinking chat template change.
thx! upvoting!