# Cohere

O Cohere [Command-R](https://cohere.com/blog/command-r) é um modelo de linguagem grande multilíngue com 35 bilhões de parâmetros, projetado para tarefas de contexto longo, como geração aumentada por recuperação (RAG) e chamadas a APIs e ferramentas externas. O modelo foi treinado especificamente para geração fundamentada e suporta o uso de ferramentas em etapas únicas e múltiplas. Ele suporta um comprimento de contexto de 128K tokens.

Você pode encontrar todos os checkpoints originais do Command-R na coleção [Command Models](https://huggingface.co/collections/CohereForAI/command-models-67652b401665205e17b192ad).

> [!TIP]
> Clique nos modelos da Cohere na barra lateral à direita para ver mais exemplos de como aplicar a Cohere em diferentes tarefas de linguagem.

O exemplo abaixo demonstra como gerar texto com [Pipeline](/docs/transformers/main/pt/main_classes/pipelines#transformers.Pipeline) ou com o [AutoModel](/docs/transformers/main/pt/model_doc/auto#transformers.AutoModel), e a partir da linha de comando.

```python
from transformers import pipeline

pipeline = pipeline(
    task="text-generation",
    model="CohereForAI/c4ai-command-r-v01",
    device=0
)
pipeline("Plants create energy through a process known as")
```

```python
from transformers import AutoModelForCausalLM, AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("CohereForAI/c4ai-command-r-v01")
model = AutoModelForCausalLM.from_pretrained("CohereForAI/c4ai-command-r-v01", device_map="auto", attn_implementation="sdpa")

# format message with the Command-R chat template
messages = [{"role": "user", "content": "How do plants make energy?"}]
input_ids = tokenizer.apply_chat_template(messages, tokenize=True, add_generation_prompt=True, return_tensors="pt").to(model.device)
output = model.generate(
    input_ids,
    max_new_tokens=100,
    do_sample=True,
    temperature=0.3,
    cache_implementation="static",
)
print(tokenizer.decode(output[0], skip_special_tokens=True))
```

```bash
# pip install -U flash-attn --no-build-isolation
transformers chat CohereForAI/c4ai-command-r-v01 --dtype auto --attn_implementation flash_attention_2
```

A quantização reduz a carga de memória de modelos grandes ao representar os pesos em uma precisão menor. Consulte a visão geral de [Quantização](../quantization/overview) para mais backends de quantização disponíveis.

O exemplo abaixo usa [bitsandbytes](../quantization/bitsandbytes) para quantizar os pesos em 4 bits.

```python
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig

bnb_config = BitsAndBytesConfig(load_in_4bit=True)
tokenizer = AutoTokenizer.from_pretrained("CohereForAI/c4ai-command-r-v01")
model = AutoModelForCausalLM.from_pretrained("CohereForAI/c4ai-command-r-v01", device_map="auto", quantization_config=bnb_config, attn_implementation="sdpa")

# format message with the Command-R chat template
messages = [{"role": "user", "content": "How do plants make energy?"}]
input_ids = tokenizer.apply_chat_template(messages, tokenize=True, add_generation_prompt=True, return_tensors="pt").to(model.device)
output = model.generate(
    input_ids,
    max_new_tokens=100,
    do_sample=True,
    temperature=0.3,
    cache_implementation="static",
)
print(tokenizer.decode(output[0], skip_special_tokens=True))
```

Use o [AttentionMaskVisualizer](https://github.com/huggingface/transformers/blob/beb9b5b02246b9b7ee81ddf938f93f44cfeaad19/src/transformers/utils/attention_visualizer.py#L139) para entender melhor quais tokens o modelo pode e não pode observar.

```python
from transformers.utils.attention_visualizer import AttentionMaskVisualizer

visualizer = AttentionMaskVisualizer("CohereForAI/c4ai-command-r-v01")
visualizer("Plants create energy through a process known as")
```

    

## Observações

- Não use o parâmetro dtype em [from_pretrained()](/docs/transformers/main/pt/model_doc/auto#transformers.AutoModel.from_pretrained) se estiver usando FlashAttention-2, pois ele suporta apenas fp16 ou bf16. Você deve usar [Automatic Mixed Precision](https://pytorch.org/tutorials/recipes/recipes/amp_recipe.html), definir fp16 ou bf16 como True se estiver usando [Trainer](/docs/transformers/main/pt/main_classes/trainer#transformers.Trainer), ou usar [torch.autocast](https://pytorch.org/docs/stable/amp.html#torch.autocast).

## CohereConfig[[transformers.CohereConfig]]

#### transformers.CohereConfig[[transformers.CohereConfig]]

```python
transformers.CohereConfig(transformers_version: str | None = None, architectures: list[str] | None = None, output_hidden_states: bool | None = False, return_dict: bool | None = True, dtype: str | torch.dtype | None = None, chunk_size_feed_forward: int = 0, is_encoder_decoder: bool = False, id2label: dict[int, str] | dict[str, str] | None = None, label2id: dict[str, int] | dict[str, str] | None = None, problem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = None, vocab_size: int = 256000, hidden_size: int = 8192, intermediate_size: int = 22528, logit_scale: float | None = 0.0625, num_hidden_layers: int = 40, num_attention_heads: int = 64, num_key_value_heads: int | None = None, hidden_act: str = 'silu', max_position_embeddings: int = 8192, initializer_range: float = 0.02, layer_norm_eps: float | None = 1e-05, use_cache: bool = True, pad_token_id: int | None = 0, bos_token_id: int | None = 5, eos_token_id: int | list[int] | None = 255001, tie_word_embeddings: bool = True, rope_parameters: transformers.modeling_rope_utils.RopeParameters | dict | None = None, attention_bias: bool = False, attention_dropout: float | int | None = 0.0, use_qk_norm: bool | None = False)
```

[Origem](https://github.com/huggingface/transformers/blob/main/src/transformers/models/cohere/configuration_cohere.py#L30)

**Parâmetros:**

vocab_size (`int`, *opcional*, padrão `256000`) : Tamanho do vocabulário do modelo. Define o número de tokens diferentes que podem ser representados pelos `input_ids`.

hidden_size (`int`, *opcional*, padrão `8192`) : Dimensão das representações ocultas.

intermediate_size (`int`, *opcional*, padrão `22528`) : Dimensão das representações do MLP.

logit_scale (`float`, *opcional*, padrão 0.0625) : O fator de escala para os logits de saída.

num_hidden_layers (`int`, *opcional*, padrão `40`) : Número de camadas ocultas no decodificador do Transformer.

num_attention_heads (`int`, *opcional*, padrão `64`) : Número de cabeças de atenção para cada camada de atenção no decodificador do Transformer.

num_key_value_heads (`int`, *opcional*) : Este é o número de cabeças de key_value que devem ser usadas para implementar Grouped Query Attention. Se `num_key_value_heads=num_attention_heads`, o modelo usará Multi Head Attention (MHA); se `num_key_value_heads=1`, o modelo usará Multi Query Attention (MQA); caso contrário, será usado GQA. Ao converter um checkpoint multi-head para um checkpoint GQA, cada cabeça de chave e valor do grupo deve ser construída pela média (meanpooling) de todas as cabeças originais dentro desse grupo. Para mais detalhes, consulte [este artigo](https://huggingface.co/papers/2305.13245). Se não for especificado, o valor padrão será `num_attention_heads`.

hidden_act (`str`, *opcional*, padrão `silu`) : A função de ativação não linear (função ou string) no decodificador. Por exemplo, `"gelu"`, `"relu"`, `"silu"`, etc.

max_position_embeddings (`int`, *opcional*, padrão `8192`) : O comprimento máximo de sequência com o qual este modelo pode ser usado.

initializer_range (`float`, *opcional*, padrão `0.02`) : O desvio padrão do truncated_normal_initializer para inicializar todas as matrizes de pesos.

layer_norm_eps (`float`, *opcional*, padrão `1e-05`) : O epsilon usado pelas camadas de normalização de camada.

use_cache (`bool`, *opcional*, padrão `True`) : Indica se o modelo deve retornar as últimas atenções de chave/valor (não utilizado por todos os modelos). Relevante apenas se `config.is_decoder=True` ou quando o modelo for um modelo generativo somente de decodificador.

pad_token_id (`int`, *opcional*, padrão `0`) : ID do token usado para preenchimento no vocabulário.

bos_token_id (`int`, *opcional*, padrão `5`) : ID do token usado para o início do fluxo no vocabulário.

eos_token_id (`Union[int, list[int]]`, *opcional*, padrão `255001`) : ID do token usado para o fim do fluxo no vocabulário.

tie_word_embeddings (`bool`, *opcional*, padrão `True`) : Se deve vincular as embeddings de pesos de acordo com o mapeamento `tied_weights_keys` do modelo.

rope_parameters (`Union[~modeling_rope_utils.RopeParameters, dict]`, *opcional*) : Dicionário contendo os parâmetros de configuração para os embeddings RoPE. O dicionário deve conter um valor para `rope_theta` e, opcionalmente, parâmetros usados para escalonamento, caso você queira usar RoPE com `max_position_embeddings` maiores.

attention_bias (`bool`, *opcional*, padrão `False`) : Se deve usar um viés nas camadas de projeção de query, key, value e output durante a autoatenção.

attention_dropout (`Union[float, int]`, *opcional*, padrão `0.0`) : A taxa de dropout para as probabilidades de atenção.

use_qk_norm (`bool`, *opcional*, padrão `False`) : Se deve usar normalização de query-key na atenção.

Esta é a classe de configuração para armazenar a configuração de um CohereModel. Ela é usada para instanciar um modelo Cohere de acordo com os argumentos especificados, definindo a arquitetura do modelo. Instanciar uma configuração com os padrões resultará em uma configuração semelhante à do [CohereForAI/c4ai-command-r-v01](https://huggingface.co/CohereForAI/c4ai-command-r-v01)

Os objetos de configuração herdam de [PreTrainedConfig](/docs/transformers/main/pt/main_classes/configuration#transformers.PreTrainedConfig) e podem ser usados para controlar as saídas do modelo. Leia a documentação de [PreTrainedConfig](/docs/transformers/main/pt/main_classes/configuration#transformers.PreTrainedConfig) para mais informações.

```python
>>> from transformers import CohereModel, CohereConfig

>>> # Initializing a Cohere model configuration
>>> configuration = CohereConfig()

>>> # Initializing a model from the Cohere configuration
>>> model = CohereModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config
```

## CohereTokenizer[[transformers.CohereTokenizer]]

#### transformers.CohereTokenizer[[transformers.CohereTokenizer]]

```python
transformers.CohereTokenizer(vocab: str | dict[str, int] | None = None, merges: str | list[str] | None = None, errors: str = 'replace', unk_token: str = '<UNK>', bos_token: str = '<BOS_TOKEN>', eos_token: str = '<|END_OF_TURN_TOKEN|>', pad_token: str = '<PAD>', cls_token: str = '<CLS>', sep_token: str = '<SEP>', mask_token: str = '<MASK_TOKEN>', use_default_system_prompt: bool = False, add_prefix_space: bool = False, **kwargs)
```

[Origem](https://github.com/huggingface/transformers/blob/main/src/transformers/models/cohere/tokenization_cohere.py#L45)

**Parâmetros:**

vocab_file (`str`, *opcional*) : Caminho para o arquivo de vocabulário.

merges_file (`str`, *opcional*) : Caminho para o arquivo de mesclagens.

tokenizer_file (`str`, *opcional*) : arquivo [tokenizers](https://github.com/huggingface/tokenizers) (geralmente com extensão .json) que contém tudo o que é necessário para carregar o tokenizer.

clean_up_tokenization_spaces (`bool`, *opcional*, padrão `False`) : Indica se deve ou não limpar os espaços após a decodificação. A limpeza consiste em remover possíveis artefatos, como espaços extras.

unk_token (`str` ou `tokenizers.AddedToken`, *opcional*, padrão `"<UNK>"`) : O token desconhecido. Um token que não está no vocabulário não pode ser convertido em um ID e é definido como este token em vez disso.

bos_token (`str` ou `tokenizers.AddedToken`, *opcional*, padrão `"<BOS_TOKEN>"`) : O token de início de sequência usado durante o pré-treinamento. Pode ser usado como token de classificador de sequência.

eos_token (`str` ou `tokenizers.AddedToken`, *opcional*, padrão `"<|END_OF_TURN_TOKEN|>"`) : O token de fim de sequência.

add_bos_token (`bool`, *opcional*, padrão `True`) : Indica se deve ou não adicionar um `bos_token` no início das sequências.

add_eos_token (`bool`, *opcional*, padrão `False`) : Indica se deve ou não adicionar um `eos_token` ao final das sequências.

use_default_system_prompt (`bool`, *opcional*, padrão `False`) : Se o prompt de sistema padrão para o tokenizer da Cohere deve ser usado.

add_prefix_space (`bool`, *opcional*, padrão `False`) : Se o tokenizer deve ou não adicionar automaticamente um espaço de prefixo

vocab (`str`, `dict` ou `list`, *opcional*) : Dicionário de vocabulário personalizado. Se não for fornecido, o vocabulário é carregado de vocab_file.

merges (`str` ou `list[str]`, *opcional*) : Lista de mesclagens personalizada. Se não for fornecida, as mesclagens são carregadas de `merges_file`.

Construa um tokenizador da Cohere. Baseado em Byte-Pair-Encoding em nível de bytes.

Isso usa notavelmente ByteFallback e normalização NFC.

```python
>>> from transformers import AutoTokenizer

>>> tokenizer = AutoTokenizer.from_pretrained("CohereForAI/c4ai-command-r-v01")
>>> tokenizer.encode("Hello this is a test")
[5, 28339, 2075, 1801, 1671, 3282]
```

Se você quiser alterar o `bos_token` ou o `eos_token`, certifique-se de especificá-los ao inicializar o modelo, ou chame `tokenizer.update_post_processor()` para garantir que o pós-processamento seja realizado corretamente (caso contrário, os valores do primeiro token e do token final de uma sequência codificada não serão corretos). Para mais detalhes, consulte a documentação de [post-processors] (https://huggingface.co/docs/tokenizers/api/post-processors).

Você pode contornar esse comportamento passando `add_prefix_space=True` ao instanciar este tokenizer, mas como o modelo não foi pré-treinado dessa forma, isso pode resultar em uma queda de desempenho.

Quando usado com `is_split_into_words=True`, este tokenizer precisa ser instanciado com `add_prefix_space=True`.

Este tokenizer herda de [TokenizersBackend](/docs/transformers/main/pt/main_classes/tokenizer#transformers.TokenizersBackend), que contém a maioria dos métodos principais. Os usuários devem consultar essa superclasse para obter mais informações sobre esses métodos.

#### apply_grounded_generation_template[[transformers.CohereTokenizer.apply_grounded_generation_template]]

```python
apply_grounded_generation_template(conversation: list, documents: list, citation_mode: typing.Literal['fast', 'accurate'] = 'accurate', **kwargs)
```

[Origem](https://github.com/huggingface/transformers/blob/main/src/transformers/models/cohere/tokenization_cohere.py#L297)

**Parâmetros:**

conversation (list[dict[str, str]]) : Uma lista de dicts com as chaves "role" e "content", representando o histórico do chat até o momento.

documents (list[dict[str, str]) : Uma lista de dicts, representando documentos ou saídas de ferramentas para fundamentar sua geração. Um documento é um dict semiestruturado, com um mapeamento de string para string. Os campos comuns são `url`, `title`, `snippet` etc., mas devem ser descritivos da chave. Eles serão renderizados no prompt.

citation_mode : "accurate" (o modelo é instruído a gerar uma resposta primeiro e, em seguida, reescrevê-la incluindo os trechos de citação) ou "fast", em que o prompt instrui o modelo a gerar uma resposta com as citações diretamente. A primeira opção produz citações de maior qualidade, enquanto a segunda requer a geração de menos tokens.

add_generation_prompt (bool, *opcional*) : Indica se o prompt deve terminar com o(s) token(s) que indicam o início de uma mensagem do assistente. Isso é útil quando você deseja gerar uma resposta a partir do modelo. Observe que este argumento será passado para o modelo de chat, portanto, ele deve ser suportado no modelo para que este argumento tenha algum efeito.

tokenize (`bool`, padrão `True`) : Se deve tokenizar a saída. Se `False`, a saída será uma string.

padding (`bool`, padrão `False`) : Se as sequências devem ser preenchidas até o comprimento máximo. Não tem efeito se tokenize for `False`.

truncation (`bool`, padrão `False`) : Se as sequências devem ser truncadas no comprimento máximo. Não tem efeito se tokenize for `False`.

max_length (`int`, *opcional*) : Comprimento máximo (em tokens) a ser usado para preenchimento ou truncamento. Não tem efeito se tokenize for `False`. Se não for especificado, o atributo `max_length` do tokenizer será usado como padrão.

return_tensors (`str` ou [TensorType](/docs/transformers/main/pt/internal/file_utils#transformers.TensorType), *opcional*) : Se definido, retornará tensors de um framework específico. Não tem efeito se tokenize for `False`. Valores aceitos são: - `'pt'`: Retorna objetos `torch.Tensor` do PyTorch. - `'np'`: Retorna objetos `np.ndarray` do NumPy.

return_dict (`bool`, *opcional*, padrão `False`) : Se deve retornar um dicionário com saídas nomeadas. Não tem efeito se tokenize for `False`.

- ****tokenizer_kwargs** : Kwargs adicionais para passar ao tokenizer.

**Retorna:** `str`

Uma string de prompt renderizada. ou se tokenize=True: `list[int]`: Uma lista de ids de tokens representando o chat tokenizado até o momento, incluindo tokens de controle. Esta saída está pronta para ser passada ao modelo, seja diretamente ou por meio de métodos como `generate()`.

Crie um prompt de geração fundamentada (também conhecido como RAG) para o Command-R.

Uma vez renderizado, o prompt instrui o modelo a gerar uma resposta com citações, com base nos documentos fornecidos.

Conceitualmente, isso funciona da mesma forma que `apply_chat_format`, mas aceita os parâmetros adicionais `documents` e `citation_mode`.

Converte uma lista de dicionários com as chaves `"role"` e `"content"` e uma lista de documentos para o modelo fundamentar sua resposta em uma string de prompt ou em uma lista de ids de tokens. Este método utiliza o modelo `grounded_generation_template` do tokenizer especificado no nível da classe. Você pode substituir o modelo padrão usando o argumento `grounded_generation_template`, mas a qualidade dos seus resultados pode diminuir.

Exemplos:

```python
>> tokenizer = CohereTokenizer.from_pretrained('CohereForAI/c4ai-command-r-v01')

>> # define documents:
>> documents = [
    { "title": "Tall penguins", "text": "Emperor penguins are the tallest." },
    { "title": "Penguin habitats", "text": "Emperor penguins only live in Antarctica."}
]
>> # define a conversation:
>> conversation = [
    {"role": "user", "content": "What's the biggest penguin in the world?"}
]
>> # render the prompt, ready for user to inspect, or for input into the model:
>> grounded_generation_prompt = tokenizer.apply_grounded_generation_template(conversation, documents=documents, tokenize=False, add_generation_prompt=True)
>> print(grounded_generation_prompt)
>> inputs = tokenizer.encode(prompt, add_special_tokens=False, return_tensors='pt')
>> outputs = model.generate(inputs, max_new_tokens=128)
>> print(tokenizer.decode(outputs[0]))
```

#### apply_tool_use_template[[transformers.CohereTokenizer.apply_tool_use_template]]

```python
apply_tool_use_template(conversation: list, tools: list, **kwargs)
```

[Origem](https://github.com/huggingface/transformers/blob/main/src/transformers/models/cohere/tokenization_cohere.py#L186)

**Parâmetros:**

conversation (list[dict[str, str]]) : Uma lista de dicts com as chaves "role" e "content", representando o histórico do chat até o momento.

tools (list[Dict]) : uma lista de ferramentas para renderizar no prompt para que o modelo escolha entre elas. Veja um exemplo no final do docstring. O formato deve ser: * name (str): O nome da ferramenta a ser chamada. Nomes válidos contêm apenas os caracteres a-z, A-Z, 0-9, _ e não podem começar com um dígito. * description (str): A descrição do que a ferramenta faz; o modelo usa a descrição para escolher quando e como chamar a função. * parameter_definitions (list[Dict]): Os parâmetros de entrada da ferramenta. Aceita um dicionário em que a chave é o nome do parâmetro e o valor é a especificação do parâmetro. Nomes de parâmetros válidos contêm apenas os caracteres a-z, A-Z, 0-9, _ e não podem começar com um dígito. As especificações de parâmetros são as seguintes: * description (str): A descrição do parâmetro. * type (str): o tipo do parâmetro - mais eficaz para tipos de dados embutidos do python, como 'str', 'bool' * required: boolean: Indica se o parâmetro está sempre presente (obrigatório) ou não. O padrão é não obrigatório.

add_generation_prompt (bool, *opcional*) : Indica se o prompt deve terminar com o(s) token(s) que indicam o início de uma mensagem do assistente. Isso é útil quando você deseja gerar uma resposta a partir do modelo. Observe que este argumento será passado para o modelo de chat, portanto, ele deve ser suportado no modelo para que este argumento tenha algum efeito.

tokenize (`bool`, padrão `True`) : Se deve tokenizar a saída. Se `False`, a saída será uma string.

padding (`bool`, padrão `False`) : Se as sequências devem ser preenchidas até o comprimento máximo. Não tem efeito se tokenize for `False`.

truncation (`bool`, padrão `False`) : Se as sequências devem ser truncadas no comprimento máximo. Não tem efeito se tokenize for `False`.

max_length (`int`, *opcional*) : Comprimento máximo (em tokens) a ser usado para preenchimento ou truncamento. Não tem efeito se tokenize for `False`. Se não for especificado, o atributo `max_length` do tokenizer será usado como padrão.

return_tensors (`str` ou [TensorType](/docs/transformers/main/pt/internal/file_utils#transformers.TensorType), *opcional*) : Se definido, retornará tensors de um framework específico. Não tem efeito se tokenize for `False`. Valores aceitos são: - `'pt'`: Retorna objetos `torch.Tensor` do PyTorch. - `'np'`: Retorna objetos `np.ndarray` do NumPy.

return_dict (`bool`, *opcional*, padrão `False`) : Se deve retornar um dicionário com saídas nomeadas. Não tem efeito se tokenize for `False`.

- ****tokenizer_kwargs** : Kwargs adicionais para passar ao tokenizer.

**Retorna:** `str`

Uma string de prompt renderizada. ou se tokenize=True: `list[int]`: Uma lista de ids de tokens representando o chat tokenizado até o momento, incluindo tokens de controle. Esta saída está pronta para ser passada ao modelo, seja diretamente ou por meio de métodos como `generate()`.

Crie um prompt de uso de ferramentas para o Command-R.

Uma vez renderizado, o prompt instrui o modelo a gerar uma lista de ações a serem executadas em um conjunto de ferramentas fornecidas pelo usuário para ajudar a atender às solicitações do usuário.

Conceitualmente, isso funciona da mesma forma que `apply_chat_format`, mas aceita um parâmetro adicional `tools`.

Converte um chat, na forma de uma lista de dicionários com as chaves `"role"` e `"content"`, e uma lista de ferramentas disponíveis para o modelo usar, em uma string de prompt ou em uma lista de ids de tokens. Este método utiliza o template `default_tool_use_template` do tokenizer, especificado no nível da classe. Você pode sobrescrever o template padrão usando o argumento `tool_use_template`, mas a qualidade dos seus resultados pode diminuir.

Exemplos:

```python
>> tokenizer = CohereTokenizer.from_pretrained("CohereForAI/c4ai-command-r-v01")
>> tools = [
    {
        "name": "internet_search",
        "description": "Returns a list of relevant document snippets for a textual query retrieved from the internet",
        "parameter_definitions": {
            "query": {
                "description": "Query to search the internet with",
                "type": "str",
                "required": True,
            }
        },
    },
    {
        "name": "directly_answer",
        "description": "Calls a standard (un-augmented) AI chatbot to generate a response given the conversation history",
        "parameter_definitions": {},
    },
]
>> conversation = [
    {"role": "user", "content": "What's the biggest penguin in the world?"},
]
>> # Render the prompt, ready for user to inspect, or for input into the model
>> prompt = tokenizer.apply_tool_use_template(conversation, tools=tools, tokenize=False, add_generation_prompt=True)
>> print(prompt)
>> inputs = tokenizer.encode(grounded_generation_prompt, add_special_tokens=False, return_tensors='pt')
>> outputs = model.generate(inputs, max_new_tokens=128)
>> print(tokenizer.decode(outputs[0]))
[
    {
        "tool_name": "internet_search",
        "parameters": {
            "query": "biggest penguin in the world"
        }
    }
]
```

## CohereModel[[transformers.CohereModel]]

#### transformers.CohereModel[[transformers.CohereModel]]

```python
transformers.CohereModel(config: CohereConfig)
```

[Origem](https://github.com/huggingface/transformers/blob/main/src/transformers/models/cohere/modeling_cohere.py#L360)

**Parâmetros:**

config ([CohereConfig](/docs/transformers/main/pt/model_doc/cohere#transformers.CohereConfig)) : Classe de configuração do modelo com todos os parâmetros do modelo. A inicialização com um arquivo de configuração não carrega os pesos associados ao modelo, apenas a configuração. Consulte o método [from_pretrained()](/docs/transformers/main/pt/main_classes/model#transformers.PreTrainedModel.from_pretrained) para carregar os pesos do modelo.

O modelo Cohere puro, que gera estados ocultos brutos sem nenhum head específico no topo.

Este modelo herda de [PreTrainedModel](/docs/transformers/main/pt/main_classes/model#transformers.PreTrainedModel). Consulte a documentação da classe pai para os métodos genéricos que a biblioteca implementa para todos os seus modelos (como download ou salvamento, redimensionamento dos embeddings de entrada, poda de cabeças, etc.).

Este modelo também é uma subclasse de [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) do PyTorch. Use-o como um Módulo PyTorch regular e consulte a documentação do PyTorch para todos os assuntos relacionados ao uso e comportamento gerais.

#### forward[[transformers.CohereModel.forward]]

```python
forward(input_ids: typing.Optional[torch.LongTensor] = None, attention_mask: typing.Optional[torch.Tensor] = None, position_ids: typing.Optional[torch.LongTensor] = None, past_key_values: transformers.cache_utils.Cache | None = None, inputs_embeds: typing.Optional[torch.Tensor] = None, use_cache: bool | None = None, **kwargs: *<class 'transformers.utils.generic.TransformersKwargs'>)
```

[Origem](https://github.com/huggingface/transformers/blob/main/src/transformers/models/cohere/modeling_cohere.py#L377)

**Parâmetros:**

input_ids (`torch.LongTensor` de forma `(batch_size, sequence_length)`, *opcional*) : Índices dos tokens da sequência de entrada no vocabulário. O preenchimento (padding) será ignorado por padrão. Os índices podem ser obtidos usando [AutoTokenizer](/docs/transformers/main/pt/model_doc/auto#transformers.AutoTokenizer). Consulte [PreTrainedTokenizer.encode()](/docs/transformers/main/pt/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.encode) e [PreTrainedTokenizer.__call__()](/docs/transformers/main/pt/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__) para mais detalhes. [O que são IDs de entrada?](../glossary#input-ids)

attention_mask (`torch.Tensor` de forma `(batch_size, sequence_length)`, *opcional*) : Máscara para evitar a execução de atenção nos índices de tokens de preenchimento. Valores de máscara selecionados em `[0, 1]`:  - 1 para tokens que **não estão mascarados**, - 0 para tokens que **estão mascarados**.  [O que são máscaras de atenção?](../glossary#attention-mask)

position_ids (`torch.LongTensor` de forma `(batch_size, sequence_length)`, *opcional*) : Índices das posições dos tokens de cada sequência de entrada nos embeddings de posição. Selecionados no intervalo `[0, config.n_positions - 1]`.  [O que são IDs de posição?](../glossary#position-ids)

past_key_values (`~cache_utils.Cache`, *opcional*) : hidden-states pré-computados (chaves e valores nos blocos de autoatenção e nos blocos de atenção cruzada) que podem ser usados para acelerar a decodificação sequencial. Isso geralmente consiste nos `past_key_values` retornados pelo modelo em uma etapa anterior da decodificação, quando `use_cache=True` ou `config.use_cache=True`.  Apenas uma instância de [Cache](/docs/transformers/main/pt/internal/generation_utils#transformers.Cache) é permitida como entrada, consulte nosso [guia de kv cache](https://huggingface.co/docs/transformers/en/kv_cache). Se nenhum `past_key_values` for passado, [DynamicCache](/docs/transformers/main/pt/internal/generation_utils#transformers.DynamicCache) será inicializado por padrão.  O modelo sairá no mesmo formato de cache que foi fornecido como entrada.  Se `past_key_values` forem usados, espera-se que o usuário insira apenas `input_ids` não processados (aqueles que não têm seus estados de chave e valor passados para este modelo) com a forma `(batch_size, unprocessed_length)` em vez de todos os `input_ids` com a forma `(batch_size, sequence_length)`.

inputs_embeds (`torch.Tensor` de forma `(batch_size, sequence_length, hidden_size)`, *opcional*) : Opcionalmente, em vez de passar `input_ids`, você pode escolher passar diretamente uma representação incorporada. Isso é útil se você quiser ter mais controle sobre como converter os índices de `input_ids` nos vetores associados do que a matriz de busca de incorporação interna do modelo.

use_cache (`bool`, *opcional*) : Se definido como `True`, os estados de chave-valor de `past_key_values` são retornados e podem ser usados para acelerar a decodificação (veja `past_key_values`).

**Retorna:** [BaseModelOutputWithPast](/docs/transformers/main/pt/main_classes/output#transformers.modeling_outputs.BaseModelOutputWithPast) ou `tuple(torch.Tensor)`

Um [BaseModelOutputWithPast](/docs/transformers/main/pt/main_classes/output#transformers.modeling_outputs.BaseModelOutputWithPast) ou uma tupla de `torch.Tensor` (se `return_dict=False` for passado ou quando `config.return_dict=False`) contendo vários elementos, dependendo da configuração ([CohereConfig](/docs/transformers/main/pt/model_doc/cohere#transformers.CohereConfig)) e das entradas.

O método forward do [CohereModel](/docs/transformers/main/pt/model_doc/cohere#transformers.CohereModel) sobrescreve o método especial `__call__`.

Embora a receita para a passagem direta precise ser definida dentro desta função, deve-se chamar a instância de `Module` em seguida, em vez desta, pois a primeira cuida da execução das etapas de pré e pós-processamento, enquanto a segunda as ignora silenciosamente.

- **last_hidden_state** (`torch.Tensor` de forma `(batch_size, sequence_length, hidden_size)`) -- Sequência de estados ocultos na saída da última camada do modelo.

  Se `past_key_values` for usado, apenas o último hidden-state das sequências, com forma `(batch_size, 1, hidden_size)`, é retornado.
- **past_key_values** (`Cache`, *opcional*, retornado quando `use_cache=True` é passado ou quando `config.use_cache=True`) -- Trata-se de uma instância de [Cache](/docs/transformers/main/pt/internal/generation_utils#transformers.Cache). Para mais detalhes, consulte nosso [guia de cache kv](https://huggingface.co/docs/transformers/en/kv_cache).

  Contém estados ocultos pré-computados (chaves e valores nos blocos de autoatenção e, opcionalmente, se `config.is_encoder_decoder=True`, nos blocos de atenção cruzada) que podem ser usados (veja a entrada `past_key_values`) para acelerar a decodificação sequencial.
- **hidden_states** (`tuple(torch.Tensor)`, *opcional*, retornado quando `output_hidden_states=True` é passado ou quando `config.output_hidden_states=True`) -- Tupla de `torch.Tensor` (um para a saída dos embeddings, se o modelo tiver uma camada de embedding, + um para a saída de cada camada) com a forma `(batch_size, sequence_length, hidden_size)`.

  Estados ocultos do modelo na saída de cada camada, além das saídas opcionais do embedding inicial.
- **attentions** (`tuple(torch.Tensor)`, *opcional*, retornado quando `output_attentions=True` é passado ou quando `config.output_attentions=True`) -- Tupla de `torch.Tensor` (um para cada camada) com a forma `(batch_size, num_heads, sequence_length, sequence_length)`.

  Pesos de atenção após o softmax de atenção, usados para calcular a média ponderada nas cabeças de autoatenção.

## CohereForCausalLM[[transformers.CohereForCausalLM]]

#### transformers.CohereForCausalLM[[transformers.CohereForCausalLM]]

```python
transformers.CohereForCausalLM(config: CohereConfig)
```

[Origem](https://github.com/huggingface/transformers/blob/main/src/transformers/models/cohere/modeling_cohere.py#L434)

**Parâmetros:**

config ([CohereConfig](/docs/transformers/main/pt/model_doc/cohere#transformers.CohereConfig)) : Classe de configuração do modelo com todos os parâmetros do modelo. A inicialização com um arquivo de configuração não carrega os pesos associados ao modelo, apenas a configuração. Consulte o método [from_pretrained()](/docs/transformers/main/pt/main_classes/model#transformers.PreTrainedModel.from_pretrained) para carregar os pesos do modelo.

O Modelo Cohere para modelagem de linguagem causal.

Este modelo herda de [PreTrainedModel](/docs/transformers/main/pt/main_classes/model#transformers.PreTrainedModel). Consulte a documentação da classe pai para os métodos genéricos que a biblioteca implementa para todos os seus modelos (como download ou salvamento, redimensionamento dos embeddings de entrada, poda de cabeças, etc.).

Este modelo também é uma subclasse de [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) do PyTorch. Use-o como um Módulo PyTorch regular e consulte a documentação do PyTorch para todos os assuntos relacionados ao uso e comportamento gerais.

#### forward[[transformers.CohereForCausalLM.forward]]

```python
forward(input_ids: typing.Optional[torch.LongTensor] = None, attention_mask: typing.Optional[torch.Tensor] = None, position_ids: typing.Optional[torch.LongTensor] = None, past_key_values: transformers.cache_utils.Cache | None = None, inputs_embeds: typing.Optional[torch.Tensor] = None, labels: typing.Optional[torch.LongTensor] = None, use_cache: bool | None = None, logits_to_keep: typing.Union[int, torch.Tensor] = 0, **kwargs: *<class 'transformers.utils.generic.TransformersKwargs'>)
```

[Origem](https://github.com/huggingface/transformers/blob/main/src/transformers/models/cohere/modeling_cohere.py#L451)

**Parâmetros:**

input_ids (`torch.LongTensor` de forma `(batch_size, sequence_length)`, *opcional*) : Índices dos tokens da sequência de entrada no vocabulário. O preenchimento (padding) será ignorado por padrão. Os índices podem ser obtidos usando [AutoTokenizer](/docs/transformers/main/pt/model_doc/auto#transformers.AutoTokenizer). Consulte [PreTrainedTokenizer.encode()](/docs/transformers/main/pt/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.encode) e [PreTrainedTokenizer.__call__()](/docs/transformers/main/pt/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__) para mais detalhes. [O que são IDs de entrada?](../glossary#input-ids)

attention_mask (`torch.Tensor` de forma `(batch_size, sequence_length)`, *opcional*) : Máscara para evitar a execução de atenção nos índices de tokens de preenchimento. Valores de máscara selecionados em `[0, 1]`:  - 1 para tokens que **não estão mascarados**, - 0 para tokens que **estão mascarados**.  [O que são máscaras de atenção?](../glossary#attention-mask)

position_ids (`torch.LongTensor` de forma `(batch_size, sequence_length)`, *opcional*) : Índices das posições dos tokens de cada sequência de entrada nos embeddings de posição. Selecionados no intervalo `[0, config.n_positions - 1]`.  [O que são IDs de posição?](../glossary#position-ids)

past_key_values (`~cache_utils.Cache`, *opcional*) : hidden-states pré-computados (chaves e valores nos blocos de autoatenção e nos blocos de atenção cruzada) que podem ser usados para acelerar a decodificação sequencial. Isso geralmente consiste nos `past_key_values` retornados pelo modelo em uma etapa anterior da decodificação, quando `use_cache=True` ou `config.use_cache=True`.  Apenas uma instância de [Cache](/docs/transformers/main/pt/internal/generation_utils#transformers.Cache) é permitida como entrada, consulte nosso [guia de kv cache](https://huggingface.co/docs/transformers/en/kv_cache). Se nenhum `past_key_values` for passado, [DynamicCache](/docs/transformers/main/pt/internal/generation_utils#transformers.DynamicCache) será inicializado por padrão.  O modelo sairá no mesmo formato de cache que foi fornecido como entrada.  Se `past_key_values` forem usados, espera-se que o usuário insira apenas `input_ids` não processados (aqueles que não têm seus estados de chave e valor passados para este modelo) com a forma `(batch_size, unprocessed_length)` em vez de todos os `input_ids` com a forma `(batch_size, sequence_length)`.

inputs_embeds (`torch.Tensor` de forma `(batch_size, sequence_length, hidden_size)`, *opcional*) : Opcionalmente, em vez de passar `input_ids`, você pode escolher passar diretamente uma representação incorporada. Isso é útil se você quiser ter mais controle sobre como converter os índices de `input_ids` nos vetores associados do que a matriz de busca de incorporação interna do modelo.

labels (`torch.LongTensor` de forma `(batch_size, sequence_length)`, *opcional*) : Rótulos para calcular a perda de modelagem de linguagem mascarada. Os índices devem estar em `[0, ..., config.vocab_size]` ou ser -100 (veja a docstring de `input_ids`). Tokens com índices definidos como `-100` são ignorados (mascarados); a perda é calculada apenas para os tokens com rótulos em `[0, ..., config.vocab_size]`.

use_cache (`bool`, *opcional*) : Se definido como `True`, os estados de chave-valor de `past_key_values` são retornados e podem ser usados para acelerar a decodificação (veja `past_key_values`).

logits_to_keep (`Union[int, torch.Tensor]`, *opcional*, padrão `0`) : Se for um `int`, calcula os logits para os últimos `logits_to_keep` tokens. Se for `0`, calcula os logits para todos os `input_ids` (caso especial). Apenas os logits do último token são necessários para a geração, e calculá-los apenas para esse token pode economizar memória, o que se torna bastante significativo para sequências longas ou tamanho de vocabulário grande. Se for um `torch.Tensor`, deve ser 1D, correspondendo aos índices a serem mantidos na dimensão de comprimento da sequência. Isso é útil ao usar o formato de tensor empacotado (uma única dimensão para lote e comprimento da sequência).

**Retorna:** [CausalLMOutputWithPast](/docs/transformers/main/pt/main_classes/output#transformers.modeling_outputs.CausalLMOutputWithPast) ou `tuple(torch.Tensor)`

Um [CausalLMOutputWithPast](/docs/transformers/main/pt/main_classes/output#transformers.modeling_outputs.CausalLMOutputWithPast) ou uma tupla de `torch.Tensor` (se `return_dict=False` for passado ou quando `config.return_dict=False`) contendo vários elementos, dependendo da configuração ([CohereConfig](/docs/transformers/main/pt/model_doc/cohere#transformers.CohereConfig)) e das entradas.

O método forward de [CohereForCausalLM](/docs/transformers/main/pt/model_doc/cohere#transformers.CohereForCausalLM) substitui o método especial `__call__`.

Embora a receita para a passagem direta precise ser definida dentro desta função, deve-se chamar a instância de `Module` em seguida, em vez desta, pois a primeira cuida da execução das etapas de pré e pós-processamento, enquanto a segunda as ignora silenciosamente.

- **loss** (`torch.Tensor` de forma `(1,)`, *opcional*, retornado quando `labels` é fornecido) -- Perda de modelagem de linguagem (para previsão do próximo token).
- **logits** (`torch.Tensor` de forma `(batch_size, sequence_length, config.vocab_size)`) -- Pontuações de previsão da cabeça de modelagem de linguagem (pontuações para cada token do vocabulário antes do SoftMax).
- **past_key_values** (`Cache`, *opcional*, retornado quando `use_cache=True` é passado ou quando `config.use_cache=True`) -- Trata-se de uma instância de [Cache](/docs/transformers/main/pt/internal/generation_utils#transformers.Cache). Para mais detalhes, consulte nosso [guia de cache kv](https://huggingface.co/docs/transformers/en/kv_cache).

  Contém estados ocultos pré-computados (chaves e valores nos blocos de autoatenção) que podem ser usados (veja a entrada `past_key_values`) para acelerar a decodificação sequencial.
- **hidden_states** (`tuple(torch.Tensor)`, *opcional*, retornado quando `output_hidden_states=True` é passado ou quando `config.output_hidden_states=True`) -- Tupla de `torch.Tensor` (um para a saída dos embeddings, se o modelo tiver uma camada de embedding, + um para a saída de cada camada) com a forma `(batch_size, sequence_length, hidden_size)`.

  Estados ocultos do modelo na saída de cada camada, além das saídas opcionais do embedding inicial.
- **attentions** (`tuple(torch.Tensor)`, *opcional*, retornado quando `output_attentions=True` é passado ou quando `config.output_attentions=True`) -- Tupla de `torch.Tensor` (um para cada camada) com a forma `(batch_size, num_heads, sequence_length, sequence_length)`.

  Pesos de atenção após o softmax de atenção, usados para calcular a média ponderada nas cabeças de autoatenção.

Exemplo:

```python
>> from transformers import AutoTokenizer, CohereForCausalLM

>> model = CohereForCausalLM.from_pretrained("CohereForAI/c4ai-command-r-v01")
>> tokenizer = AutoTokenizer.from_pretrained("CohereForAI/c4ai-command-r-v01")

>> prompt = "Hey, are you conscious? Can you talk to me?"
>> inputs = tokenizer(prompt, return_tensors="pt")

>> # Generate
>> generate_ids = model.generate(inputs.input_ids, max_length=30)
>> tokenizer.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
"Hey, are you conscious? Can you talk to me?\nI'm not conscious, but I can talk to you."
```

