Despite rapid progress in Large Language Models (LLMs), European Portuguese (pt-PT) remains significantly underrepresented in both training data and evaluation benchmarks.
AMALIA aims to bridge this gap by delivering fully open-source resources and LLMs designed specifically for European Portuguese.
To support the development of high-quality pt-PT language models, AMALIA provides an end-to-end open ecosystem spanning data processing, model training, and evaluation. Our contributions include:
- 🎯 Prioritizing high-quality European Portuguese data throughout every stage of training
- 🔓 Releasing fully open models tailored specifically for pt-PT
- 📊 Introducing new evaluation benchmarks for European Portuguese
- 🛠️ Open-sourcing data cleaning, filtering, and processing pipelines to enable further research
Our experimental results show that AMALIA is competitive with strong open-model baselines while delivering gains on European Portuguese benchmarks. These findings underscore the value of targeted language-specific training and native evaluation resources for underrepresented language variants.
- [2026/07] 🚀 AMALIA public launch
- [2026/06] 📝 AMALIA-VL (Vision-Language) and PorTEXTO papers available on arXiv
- [2026/05] 📄 P3B3 benchmark accepted at MeLLM workshop at ACL 2026
- [2026/04] 📄 AMALIA and ALBA papers accepted at PROPOR 2026
- [2026/03] 📝 AMALIA LLM Technical report available on arXiv
- [2026/02] 📄 PHEB benchmark accepted at LREC 2026
AMALIA provides multiple model variants tailored for different use cases:
| Model | Size | Type | HuggingFace |
|---|---|---|---|
| AMALIA-9B | 9B | Language | 🤗 Link |
| AMALIA-VL | 9B | Vision-Language | 🤗 Link |
Additional derivative models built on top of AMALIA are also available on HuggingFace.
This organization contains multiple repositories covering different aspects of the AMALIA project:
| Repository | Description |
|---|---|
| datatrove-amalia | Customizable pipeline processing blocks for data handling |
| arquivo_processing | ArquivoPT data processing pipeline used for AMALIA |
| Megatron-LM-pretrain | Modular codebase for AMALIA model pretraining, based on Megatron-LM |
| amalia-lm-post-train | Post-training pipeline for supervised fine-tuning and preference optimization of AMALIA |
| amalia-vl-sft | Code and scripts for supervised fine-tuning of AMALIA Vision-Language models |
| amalia-vl-dpo | Code and scripts for direct preference optimization of AMALIA Vision-Language models |
| Repository | Description |
|---|---|
| amalia-lm-eval | Evaluation suite for AMALIA LLM |
| amalia-vl-eval | Evaluation framework for AMALIA Vision-Language models |
| alba-benchmark | ALBA: A European Portuguese Benchmark for Evaluating Language and Linguistic Dimensions in Generative LLMs |
| p3b3-benchmark | P3B3: A Multi-Turn Conversational Benchmark for Measuring European and Brazilian Portuguese Variety Bias |
| pheb | Portuguese High (School) Exams Benchmark |
AMALIA can be served using any platform or library for LLM inference and serving. However, we recommend using it with vLLM on an environment with a Python >=3.12 version installed.
To serve the AMALIA model just execute the following command on any shell terminal with vLLM installed:
vllm serve amalia-llm/AMALIA-9B-0626-DPO
Executing the previous command will serve the AMALIA model and will expose it locally on the url: http://localhost:8000.
With the model served with vLLM, it can be queried on a terminal shell using curl via
curl -X POST http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer api_key" \
--data ’{"model": "amalia-llm/AMALIA-9B-0626-DPO", \
"messages": [{"role": "user", "content": "Olá"}]}’This example sends the query "Olá" to AMALIA and displays the model's answer.
Alternatively, AMALIA can be used through a Python script using either the requests library or the OpenAI API for python. The following code shows a snippet of how to use requests to interact with AMALIA, using the same example as before:
import requests
url = "http://localhost:8000/v1/chat/completions"
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer api_key"
}
payload = {
"model": "amalia-llm/AMALIA-9B-0626-DPO",
"messages": [
{
"role": "user",
"content": "Olá"
}
]
}
response = requests.post(url, headers=headers, json=payload)
if response.status_code == 200:
print(response.json()['choices'][0]['message']['content'])
else:
print(f"Error {response.status_code}: {response.text}")Using the python openai library is as following:
from openai import OpenAI
url = "http://localhost:8000/v1/chat/completions"
client = OpenAI(base_url=url, api_key='')
messages = [
{
'role': 'user',
'content': 'Olá'
}
]
outputs = client.chat.completions.create(
model="amalia-llm/AMALIA-9B-0626-DPO",
messages=messages,
)
answer = outputs.choices[0].message.content.strip()
print(answer)AMALIA also has been developed both in language-only and vison-language variants. In order to interact with the VLM variant, first serve the vision-language variant, here we will use amalia-llm/AMALIA-VL-DPO. After serving with the command above, the model will be at http://localhost:8000, and we can interact with it, like before, either on the terminal via curl or using a Python script using the requests or openai libraries.
# curl
curl -X POST http://127.0.0.1:8001/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer api_key" \
--data '{"model": "amalia-llm/AMALIA-VL-DPO", \
"messages": [{"role": "user", "content": \
[{"type": "image","image": "path/to/image.png"}, \
{"type": "text","text": "O que está nesta imagem?"}]}]}'# requests
import requests
url = "http://127.0.0.1:8001/v1/chat/completions"
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer api_key"
}
payload = {
"model": "amalia-llm/AMALIA-VL-DPO",
"messages": [
{
"role": "user",
"content": [
{
"type": "image",
"image": "path/to/image.png"
},
{
"type": "text",
"text": "O que está nesta imagem?"
}
]
}
]
}
response = requests.post(url, headers=headers, json=payload)
if response.status_code == 200:
print(response.json()['choices'][0]['message']['content'])
else:
print(f"Error {response.status_code}: {response.text}")# OpenAI API
from openai import OpenAI
url = "http://localhost:8000/v1/chat/completions"
client = OpenAI(base_url=url, api_key='')
messages = [
{
'role': 'user',
"content": [
{
"type": "image",
"image": "path/to/image.png"
},
{
"type": "text",
"text": "O que está nesta imagem?"
}
]
}
]
outputs = client.chat.completions.create(
model="amalia-llm/AMALIA-9B-0626-DPO",
messages=messages,
)
answer = outputs.choices[0].message.content.strip()
print(answer)If you use AMALIA in your work, please cite:
@inproceedings{simplicio-etal-2026-amalia,
title = "{AMALIA}: A Fully Open Large Language Model for {E}uropean {P}ortuguese",
author = "Simpl{\'i}cio, Afonso and Vinagre, Gon{\c{c}}alo and Ramos, Miguel Moura and Tavares, Diogo and Ferreira, Rafael and Attanasio, Giuseppe and Alves, Duarte M. and Calvo, In{\^e}s and Vieira, In{\^e}s and Guerra, Rui and Furtado, James and Canaverde, Beatriz and Paulo, Iago and Ramos, Vasco and Gl{\'o}ria-Silva, Diogo and Faria, Miguel and Treviso, Marcos and Gomes, Daniel and Gomes, Pedro and Semedo, David and Martins, Andr{\'e} and Magalh{\~a}es, Jo{\~a}o",
booktitle = "Proceedings of the 17th International Conference on Computational Processing of {P}ortuguese ({PROPOR} 2026) - Vol. 1",
month = apr,
year = "2026",
address = "Salvador, Brazil",
publisher = "Association for Computational Linguistics",
url = "https://aclanthology.org/2026.propor-1.38/",
pages = "380--391",
isbn = "979-8-89176-387-6"
}If you use AMALIA-VL (Vision-Language):
@misc{amaliavl2026,
title = {AMALIA-VL: Vision-Language Model for European Portuguese},
author = {AMALIA Team},
year = {2026},
eprint = {2606.19100},
archivePrefix = {arXiv},
primaryClass = {cs.CV},
url = {https://arxiv.org/abs/2606.19100}
}We would like to thank the following projects and communities that made AMALIA possible:
- EleutherAI lm-evaluation-harness - For the evaluation harness and benchmark framework
- lmms-eval - For the multimodal evaluation framework basis
- Megatron-LM - For the pre-training framework
- DataTrove - For data processing pipeline tools
- ArquivoPT - For providing access to high-quality Portuguese web archive data
- All contributors and researchers who provided feedback and continuous support to the AMALIA project.
AMALIA - Advancing European Portuguese in the era of Large Language Models
Website • HuggingFace • GitHub