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

Tucano2-qwen-0.5B-Think

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

Model Summary

Tucano2-qwen-0.5B-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-0.5B-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-0.5B-Think is to serve as foundations for research and development involving Portuguese language modeling. You may also fine-tune and adapt Tucano2-qwen-0.5B-Think for deployment if your use follows the Apache 2.0 license. If you decide to use Tucano2-qwen-0.5B-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-0.5B-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 de Angola?"}
]

# 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-0.5B-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-0.5B-Think is subject to the following:

  • Hallucinations: Tucano2-qwen-0.5B-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-0.5B-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-0.5B-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-0.5B-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-0.5B-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. Preciso garantir que a resposta seja útil e fácil de seguir, então vou começar explicando brevemente o que é um bolo de brigadeiro para contextualizar sua solicitação. Agora, preciso listar os ingredientes necessários em quantidades moderadas para evitar sobrecarga na lista inicial. Vou considerar itens básicos como farinha, açúcar, chocolate amargo picado, leite condensor, essência de baunilha, canela moída, coco ralado e raspas de laranja. É importante mencionar as precauções iniciais ao lidar com alguns desses ingredientes, especialmente quando se trata do chocolate derretido durante o forno. Devo também sugerir algumas dicas adicionais para tornar a experiência ainda mais agradável, como misturar bem todos os ingredientes antes de colocar no forno e decorá-lo depois. Finalizo lembrando novamente que tudo deve estar pronto dentro das primeiras cinco minutos após assar.
</think>

Claro! Aqui vai uma receitinha básica de **Bolinho de Brigadeirão**:

### Ingredientes:
- 2 ovos grandes
- 1 xícara (chá) de açúcar mascavo ou mel (180g)
- 1/2 colher (sopa) de cacau em pó sem adoçante (30% ativo butylated buttercreme)
- 3/4 xícara (cha) de leite integral (250ml)
- 1/4 xícara (cha) de óleo vegetal neutro (20g)
- 3 colheres (sopa) de farinha de trigo fina (200g)
- Canela moida à gosto
- Coco ralado fresco ou seco (1/2 colher (sobremesa))
- Raspa(s) de limão siciliano (2 unidades)

### Modo de Preparo:
1. Em uma panela média, misture todos os ingredientes secos (farinha, cacaue, etc.) até formar uma massa homogênea. Reserve.

2. No liquidificador, bata juntos os ovos, o açúcar/mel, o leite, o óleo, a canela e o coco ralado. Adicione gradualmente o restante dos ingredientes secos enquanto continua batendo até obter uma mistura lisa e aerada.

3. Transfira a mistura para uma forma redonda untada e enfarinhada. Leve ao forno pré-aquecido a 180°C (aproximadamente 350°F). Asse por cerca de 25-30 min., virando metade do caminho para cozinhar uniformemente.

4. Retire do forno e deixe esfriar ligeiramente antes de cortar e servir. Decore com as raspas de limão caso goste!

Espero que você aproveite esse delicioso Bolinho de Brigadeirão! Qualquer dúvida adicional, estou aqui pra ajudar 😊.<|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 linear 2x + 3 = 11. Preciso fornecer uma solução passo a passo para garantir que ele entenda cada etapa do raciocínio. Primeiro, vou identificar os elementos principais da equação: x é desconhecido e precisa ser isolado; ambos lados devem permanecer iguais (lei de conservação); há um termo constante no lado esquerdo (3). Agora preciso isolar o termo com 'x'. Para fazer isso, subtrairo 3 de ambos os lados porque estou fazendo a mesma operação em ambas as partes. Isso elimina o número 3, deixando apenas 'x' sozinho na esquerda. Deixe-me realizar esta subtração agora: 2x - 3 - 3 = 11 - 3. Simplificando, tenho 2x = 8. Com 'x' isolado, minha próxima tarefa será dividir ambos os lados por 2, já que estamos tentando encontrar o valor original de 'x', não sua derivada ou multiplicador. Realizando essa divisão, obtenho x = 4. Finalmente, formulo a resposta explicando ao usuário que 'x = 4' satisfaz a equação inicial 2x + 3 = 11, pois quando substituímos 4, obtemos 2*4 + 3 = 8, que simplifica para 8 + 3 = 11, confirmando assim a correção do cálculo.
</think>

Claro! Vamos resolver a equação \(2x + 3 = 11\) juntos. A ideia principal aqui é isolarmos a variável \(x\), geralmente movendo todos os outros termos para o outro lado da igualdade. Aqui estão os passos:

1. **Subtraia 3 de ambos os lados:**
   - Começamos com a equação: \[2x + 3 = 11\]
   - Subtraindo 3 de ambos os lados: \[2(x + 3) = 10\]

2. **Divida ambos os lados por 2:**
   - Agora temos: \[(x + 3) = 5\]
   - Dividindo ambos os lados por 2: \[x = 5 - 3\]

3. **Simplifique:**
   - Chegamos à conclusão final: \[x = 2\]

Portanto, a solução para a equação \(2x + 3 = 11\) é \(x = 2\).

Se você tiver mais perguntas ou precisar de ajuda com outra equação, estou aqui para ajudar!<|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 quaisquer informações irrelevantes ou desnecessárias da seguinte frase: '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.' Primeiro, vou ler cuidadosamente toda a estrutura gramatical e identificar os principais elementos da sentença. A frase contém vários componentes importantes: sujeito ('novo restaurante'), localização ('centro da cidade') e características específicas (propriedade do primo de Jorge). Agora preciso considerar quais partes podem ser removidas sem alterar significativamente o sentido geral da mensagem. Devo evitar mencionar pessoas ausentes, lugares específicos não utilizados além das indicações básicas, nem detalhes técnicos excessivos como nomes próprios ou termos complicados. Vou começar pela eliminação dos pronomes pessoais e adjetivos redundantemente repetidos. Posso simplificar 'que costumava' usando apenas 'costumava', mantendo assim a essência original. Também posso substituir 'chef' por algo mais genérico relacionado ao trabalho culinário, como 'cozinheiro'. Além disso, eliminar algumas palavras extras pode deixar a frase mais concisa. Finalmente, revisarei tudo novamente para garantir que nenhum elemento importante tenha sido omitido durante esse processo de limpeza. Após essas modificações, obtenho esta versão refinada da frase: 'Um novo estabelecimento gastronômico inaugurado na área central da cidade...serve diversos estilos de cozinha internacionalmente reconhecidos.' Essa reformulação preservou todos os aspectos relevantes enquanto reduziu consideravelmente seu comprimento inicial.
</think>

Claro! Aqui está a frase após a remoção das informações irrelevantes:

> Um novo estabelecimento gastronômico inaugurado na área central da cidade...serve diversos estilos de cozinha internacionalmente reconhecidos.

Notei alguns ajustes menores aqui:
- Substituí "primo de Jorge" pelo nome próprio equivalente ("Jorge") porque parece haver algum erro tipográfico nesse caso específico. No entanto, isso foi feito apenas para corrigir possíveis inconsistências; eu mantenho a grafia exata conforme apareceu originalmente nos seus dados.
- Ajustei ligeiramente outros termos para maior clareza, mas manteve-se fiel aos originais. Por exemplo, usei "estabelecimento gastronômico" em vez de "restaurante".<|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 em ELI5. Preciso garantir que minha resposta seja clara e concisa, mantendo o foco nos principais pontos. Primeiro, vou lembrar os elementos básicos dessa teoria: especial e geral. Agora, preciso estruturar meu raciocínio de maneira lógica e fácil de entender. Começo pela introdução do paradoxo dos gêmeos, pois ele ilustra bem as ideias centrais da teoria. Depois, passo às duas versões específicas da teoria — especial e geral —, destacando suas diferenças cruciais. Finalizo com exemplos práticos para ilustrar melhor cada ponto. Vou revisar rapidamente todos esses tópicos antes de formular a resposta completa.
</think>

Claro! A **Teoria da Relatividade** é um conjunto de princípios formulados por Albert Einstein no início do século XX. Ela divide-se basicamente entre dois aspectos principais:

1. **A Teoria Especial da Relatividade (1905)** - Esta parte trata das leis físicas invariantes sob transformações de Lorentz, ou seja, como essas leis funcionam independentemente do movimento relativo de observadores diferentes. Um exemplo famoso disso é o paradoxo dos gêmeos, onde um irmão viaja pelo espaço enquanto seu amigo fica parado aqui na Terra. No final, quem volta mais jovem porque correu menos tempo durante sua viagem espacial.

2. **A Generalização da Teoria Especial da Relatividade (1915)** - Aqui, Einstein expande ainda mais seus conceitos anteriores, introduzindo a ideia de gravidade através de campos tensoriais, não apenas força gravitacional convencional. Isso levou à formulação da Equação de Friedewald, embora ela tenha sido inicialmente proposta separadamente por Hendrik Lorentz.

Em termos simplificados, podemos dizer que a Teoria da Relatividade tenta unificar três grandes questões fundamentais sobre o universo:
- Como medimos distâncias e tempos dependendo do nosso estado de movimento?
- Existe uma relação universal entre massa e energia descrita pela famosa equação \( E = mc^2 \)?
- Gravidade realmente afeta tudo ao redor dela? Ou seria algo diferente?

Essas perguntas foram respondidas parcialmente pelas teorias modernas, mas continuam sendo objeto intenso de pesquisa científica até hoje. Espero que isso ajude você a entender alguns pontos importantes! Se tiver alguma outra dúvida específica, estou aqui pra ajudar.<|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, também conhecida como Guerra dos Dezos. Preciso garantir que minha resposta seja precisa e abrangente, cobrindo todos os momentos cruciais dessa importante fase da história do Rio Grande do Sul. Vou começar organizando meus pensamentos em categorias lógicas: início da guerra (1845), promulgação de leis (1844), batalhas significativas (1836-1845) e consequências pós-guerra (1883). Agora, vou estruturar cada categoria com exemplos específicos de eventos importantes dentro delas. Para iniciar, o evento inicial é fundamental: as tropas farroupilhas lideradas por Bento Gonçalves desembarcam na Laguna em 1849. Isso marca oficialmente o começo da revolta. Em seguida, vem a assinatura do Tratado de Ponche Verde em 1845, onde os rebeldes aceitam termos favoráveis aos interesses sulinos. Outro momento crucial são as Leis Provinciais nºs 1 e 2 de 1844, que estabelecem autonomia provincial e controle local sobre questões locais, respectivamente. A Batalha de Porongos continua sendo vital, pois mostra heroísmo militar e simboliza unidade entre diferentes facções. Após esse período turbulento, há decisões políticas críticas, especialmente aquelas relacionadas à formação das Províncias Unidas do Rio Grande do Sul e ao apoio imperial através do Decreto Imperial nº 5.246. As Guerras Civis subsequentes continuam até sua derrota definitiva em 1883. Finalmente, preciso mencionar brevemente algumas repercussões duradouras, incluindo influências culturais e econômicas no estado atual. Com esses elementos claros, posso agora redigir uma lista completa e coesa.
</think>

Claro! Aqui estão alguns dos principais eventos relacionados à Revolução Farroupilha (Guerra dos Debates):

1. **Início da Guerra (1845-1845)**:
   - As forças farroupilhas iniciaram seu levante após um incidente naval perto de São Gabriel, RS. Inicialmente liderados pelo general David Canabarro, eles rapidamente ganharam apoio popular nas regiões litorâneas.

2. **Promulgações Legislativas (1844)**:
   - Foi promulgada a Lei Provincial número 1, estabelecendo eleições livres nos municípios;
   - Seguidamente, foi sancionada a Lei Provincial número 2, declarando todo território gaúcho livre de impostos provinciais.

3. **Batalhas Significativas (1836–1845)**:
   - **Laguna**: Uma vitória decisiva das tropas imperiais sob comando do marechal Carlos Frederico Lenzi, marcando formalmente o fim imediato da rebelião.
   - **Porongos**: Um massacre sangrento durante a rendição final das forças farrapas, protagonizado pela escrava Zacimba Gala e seus companheiros, simbolizando união nacional mesmo diante da adversidade extrema.

4. **Consequências Pós-Guerra (1868–1883)**:
   - Os remanescentes insurretos fundaram duas novas províncias republicanas: República Juliana (1918) e Província Independente do Rio Grande do Sul (1920).
   - O governo central retomou parcialmente suas possessões sulinas mediante negociação diplomática culminando no Tratado de Ponche Verde em 1845.

Esses pontos representam apenas parte significativa desses acontecimentos históricos complexos. Espero que isso ajude você a entender melhor a contextura desta importante luta regional brasileira!<|im_end|>

Below, we compare the performance of Tucano2-qwen-0.5B-Think with Qwen3-0.6B, a strong baseline in the 0.5B parameter range. The percentages represent the absolute difference in performance between the two models on each benchmark. All other plots can be found in the .plots folder.

Tucano2-qwen-0.5B-Think vs Qwen3-0.6B

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-0.5B-Think is licensed under the Apache License, Version 2.0. For more details, see the LICENSE file.

Downloads last month
56
Safetensors
Model size
0.5B 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-0.5B-Think

Finetuned
(2)
this model

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

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

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

Evaluation results