47 lines
1.9 KiB
Python
47 lines
1.9 KiB
Python
"""
|
||
HYV3 chat template registration for LLaMA Factory.
|
||
|
||
Usage:
|
||
1. Copy this file's register_template block into LLaMA Factory's
|
||
src/llamafactory/data/template.py (for upstream MR).
|
||
2. Or import this module before training to register at runtime:
|
||
import hy_v3_template
|
||
"""
|
||
|
||
from llamafactory.data.template import ReasoningTemplate, register_template
|
||
from llamafactory.data.formatter import EmptyFormatter, StringFormatter
|
||
|
||
|
||
# ---------------------------------------------------------------------------
|
||
# HYV3 (MoE, pure text) chat template
|
||
#
|
||
# Token format (from chat_template.jinja & tokenizer_config.json):
|
||
# BOS: <|hy_begin▁of▁sentence|>
|
||
# System: {system_content} (directly after BOS, no role tag)
|
||
# User: <|hy_User|>{user_content}
|
||
# Assistant: <|hy_Assistant|>{assistant_content}<|hy_eos|>
|
||
# EOS: <|hy_eos|>
|
||
#
|
||
# Loss mask: only compute loss on assistant content (including <|hy_eos|>).
|
||
#
|
||
# Note: The system message has NO explicit role token -- it is placed right
|
||
# after BOS. The eos_token is <|hy_eos|>.
|
||
#
|
||
# Reasoning: Supports think tags via ReasoningTemplate.
|
||
# - thought_words: ("<think>", "</think>") matching jinja template
|
||
# - enable_thinking: set globally via data_args.enable_thinking (default True)
|
||
# - Training data always includes think tags (empty or with content)
|
||
# ---------------------------------------------------------------------------
|
||
|
||
register_template(
|
||
name="hy_v3",
|
||
template_class=ReasoningTemplate,
|
||
format_user=StringFormatter(slots=["<|hy_User|>{{content}}"]),
|
||
format_assistant=StringFormatter(slots=["<|hy_Assistant|>{{content}}", {"eos_token"}]),
|
||
format_system=StringFormatter(slots=["{{content}}"]),
|
||
format_prefix=EmptyFormatter(slots=[{"bos_token"}]),
|
||
thought_words=("<think>", "</think>"),
|
||
stop_words=["<|hy_eos|>"],
|
||
efficient_eos=True,
|
||
)
|