Downloads · 30 days
88
9% of all-time downloads
rodin-llm/rodin-1b-instruct
rodin-1b-instruct is a text generation model from rodin-llm. 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.
NOTE DE MAINTENANCE / MAINTENANCE NOTE Ce document est bilingue (EN + FR). Si tu modifies une section, pense a repercuter le changement dans les DEUX langues. This document is bilingual (EN + FR). If you edit a sectio…
Downloads · 30 days
88
9% of all-time downloads
All-time downloads
939
Public
Parameters
1.4B
7.9 GB on disk
Likes
0
Public
Click a slice to open those files.
.gguf5.1 GB · 65%
From the Hugging Face model README
A French conversational model trained from scratch — solo, on consumer-grade hardware. Un modele conversationnel francais entraine de zero — en solo, sur du materiel grand public.
This is the instruction-tuned, conversational model. For the base pretrained model, see
rodin-llm/rodin-1b. Ceci est le modele conversationnel (instruction-tune). Pour le modele de base, voirrodin-llm/rodin-1b.
💻 Full source code / Code source complet : github.com/rodin-llm/rodin The complete pipeline — data, tokenizer, pretraining, SFT, export, spot orchestration. Le pipeline complet — données, tokenizer, pré-entraînement, SFT, export, orchestration spot.
<a name="english"></a>
RODIN-1B-Instruct is the instruction-tuned, conversational variant of rodin-1b — a 1.24-billion-parameter, French-only causal language model trained from scratch by a single person. RODIN stands for Research Open Deep Intelligence Natively-french.
It was produced by full supervised fine-tuning (SFT) of the base model on French ChatML examples, and speaks French fluently in a conversational register. GGUF quantizations (F16, Q8_0, Q4_K_M) are provided for llama.cpp, Ollama and LM Studio, including CPU-only hardware.
The goal was never to compete with large, well-funded French models on raw benchmark scores. For scale: comparable French open-source efforts were trained on 3,000 billion tokens using hundreds of H100 GPUs on national supercomputers. RODIN was trained on 32 billion tokens, by one person, on a rented spot B200 instance plus a single RTX 3090 for local iteration and SFT.
The value of RODIN is pedagogical and demonstrative: it shows what one motivated individual can build from scratch, end to end, with a small budget — documented honestly, limitations included.
RODIN-1B-Instruct uses the ChatML format:
<|im_start|>user
{message}<|im_end|>
<|im_start|>assistant
{response}<|im_end|>
Stop token: <|im_end|>. The chat template is bundled in tokenizer_config.json, so apply_chat_template and runtimes like Ollama/LM Studio handle it automatically.
| Property | Value |
|---|---|
| Parameters | 1.238 B |
| Architecture | LLaMA-style (RoPE, RMSNorm, SwiGLU, causal SDPA attention) |
| Hidden size / Layers / Heads | 2048 / 22 / 16 |
| FFN intermediate size | 5461 |
| Vocabulary | 64,000 (custom SentencePiece BPE, French) |
| Context length | 2048 tokens |
| Chat format | ChatML |
| Training dtype | bfloat16 |
Full fine-tune on 5,000 ChatML examples generated locally with a Qwen model, covering varied French registers (narrative, summarization, rewriting, simple factual, etc.) plus a small politeness set. Math and legal tasks were deliberately excluded — fine-tuning a small model on content it gets wrong would only teach it to hallucinate with authority.
The underlying pretraining data is documented on the base model card.
Evaluated with EleutherAI's lm-evaluation-harness, french_bench, 3-shot, full test sets, instruct evaluated with --apply_chat_template (OrangeSum excluded due to a datasets incompatibility).
| Task | Metric | Base | Instruct |
|---|---|---|---|
| Vocabulary | acc | 0.773 | 0.756 |
| Grammar | acc | 0.765 | 0.756 |
| Reading comprehension | acc | 0.606 | 0.549 |
| BoolQA | acc | 0.573 | 0.562 |
| Topic-based NLI | acc_norm | 0.498 | 0.378 |
| HellaSwag | acc_norm | 0.424 | 0.429 |
| ARC challenge | acc | 0.220 | 0.257 |
| ARC challenge | acc_norm | 0.265 | 0.309 |
| XNLI | acc | 0.333 | 0.323 |
| Trivia | f1 | 0.245 | 0.142 |
| Trivia | is_included | 0.190 | 0.213 |


The SFT effect — a key observation. On Trivia, exact/f1 drop while is_included rises (0.19 → 0.21). This is not a regression: the base model answered bluntly ("Paris"); after SFT, the model wraps answers in full sentences ("The capital is Paris."), so the correct answer is still present (is_included ↑) but no longer an exact string match. The SFT made the model conversational, exactly as intended. Note also that ARC challenge improves with SFT (0.27 → 0.31 acc_norm), while core linguistic competence (grammar, vocabulary) is preserved.
Intended use. French conversation, summarization, rewriting, simple factual Q&A, education and experimentation. A demonstrator, not a production system.
Limitations.
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
model_id = "rodin-llm/rodin-1b-instruct"
tok = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype=torch.bfloat16).cuda()
messages = [{"role": "user", "content": "Explique-moi en deux phrases ce qu'est la photosynthèse."}]
inputs = tok.apply_chat_template(messages, add_generation_prompt=True, return_tensors="pt").cuda()
out = model.generate(inputs, max_new_tokens=200, temperature=0.7, top_p=0.9)
print(tok.decode(out[0], skip_special_tokens=True))
ollama run rodin-1b
RodinLM → HuggingFace LlamaForCausalLM → GGUF (F16, Q8_0, Q4_K_M).Released under the Apache 2.0 license.
Carried out by one person, with AI assistance openly acknowledged throughout. Thanks to EleutherAI (evaluation), the HPLT and Pleias teams (data), Wikimedia, and the llama.cpp / Ollama / LM Studio projects.
@misc{rodin1binstruct2026,
title = {RODIN-1B-Instruct: A French Conversational Model Trained From Scratch},
author = {RODIN},
year = {2026},
howpublished = {\url{https://huggingface.co/rodin-llm/rodin-1b-instruct}}
}
<a name="français"></a>
RODIN-1B-Instruct est la variante conversationnelle (instruction-tunée) de rodin-1b — un modèle de langage causal uniquement francophone, de 1,24 milliard de paramètres, entraîné de zéro par une seule personne. RODIN signifie Research Open Deep Intelligence Natively-french.
Il a été produit par fine-tuning supervisé complet (SFT) du modèle de base sur des exemples ChatML français, et parle un français fluide dans un registre conversationnel. Des quantisations GGUF (F16, Q8_0, Q4_K_M) sont fournies pour llama.cpp, Ollama et LM Studio, y compris sur matériel CPU uniquement.
L'objectif n'a jamais été de rivaliser en score brut avec les gros modèles français bien financés. Pour situer : des projets français open source comparables ont été entraînés sur 3 000 milliards de tokens avec des centaines de GPU H100 sur des supercalculateurs nationaux. RODIN a été entraîné sur 32 milliards de tokens, par une seule personne, sur une instance B200 spot louée et une seule RTX 3090 pour l'itération locale et le SFT.
La valeur de RODIN est pédagogique et démonstrative : il montre ce qu'une personne motivée peut construire de zéro, de bout en bout, avec un petit budget — documenté honnêtement, limites comprises.
RODIN-1B-Instruct utilise le format ChatML :
<|im_start|>user
{message}<|im_end|>
<|im_start|>assistant
{réponse}<|im_end|>
Token d'arrêt : <|im_end|>. Le chat template est embarqué dans tokenizer_config.json, donc apply_chat_template et les runtimes comme Ollama/LM Studio le gèrent automatiquement.
| Propriété | Valeur |
|---|---|
| Paramètres | 1,238 milliard |
| Architecture | Style LLaMA (RoPE, RMSNorm, SwiGLU, attention causale SDPA) |
| Dimension / Couches / Têtes | 2048 / 22 / 16 |
| Dimension FFN | 5461 |
| Vocabulaire | 64 000 (BPE SentencePiece maison, français) |
| Longueur de contexte | 2048 tokens |
| Format de chat | ChatML |
| Précision d'entraînement | bfloat16 |
Full fine-tune sur 5 000 exemples ChatML générés localement avec un modèle Qwen, couvrant des registres français variés (narratif, résumé, réécriture, factuel simple, etc.) plus un petit jeu de politesse. Les maths et le juridique ont été délibérément exclus — fine-tuner un petit modèle sur du contenu qu'il rate ne ferait que lui apprendre à halluciner avec autorité.
Les données de pré-entraînement sous-jacentes sont documentées sur la carte du modèle de base.
Évalué avec lm-evaluation-harness d'EleutherAI, french_bench, 3-shot, jeux de test complets, instruct évalué avec --apply_chat_template (OrangeSum exclu pour incompatibilité datasets).
| Tâche | Métrique | Base | Instruct |
|---|---|---|---|
| Vocabulaire | acc | 0,773 | 0,756 |
| Grammaire | acc | 0,765 | 0,756 |
| Compréhension écrite | acc | 0,606 | 0,549 |
| BoolQA | acc | 0,573 | 0,562 |
| NLI thématique | acc_norm | 0,498 | 0,378 |
| HellaSwag | acc_norm | 0,424 | 0,429 |
| ARC challenge | acc | 0,220 | 0,257 |
| ARC challenge | acc_norm | 0,265 | 0,309 |
| XNLI | acc | 0,333 | 0,323 |
| Trivia | f1 | 0,245 | 0,142 |
| Trivia | is_included | 0,190 | 0,213 |


L'effet du SFT — une observation clé. Sur Trivia, exact/f1 baissent alors que is_included monte (0,19 → 0,21). Ce n'est pas une régression : le modèle de base répondait sèchement (« Paris ») ; après SFT, il enrobe ses réponses dans des phrases complètes (« La capitale est Paris. »), donc la bonne réponse reste présente (is_included ↑) mais ce n'est plus une correspondance exacte. Le SFT a rendu le modèle conversationnel, exactement comme prévu. À noter aussi : ARC challenge s'améliore avec le SFT (0,27 → 0,31 acc_norm), tandis que la compétence linguistique de base (grammaire, vocabulaire) est préservée.
Usage prévu. Conversation française, résumé, réécriture, questions-réponses factuelles simples, éducation et expérimentation. Un démonstrateur, pas un système de production.
Limites.
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
model_id = "rodin-llm/rodin-1b-instruct"
tok = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype=torch.bfloat16).cuda()
messages = [{"role": "user", "content": "Explique-moi en deux phrases ce qu'est la photosynthèse."}]
inputs = tok.apply_chat_template(messages, add_generation_prompt=True, return_tensors="pt").cuda()
out = model.generate(inputs, max_new_tokens=200, temperature=0.7, top_p=0.9)
print(tok.decode(out[0], skip_special_tokens=True))
ollama run rodin-1b
RodinLM maison → LlamaForCausalLM HuggingFace → GGUF (F16, Q8_0, Q4_K_M).Publié sous licence Apache 2.0.
Mené par une seule personne, avec une assistance IA assumée et transparente tout du long. Merci à EleutherAI (évaluation), aux équipes HPLT et Pleias (données), à Wikimedia, et aux projets llama.cpp / Ollama / LM Studio.
@misc{rodin1binstruct2026,
title = {RODIN-1B-Instruct: A French Conversational Model Trained From Scratch},
author = {RODIN},
year = {2026},
howpublished = {\url{https://huggingface.co/rodin-llm/rodin-1b-instruct}}
}