Text Generation
Transformers
Safetensors
Portuguese
qwen3
text-generation-inference
conversational
Eval Results (legacy)

Tucano2-qwen-3.7B-Think

An illustration of a Tucano bird showing vibrant colors like yellow, orange, blue, green, and black.

Model Summary

Tucano2-qwen-3.7B-Think is an instruction-tuned Portuguese language model built on top of Tucano2-qwen-0.5B-Base. It has been trained using a combination of one round of supervised fine-tuning (SFT) and one round of Anchored Preference Optimization (APO).

Tucano2-qwen-3.7B-Think is a reasoning model, which means it has been fine-tuned to generate CoT-style (Chain-of-Thought) traces in its responses. These reasoning traces are always encapsulated within the special tokens <think> and </think>.

All datasets, source code, and training recipes used to develop the Tucano2 series are fully open and reproducible.

Details

This repository has the source code used to train this model. The full configuration used for training is available in the following config files:

SFT Loss Curve

SFT Loss Curve

APO Rewards

APO Rewards

Intended Uses

The primary intended use Tucano2-qwen-3.7B-Think is to serve as foundations for research and development involving Portuguese language modeling. You may also fine-tune and adapt Tucano2-qwen-3.7B-Think for deployment if your use follows the Apache 2.0 license. If you decide to use Tucano2-qwen-3.7B-Think as a basis for your fine-tuned model, please conduct your own risk and bias assessment.

Basic usage

from transformers import AutoTokenizer, AutoModelForCausalLM, GenerationConfig
import torch

# Load model and tokenizer
model_id = "Polygl0t/Tucano2-qwen-3.7B-Think"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
    model_id,
    device_map="auto"
)

# Configure generation parameters
generation_config = GenerationConfig(
    do_sample=True,
    temperature=0.1,
    top_k=50,
    top_p=1.0,
    repetition_penalty=1.2,
    max_new_tokens=150,
    pad_token_id=tokenizer.eos_token_id,
)

# Prepare chat messages
messages = [
    {"role": "user", "content": "Qual é a capital do Brasil?"}
]

# Apply chat template and generate
prompt = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)

with torch.no_grad():
    outputs = model.generate(**inputs, generation_config=generation_config)

# Decode and print response
full_output = tokenizer.decode(
    outputs[0][len(inputs.input_ids[0]):],
    skip_special_tokens=True
).strip()

# Extract <think>...</think> content
think_content = None
final_response = full_output

if "<think>" in full_output and "</think>" in full_output:
    start = full_output.find("<think>") + len("<think>")
    end = full_output.find("</think>")
    think_content = full_output[start:end].strip()
    
    # Remove think block from final response
    final_response = (
        full_output[:full_output.find("<think>")] +
        full_output[end + len("</think>"):]
    ).strip()

if think_content:
    print("🧠 Thinking:\n")
    print(think_content)
    print("\n" + "="*50 + "\n")

print("🤖 Answer:\n")
print(final_response)

Limitations

Like almost all other language models trained on large text datasets scraped from the web, the Tucano2-qwen-3.7B-Think shows behavior that does not make it an out-of-the-box solution to many real-world applications, especially those requiring factual, reliable, and nontoxic text generation. Tucano2-qwen-3.7B-Think is subject to the following:

  • Hallucinations: Tucano2-qwen-3.7B-Think can produce content that can be mistaken as true facts, but are misleading or entirely false, i.e., hallucination.

  • Biases and Toxicity: Tucano2-qwen-3.7B-Think inherits the social and historical stereotypes from the data used to train it. Given these biases, the model can produce toxic content, i.e., harmful, offensive, or detrimental to individuals, groups, or communities.

  • Language Limitations: Tucano2-qwen-3.7B-Think is primarily designed to interact with Portuguese. Other languages might challenge its comprehension, leading to potential misinterpretations or errors in response.

  • Repetition and Verbosity: Tucano2-qwen-3.7B-Think may get stuck on repetition loops (especially if the repetition penalty during generations is set to a meager value) or produce verbose responses unrelated to the prompt it was given.

Hence, even though Tucano2-qwen-3.7B-Think is released with a permissive license, we urge users to perform their risk analysis on them if they intend to use them for real-world applications.

Evaluations

The table below compares the Tucano2 (Think variant) series against other reasoning models of similar size. We divide our evaluations into two sets:

  • Knowledge & Reasoning: ARC-Challenge, ENEM, BLUEX, OAB Exams, BELEBELE, MMLU, GSM8K-PT
  • Instruction Following: IFEval-PT

The NPM (Normalized Performance Metric) provides a balanced view of model performance across tasks, accounting for each task's inherent difficulty by normalizing its evaluation score relative to its random baseline.

We do not include coding benchmarks in this table because the Think models were not trained on coding data during post-training and thus perform poorly on them. For coding skills, we recommend using the Instruct models instead, which were trained with coding data and perform much better on coding benchmarks.

Total Avg. Knowledge & Reasoning (NPM) Instruction Following
Tucano2-qwen-3.7B-Think 51.27 54.07 31.67
SmolLM3-3B 48.58 46.28 64.67
Qwen3-4B 46.35 40.97 84
Qwen3-1.7B 36.54 32 68.33
Tucano2-qwen-1.5B-Think 27.54 26.67 33.67
Qwen3-0.6B 24.11 19.22 58.33
Tucano2-qwen-0.5B-Think 14.41 12.52 27.67
Evaluation Suite
Benchmark n-shot Type Baseline Metric
Knowledge & Reasoning
ARC-Challenge 5-shot MC-Q&A 25 acc_norm
ENEM 3-shot MC-Q&A 20 acc
BLUEX 3-shot MC-Q&A 22.5 acc
OAB Exams 3-shot MC-Q&A 25 acc
BELEBELE 5-shot MC-Q&A 25 acc_norm
MMLU 5-shot MC-Q&A 25 acc
GSM8K-PT 0-shot Math Problems 0 flexible-extract
Instruction Following
IFEval-PT 0-shot Instruction 0 prompt_level_loose_acc
Individual Benchmarks
BLUEX ENEM OAB ARC Challenge BELEBELE MMLU IFEval-PT GSM8K-PT
Tucano2-qwen-3.7B-Think 63 71.52 53.76 55.38 83.56 61.18 31.67 56.7
SmolLM3-3B 48.82 60.6 42.19 52.56 77.78 52.82 64.67 72.15
Qwen3-4B 78.3 85.23 47.97 39.66 23 31.53 84 77.02
Qwen3-1.7B 68.29 72.5 39.32 35.64 22.89 22.85 68.33 71.69
Tucano2-qwen-1.5B-Think 39.22 39.89 34.26 42.82 67.67 43.3 33.67 22.83
Qwen3-0.6B 43.53 48.71 34.21 29.91 22.89 22.85 58.33 58.37
Tucano2-qwen-0.5B-Think 34.49 31.98 27.02 32.74 36.11 36.08 27.67 14.61
Inference Samples on Various Tasks

Cooking

Prompt:

<|im_start|>user
Você pode me dar uma receita simples de Bolo de Brigadeiro?<|im_end|>
<|im_start|>assistant

Response:

<think>
O usuário está me pedindo uma receita simples de Bolo de Brigadeiro. Primeiro, vou analisar a solicitação para entender exatamente o que ele espera: ingredientes básicos e etapas claras para preparar este doce tradicional brasileiro. Agora preciso lembrar das informações essenciais sobre esta receita, garantindo que ela seja realmente fácil de seguir mesmo para quem não tem muita experiência na cozinha. Vou começar listando os principais ingredientes necessários: farinha de trigo, açúcar, manteiga sem sal, ovos, baunilha, chocolate em pó, leite, pedacinhos de brigadeiros prontos ou caseiros, além de alguns utensílios básicos como formas redondas médias untadas e polvilhadas com farinha de trigo. Depois disso, precisarei estruturar as instruções passo a passo, começando pela preparação da forma, misturando a massa seca separadamente dos líquidos, combinando tudo gradualmente enquanto sous vide no forno pré-aquecido, adicionando os brigadeiros após metade do tempo total de cocção, verificando se ficou pronto usando um teste específico, permitindo esfriar levemente antes de desenformar e decorar conforme desejar. Finalmente, ofereço ao usuário a oportunidade de fazer qualquer pergunta adicional caso tenha dúvidas específicas durante o processo.
</think>

Claro! Aqui vai uma versão simplificada e deliciosa de **Bolo de Brigadeiro**:

### Ingredientes:
- 2 xícaras (chá) de farinha de trigo
- 1 xícara (chá) de açúcar
- 1/2 xícara (chá) de margarina light ou manteiga sem sal
- 3 ovos grandes
- 1 colher (cha) de essência de baunilha
- 1 envelope de fermento químico em pó
- Chocolate em pó q.b.
- Pedaços de brigadeiro pronto ou caseiro (para cobrir)

### Para o Recheio/Cobertura:
- 1 lata de creme de leite fresco
- ½ copo (medida americana) de açúcar refinado
- Baunilha a gosto

### Modo de Preparo:
1. **Prepare a Forma:** Unte bem uma forma redonda média (25 cm) com manteiga e polvilhe com farinha de trigo. Reserve.

2. **Misture os Secos:** Em uma tigela grande, misture a farinha de trigo, o açúcar, a margária/manteiga, três ovos batidos, a essência de baunilha e o fermento químico em pó. Misture bem até obter uma mistura homogênea.

3. **Adicione Líquidos Gradualmente:** Adicione lentamente o quarto ovo aos poucos à mistura secos, mexendo suavemente apenas suficiente para incorporar. Não bata demais nessa fase.

4. **Incorpore o Chocolate em Pó:** Ajuste o nível de cacau conforme preferência, geralmente cerca de 1 xícara (chá). Mexa gentilmente para distribuir uniformemente.

5. **Forme a Massa:** Transfira a massa para a forma preparada e leve ao forno preaquecido a 180°C por aproximadamente 25 minutos, ou until inserir um palito no centro sair limpo.

6. **Descanse:** Retire o bolo do forno e deixe descansar por uns 10 minutinhos dentro da forma. Desenforme ainda quente colocando uma faca afiada horizontalmente sob a borda interna da forma e puxando devagar. Deixe arrefecer completamente numa grade metálica.

7. **Recheie/Cubra:** Enquanto o bolo refresca, prepare seu recheio favorito de brigadeiro. Você pode usar pedaços já feitos ou fazê-lo você mesma seguindo suas receitas preferidas. Espalhe generosamente sobre toda superfície superior do bolo frio.

8. **Finalize:** Polvilhe generosas quantidades de brigadeiro picado ou cortadinho por cima para decoração final. Sirva geladinha!

Espero que goste dessa variação saborosa e prática! Qualquer dúvida, estou aqui pra te ajudar :D<|im_end|>

Math

Prompt:

<|im_start|>user
Como eu posso resolver o seguinte problema: 2x + 3 = 11?<|im_end|>
<|im_start|>assistant

Response:

<think>
O usuário está me perguntando como resolver a equação 2x + 3 = 11. Primeiro, vou analisar a estrutura da equação para entender quais são os passos necessários. A ideia principal aqui é isolar x no lado esquerdo da igualdade. Vou começar subtraindo 3 de ambos os lados para eliminar o termo constante do lado esquerdo. Isso dá 2x + 3 - 3 = 11 - 3, simplificando para 2x = 8. Agora preciso dividir ambos os lados por 2 para obter o valor de x sozinho. Assim, 2x ÷ 2 = 8 ÷ 2, resultando em x = 4. Finalmente, devo confirmar que esta solução satisfaz a equação original substituindo x na expressão inicial: 2*4 + 3 = 8, somando-se mais três faz 11, conferindo com o resultado dado pelo usuário. Portanto, concluo que a solução correta é realmente x = 4.
</think>

Claro! Vamos resolver essa equação passo a passo. O objetivo é encontrar o valor de \( x \) que satisfaça a equação \( 2x + 3 = 11 \).

### Passo 1: Isolar o termo com \( x \)
Primeiro, vamos isolar o termo que contém \( x \) no lado esquerdo da equação. Para isso, precisamos eliminar o número 3 do lado esquerdo. Podemos fazer isso subtraindo 3 de ambos os lados da equação:

\[
2x + 3 - 3 = 11 - 3
\]

Isso simplifica para:

\[
2x = 8
\]

### Passo 2: Resolver para \( x \)
Agora, temos a equação \( 2x = 8 \). Para descobrir o valor de \( x \), devemos dividir ambos os lados pela coeficiente de \( x \), que é 2:

\[
\frac{2x}{2} = \frac{8}{2}
\]

Isso nos dá:

\[
x = 4
\]

### Conclusão
Portanto, a solução para a equação \( 2x + 3 = 11 \) é \( x = 4 \). Você pode verificar isso substituíndo \( x = 4 \) de volta na equação original:

\[
2(4) + 3 = 8 + 3 = 11
\]

E bingo! A verificação confirma que a solução está correta. Espero que tenha ficado claro! Qualquer outra coisa que você precise saber sobre esse assunto?<|im_end|>

Rewriting

Prompt:

<|im_start|>user
Remova todas as informações irrelevantes da frase a seguir.

"O novo restaurante que abriu no centro da cidade, de propriedade do primo de Jorge, que costumava ser chef de um restaurante em Ipanema, serve uma variedade de cozinhas de todo o mundo."<|im_end|>
<|im_start|>assistant

Response:

<think>
O usuário está me pedindo para remover todas as informações irrelevantes da seguinte frase: 'O novo restaurante que abriu no centro da cidade, de propriedade do primo de Jorge, que costumavam ser chefs de um restaurante em Ipanema, serves uma variada gama de culinárias provenientes de diferentes partes do globo.' Primeiro, vou identificar quais elementos são essenciais e quais podem ser removidos sem perder significado crucial. A informação relevante parece girar em torno do próprio estabelecimento gastronômico - seu nome implícito ('restaurante'), sua localização atual (centro da cidade), suas características principais (variedade de cozinhas). Agora preciso considerar cada elemento mencionado na frase original. Deixe-me começar pela referência ao ‘novo’ restaurante; isso é importante porque indica temporalidade recente e pode influenciar decisões futuras dos leitores/consumidores. Vou manter esse ponto. Em seguida, tenho a menção à propriedade pelo primo de Jorge – esta ligação familiar adiciona credibilidade ou personalidade local? Sim, faz sentido mantê-la pois dá contexto social. Mas agora vejo duas frases aninhadas usando pronome relativo ‘que’. Preciso avaliar se elas trazem valor adicional além das already mencionadas. Essas informações sobre ter sido Chef anteriormente parecem menos cruciais para quem quer saber rapidamente algo básico sobre o lugar. Portanto, decido eliminá-las como redundâncias desnecessárias. Finalmente, há ainda a expressão ‘uma variada gama’, que poderia simplificar-se diretamente pra ‘diversificada’. Com tudo isto em mente, formulo minha resposta final.
</think>

O novo restaurante que abriu no centro da cidade, de propriedade do primo de Jorge, serve uma diversidade de cozinhas internacionais.<|im_end|>

Science Explanation

Prompt:

<|im_start|>user
Explique a teoria da relatividade de forma simples (ELI5).<|im_end|>
<|im_start|>assistant

Response:

<think>
O usuário está me pedindo para explicar a Teoria da Relatividade de Forma Simples usando as regras ELI5 - Easy to Understand, Plain Language. Primeiro, vou analisar o que exatamente é a Teoria da Relatividade e quais são seus principais conceitos. A Teoria da Relatividade consiste em duas partes: a Especial e a Geral. Vou começar pela parte mais básica, a Teoria da Relatividade Especial, pois ela aborda questões menos complexas inicialmente. Agora preciso considerar os dois pilares fundamentais dessa teoria propostos por Einstein: 1) As leis físicas devem ser iguais para todos os observadores inerciais; 2) A velocidade da luz no vácuo é constante independente do observador. Devo encontrar uma maneira fácil de ilustrar esses princípios com exemplos cotidianos. Um bom exemplo seria imaginar alguém jogando uma bola num trem em movimento versus numa plataforma estacionária. Isso ajuda visualizar como diferentes observers podem medir distâncias e tempos diferentemente sem entrar muito nos detalhes matemáticos complicados. Depois disso, posso mencionar brevemente a consequência importante desta teoria relacionada ao tempo dilatação, mostrando como ele afeta relógios em movimentos rápidos ou campos gravitacionais intensos. Finalmente, devo indicar onde esta teoria se encaixa na história das ideias científicas modernas, destacando sua importância nas áreas de física moderna, cosmologia e tecnologias contemporâneas. Com tudo isso organizado mentalmente, agora posso formular minha resposta seguindo estas etapas lógicas.
</think>

Claro! Vamos lá:

A **Teoria da Relatividade** foi desenvolvida pelo famoso físico Albert Einstein. Ela diz basicamente três coisas importantes:

1. **Espaço-tempo:** Espaço e tempo não existem separadamente, mas formam algo chamado espaço-tempo. Objetos movem-se através deste espaço-tempo.

2. **Velocidade da Luz:** Nada pode viajar faster than the speed of light (mais rápido que a luz). E essa velocidade é sempre a mesma, independentemente quem esteja medindo.

3. **Efeito Doppler Temporal:** Quanto mais perto você vai de alguma coisa rápida, menor parece seu relógio comparado aos outros. Ou seja, quanto maior a velocidade, slower time goes (o tempo passa mais devagar) — esse fenômeno chama-se *dilatação temporal*.

Em termos simplificados:
- Imagine estar dentro de um trem correndo super veloz. Para você, nada muda enquanto estiver dentro dele. Mas pra gente fora do trem vendo, nosso cronômetro marca o tempo passando diferente porque estamos próximos à velocidade da luz relativa uns aos outros.

Isso explica muita coisa estranha que acontece com partículas subatômicas aceleradas nos laboratórios e também faz sentido pro universo todo juntos!

Espero ter ficado claro! Algum outro ponto específico quer saber?<|im_end|>

History

Prompt:

<|im_start|>user
Liste os principais eventos envolvendo a Revolução Farroupilha.<|im_end|>
<|im_start|>assistant

Response:

<think>
O usuário está me perguntando para listar os principais eventos da Revolução Farroupilha. Primeiro, vou analisar minha base de conhecimento sobre esse evento histórico específico no Brasil. Preciso garantir que lista todos os fatos relevantes e importantes relacionados ao conflito entre o Rio Grande do Sul e o governo imperial brasileiro durante 1835-1845. Vou começar organizando esses eventos cronologicamente para facilitar a compreensão do fluxo temporal dos acontecimentos. Devo mencionar datas exatas onde possível para dar precisão aos relatos históricos. Agora preciso considerar quais foram os pontos altos dessa revolta, como declarações oficiais, batalhas significativas e acordos finais. Também devo destacar figuras-chave associadas à revolução, pois elas são cruciais para entender seu contexto e impacto. Finalmente, vou revisar rapidamente toda informação coletada para certificar-me de que nada importante foi deixado fora antes de formular a resposta completa.
</think>

Claro! A Revolução Farroupilha, também conhecida como Guerra dos Farrapos, foi um conflito armado ocorrido no estado atual do Rio Grande do Sul,Brasil, durantes os anos de 1835 a 1845. Aqui estão alguns dos principais eventos:

1. **Declaração de Independência (1835)**:
   - No dia 20 de setembro de 1835, liderados por Bento Gonçalves da Silva, as tropas gaúchas declararam independência do Império Brasileiro, estabelecendo assim a República Rio-Grandense.

2. **Batalha de Seival (1836)**:
   - Esta batalha marcou uma vitória decisiva das forças farroupilhas contra as tropas imperiais. Foi aqui que Giuseppe Garibaldi capturou Davi Canabarro, reforçando significativamente suas fileiras.

3. **Fundação da Capital Provisória (Pelotas) (1837)**:
   - Após vencerem algumas batalhas iniciais, os rebeldes escolheram Pelotas como capital provisória da nova república.

4. **Tratado de Ponche Verde (1845)**:
   - Este tratado pôs fim oficialmente à guerra após negociações mediadas pelo presidente da província paulista, José Feliciano Fernandes Pinheiro. Os termos garantiram indenizações financeiras às famílias combatentes farroupilhas.

Esses quatro momentos representam apenas alguns dos muitos episódios importantes desta rebelião separatista sulina. Espero que isso ajude você a entender melhor este período crucial da história brasileira!<|im_end|>

Below, we compare the performance of Tucano2-qwen-3.7B-Think with Qwen3-4B and SmolLM3-3B, which are two strong baselines in the 3-4B parameter range. All other plots can be found in the .plots folder.

Tucano2-qwen-3.7B-Think vs Qwen3-4B vs SmolLM3-3B

Performance Comparison

Cite as 🤗

@misc{correa2026tucano2cool,
      title={{Tucano 2 Cool: Better Open Source LLMs for Portuguese}}, 
      author={Nicholas Kluge Corr{\^e}a and Aniket Sen and Shiza Fatimah and Sophia Falk and Lennard Landgraf and Julia Kastner and Lucie Flek},
      year={2026},
      eprint={2603.03543},
      archivePrefix={arXiv},
      primaryClass={cs.CL},
      url={https://arxiv.org/abs/2603.03543}, 
}

Aknowlegments

Polyglot is a project funded by the Federal Ministry of Education and Research (BMBF) and the Ministry of Culture and Science of the State of North Rhine-Westphalia (MWK) as part of TRA Sustainable Futures (University of Bonn) and the Excellence Strategy of the federal and state governments.

We also gratefully acknowledge the granted access to the Marvin cluster hosted by University of Bonn along with the support provided by its High Performance Computing & Analytics Lab.

License

Tucano2-qwen-3.7B-Think is licensed under the Apache License, Version 2.0. For more details, see the LICENSE file.

Downloads last month
40
Safetensors
Model size
4B params
Tensor type
BF16
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for Polygl0t/Tucano2-qwen-3.7B-Think

Base model

Qwen/Qwen3-4B-Base
Finetuned
(2)
this model

Datasets used to train Polygl0t/Tucano2-qwen-3.7B-Think

Collection including Polygl0t/Tucano2-qwen-3.7B-Think

Paper for Polygl0t/Tucano2-qwen-3.7B-Think

Evaluation results