TRL documentation

Utilidades de plantillas de chat

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v1.17.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Utilidades de plantillas de chat

Para obtener una visión general de las plantillas de chat incluidas con TRL y la justificación de los parches de entrenamiento, consulte Plantillas de chat.

clone_chat_template

trl.clone_chat_template

< >

( model: PreTrainedModeltokenizer: PreTrainedTokenizerBasesource_tokenizer_path: strresize_to_multiple_of: int | None = 64 ) → model (PreTrainedModel)

Parámetros

  • model (PreTrainedModel) — Modelo a actualizar.
  • tokenizer (PreTrainedTokenizerBase) — Tokenizer que se actualizará.
  • source_tokenizer_path (str) — Ruta o identificador del tokenizer preentrenado del que clonar.
  • resize_to_multiple_of (int o None, opcional, valor predeterminado 64) — La capa de incrustación se redimensionará al nuevo tamaño de vocabulario. Si este valor no es None, se redondeará el nuevo tamaño de vocabulario al múltiplo más cercano de este valor.

Devuelve

modelo (PreTrainedModel)

Modelo actualizado con embeddings de tokens redimensionados y token EOS configurado. tokenizer (PreTrainedTokenizerBase): Tokenizer actualizado con la plantilla de chat y los tokens especiales aplicados. added_tokens (list[int]): Lista de tokens que se añadieron al tokenizer desde el tokenizer de origen.

Clona una plantilla de chat desde un tokenizador de origen hacia el tokenizador de destino y actualiza el modelo en consecuencia.

Esta función:

  • Copia la plantilla de chat desde un tokenizador de origen al tokenizador de destino.
  • Añade cualquier token nuevo del tokenizador de origen al tokenizador de destino.
  • Establece y sincroniza el token EOS entre el tokenizador y el modelo.
  • Redimensiona las incrustaciones de tokens del modelo para que coincidan con el nuevo tamaño del vocabulario, redondeándolo opcionalmente hacia arriba a un múltiplo de un valor especificado. En tales casos, se añaden tokens ficticios al tokenizador para garantizar que el tamaño del vocabulario coincida con las dimensiones de la incrustación.

Ejemplo:

>>> from transformers import AutoModelForCausalLM, AutoTokenizer
>>> from trl import clone_chat_template

>>> model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-3.2-1B")
>>> tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-3.2-1B")
>>> model, tokenizer, added_tokens = clone_chat_template(model, tokenizer, "Qwen/Qwen3-0.6B")

is_chat_template_prefix_preserving

trl.chat_template_utils.is_chat_template_prefix_preserving

< >

( processing_class: transformers.tokenization_utils_base.PreTrainedTokenizerBase | transformers.processing_utils.ProcessorMixin ) → bool

Parámetros

  • processing_class (PreTrainedTokenizerBase o ProcessorMixin) — Instancia de tokenizador o procesador a verificar.

Devuelve

bool

True si la plantilla de chat preserva los prefijos, False en caso contrario.

Comprueba si la plantilla de chat conserva los prefijos cuando se aplica.

Una plantilla de chat que preserva prefijos renderiza los mensajes anteriores de forma idéntica, sin importar qué mensajes los sigan. Esta propiedad es requerida por _get_tool_suffix_ids, que extrae los tokens de formato de respuesta de herramientas comparando las tokenizaciones con y sin mensajes de herramientas añadidos.

get_training_chat_template

trl.get_training_chat_template

< >

( processing_class: transformers.tokenization_utils_base.PreTrainedTokenizerBase | transformers.processing_utils.ProcessorMixin | None = Nonetokenizer: transformers.tokenization_utils_base.PreTrainedTokenizerBase | None = Nonerequire_prefix_preservation: bool = True ) → str or None

Parámetros

  • processing_class (PreTrainedTokenizerBase o ProcessorMixin) — Instancia de tokenizador o procesador a verificar.
  • require_prefix_preservation (bool, opcional, valor predeterminado True) — Si una plantilla sin una plantilla de entrenamiento almacenada también debe ser de preservación de prefijo para ser devuelta tal cual. La pérdida solo de asistente solo necesita los marcadores, por lo que SFTTrainer lo establece en False.

Devuelve

str o None

Plantilla de chat compatible con el entrenamiento, o None si no se necesita parcheo.

Obtén una plantilla de chat compatible con el entrenamiento, si es necesario.

Devuelve una plantilla de chat modificada que preserva el prefijo e incluye los marcadores {%% generation %%} / {%% endgeneration %%} para la enmascaración de pérdida solo del asistente. Una plantilla con una plantilla de entrenamiento almacenada siempre la recibe, incluso si tiene sus propios marcadores. Devuelve None si alguna otra plantilla ya cumple los requisitos. Las plantillas compatibles se enumeran en Plantillas de entrenamiento.

Ejemplo:

>>> from trl.chat_template_utils import get_training_chat_template
>>> from transformers import AutoTokenizer

>>> tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen3-0.6B")
>>> messages1 = [
...     {"role": "user", "content": "What is 2 * 3?"},
...     {
...         "role": "assistant",
...         "content": "",
...         "tool_calls": [{"type": "function", "function": {"name": "multiply", "arguments": {"a": 2, "b": 3}}}],
...     },
... ]
>>> messages2 = messages1 + [
...     {"role": "tool", "name": "multiply", "content": "6"},
... ]
>>> tokenizer.apply_chat_template(messages1, tokenize=False)
'<|im_start|>user\nWhat is 2 * 3?<|im_end|>\n<|im_start|>assistant\n<think>\n\n</think>\n\n<tool_call>\n{"name": "multiply", "arguments": {"a": 2, "b": 3}}\n</tool_call><|im_end|>\n'

>>> tokenizer.apply_chat_template(messages2, tokenize=False, add_generation_prompt=True)
'<|im_start|>user\nWhat is 2 * 3?<|im_end|>\n<|im_start|>assistant\n<tool_call>\n{"name": "multiply", "arguments": {"a": 2, "b": 3}}\n</tool_call><|im_end|>\n<|im_start|>user\n<tool_response>\n6\n</tool_response><|im_end|>\n<|im_start|>assistant\n'

>>> #                                                        ^ think tags missing
>>> chat_template = get_training_chat_template(tokenizer)
>>> tokenizer.apply_chat_template(messages1, tokenize=False, chat_template=chat_template)
'<|im_start|>user\nWhat is 2 * 3?<|im_end|>\n<|im_start|>assistant\n<think>\n\n</think>\n\n<tool_call>\n{"name": "multiply", "arguments": {"a": 2, "b": 3}}\n</tool_call><|im_end|>\n'

>>> tokenizer.apply_chat_template(
...     messages2, tokenize=False, add_generation_prompt=True, chat_template=chat_template
... )
'<|im_start|>user\nWhat is 2 * 3?<|im_end|>\n<|im_start|>assistant\n<think>\n\n</think>\n\n<tool_call>\n{"name": "multiply", "arguments": {"a": 2, "b": 3}}\n</tool_call><|im_end|>\n<|im_start|>user\n<tool_response>\n6\n</tool_response><|im_end|>\n<|im_start|>assistant\n'
Update on GitHub