-
Notifications
You must be signed in to change notification settings - Fork 11.8k
Support Seed-Coder chat template #13472
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
Signed-off-by: Xiaodong Ye <[email protected]>
@@ -183,6 +184,9 @@ llm_chat_template llm_chat_detect_template(const std::string & tmpl) { | |||
return LLM_CHAT_TEMPLATE_BAILING; | |||
} else if (tmpl_contains("<|header_start|>") && tmpl_contains("<|header_end|>")) { | |||
return LLM_CHAT_TEMPLATE_LLAMA4; | |||
} else if (tmpl_contains("raise_exception") && tmpl_contains("System role not supported") && |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This will clash with many other chat templates, many of them have the same messages like this
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Also, this only applies to the Reasoning model, see Instruct:
https://huggingface.co/ByteDance-Seed/Seed-Coder-8B-Instruct/blob/main/tokenizer_config.json#L1029
In fact, these models don't seem to have proper chat templates at all?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🤔 I actually compared the templates from llama4
and ling-lite
before choosing these conditions. Do you have any recommended strings to choose? Thanks!
{% if messages[0]['role'] == 'system' %}{{ raise_exception('System role not supported') }}{% endif %}{% for message in messages %}{% if (message['role'] == 'user') != (loop.index0 % 2 == 0) %}{{ raise_exception('Conversation roles must alternate user/assistant/user/assistant/...') }}{% endif %}{% set role = message['role'] %}{{ bos_token + role + '\n' + message['content'] | trim + eos_token }}{% endfor %}{% if add_generation_prompt %}{{ bos_token + 'assistant\n'}}{% endif %}
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Also, this only applies to the Reasoning model, see Instruct: https://huggingface.co/ByteDance-Seed/Seed-Coder-8B-Instruct/blob/main/tokenizer_config.json#L1029
In fact, these models don't seem to have proper chat templates at all?
Ah... I didn’t expect that.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It's a very strange chat format, and as long as the chat templates are so sparse I don't think you can expect to detect them properly, use --jinja
for now.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
According to @shenz2-2000’s reply in ByteDance-Seed/Seed-Coder#2, the difference in chat template configurations between the instruct
and reasoning
models is expected.
The only shared substring I could find is:
'\n' + message['content'] | trim + eos_token }}{% endfor %}{% if add_generation_prompt %}{{ bos_token + 'assistant\n'}}{% endif %}
, which also appears quite generic. So currently, I’m unsure how to reliably identify the model type based on the template alone.
Make sure to read the contributing guidelines before submitting a PR
https://github.com/ByteDance-Seed/Seed-Coder
Testing Done
llama-cli
functions as expected onmusa
(see logs below)Logs: