You need to agree to share your Hugging Face information to access this model

This repository is publicly accessible, but you have to accept the conditions to access its files and content.

Log in or Sign Up to review the conditions and access this model content.

Villanova.AI

Villanova2-2B

2.4B dense parameters · 131,072-token context · five European languages · open weight & data

The small instruction-tuned model of the Villanova2 family, for English, Italian, German, Spanish and French. Built in EU, for EU.

2.41B parameters 131k context 5 languages open weight & data Apache 2.0

Of the models under 3B parameters we have tested, Villanova2-2B is the strongest EU and open weight & data model. Out of 18 open instruction-tuned models from 0.5B to 5B, all run with the same harness and settings, it comes first among the 6 from the EU and the 7 open ones.


Property Value
Model type Instruction-tuned dense decoder-only Transformer, Qwen3-style backbone
Base model Villanova2-2B-Base
Total parameters 2,411,190,272 (2.411B)
Layers / hidden size 22 / 2,560
Attention GQA, 20 query heads, 4 KV groups, head dim 128
Context window 131,072 tokens
Modes Thinking off / thinking on, selected by the chat template
Tool calling Yes: tools declared in the system turn, calls emitted as <tool_call> blocks
Openness open weight & data: model weights under Apache 2.0; training data documented source by source, each dataset under its own terms; no outputs of proprietary models in the training data
Languages English, Italian, German, Spanish, French (partial support beyond these)
License Apache 2.0

Quick start

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

model_id = "VillanovaAI/Villanova2-2B"

tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
    model_id,
    dtype=torch.bfloat16,
    device_map="auto",
)

messages = [{"role": "user", "content": "Spiegami in tre frasi perché il cielo è blu."}]
inputs = tokenizer.apply_chat_template(
    messages,
    add_generation_prompt=True,
    enable_thinking=False,      # thinking off: the mode evaluated on this card
    return_tensors="pt",
).to(model.device)

output = model.generate(inputs, max_new_tokens=512)
print(tokenizer.decode(output[0, inputs.shape[1]:], skip_special_tokens=True))

With vLLM:

vllm serve VillanovaAI/Villanova2-2B --max-model-len 131072

and, in each OpenAI-compatible chat request, "chat_template_kwargs": {"enable_thinking": false}.

The chat template starts in thinking mode. To turn thinking off, pass enable_thinking=False as above, or write <|think_off|> in the system prompt or in a message (<|think_on|> turns it back on). With thinking on, the model writes its reasoning in a <think>…</think> block before the answer, and the template drops the reasoning of earlier turns from the context.

If you don't pass a system prompt, the template uses "You are Villanova, a helpful AI assistant built by Villanova.AI."

For tool calling, pass the tools to apply_chat_template(..., tools=tools). The template lists them as JSON in the system turn, and the model answers with

<tool_call>
<function=get_weather>
<parameter=city>Roma</parameter>
</function>
</tool_call>

and tool results go back as <tool_response> blocks.

In BF16 the weights take about 4.5 GiB and the KV cache needs 44 KiB per token, so the model and a long conversation fit on one consumer GPU.

Quantized version

Villanova2-2B-GGUF holds the same weights quantized for llama.cpp, for edge inference:

llama-cli -hf VillanovaAI/Villanova2-2B-GGUF:Q8_0

Intended use

Good fit Not a good fit without extra work
On-device and low-latency assistants in EN · IT · DE · ES · FR Safety-critical or high-stakes decisions without human review
Instruction following and structured, formatted output Code generation beyond short, testable functions
Grade-school mathematics and step-by-step arithmetic Factual answers without retrieval, where errors are costly
Translation between English and IT · DE · ES · FR Languages outside the five core ones, where quality is not guaranteed
Tool and function calling on a small compute budget; a starting point for task fine-tuning
Research that needs an auditable model: open weight & data

The family


Architecture

The architecture is the same as Villanova2-2B-Base; that card covers pre-training, data and the tokenizer.

Architectural feature Value
Backbone Qwen3-style dense decoder
Layers 22
Hidden dimension 2,560
Attention GQA, 20 Q heads / 4 KV groups, head dim 128
FFN SwiGLU, intermediate dimension 10,240
Vocabulary 131,072-token Villanova BPE tokenizer · 130,816 embedding rows, tied input/output
Context window 131,072 tokens

Post-training

Three stages on top of Villanova2-2B-Base: supervised fine-tuning, then DPO, then GRPO.

Stage Data Setup
SFT 3.68M conversations, 10.87B tokens (see Data) 2 epochs, 4,848 steps, learning rate 5 × 10⁻⁵
DPO A subset of the SFT data 2,152 steps, learning rate 5 × 10⁻⁷, β = 10
GRPO Well-known datasets with verifiable answers, difficulty-sampled 600 steps

SFT

One run on two sets at once: Think, where every trained turn has a reasoning trace (1.61M conversations), and Instruct, where none does (2.08M). After training, the chat template alone decides whether the model reasons before it answers. Sequences are packed to 32,768 tokens with no attention across documents, 128 sequences (about 4.2M tokens) per step. AdamW at 5 × 10⁻⁵ with 3% warm-up and linear decay to 0, loss on every assistant turn. 32 B200 GPUs, 5.4 hours.

DPO

Direct preference optimisation from the final SFT checkpoint, on a subset of the SFT data: learning rate 5 × 10⁻⁷, β = 10, 2,152 steps.

GRPO

GRPO with verifiable rewards, starting from well-known datasets and applying offline difficulty sampling; 600 steps.


Data

We used synthetic data only from models released under a permissive licence. Where the origin of a dataset was explicit, we removed the proprietary parts, tracing provenance as carefully as we could; where the origin was doubtful, we did not use the data. This distinguishes Villanova2 from many open models, which are post-trained on popular datasets containing answers written by closed models.

The SFT mixture has 3,684,688 conversations and 10.87B tokens in English, Italian, German, Spanish and French. The rows marked Villanova-AI multilingual come from Multi-SFT (Baiamonte et al., 2026), our collection of permissively licensed instruction data in the five languages, built by translation and regeneration with human review.

Every source goes through the same filters: language check (a failed translation is dropped), loops, truncated answers, broken tool calls, claims to be another model, exact and near-duplicate prompts, and a 32,768-token limit (long rows are dropped, never cut). The Think and Instruct sets share no prompts. Rows that overlap with an evaluation benchmark are tagged rather than removed; at most 1.3% of the conversations carry a tag.

Source Content
Mathematics
OpenMathReasoning Competition problems with long solutions (hard subset); final solutions without reasoning for Instruct
Nemotron-Post-Training-v1 Mathematics, DeepSeek-R1-0528 traces
Nemotron-SFT-Math-v4 Chain-of-thought and tool-integrated solutions
Nemotron-Math-Proofs-v2 Proof writing and proof verification (Think only)
Mixture-of-Thoughts Mathematics, code and science traces
SYNTHETIC-2 Verified reasoning traces (up to two per problem)
GSM8K train Grade-school word problems (train split)
Villanova-AI multilingual Native-language school mathematics with worked solutions
Instruction following
Dolci-Think-SFT Precise and persona instruction following, WildChat prompts (regenerated answers), Aya
Nemotron-SFT-IF-Chat-v3 Chat and instruction following (LMSYS and WildChat prompts)
Nemotron-SFT-IF-Chat-v2 Paired reasoning-on / reasoning-off answers
Villanova-AI multilingual Nemotron instruction following in German, Spanish, French and Italian
Code
OpenCodeReasoning-2 Python and C++ competitive programming; final code only for Instruct
Nemotron-SFT-Competitive-Programming-v2 C++, Python, text-to-SQL and Exercism tasks
Nemotron-SFT-OpenCode-v1 General coding and agent skills (Instruct only)
Villanova-AI multilingual Code assistance, Python Alpaca and SelfCodeAlign in five languages
Science and reasoning
Nemotron-SFT-Science-v2 Multiple-choice and open science questions
Villanova-AI multilingual SciRIFF, FLAN chain of thought and TableGPT, Think and Instruct versions
Multilingual and chat
SmolTalk2 Multilingual conversations with Qwen3-32B traces; a few no-think subsets
Nemotron-SFT-Multilingual-v1 Translated reasoning data, German, Spanish, French, Italian
Nemotron-Post-Training-v1 Chat (LMSYS-Chat prompts restored)
Aya Collection Multilingual instructions
Europarl Translation pairs between English and IT/ES/DE/FR
Villanova-AI multilingual WildChat, OASST2, Dolly, summarisation, rewriting, dialogues, FLAN, RAG, MentorES
Tools and agents
Nemotron-SFT-Agentic-v4 Multi-step tool calling and knowledge agents
Nemotron-Post-Training-v1 Tool calling, Qwen3-235B answers
Toucan Tool use in real MCP environments (Instruct only)
When2Call When to call a tool, ask, or abstain
Nemotron-Terminal-Corpus Terminal (shell) agent trajectories
Villanova-AI multilingual xLAM function calling and smolagents traces in five languages
Domains, safety and identity
Nemotron-SpecializedDomains-Finance-v1 Financial question answering
Nemotron-SFT-Finance-Doc-Grounded Questions grounded in 10-K / 10-Q / 8-K filings
Nemotron-SFT-LC-Transduction-v1 Code-generated long-context transduction (rows ≤ 32K tokens)
Nemotron-SFT-Safety-v2 Safety prompts with refusals and safe completions
Nemotron-SFT-BBQ-v1 Bias question answering
Villanova-AI multilingual Red-teaming, AdvBench and safety prompts in five languages
Villanova identity (ours) Generated and reviewed identity conversations, five languages

Names starting with Nemotron are NVIDIA datasets on Hugging Face (nvidia/…).


Evaluation

We ran 85 benchmarks in 10 categories and five languages, with the same harness (lm-evaluation-harness with a vLLM backend) and the same settings for every model on this card: each model's own chat template, thinking off (enable_thinking=False wherever the template supports it), greedy decoding and a single run. Llama-Guard-3-8B judges the safety (M-ALERT) answers. In the comparison tables, bold marks the best score in each column and underline the best among the open weight & data EU models.

Each average is a plain mean over its group: 85 overall, 44 English, 41 multilingual (IT·DE·ES·FR). A missing score counts as 0; a score is not valid when more than 1% of the prompts had to be cut to fit the context window. Summarization (WikiLingua) is out of this release because the benchmark had a problem in our harness.

The comparison covers 18 instruction-tuned models from 0.6B to 5.1B that release their weights or document their training data.

The 85 benchmarks
  • Reasoning (8): BBH CoT, BBH MC, MuSR, ARC-Challenge (EN, DE, ES, FR, IT).
  • Mathematics (8): GSM8K, MATH-500, MATH (full), MGSM (EN, DE, ES, FR, IT).
  • QA (16): DROP, PopQA, TruthfulQA MC1 and MC2, XQuAD (EN, DE, ES), FQuAD v2 (FR), XCOPA (IT), M-MMLU (EN, DE, ES, FR, IT), xStoryCloze (EN, ES).
  • Safety (5): M-ALERT (EN, DE, ES, FR, IT).
  • Instruction following (6): IFEval, Marco-Bench (EN, DE, ES, FR, IT).
  • Coding (5): HumanEval (Python, JavaScript, Java, C++), MBPP.
  • Tool calling (14): ToolBench tool selection; BFCL V4 Simple (Python, Java, JavaScript), Multiple, Parallel, Parallel-Multiple, Irrelevance; BFCL V4 Live Simple, Multiple, Parallel, Parallel-Multiple, Irrelevance, Relevance.
  • NER (10): MultiNERD and WikiANN (EN, DE, ES, FR, IT).
  • Machine translation (8): FLORES-200, English to and from DE, FR, ES, IT (spBLEU).
  • Reading comprehension (5): Belebele (EN, DE, ES, FR, IT).

Overall ranking

85-benchmark average, thinking off, Villanova2-2B against 17 instruction-tuned models from 0.6B to 5.1B, coloured by EU or non-EU origin and openness
# Model Openness Origin Params Avg EN ML IT DE ES FR
1 Qwen3.5-4B weight non-EU 4.7B 73.27 69.3 77.5 76.0 76.0 79.2 78.8
2 Qwen3-4B weight non-EU 4.0B 70.69 68.8 72.7 71.8 72.1 74.5 72.4
3 gemma-4-E2B-it weight non-EU 5.1B 68.50 66.3 70.9 70.5 70.2 72.9 69.9
4 Qwen2.5-3B-Instruct weight non-EU 3.1B 64.33 63.0 65.7 66.8 62.4 67.5 66.1
5 Llama-3.2-3B-Instruct weight non-EU 3.2B 62.78 61.0 64.7 63.8 63.5 67.4 63.7
6 Villanova2-2B weight & data EU 2.4B 62.75 59.1 66.6 66.8 66.3 68.9 64.3
7 Qwen3.5-2B weight non-EU 2.3B 58.46 54.0 63.3 63.3 63.0 67.4 59.0
8 Qwen3.5-0.8B weight non-EU 0.9B 46.15 42.6 49.9 49.1 50.7 52.6 47.1
9 Llama-3.2-1B-Instruct weight non-EU 1.2B 45.11 43.6 46.8 45.8 45.4 50.3 45.2
10 Velvet2-3B weight EU 3.9B 44.83 34.3 56.1 59.0 50.0 58.5 56.7
11 gemma-3-1b-it weight non-EU 1.0B 43.45 37.5 49.8 49.8 48.6 52.9 47.8
12 Apertus-v1.1-1.5B-Instruct ²˒⁵ weight & data non-EU 1.5B 35.42 27.8 43.5 43.0 42.9 45.1 43.0
13 Velvet-2B weight EU 2.2B 33.39 28.3 38.9 47.3 32.7 37.6 38.0
14 EuroMoE-2.6B-A0.6B-Instruct weight & data EU 2.6B / 0.6B 33.20 23.1 44.0 45.5 42.1 45.6 42.9
15 OLMo-2-1B-Instruct ² weight & data non-EU 1.5B 32.64 27.4 38.2 36.3 34.3 43.2 38.6
16 salamandra-2b-instruct ⁴ weight & data EU 2.2B 27.31 20.3 34.9 34.9 34.6 36.0 33.9
17 EuroLLM-1.7B-Instruct ² weight & data EU 1.7B 25.94 19.9 32.4 33.8 29.9 32.9 33.2
18 Apertus-v1.1-0.5B-Instruct ²˒⁵ weight & data non-EU 0.6B 25.45 18.6 32.8 34.2 32.1 32.9 32.0

² Marked not valid on some tool-calling benchmarks (4; 2 for OLMo-2-1B) because more than 1% of the prompts exceed the model's context window; these count as 0. ⁴ Open weight & data, though part of the training data is not released: salamandra documents its corpus without redistributing all of it. ⁵ Apertus is developed in Switzerland: European, but not from the EU. EN = English (44 benchmarks), ML = multilingual IT·DE·ES·FR (41); weight = open weights only, weight & data = open weights plus documented training data. Per-language columns average different task mixes, so compare them across models, not across languages.

Strengths and weaknesses

Model Reas. Math QA Safety IF Code Tools NER MT Read.
Qwen3.5-4B 80.6 86.5 69.4 98.7 89.7 71.9 67.7 67.8 39.9 88.9
Qwen3-4B 75.6 85.0 62.1 96.5 88.5 69.1 74.3 60.1 37.5 86.4
gemma-4-E2B-it 64.4 81.3 59.0 97.0 88.2 72.3 67.0 67.6 41.0 79.1
Qwen2.5-3B-Instruct 65.6 72.4 54.3 99.2 74.1 61.3 70.9 56.2 34.8 83.2
Llama-3.2-3B-Instruct 63.5 64.5 59.5 93.2 75.9 47.6 69.4 54.2 36.8 78.3
Villanova2-2B 56.9 69.7 58.1 99.1 81.3 39.5 65.3 59.4 42.8 72.0
Qwen3.5-2B 67.5 60.1 57.5 95.0 80.3 42.9 46.8 53.4 35.4 76.8
Qwen3.5-0.8B 52.6 33.5 50.7 84.9 70.6 23.3 36.9 37.3 30.5 65.0
Llama-3.2-1B-Instruct 45.0 29.0 48.2 91.4 63.9 28.2 44.8 35.4 31.3 51.6
Velvet2-3B 49.0 46.0 52.9 96.7 71.7 12.9 12.7 47.5 34.6 59.4
gemma-3-1b-it 38.9 42.7 44.0 94.3 74.8 31.6 23.4 44.7 32.8 44.4
Apertus-v1.1-1.5B-Instruct ²˒⁵ 32.1 18.5 44.2 86.7 64.7 14.5 10.9 34.9 36.5 42.4
Velvet-2B 39.3 18.8 43.4 84.8 55.0 13.3 10.2 28.0 30.3 38.5
EuroMoE-2.6B-A0.6B-Instruct 39.1 11.4 41.4 85.4 60.8 12.7 1.5 36.0 40.5 39.0
OLMo-2-1B-Instruct ² 33.4 27.7 44.3 76.8 69.7 10.8 3.6 24.2 29.9 37.8
salamandra-2b-instruct ⁴ 29.6 1.7 39.3 67.2 46.1 2.9 8.8 28.1 35.1 26.0
EuroLLM-1.7B-Instruct ² 29.0 5.9 36.8 54.3 46.6 6.2 5.8 21.7 40.5 26.5
Apertus-v1.1-0.5B-Instruct ²˒⁵ 27.7 5.9 35.2 74.6 55.8 6.1 1.2 19.6 30.2 27.6

Bold: best in the column; underlined: best among the open weight & data EU models. Reas. = reasoning, IF = instruction following, MT = machine translation, Read. = reading comprehension.

  • Translation is its best category, and the best in this comparison: 42.8 spBLEU over eight FLORES directions, ahead of gemma-4-E2B (41.0) and Qwen3.5-4B (39.9).
  • Safety is near the maximum, at 99.1 on M-ALERT; only Qwen2.5-3B is slightly higher (99.2).
  • It follows instructions better than the 3B models (81.3, against 75.9 for Llama-3.2-3B and 74.1 for Qwen2.5-3B). In maths it falls between them, at 69.7 (Llama-3.2-3B 64.5, Qwen2.5-3B 72.4).
  • Reasoning (56.9), code (39.5) and reading comprehension (72.0) are its weak spots, and they explain most of the gap to the 4B models. Qwen3.5-2B, a model of the same size, scores 67.5 in reasoning and 42.9 in code.

Limitations

All the numbers on this card were measured with thinking off. We have not evaluated thinking mode here, so we make no claims about it.

Reasoning (56.9) and code (39.5) are the weakest areas. Check its answers on multi-step problems, and test any code it writes beyond short functions.

At 2.4B parameters it sometimes gets a plain multiplication wrong when asked only for the result. Asking it to show the steps helps.

The usable context has been measured up to 32k tokens.

Some training data overlaps with public benchmarks. There are IFEval-style instructions and MATH problems among the training conversations, and we used the training splits of GSM8K, MATH and MBPP. Keep this in mind when reading those scores.

A 2.4B model knows a limited amount about the world and can state wrong facts with confidence. Use retrieval when accuracy matters.

The M-ALERT safety scores are high in all five languages, but a benchmark is not a guarantee. The model has not been red-teamed for every use, so add your own safeguards.

We trained and tested it for English, Italian, German, Spanish and French. It handles other languages to some extent, without guarantees.


License, citation, acknowledgements

License. Apache 2.0.

Citation. If you use Villanova2-2B, please cite the technical report and the inaugural Villanova paper, and Multi-SFT for the multilingual SFT data:

@inproceedings{simonazzi2026villanova2b,
  author    = {Simonazzi, Stefano and Zeinalipour, Kamyar and Gabburo, Matteo and
               Baiamonte, Daniela and Fano, Elena and Zugarini, Andrea},
  title     = {Villanova-2B: European Open Multilingual and Multimodal Language Models},
  booktitle = {Proceedings of the Twelfth Italian Conference on Computational Linguistics (CLiC-it 2026)},
  editor    = {Basile, Valerio and Croce, Danilo and Passaro, Lucia and Pirrone, Roberto},
  year      = {2026},
  note      = {In press}
}
@techreport{villanova2_2026,
  title       = {Villanova2 --- Technical Report},
  author      = {{Villanova.AI}},
  institution = {Villanova.AI},
  year        = {2026},
  note        = {Coming soon}
}
@misc{baiamonte2026multisft,
  author        = {Baiamonte, Daniela and Zeinalipour, Kamyar and Fano, Elena and
                   Simonazzi, Stefano and Zugarini, Andrea},
  title         = {Multi-SFT: Permissively-Licensed Multilingual Instruction-Following},
  year          = {2026},
  eprint        = {2610.22086},
  archivePrefix = {arXiv},
  url           = {https://arxiv.org/abs/2610.22086}
}

Acknowledgements. This work is part of the Villanova project, financed by IPCEI-CIS, Prog. n. SA. 102519 — CUP B29J24000850005.

Villanova2-2B · built in EU, for EU.
Downloads last month
62
Safetensors
Model size
2B params
Tensor type
BF16
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for VillanovaAI/Villanova2-2B

Finetuned
(2)
this model
Quantizations
1 model

Collection including VillanovaAI/Villanova2-2B

Paper for VillanovaAI/Villanova2-2B