Downloads · 30 days
56
8% of all-time downloads
kurakurai/Luth-2-2B
Luth-2-2B is a text generation model from kurakurai. Use it when you need the model to write or continue text. It is set up for transformers. The card lists the license as apache-2.0.
Downloads · 30 days
56
8% of all-time downloads
All-time downloads
693
Public
Parameters
2.2B
4.4 GB on disk
Likes
9
Public
Click a slice to open those files.
.safetensors4.4 GB · 100%
From the Hugging Face model README

Luth-2-2B is a 1.88B-parameter (text only) non-reasoning model, setting a new state of the art in French for its size across math, code, instruction following, general knowledge and tool calling. It is trained on a 3B-token French SFT mixture followed by multi-domain on-policy distillation (MOPD). The model outperforms every other model in its size class on our selected French benchmarks and stays competitive with larger models. It is small enough for efficient local and on-device deployment.

[!NOTE] Luth-2-2B inherits the VLM architecture of Qwen3.5-2B but was not trained on vision data. We do not recommend using it for vision tasks.
| Model | Description |
|---|---|
| Luth-2-2B | Original checkpoint in native format. Best for fine-tuning or inference with Transformers, vLLM and SGLang. |
| Luth-2-2B-GGUF | Quantized format for llama.cpp and compatible tools. Optimized for CPU inference and reduced memory usage. |
Luth-2-2B is post-trained from Qwen3.5-2B in two stages:
Luth-2-2B is supported by Transformers, vLLM, SGLang and more.
Quick start with Transformers:
from transformers import AutoModelForCausalLM, AutoTokenizer, TextStreamer
model_id = "kurakurai/Luth-2-2B"
model = AutoModelForCausalLM.from_pretrained(
model_id,
device_map="auto",
dtype="bfloat16",
# attn_implementation="flash_attention_2" # uncomment on compatible GPU
)
tokenizer = AutoTokenizer.from_pretrained(model_id)
streamer = TextStreamer(tokenizer, skip_prompt=True, skip_special_tokens=True)
prompt = "Quelle est la capitale de la France?"
input_ids = tokenizer.apply_chat_template(
[{"role": "user", "content": prompt}],
add_generation_prompt=True,
return_tensors="pt",
tokenize=True,
)["input_ids"].to(model.device)
output = model.generate(
input_ids,
do_sample=True,
temperature=0.8,
top_p=0.95,
top_k=20,
max_new_tokens=512,
streamer=streamer,
)
Evaluations can be reproduced using our GitHub repository. The benchmarks are French subsets or verified translations, scored with temperature=0.6, top_p=0.95, top_k=20, thinking disabled, averaged over 10 runs.
| French Benchmarks | Luth-2-2B | Luth-1.7B-Instruct | Qwen3.5-2B |
|---|---|---|---|
| MGSM-rev2 | 86.52 | 75.72 | 64.60 |
| AIME 24 | 17.00 | 10.33 | 11.67 |
| AIME 25 | 19.00 | 7.00 | 6.67 |
| Math-500 | 81.52 | 65.26 | 65.06 |
| Global-MMLU-Lite | 64.45 | 58.00 | 58.00 |
| MMLU-ProX-Lite | 55.24 | 41.10 | 47.20 |
| GPQA-Diamond | 41.97 | 30.20 | 36.80 |
| IFEval | 75.06 | 64.47 | 61.91 |
| Multi-IF | 69.67 | 46.05 | 45.38 |
| HumanEval+ | 66.00 | 56.44 | 37.56 |
| MBPP+ | 57.62 | 56.40 | 42.12 |
| BFCL v2 | 68.91 | 71.05 | 51.78 |
See the French LLM Leaderboard for comparisons across models.
Questions or feedback? Reach us on LinkedIn: Maxence Lasbordes and Guillaume Pradel.
@misc{luth2,
title = {Luth-2: Pushing the French Capabilities of SLMs with MOPD},
author = {Maxence Lasbordes and Guillaume Pradel},
year = {2026},
url = {https://huggingface.co/blog/MaxLSB/luth-2}
}