--- base_model: - Qwen/Qwen3.5-0.8B language: - fr library_name: transformers pipeline_tag: text-generation tags: - french - conversational - edge - qwen license: apache-2.0 datasets: - kurakurai/Luth-2-Post-Training-SFT - kurakurai/Luth-2-Post-Training-RL --- ![luth-2-banner](https://cdn-uploads.huggingface.co/production/uploads/66beff523ae330ae8b698ee9/wso_h0n6syZf9E8YDKWYA.png) # Luth-2-0.8B **Luth-2-0.8B** is a 750M-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 models 2 to 3 times larger. It is small enough for efficient local and on-device deployment. - ๐Ÿ“„ **Blog**: [Luth-2: Pushing the French Capabilities of SLMs with MOPD](https://huggingface.co/blog/MaxLSB/luth-2) - ๐Ÿค— **Models**: [Luth-2-0.8B](https://huggingface.co/kurakurai/Luth-2-0.8B) ยท [Luth-2-2B](https://huggingface.co/kurakurai/Luth-2-2B) - ๐Ÿ“Š **Datasets**: [SFT](https://huggingface.co/datasets/kurakurai/Luth-2-Post-Training-SFT) ยท [RL](https://huggingface.co/datasets/kurakurai/Luth-2-Post-Training-RL) - ๐Ÿ’ป **Code**: [GitHub](https://github.com/kurakurai/Luth-2) - ๐Ÿ† **Leaderboard**: [French LLM Leaderboard](https://huggingface.co/spaces/kurakurai/llm_leaderboard_fr) ![luth2_benchmarks_0.8b_portrait](https://cdn-uploads.huggingface.co/production/uploads/66beff523ae330ae8b698ee9/gER5neg6becY6FxAeXFSG.png) > [!NOTE] > **Luth-2-0.8B** inherits the VLM architecture of Qwen3.5-0.8B but was not trained on vision data. We do not recommend using it for vision tasks. ## Model variants | Model | Description | |---|---| | [Luth-2-0.8B](https://huggingface.co/kurakurai/Luth-2-0.8B) | Original checkpoint in native format. Best for fine-tuning or inference with Transformers, vLLM and SGLang. | | [Luth-2-0.8B-GGUF](https://huggingface.co/kurakurai/Luth-2-0.8B-GGUF) | Quantized format for llama.cpp and compatible tools. Optimized for CPU inference and reduced memory usage. | ## Training **Luth-2-0.8B** is post-trained from Qwen3.5-0.8B in two stages: 1. **Supervised fine-tuning** on [Luth-2-Post-Training-SFT](https://huggingface.co/datasets/kurakurai/Luth-2-Post-Training-SFT), a 3B-token French mixture spanning math (37.2%), knowledge (27.9%), code (22.2%), instruction following (6.5%) and tool calling (6.3%). Prompts were translated from English SFT datasets and answers regenerated with strong open-source teachers. 2. **Multi-domain on-policy distillation (MOPD)**. Three specialists (math, code, instruction following) are trained separately with GRPO on [Luth-2-Post-Training-RL](https://huggingface.co/datasets/kurakurai/Luth-2-Post-Training-RL), then distilled back into the SFT student. ## Inference **Luth-2-0.8B** is supported by Transformers, vLLM, SGLang and more. Quick start with Transformers: ```python from transformers import AutoModelForCausalLM, AutoTokenizer, TextStreamer model_id = "kurakurai/Luth-2-0.8B" 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, ) ``` ## Evaluation Evaluations can be reproduced using our [GitHub](https://github.com/kurakurai/Luth-2) 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-0.8B | Luth-0.6B-Instruct | Qwen3.5-0.8B | |---|--:|--:|--:| | MGSM-rev2 | **72.92** | 58.52 | 35.20 | | AIME 24 | **5.67** | 2.00 | 1.00 | | AIME 25 | **8.67** | 1.33 | 0.33 | | Math-500 | **57.60** | 44.74 | 27.46 | | Global-MMLU-Lite | **53.30** | 40.20 | 44.00 | | MMLU-ProX-Lite | **38.93** | 25.40 | 27.60 | | GPQA-Diamond | **26.87** | 25.60 | 23.80 | | IFEval | **71.23** | 51.23 | 44.47 | | Multi-IF | **61.52** | 33.77 | 32.72 | | HumanEval+ | **46.81** | 30.25 | 10.87 | | MBPP+ | **42.33** | 34.74 | 18.20 | | BFCL v2 | **64.02** | 61.72 | 51.49 | See the [French LLM Leaderboard](https://huggingface.co/spaces/kurakurai/llm_leaderboard_fr) for comparisons across models. ## Contact Questions or feedback? Reach us on LinkedIn: [Maxence Lasbordes](https://www.linkedin.com/in/maxence-lasbordes/) and [Guillaume Pradel](https://www.linkedin.com/in/guillaume-pradel/). ## Citation ```bibtex @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} } ```