# 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](chat_templates).

## clone_chat_template[[trl.clone_chat_template]]

#### trl.clone_chat_template[[trl.clone_chat_template]]

```python
trl.clone_chat_template(model: PreTrainedModel, tokenizer: PreTrainedTokenizerBase, source_tokenizer_path: str, resize_to_multiple_of: int | None = 64)
```

[Fuente](https://github.com/huggingface/trl/blob/main/trl/chat_template_utils.py#L54)

**Parámetros:**

model ([PreTrainedModel](https://huggingface.co/docs/transformers/main/en/main_classes/model#transformers.PreTrainedModel)) : Modelo a actualizar.

tokenizer ([PreTrainedTokenizerBase](https://huggingface.co/docs/transformers/main/en/internal/tokenization_utils#transformers.PreTrainedTokenizerBase)) : Tokenizador para actualizar.

source_tokenizer_path (`str`) : Ruta o identificador del tokenizador 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`, redondeará el nuevo tamaño de vocabulario al múltiplo más cercano de este valor.

**Devuelve:** modelo ([PreTrainedModel](https://huggingface.co/docs/transformers/main/en/main_classes/model#transformers.PreTrainedModel))

Modelo actualizado con embeddings de tokens redimensionados y token EOS configurado. tokenizer ([PreTrainedTokenizerBase](https://huggingface.co/docs/transformers/main/en/internal/tokenization_utils#transformers.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 las incrustaciones.

Ejemplo:
```python
>>> 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]]

#### trl.chat_template_utils.is_chat_template_prefix_preserving[[trl.chat_template_utils.is_chat_template_prefix_preserving]]

```python
trl.chat_template_utils.is_chat_template_prefix_preserving(processing_class: transformers.tokenization_utils_base.PreTrainedTokenizerBase | transformers.processing_utils.ProcessorMixin)
```

[Fuente](https://github.com/huggingface/trl/blob/main/trl/chat_template_utils.py#L1038)

**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, independientemente de los mensajes que 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]]

#### trl.get_training_chat_template[[trl.get_training_chat_template]]

```python
trl.get_training_chat_template(processing_class: transformers.tokenization_utils_base.PreTrainedTokenizerBase | transformers.processing_utils.ProcessorMixin | None = None, tokenizer: transformers.tokenization_utils_base.PreTrainedTokenizerBase | None = None, require_prefix_preservation: bool = True)
```

[Fuente](https://github.com/huggingface/trl/blob/main/trl/chat_template_utils.py#L1281)

**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 debe ser también de prefijo conservador para ser devuelta tal cual. La pérdida solo del 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](chat_templates#training-templates).

Ejemplo:

```python
>>> 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'
```

