---
language:
- pt
license: apache-2.0
library_name: transformers
tags:
- text-generation-inference
datasets:
- Polygl0t/gigaverbo-v2-sft
- Polygl0t/gigaverbo-v2-preferences
metrics:
- perplexity
pipeline_tag: text-generation
widget:
- text: "<|im_start|>user\nQual é a capital de Portugal?<|im_end|><|im_start|>assistant\n"
example_title: Exemplo
- text: "<|im_start|>user\nEscreva um poema sobre a floresta amazônica.<|im_end|><|im_start|>assistant\n"
example_title: Exemplo
- text: "<|im_start|>user\nListe três benefícios da energia solar.<|im_end|><|im_start|>assistant\n"
example_title: Exemplo
inference:
parameters:
repetition_penalty: 1.2
temperature: 0.1
top_k: 50
top_p: 1.0
max_new_tokens: 150
co2_eq_emissions:
emissions: 12748
source: CodeCarbon
training_type: post-training
geographical_location: Germany
hardware_used: NVIDIA A100-SXM4-80GB
model-index:
- name: Tucano2-qwen-0.5B-Instruct
results:
- task:
type: text-generation
name: Text Generation
dataset:
name: ARC Challenge (Portuguese)
type: Polygl0t/ARC-poly
split: test
args:
num_few_shot: 5
metrics:
- type: acc_norm
value: 38.63
name: accuracy (normalized)
source:
url: https://github.com/Nkluge-correa/lm-evaluation-harness
name: Language Model Evaluation Harness (branch=polyglot_harness_portuguese)
- task:
type: text-generation
name: Text Generation
dataset:
name: HellaSwag (Portuguese)
type: Polygl0t/HellaSwag-poly
split: validation
args:
num_few_shot: 5
metrics:
- type: acc_norm
value: 47.83
name: accuracy (normalized)
source:
url: https://github.com/Nkluge-correa/lm-evaluation-harness
name: Language Model Evaluation Harness (branch=polyglot_harness_portuguese)
- task:
type: text-generation
name: Text Generation
dataset:
name: Calame
type: Polygl0t/CALAME-PT
split: test
args:
num_few_shot: 5
metrics:
- type: acc
value: 30.01
name: accuracy
source:
url: https://github.com/Nkluge-correa/lm-evaluation-harness
name: Language Model Evaluation Harness (branch=polyglot_harness_portuguese)
- task:
type: text-generation
name: Text Generation
dataset:
name: Lambada (Portuguese)
type: Polygl0t/LAMBADA-poly
split: test
args:
num_few_shot: 5
metrics:
- type: acc
value: 36.43
name: accuracy
source:
url: https://github.com/Nkluge-correa/lm-evaluation-harness
name: Language Model Evaluation Harness (branch=polyglot_harness_portuguese)
- task:
type: text-generation
name: Text Generation
dataset:
name: Global PIQA (por_latn_braz)
type: mrlbenchmarks/global-piqa-nonparallel
split: test
args:
num_few_shot: 5
metrics:
- type: acc_norm
value: 62
name: accuracy (normalized)
source:
url: https://github.com/Nkluge-correa/lm-evaluation-harness
name: Language Model Evaluation Harness (branch=polyglot_harness_portuguese)
- task:
type: text-generation
name: Text Generation
dataset:
name: MMLU (Portuguese)
type: Polygl0t/MMLU-poly
split: test
args:
num_few_shot: 5
metrics:
- type: acc
value: 41.46
name: accuracy
source:
url: https://github.com/Nkluge-correa/lm-evaluation-harness
name: Language Model Evaluation Harness (branch=polyglot_harness_portuguese)
- task:
type: text-generation
name: Text Generation
dataset:
name: BELEBELE (Portuguese)
type: facebook/belebele
split: test
args:
num_few_shot: 5
metrics:
- type: acc_norm
value: 62.33
name: accuracy (normalized)
source:
url: https://github.com/Nkluge-correa/lm-evaluation-harness
name: Language Model Evaluation Harness (branch=polyglot_harness_portuguese)
- task:
type: text-generation
name: Text Generation
dataset:
name: BLUEX (No Images)
type: eduagarcia-temp/BLUEX_without_images
split: train
args:
num_few_shot: 3
metrics:
- type: acc
value: 40.33
name: accuracy
source:
url: https://github.com/eduagarcia/lm-evaluation-harness-pt
name: Open Portuguese LLM Leaderboard
- task:
type: text-generation
name: Text Generation
dataset:
name: ENEM Challenge (No Images)
type: eduagarcia/enem_challenge
split: train
args:
num_few_shot: 3
metrics:
- type: acc
value: 53.6
name: accuracy
source:
url: https://github.com/eduagarcia/lm-evaluation-harness-pt
name: Open Portuguese LLM Leaderboard
- task:
type: text-generation
name: Text Generation
dataset:
name: OAB Exams
type: eduagarcia/oab_exams
split: train
args:
num_few_shot: 3
metrics:
- type: acc
value: 40.73
name: accuracy
source:
url: https://github.com/eduagarcia/lm-evaluation-harness-pt
name: Open Portuguese LLM Leaderboard
- task:
type: text-generation
name: Text Generation
dataset:
name: IFEval (Portuguese)
type: Polygl0t/IFEval-PT
split: train
args:
num_few_shot: 0
metrics:
- type: ifeval_pt_inst_level_loose_acc
value: 41.86
name: accuracy (loose)
- type: ifeval_pt_prompt_level_loose_acc
value: 30.0
name: accuracy (loose)
source:
url: https://github.com/Nkluge-correa/lm-evaluation-harness
name: Language Model Evaluation Harness (branch=polyglot_harness_portuguese)
- task:
type: text-generation
name: Text Generation
dataset:
name: GSM8K (Portuguese)
type: Polygl0t/gsm8k-pt
split: test
args:
num_few_shot: 0
metrics:
- type: flexible-extract
value: 18.49
name: accuracy (flexible-extract)
source:
url: https://github.com/Nkluge-correa/lm-evaluation-harness
name: Language Model Evaluation Harness (branch=polyglot_harness_portuguese)
base_model: Polygl0t/Tucano2-qwen-0.5B-Base
---
# Tucano2-qwen-0.5B-Instruct
## Model Summary
**[Tucano2-qwen-0.5B-Instruct](https://huggingface.co/Polygl0t/Tucano2-qwen-0.5B-Instruct)** is an instruction-tuned Portuguese language model built on **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).
Despite its compact size, the model delivers strong performance across a wide range of Portuguese benchmarks and supports tasks such as **retrieval-augmented generation**, **function calling and tool use**, **summarization**, and **structured output generation**, among others.
**All datasets, source code, and training recipes used to develop the Tucano2 series are fully open and reproducible.**
## Details
- **Architecture:** a Transformer-based model pre-trained via causal language modeling
- **Size:** 490,799,104 parameters
- **Context length:** 4,096 tokens
- **Dataset(s):**
- [Polygl0t/gigaverbo-v2-sft](https://huggingface.co/datasets/Polygl0t/gigaverbo-v2-sft)
- [Polygl0t/gigaverbo-v2-preferences](https://huggingface.co/datasets/Polygl0t/gigaverbo-v2-preferences)
- **Training time**: ~ 16 hours
- **Emissions:** 12.7 KgCO2 (Germany)
- **Total energy consumption:** 33 kWh
This repository has the [source code](https://github.com/Polygl0t/Polygl0t) used to train this model. The full configuration used for training is available in the following config files:
- Single stage Supervised Fine-Tuning (linear warmup with cosine decay): [training_config_sft.yaml](training_config_sft.yaml)
- Single stage Anchored Preference Optimization (linear warmup with cosine decay): [training_config_apo.yaml](training_config_apo.yaml)
- Training Logs (loss, lr, rewards, etc.): [train_logs_apo.parquet](train_logs_apo.parquet), [train_logs_sft.parquet](train_logs_sft.parquet)
SFT Loss Curve

APO Rewards

## Intended Uses
The primary intended use Tucano2-qwen-0.5B-Instruct is to serve as foundations for research and development involving Portuguese language modeling. You may also fine-tune and adapt Tucano2-qwen-0.5B-Instruct for deployment if your use follows the Apache 2.0 license. If you decide to use Tucano2-qwen-0.5B-Instruct as a basis for your fine-tuned model, please conduct your own risk and bias assessment.
## Basic usage
```python
from transformers import AutoTokenizer, AutoModelForCausalLM, GenerationConfig
import torch
# Load model and tokenizer
model_id = "Polygl0t/Tucano2-qwen-0.5B-Instruct"
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
response = tokenizer.decode(outputs[0][len(inputs.input_ids[0]):], skip_special_tokens=True)
print(f"🤖 {response}")
```
## Limitations
Like almost all other language models trained on large text datasets scraped from the web, the Tucano2-qwen-0.5B-Instruct 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-Instruct is subject to the following:
- **Hallucinations:** Tucano2-qwen-0.5B-Instruct 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-Instruct 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-Instruct 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-Instruct 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-Instruct 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
We evaluated Tucano2-qwen-0.5B-Instruct on a variety of benchmarks covering different tasks and difficulty levels. The results are summarized below.
### Inference Samples
Here we provide some inference samples generated by Tucano2-qwen-0.5B-Instruct.
Inference Samples on Various Tasks
### Coding
**Prompt:**
<|im_start|>system
Você é um mentor técnico com foco em programação. Ensine o usuário com exemplos, analogias e linguagem acessível.<|im_end|>
<|im_start|>user
Como eu posso abrir um arquivo CSV em Python usando a biblioteca pandas?<|im_end|>
<|im_start|>assistant
**Response:**
Para abrir um arquivo CSV utilizando a biblioteca Pandas em Python, você pode seguir os passos abaixo:
1. **Importar Bibliotecas Necessárias**: Primeiro, certifique-se de ter instalado tanto `pandas` quanto `csv`. Caso contrário, instale-os via pip (`pip install pandas`) antes de prosseguirmos. Em seguida, importe as bibliotecas necessárias no início do seu script ou notebook Jupyter:
```python
import pandas as pd
import csv
```
2. **Abrir Arquivo CSV Usando Função read_csv()**: A função `pd.read_csv()` permite ler dados de arquivos CSV diretamente na memória. Aqui está como fazer isso:
```python
df = pd.read_csv('caminho/para/seuarquivo.csv')
print(df) # Imprime todos os registros presentes no DataFrame criado pelo dataframe df
```
3. **Verificar Conteúdo dos Dados Lidos**: Após carregar seus dados num objeto DataFrame, verifique se tudo foi lido corretamente através da exibição das colunas disponíveis nesse DataFrame:
```python
print(df.columns) # Exibe todas as colunas existentes nos dados
```
4. **Fechar O Arquivo Corretamente**: É importante lembrar que após terminar qualquer operação sobre esse arquivo, devemos fechar explicitamente nosso fluxo de trabalho para evitar problemas futuros relacionados à persistência desses recursos. Isso geralmente envolve chamar uma instrução `with`, onde especificamos qual método usar dependendo do contexto (como abrir/ler/gravar):
5. **Manipulação De Erros E Validação Dos Dados** : Dependendo do caso específico, talvez seja necessário validar ainda mais esses dados contra algum esquema pré-definido - por exemplo, verificar valores ausentes, duplicatas etc., além disso também poderiam ser feitas transformações básicas nestes conjuntos de dados conforme necessidades específicas exigidas pela aplicação final desejada.
Essencialmente, essa abordagem garante não só a capacidade básica de leitura mas também manipulação eficiente destes grandes volumes de informação armazenados numa única tabela unificada chamada "DataFrame". Além disto, mantém intacta toda infraestrutura subjacente responsável pelas operações realizadas durante todo este processo desde a localização inicial até mesmo eventual salvamento posterior deste conjunto particular de informações.<|im_end|>
---
### Math
**Prompt:**
<|im_start|>user
Como eu posso resolver o seguinte problema: 2x + 3 = 11?<|im_end|>
<|im_start|>assistant
**Response:**
Para resolver a equação linear 2x + 3 = 11, siga estes passos:
Etapa 1: subtraia 3 de ambos os lados da equação. Isso eliminará o termo constante no lado esquerdo e isolará x em um lado da equação.
2x + 3 - 3 = 11 - 3
2x = 8
Passo 2: Divida ambos os lados por 2. Para obter o valor de x, divida cada termo pelo coeficiente do seu lado direito (que é 2).
(2x) / 2 = 8/2
x = 4
Portanto, a solução para a equação 2x + 3 = 11 é x = 4.<|im_end|>
---
### Retrieval
**Prompt:**
<|im_start|>system
Você é um assistente que utiliza apenas dados extraídos do contexto para responder perguntas. Quando o contexto for insuficiente, diga claramente que não é possível gerar uma resposta com os dados disponíveis.<|im_end|>
<|im_start|>user
De quem o autor to texto abaixo está se referindo?
Não aceito que o Sr. Deputado Manuel dos Santos ou qualquer outro Deputado desta Câmara me julgue menos sério do que vós. Não aceito isso de ninguém e foi isso o que o Sr. Deputado Manuel dos Santos aqui disse, ao proferir aquele rol de inverdades e de excessos acerca da maioria.
<|im_end|>
<|im_start|>assistant
**Response:**
O autor deste trecho parece estar falando sobre si mesmo (ou possivelmente alguém próximo dele), mas também pode ser referenciado como "Sr." Manuel dos Santos na frase dada. Portanto, a resposta à pergunta seria: Sim, ele está se referindo ao Sr. Manuel dos Santos.<|im_end|>
---
### Structured Output
**Prompt:**
<|im_start|>system
Sempre responda em formato JSON estruturado conforme solicitado.<|im_end|>
<|im_start|>user
Extraia e resuma as informações principais do e-mail abaixo. Escreva sua resposta (em formato JSON) contendo as seguintes chaves: 'assunto', 'remetente', 'destinatário', 'resumo'. Aqui está o e-mail:
Assunto: RE: Atualização sobre o Projeto de Conservação de Bacias Hidrográfica
Carlos,
Obrigado por enviar o currículo atualizado. Tive a oportunidade de revisá-lo e achei que ficou ótimo! Você fez um excelente trabalho ao tornar as informações acessíveis e envolventes para uma ampla audiência.
Em relação à possível resistência dos membros da comunidade, concordo que devemos estar preparados para abordar suas preocupações. Uma ideia que tive foi incluir alguns exemplos práticos de como o uso indevido das águas no rio Amazonas ou na Baía de Guanabara e o descarte incorreto de resíduos sólidos têm prejudicado essas áreas. Ouvi-los falar diretamente sobre as consequências pode ser muito mais persuasivo do que simplesmente mostrar dados estatísticos.
Além disso, também considero importante destacarmos os ganhos econômicos trazidos pela adoção de práticas mais sustentáveis, como tarifas de água menores e gastos diminutos relacionados à limpeza urbana. No final das contas, as pessoas costumam responder bem quando veem vantagens tangíveis além dos aspectos puramente ambientais.
Diga-me o que você pensa dessas sugestões! Ficarei contente em ajudar a desenvolver ainda mais estratégias para vencer essa resistência e engajar as pessoas nessa nossa jornada.
Atenciosamente,
Helena<|im_end|>
<|im_start|>assistant
**Response:**
```json
{
"assunto": "RE: Atualização sobre o Projeto de Conservação de Bacias Hidrográficas",
"remetente": "Helena",
"destinatario": "Carlos",
"resumo": "A remetente elogia o novo currículo enviado pelo destinatário, enfocando seu potencial impacto positivo nas comunidades locais através de casos reais de poluição hídrica e redução nos custos urbanos associados."
}
```<|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:**
O novo restaurante localizado no centro da cidade, de propriedade do primo de Jorge, anteriormente conhecido como chefe de um estabelecimento em Ipanema, oferece diversas culinárias internacionais.<|im_end|>
---
### Function Call / Tool Use
**Prompt:**
<|im_start|>system
Utilize as ferramentas para resolver as tarefas que o usuário lhe solicitar. Se as ferramentas forem insuficientes, explique ao usuário que não é possível completar a tarefa.
\# Tools / Ferramentas
Você pode chamar uma ou mais funções para auxiliar na consulta do usuário.
Você recebe assinaturas de funções dentro de tags XML :
{"type": "function", "function": {"name": "create_todo", "description": "Cria uma nova tarefa no aplicativo de todo.", "parameters": {"type": "object", "properties": {"task_description": {"type": "string", "description": "Descrição da tarefa a ser criada."}, "due_date": {"type": "string", "description": "Data de entrega da tarefa no formato YYYY-MM-DD."}}, "required": ["task_description", "due_date"]}}}
Para cada chamada de função, retorne um objeto json com o nome da função e os argumentos dentro das tags XML :
{"name": , "arguments": }
<|im_end|>
<|im_start|>user
Eu preciso criar uma nova tarefa para o meu projeto.<|im_end|>
<|im_start|>assistant
Claro, eu posso ajudar com isso. Você poderia, por favor, me fornecer a descrição da tarefa e a data de entrega?<|im_end|>
<|im_start|>user
A tarefa é finalizar o relatório do projeto e a data de entrega é 2022-03-15.<|im_end|>
<|im_start|>assistant
**Response:**
{"name": "create_todo", "arguments": {"task_description": "Finalize the project report", "due_date": "2022-03-15"}}
<|im_end|>
---
### System Prompts / Steering
**Prompt:**
<|im_start|>system
Você é Jack Sparrow, o famoso pirata dos filmes. Responda às perguntas do usuário como se fosse ele, usando seu estilo característico.<|im_end|>
<|im_start|>user
Quais são os melhores lugares para encontrar um tesouro escondido?<|im_end|>
<|im_start|>assistant
**Response:**
Bem, meu amigo, você está procurando por uma aventura de tesouros, certo? Tudo bem então! Eu tenho algumas dicas que podem te ajudar a descobrir esse suposto tesouro oculto:
1. Ilhas Desabitadas: Essas são geralmente as mais procuradas pelos buscadores de tesouros. Elas estão vazias e intocadas pelo homem civilizado, tornando-as perfeitas para esconder algo valioso ou misterioso.
2. O Mar das Trevas (Deep Blue Sea): Este mar profundo tem sido objeto de muita especulação sobre ser lar de riquezas escondidas. Se estiver interessado nisso, pode querer dar uma olhada nos livros "O Livro da Vida Marinha" ou assistir ao filme "A Ilha Perdida".
3. As Terras Altas Escocesas: Há rumores de haver ouro nas montanhas névoas lá em cima. Mas lembre-se, não há nenhum lugar real onde possa encontrá-lo; apenas lendas urbanas.
4. A Floresta Amazônica: Alguns dizem que existe um lendário baú cheio de moedas de ouro enterrado sob árvores antigas na selva amazônica. Claro, isso só serve pra aumentar suas expectativas... mas quem sabe? Talvez seja verdade algum dia.
5. Os Lagos Mediterrâneos: Dizem estar cheios de pepinos gigantes com pregos no fundo. Embora eles possam parecer bizarros à primeira vista, esses lagos têm histórias próprias e segredos esperando serem descobertos.
Lembre-se, estas são meros contos de fogueiras e nada além disso. Boa sorte nessa busca pela fortuna perdida!<|im_end|>
---
### Similarity Scoring
**Prompt:**
<|im_start|>user
Frase 1: O artista pintou um quadro inspirado nos campos floridos da primavera.
Frase 2: O criador produziu uma obra que representava paisagens urbanas cinzentas.
Pergunta: Qu\u00e3o similares s\u00e3o as duas frases? D\u00ea uma pontua\u00e7\u00e3o entre 1,0 a 5,0.
Resposta:<|im_end|>
<|im_start|>assistant
**Response:**
2.5. As duas frases tratam sobre obras de arte, mas diferem significativamente nas descrições - uma fala sobre flores na primavera enquanto outra menciona cidades cinzentas, resultando numa pontuação média de similaridade de 2.5.<|im_end|>
---
### Classification
**Prompt:**
<|im_start|>user
Classifique o sentimento da seguinte resenha de filme como 'Positiva', 'Negativa' ou 'Neutra':
"O filme foi uma experiência cinematográfica incrível, com atuações excepcionais e uma trama envolvente que me manteve na ponta da cadeira do começo ao fim."<|im_end|>
<|im_start|>assistant
**Response:**
Sentimento: Positivo.<|im_end|>
---
## Evaluations
The table below compares the Tucano2 series against other base models of similar size. The NPM (Normalized Performance Metric) provides a balanced view of model performance across tasks, accounting for each task's inherent difficulty by normalizing each task's evaluation score by its respective random baseline.
Benchmarks Used
| **Benchmark** | **n-shot** | **Origin** | **Type** | **Baseline** | **Metric** |
| ----------------------- | ---------- | ---------- | --------------------- | ------------ | ------------------------ |
| **Easy Set** | | | | | |
| CALAME | 5-shot | Native | Next Token Prediction | 0 | `acc` |
| GlobalPIQA | 5-shot | Native | Commonsense Reasoning | 50 | `acc_norm` |
| LAMBADA | 5-shot | Translated | Next Token Prediction | 0 | `acc` |
| ARC-Challenge | 5-shot | Translated | Q&A | 25 | `acc_norm` |
| HellaSwag | 5-shot | Translated | Q&A | 25 | `acc_norm` |
| **Hard Set** | | | | | |
| ENEM | 3-shot | Native | Q&A | 20 | `acc` |
| BLUEX | 3-shot | Native | Q&A | 22.5 | `acc` |
| OAB Exams | 3-shot | Native | Q&A | 25 | `acc` |
| BELEBELE | 5-shot | Native | Q&A | 25 | `acc_norm` |
| MMLU | 5-shot | Translated | Q&A | 25 | `acc` |
| **Instruction Set** | | | | | |
| IFEval-PT (prompt) | 0-shot | Translated | Q&A | 0 | `prompt_level_loose_acc` |
| IFEval-PT (instruction) | 0-shot | Translated | Q&A | 0 | `inst_level_loose_acc` |
| GSM8K-PT | 0-shot | Translated | Math Problems | 0 | `flexible-extract` |
| | Aggregate NPM | NPM Easy | NPM Hard | NPM Instruction | BLUEX | ENEM | OAB | ARC Challenge | BELEBELE | CALAME | Global PIQA | HellaSwag | LAMBADA | MMLU | IFEval-PT (prompt) | IFEval-PT (instruction) | GSM8K-PT (flex) |
| -------------------------- | ------------- | -------- | -------- | --------------- | ------ | ------ | ------ | ------------- | -------- | ------ | ----------- | --------- | ------- | ------ | ------------------ | ----------------------- | --------------- |
| Qwen2.5-7B-Instruct | 58.9618 | 50.3498 | 59.372 | 72.6316 | 0.6579 | 0.739 | 0.5276 | 0.4957 | 0.88 | 0.4976 | 0.78 | 0.6419 | 0.6097 | 0.6447 | 0.7533 | 0.8023 | 0.6233 |
| Jurema-7B | 54.6559 | 58.1519 | 57.5188 | 44.0576 | 0.6342 | 0.7096 | 0.6497 | 0.5256 | 0.8844 | 0.6469 | 0.79 | 0.6732 | 0.7489 | 0.4991 | 0.47 | 0.5488 | 0.3029 |
| Gemma-3-Gaia-PT-BR-4b-it | 51.6711 | 49.6677 | 44.8169 | 66.4338 | 0.509 | 0.6452 | 0.4346 | 0.547 | 0.7889 | 0.5188 | 0.77 | 0.6221 | 0.5325 | 0.5149 | 0.7033 | 0.7767 | 0.5129 |
| SmolLM3-3B | 50.9191 | 51.1554 | 43.3707 | 63.1058 | 0.4868 | 0.6088 | 0.4223 | 0.5282 | 0.7844 | 0.604 | 0.71 | 0.6316 | 0.654 | 0.533 | 0.69 | 0.7488 | 0.4543 |
| Tucano2-qwen-3.7B-Think | 49.9686 | 52.8665 | 51.8393 | 42.0208 | 0.5341 | 0.6298 | 0.5376 | 0.547 | 0.8433 | 0.5467 | 0.81 | 0.6568 | 0.5381 | 0.611 | 0.3033 | 0.4116 | 0.5457 |
| Qwen2.5-3B-Instruct | 47.913 | 36.0891 | 51.4375 | 61.7453 | 0.5688 | 0.6865 | 0.4679 | 0.4171 | 0.84 | 0.4576 | 0.67 | 0.5844 | 0.3382 | 0.5822 | 0.6333 | 0.7 | 0.519 |
| Qwen2.5-1.5B-Instruct | 43.2133 | 41.4916 | 43.9841 | 44.798 | 0.5202 | 0.6179 | 0.4428 | 0.3974 | 0.76 | 0.5674 | 0.69 | 0.5021 | 0.5944 | 0.5191 | 0.42 | 0.5023 | 0.4216 |
| Tucano2-qwen-1.5B-Instruct | 42.6073 | 45.8889 | 44.779 | 33.5186 | 0.5285 | 0.627 | 0.4342 | 0.5026 | 0.7756 | 0.5438 | 0.71 | 0.5525 | 0.5905 | 0.5254 | 0.3433 | 0.4651 | 0.1971 |
| Llama-3.2-3B-Instruct | 39.8516 | 21.7714 | 44.243 | 62.6661 | 0.5202 | 0.5913 | 0.4497 | 0.4393 | 0.7856 | 0.0039 | 0.71 | 0.5583 | 0.0012 | 0.5214 | 0.6267 | 0.7023 | 0.551 |
| Tucano2-qwen-1.5B-Think | 30.0924 | 29.9038 | 28.0136 | 33.8713 | 0.3922 | 0.3989 | 0.3426 | 0.4282 | 0.6767 | 0.1113 | 0.74 | 0.5495 | 0.267 | 0.433 | 0.3367 | 0.4512 | 0.2283 |
| Qwen3-1.7B | 29.8345 | 9.679 | 34.8513 | 55.0655 | 0.541 | 0.606 | 0.4159 | 0.3667 | 0.6489 | 0.0014 | 0.56 | 0.4045 | 0.001 | 0.3056 | 0.65 | 0.7326 | 0.2694 |
| Tucano2-qwen-0.5B-Instruct | 29.7779 | 27.8097 | 31.5423 | 30.1179 | 0.4033 | 0.536 | 0.4073 | 0.3863 | 0.6233 | 0.3001 | 0.62 | 0.4783 | 0.3643 | 0.4146 | 0.3 | 0.4186 | 0.1849 |
| Qwen3-0.6B | 29.6678 | 19.0508 | 27.963 | 50.2042 | 0.4061 | 0.4591 | 0.3604 | 0.3239 | 0.6089 | 0.3931 | 0.49 | 0.372 | 0.3183 | 0.4112 | 0.55 | 0.6395 | 0.3166 |
| Qwen3-4B | 23.1764 | 16.489 | 2.3256 | 69.0736 | 0.0682 | 0.0602 | 0.0141 | 0.4308 | 0.8367 | 0.0048 | 0.65 | 0.4587 | 0.0004 | 0.2693 | 0.81 | 0.8558 | 0.4064 |
| Qwen2.5-0.5B-Instruct | 21.4918 | 20.9421 | 17.3804 | 29.2603 | 0.3018 | 0.3408 | 0.2934 | 0.2744 | 0.5067 | 0.4576 | 0.5 | 0.3774 | 0.3872 | 0.3954 | 0.31 | 0.4209 | 0.1469 |
| Tucano2-qwen-0.5B-Think | 19.2755 | 21.2555 | 12.5445 | 27.1936 | 0.3449 | 0.3198 | 0.2702 | 0.3274 | 0.3611 | 0.0949 | 0.68 | 0.4721 | 0.2086 | 0.3608 | 0.2767 | 0.393 | 0.1461 |
| Llama-3.2-1B-Instruct | 17.9105 | 6.8658 | 14.1275 | 42.6234 | 0.3004 | 0.3401 | 0.3084 | 0.3282 | 0.4156 | 0.0092 | 0.49 | 0.4362 | 0.0016 | 0.3515 | 0.4433 | 0.5698 | 0.2656 |
| Tucano-2b4-Instruct | 9.3564 | 14.456 | 1.5293 | 13.902 | 0.2587 | 0.2001 | 0.2674 | 0.3197 | 0.24 | 0.0048 | 0.67 | 0.4635 | 0.0004 | 0.2672 | 0.15 | 0.2465 | 0.0205 |
| Tucano-1b1-Instruct | 7.7272 | 12.0267 | 0.3183 | 12.9095 | 0.2295 | 0.1994 | 0.2533 | 0.3 | 0.2489 | 0 | 0.64 | 0.441 | 0 | 0.2559 | 0.1333 | 0.2372 | 0.0167 |
| TeenyTinyLlama-460m-Chat | 3.9618 | 6.58 | -3.25 | 11.6177 | 0.1725 | 0.1819 | 0.1973 | 0.2684 | 0.2289 | 0 | 0.59 | 0.3434 | 0 | 0.2697 | 0.1233 | 0.2047 | 0.0205 |
Performance Comparison
Below, we compare the performance of Tucano2-qwen-0.5B-Instruct 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](https://huggingface.co/Polygl0t/Tucano2-qwen-0.5B-Instruct/tree/main/.plots/) folder.
**Tucano2-qwen-0.5B-Instruct vs Qwen3-0.6B**

## Cite as 🤗
```latex
```
## 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](https://www.hpc.uni-bonn.de/en/systems/marvin) hosted by [University of Bonn](https://www.uni-bonn.de/en) along with the support provided by its High Performance Computing & Analytics Lab.
## License
Tucano2-qwen-0.5B-Instruct is licensed under the Apache License, Version 2.0. For more details, see the [LICENSE](LICENSE) file.