# Utilitários de modelos de chat

Para uma visão geral dos modelos de chat incluídos no TRL e da justificativa por trás dos patches de treinamento, consulte [Chat Templates](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)
```

[Fonte](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 ser atualizado.

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

source_tokenizer_path (`str`) : Caminho ou identificador do tokenizer pré-treinado a ser clonado.

resize_to_multiple_of (`int` ou `None`, *opcional*, padrão `64`) : A camada de incorporação será redimensionada para o novo tamanho do vocabulário. Se isso não for `None`, o novo tamanho do vocabulário será arredondado para cima até o múltiplo mais próximo desse valor.

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

Modelo atualizado com embeddings de tokens redimensionados e token EOS configurado. tokenizer ([PreTrainedTokenizerBase](https://huggingface.co/docs/transformers/main/en/internal/tokenization_utils#transformers.PreTrainedTokenizerBase)): Tokenizer atualizado com o chat template e os tokens especiais aplicados. added_tokens (`list[int]`): Lista de tokens que foram adicionados ao tokenizer a partir do tokenizer de origem.

Clona um modelo de chat de um tokenizer de origem para o tokenizer de destino e atualiza o modelo de acordo.

Esta função:
- Copia o modelo de chat de um tokenizer de origem para o tokenizer de destino.
- Adiciona quaisquer novos tokens do tokenizer de origem ao tokenizer de destino.
- Define e sincroniza o token EOS entre o tokenizer e o modelo.
- Redimensiona os embeddings de tokens do modelo para corresponder ao novo tamanho do vocabulário, opcionalmente arredondando-o para cima até um múltiplo de um valor especificado. Nesses casos, tokens fictícios são adicionados ao tokenizer para garantir que o tamanho do vocabulário corresponda às dimensões dos embeddings.

Exemplo:
```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)
```

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

**Parâmetros:**

processing_class (`PreTrainedTokenizerBase` ou `ProcessorMixin`) : Instância de tokenizer ou processor a ser verificada.

**Retorna:** `bool`

`True` se o modelo de chat preserva os prefixos, `False` caso contrário.

Verifique se o modelo de chat preserva os prefixos quando aplicado.

Um modelo de chat que preserva o prefixo renderiza as mensagens anteriores de forma idêntica, independentemente das mensagens que as seguem. Essa propriedade é exigida por `_get_tool_suffix_ids`, que extrai os tokens de formatação de resposta de ferramenta comparando as tokenizações com e sem as mensagens de ferramenta anexadas.

## 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)
```

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

**Parâmetros:**

processing_class (`PreTrainedTokenizerBase` ou `ProcessorMixin`) : Instância de tokenizer ou processor a ser verificada.

require_prefix_preservation (`bool`, *opcional*, padrão `True`) : Se um template sem um template de treinamento armazenado também deve ser prefix-preserving para ser retornado como está. A perda apenas do assistente precisa apenas dos marcadores, então o `SFTTrainer` define isso como `False`.

**Retorna:** `str` ou `None`

Template de chat compatível com treinamento, ou `None` se nenhum patch for necessário.

Obtenha um modelo de chat compatível com o treinamento, se necessário.

Retorna um modelo de chat modificado que preserva o prefixo e inclui os marcadores `{%% generation %%}` / `{%% endgeneration %%}` para mascaramento de perda apenas para o assistente. Um modelo com um modelo de treinamento armazenado sempre o recebe, mesmo que tenha seus próprios marcadores. Retorna `None` se qualquer outro modelo já atender aos requisitos. Os modelos suportados estão listados em [Modelos de treinamento](chat_templates#training-templates).

Exemplo:

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

