License
We release the model under Apache 2.0 license to indicate that we do not impose any additional constraints on the model weights.
However, we do not own the data in the training collection.
Usage
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("norallm/normistral-11b-thinking")
model = AutoModelForCausalLM.from_pretrained(
"norallm/normistral-11b-thinking",
device_map='auto',
torch_dtype=torch.bfloat16
)
messages = [
{"role": "user", "content": "Hva er hovedstaden i Norge?"},
{"role": "assistant", "content": "Hovedstaden i Norge er Oslo. Denne byen ligger i den sørøstlige delen av landet, ved Oslofjorden. Oslo er en av de raskest voksende byene i Europa, og den er kjent for sin rike historie, kultur og moderne arkitektur. Noen populære turistattraksjoner i Oslo inkluderer Vigelandsparken, som viser mer enn 200 skulpturer laget av den berømte norske skulptøren Gustav Vigeland, og det kongelige slott, som er den offisielle residensen til Norges kongefamilie. Oslo er også hjemsted for mange museer, gallerier og teatre, samt mange restauranter og barer som tilbyr et bredt utvalg av kulinariske og kulturelle opplevelser."},
{"role": "user", "content": "Gi meg en liste over de beste stedene å besøke i hovedstaden"}
]
input_tokens = tokenizer.apply_chat_template(messages, return_tensors="pt").to(model.device)
output_tokens = model.generate(
input_tokens,
max_new_tokens=2048,
top_k=64,
top_p=0.9,
temperature=0.3,
repetition_penalty=1.0,
do_sample=True,
use_cache=True
)
output_str = tokenizer.decode(output_tokens[0, input_tokens.size(1):]).strip()
reasoning_trace = output_str.split("</think>")[0].lstrip("<think>").strip()
response = output_str.split("</think>")[-1].rstrip("</s>").strip()
2. Faster inference with vLLM
from vllm import LLM, SamplingParams
llm = LLM(
model="norallm/normistral-11b-thinking",
dtype="bfloat16"
)
messages = [
{"role": "user", "content": "Hva er hovedstaden i Norge?"},
{"role": "assistant", "content": "Hovedstaden i Norge er Oslo. Denne byen ligger i den sørøstlige delen av landet, ved Oslofjorden. Oslo er en av de raskest voksende byene i Europa, og den er kjent for sin rike historie, kultur og moderne arkitektur. Noen populære turistattraksjoner i Oslo inkluderer Vigelandsparken, som viser mer enn 200 skulpturer laget av den berømte norske skulptøren Gustav Vigeland, og det kongelige slott, som er den offisielle residensen til Norges kongefamilie. Oslo er også hjemsted for mange museer, gallerier og teatre, samt mange restauranter og barer som tilbyr et bredt utvalg av kulinariske og kulturelle opplevelser."},
{"role": "user", "content": "Gi meg en liste over de beste stedene å besøke i hovedstaden"}
]
sampling_params = SamplingParams(
max_tokens=2048,
top_k=64,
top_p=0.9,
temperature=0.3,
repetition_penalty=1.0,
)
outputs = llm.chat(messages, sampling_params=sampling_params)
output_str = outputs[0].outputs[0].text.strip()
reasoning_trace = output_str.split("</think>")[0].lstrip("<think>").strip()
response = output_str.split("</think>")[-1].rstrip("</s>").strip()
3. GGUF models for ollama / llama.cpp
It's often convenient to run models locally with ollama. The simplest option is to use the model directly uploaded to https://ollama.com/LTG/normistral-11b-thinking:latest.
That's a GGUF checkpoint with F16 weights, same as the one running at our inference endpoint.
More options are available at norallm/normistral-11b-thinking-gguf. Specifically checkpoints converted to these floating-point formats:
- 16-bit BF16 (22.9GB): normistral-11B-thinking-BF16.gguf
- 16-bit F16 (22.9GB): normistral-11B-thinking-F16.gguf
- 8-bit Q8_0 (12.1GB): normistral-11B-thinking-Q8_0.gguf
- 6-bit Q6_K (9.4GB): normistral-11B-thinking-Q6_K.gguf
- 5-bit Q5_K_M (8.1GB): normistral-11B-thinking-Q5_K_M.gguf
- 5-bit Q5_0 (7.9GB): normistral-11B-thinking-Q5_0.gguf
We also provide a working .modelfile, which contains the official chat template converted to Go (as used by llama.cpp and ollama).
4. API
It's possible to use our free inference service at https://chat.llm.sigma2.no/ and get responses from NorMistral via API.
You will need to register at that site and generate an API key by navigating to Settings -> Account -> API keys -> API Key.
import requests
BASE_URL = "https://chat.llm.sigma2.no:443"
API_KEY = "your-api-key-here"
MODEL = "NorMistral-11b-thinking:latest"
response = requests.post(
f"{BASE_URL}/api/chat/completions",
headers={
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json",
},
json={
"model": MODEL,
"messages": [
{"role": "user", "content": "Hva er hovedstaden i Norge?"}
],
},
)
response.raise_for_status()
result = response.json()
output_str = result["choices"][0]["message"]["content"].strip()
reasoning_trace = output_str.split("</think>")[0].lstrip("<think>").strip()
response = output_str.split("</think>")[-1].rstrip("</s>").strip()
Training and data
Generally speaking, the training follows our fluency-preserving post-training setup from Fluent Alignment with Disfluent Judges: Post-training for Lower-resource Languages.
The training data is published alongside the model at norallm/normistral-11b-thinking-training. Training code will be available at github.com/ltgoslo/normistral-post-training.
1. Supervised finetuning (SFT)
We start by "injecting" the instruction-following and reasoning capabilities by SFT training on English responses and reasoning traces from Kimi-K2-Thinking. The full SFT collection is published in train_sft.jsonl.
2. Reinforcement learning (d-RLAIF)
The short SFT stage is followed by on-policy training on a large collection of Norwegian (Bokmål and Nynorsk) prompts (also available at norallm/normistral-11b-thinking-training). The specific setup of d-RLAIF (direct reinforcement learning from AI feedback) and its motivation is extensively described in our paper. The "AI" reward model used here is Mistral-Large-Instruct-2411.
Evaluation
We compared NorMistral against state-of-the-art instruction-tuned models of similar size. What follows is a preliminary evaluation on a generative version of NorEval (that is still work-in-progress). The responses from all evaluated models below are fully available for closer inspection at norallm/normistral-11b-thinking-evaluation.
Classification tasks
All classification scores are reported as accuracy. NoReC sentiment analysis is done on sentence level. The generative scores (NorRewrite and Norsummarize) are reported as the average win-rates against Llama-3.1-8B evaluated using LLM-as-a-judge setup with Llama-3.3-70B (see NorEval for more information). * denotes "thinking" models.
Table with columns: Model, NoReC_binary, NoReC_ternary, NorIdiom_NB, NorIdiom_NN, NorCSQA_NB, NorCSQA_NN| Model | NoReC_binary | NoReC_ternary | NorIdiom_NB | NorIdiom_NN | NorCSQA_NB | NorCSQA_NN |
|---|
| NorMistral-11B* | 86.3 | 65.2 | 55.7 | 27.7 | 70.7 | 64.2 |
| Llama-3.1-8B | 79.8 | 52.9 | 12.7 | 6.7 | 64.0 |
Table with columns: Model, NorOBQA_NB, NorOBQA_NN, NRK_NB, NRK_NN, NorRewrite, NorSummarize| Model | NorOBQA_NB | NorOBQA_NN | NRK_NB | NRK_NN | NorRewrite | NorSummarize |
|---|
| NorMistral-11B* | 83.0 | 84.4 | 58.8 | 62.3 | 51.9 | 54.3 |
| Llama-3.1-8B | 78.5 | 71.1 | 49.8 | 46.2 | 50.0 |
Citation
@misc{samuel2025fluentalignmentdisfluentjudges,
title={Fluent Alignment with Disfluent Judges: Post-training for Lower-resource Languages},
author={David Samuel and Lilja Øvrelid and Erik Velldal and Andrey Kutuzov},
year={2025},
eprint={2512.08777},
archivePrefix={arXiv},
primaryClass={cs.CL},
url={https://arxiv.org/abs/2512.08777},
}
@inproceedings{samuel-etal-2025-small,
title = "Small Languages, Big Models: {A} Study of Continual Training on Languages of {Norway}",
author = "Samuel, David and
Mikhailov, Vladislav and
Velldal, Erik and
{\O}vrelid, Lilja and
Charpentier, Lucas Georges Gabriel and
Kutuzov, Andrey and
Oepen, Stephan",
editor = "Johansson, Richard and
Stymne, Sara",
booktitle = "Proceedings of the Joint 25th Nordic Conference on Computational Linguistics and 11th Baltic Conference on Human Language Technologies (NoDaLiDa/Baltic-HLT 2025)",
month = mar,
year = "2025",
address = "Tallinn, Estonia",
publisher = "University of Tartu Library",
url = "https://aclanthology.org/2025.nodalida-1.61/",
pages = "573--608",
ISBN = "978-9908-53-109-0",
}
Please write a community message or contact David Samuel (davisamu@ifi.uio.no) if you have any questions about this model.