Fix bos/eos token IDs + add enable_thinking to chat template

#7
by KristianS7 - opened

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.

(Subsumes PRs #3, #4)

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!

ridger changed pull request status to merged

Sign up or log in to comment