Instructions to use olaverse/MIST-QG-1.1 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use olaverse/MIST-QG-1.1 with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="olaverse/MIST-QG-1.1") messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"}, {"type": "text", "text": "What animal is on the candy?"} ] }, ] pipe(text=messages)# pip install -U transformers accelerate # Load model directly from transformers import AutoProcessor, AutoModelForMultimodalLM processor = AutoProcessor.from_pretrained("olaverse/MIST-QG-1.1") model = AutoModelForMultimodalLM.from_pretrained("olaverse/MIST-QG-1.1", device_map="auto") messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"}, {"type": "text", "text": "What animal is on the candy?"} ] }, ] inputs = processor.apply_chat_template( messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt", ).to(model.device) outputs = model.generate(**inputs, max_new_tokens=256) print(processor.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use olaverse/MIST-QG-1.1 with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "olaverse/MIST-QG-1.1" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "olaverse/MIST-QG-1.1", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/olaverse/MIST-QG-1.1
- SGLang
How to use olaverse/MIST-QG-1.1 with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "olaverse/MIST-QG-1.1" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "olaverse/MIST-QG-1.1", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "olaverse/MIST-QG-1.1" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "olaverse/MIST-QG-1.1", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }' - Docker Model Runner
How to use olaverse/MIST-QG-1.1 with Docker Model Runner:
docker model run hf.co/olaverse/MIST-QG-1.1
MIST-QG-1.1
Try it in the Olaverse API: model
mist-qg-1.1onPOST /v1/questions/generate, no GPU needed. Developer console · API docs
MIST-QG-1.1 reads a passage and writes the questions that the passage answers. You choose the language of the questions, and you can choose how many you want. It is a 4B model, a full fine-tune of MIST-QG-1.0 (itself built on Qwen3.5-4B-Base), made to create retrieval training data. It is multilingual: it was trained on 324 languages, from major ones like English, Spanish, Chinese, Hindi and Arabic down to languages with only a few hundred training passages.
It is part of the Olaverse MIST family, alongside MIST-Embed and MIST-Rerank. Its job is to turn raw passages, in any of those languages, into query–passage pairs that an embedder or reranker can learn from. All MIST-QG releases, including the GGUF versions, are in the MIST-QG 1.1 collection.
New in 1.1:
- Choose the number of questions. Ask for "3 questions in Spanish" and get up to three.
- More cross-lingual directions.
- Passage in any language → questions in English or French, as in 1.0.
- Passage in English or French → questions in any of 30 widely spoken languages.
- Passage in one of those 30 languages → questions in another of them.
Each chart below shows the share of a model's questions that are usable, so higher is better. A question is usable when the passage answers it, it finds its own passage in search, it isn't copied from the passage, and it's in the language that was asked for. The Evaluation section has the details.
What it is good at
- Bigger-model quality at 4B. Averaged over 238 languages, 46% of its questions pass every check. That's on a par with Qwen3.5-27B (47%) and more than Llama 3.3 70B (43%), Qwen3.5-9B (42%) and gpt-oss-20b (39%). Only Gemma 4 31B, nearly eight times its size, scores higher (51%).
- Strong in languages with little data. In the rarest languages, 28% of its questions are usable. Qwen, gpt-oss and Llama models up to 70B score 15–25%. Gemma 4 31B leads here (32%), and on low-resource languages.
- Best at cross-lingual questions. For English or French questions on a passage in another language, 77% of its questions are usable, more than any other model tested (Qwen3.5-27B 71%, Llama 3.3 70B 70%, Gemma 4 31B 67%). It also writes more of them than 1.0: about 1.75 per passage instead of one.
- You choose how many questions. Asked for N questions on a cross-lingual prompt, it wrote exactly N every time in the test, for every N from 1 to 5. In the same language it treats N as a maximum and stops when the passage runs out of distinct questions, rather than padding with weak ones.
- Questions that find their passage. Its questions retrieve their own passage more often than any other model's (round-trip R@1 0.70), so they make strong query–passage training pairs.
- Small and fast. At 4B it runs comfortably on a single GPU with vLLM, so generating questions for millions of passages is practical. GGUF versions for llama.cpp are at olaverse/MIST-QG-1.1-GGUF.
How to use it
The prompt is plain text, with no chat template. Write the language names out in full, in English, such as "Spanish", "Japanese", "Yoruba" or "English".
Let the model decide how many questions:
Passage (<passage language>):
<passage, up to ~2,000 characters>
Questions in <question language> that this passage answers, in your own words:
Ask for a number of questions (write "1 question", "2 questions", and so on):
Passage (<passage language>):
<passage, up to ~2,000 characters>
3 questions in <question language> that this passage answers, in your own words:
The model answers with one question per line, each starting with - , and then stops.
vLLM (recommended)
from vllm import LLM, SamplingParams
def prompt(passage, lang, qlang, n=None):
ask = f"{n} {'question' if n == 1 else 'questions'}" if n else "Questions"
return (f"Passage ({lang}):\n{passage}\n\n"
f"{ask} in {qlang} that this passage answers, in your own words:\n")
llm = LLM(model="olaverse/MIST-QG-1.1", max_model_len=4096)
params = SamplingParams(max_tokens=320, temperature=0.3, top_p=0.9, stop=["\n\n"])
passage = "The Nile is the longest river in Africa. It flows north for about 6,650 km through eleven countries..."
prompts = [prompt(passage, "English", "English"), # the model decides how many
prompt(passage, "English", "Swahili", n=3), # three questions in Swahili
prompt(passage, "English", "Japanese", n=1)] # one question in Japanese
for out in llm.generate(prompts, params):
questions = [l[2:].strip() for l in out.outputs[0].text.split("\n") if l.startswith("- ")]
print(questions)
Transformers
import torch
from transformers import AutoModelForImageTextToText, AutoTokenizer
tok = AutoTokenizer.from_pretrained("olaverse/MIST-QG-1.1")
model = AutoModelForImageTextToText.from_pretrained("olaverse/MIST-QG-1.1", dtype=torch.bfloat16).cuda()
prompt = ("Passage (Hausa):\n" + passage + "\n\n"
"2 questions in English that this passage answers, in your own words:\n")
ids = tok(prompt, return_tensors="pt").input_ids.cuda()
out = model.generate(ids, max_new_tokens=256, do_sample=True, temperature=0.3, top_p=0.9)
print(tok.decode(out[0, ids.shape[1]:], skip_special_tokens=True))
Qwen3.5 is a vision-language architecture, so the model loads with AutoModelForImageTextToText. MIST-QG uses
only its text side.
llama.cpp
llama-completion -hf olaverse/MIST-QG-1.1-GGUF:Q4_K_M -n 256 --temp 0.3 --no-display-prompt \
-p $'Passage (Yoruba):\n<passage>\n\n2 questions in English that this passage answers, in your own words:\n'
Tips
- Question languages.
- On a passage in any of the 324 languages: the passage's own language, English or French.
- On an English or French passage: also Spanish, Portuguese, German, Italian, Dutch, Russian, Polish, Ukrainian, Turkish, Arabic, Persian, Hindi, Bengali, Urdu, Indonesian, Vietnamese, Thai, Chinese, Japanese, Korean, Tamil, Telugu, Swahili, Amharic, Hausa, Yoruba, Igbo, Zulu, Somali and Afrikaans.
- On a passage in one of those 30 languages: any other of the 30.
- How many to ask for.
- Cross-lingual: 1 to 5 questions are returned exactly as asked.
- Same language: 1 or 2 are reliable. Above that the model returns fewer when the passage doesn't support more distinct questions.
- Without a number, it usually writes about two questions.
- Many questions per passage. At 4–5 questions, some can be close paraphrases. If you need many distinct questions, dedupe them by embedding similarity.
- Passage length: up to about 2,000 characters per prompt. Split longer documents into passages first.
Evaluation
All systems saw the same held-out passages, which were never used in training:
- Same language: 2,249 test passages in 238 languages, capped at 12 passages per language.
- Cross-lingual: 340 passages in 153 languages, with questions requested mostly in English (89%) or French.
Each question is checked four ways, and it counts as usable only if it passes all four:
- Answerable. Qwen3.6-35B-A3B grades from 0 to 3 whether the passage answers the question; it must score at least 2.
- Finds its passage. Qwen3-Embedding-8B, given only the question, must rank the question's own passage first among all test passages in that language. For the cross-lingual tests, the pool is all passages in that test.
- Not copied. Fewer than 60% of the question's word 3-grams may also appear in the passage.
- Right language. GlotLID must identify the language that was asked for.
The other models were given a plain instruction asking for up to six questions in the target language, written in their own words. The "reference questions" are the dataset's own questions for the same passages. Every score is averaged per language, so each language counts once, as in MTEB. Language groups follow how much MIST-QG training data a language had: major (5,000+ passages, 90 test languages), mid-resource (1,000–5,000, 33), low-resource (200–1,000, 32) and rare (under 200, 83).
| Usable share | All languages | Major | Mid-resource | Low-resource | Rare | Cross-lingual |
|---|---|---|---|---|---|---|
| MIST-QG-1.1 (4B) | 0.457 | 0.694 | 0.367 | 0.343 | 0.280 | 0.771 |
| MIST-QG-1.0 (4B) | 0.471 | 0.697 | 0.365 | 0.376 | 0.305 | 0.815 |
| Qwen3.5-4B | 0.384 | 0.670 | 0.294 | 0.247 | 0.163 | 0.596 |
| Qwen3-8B | 0.351 | 0.636 | 0.191 | 0.248 | 0.147 | 0.581 |
| Qwen3.5-9B | 0.422 | 0.687 | 0.331 | 0.302 | 0.215 | 0.649 |
| gpt-oss-20b | 0.394 | 0.654 | 0.320 | 0.316 | 0.169 | 0.642 |
| Qwen3.5-27B | 0.467 | 0.742 | 0.389 | 0.362 | 0.241 | 0.711 |
| Gemma 4 31B | 0.507 | 0.729 | 0.371 | 0.453 | 0.323 | 0.675 |
| Llama 3.3 70B | 0.429 | 0.669 | 0.317 | 0.344 | 0.246 | 0.700 |
| Reference questions | 0.526 | 0.711 | 0.400 | 0.415 | 0.419 | 0.898 |
MIST-QG-1.0 writes about one cross-lingual question per passage and 1.1 about 1.75, so a slightly smaller share of 1.1's cross-lingual questions are usable, but it gives more usable questions per passage.
| Same language, all languages | Answerable | Finds its passage | Copied | Right language | Questions per passage |
|---|---|---|---|---|---|
| MIST-QG-1.1 (4B) | 0.862 | 0.701 | 10.3% | 85.7% | 1.8 |
| Qwen3.5-4B | 0.788 | 0.681 | 16.7% | 79.5% | 5.9 |
| Qwen3-8B | 0.765 | 0.674 | 19.3% | 76.0% | 5.7 |
| Qwen3.5-9B | 0.801 | 0.677 | 9.3% | 80.0% | 6.0 |
| gpt-oss-20b | 0.742 | 0.678 | 5.7% | 75.1% | 5.9 |
| Qwen3.5-27B | 0.864 | 0.679 | 11.0% | 86.9% | 6.0 |
| Gemma 4 31B | 0.846 | 0.664 | 1.8% | 87.8% | 5.8 |
| Llama 3.3 70B | 0.803 | 0.684 | 12.0% | 86.1% | 6.0 |
Every figure is a share of questions, so it measures quality, not quantity: the other models write about six questions per passage, MIST-QG about two.
New cross-lingual directions
These tests were run on MIST-QG-1.1 only. Scores are averaged per question language.
| Direction | Test passages | Question languages | Usable | Answerable | Finds its passage | Right language |
|---|---|---|---|---|---|---|
| English or French passage → one of 30 languages | 300 | 30 | 0.589 | 0.668 | 0.883 | 99.3% |
| One of 30 languages → another of them | 295 | 30 | 0.466 | 0.553 | 0.761 | 95.2% |
Asking for a number of questions
Each test passage was given a count prompt with N from 1 to 5.
| N asked | Same language: exactly N | Same language: average returned | Cross-lingual: exactly N |
|---|---|---|---|
| 1 | 100% | 1.0 | 100% |
| 2 | 82% | 1.8 | 100% |
| 3 | 50% | 2.0 | 100% |
| 4 | 51% | 2.5 | 100% |
| 5 | 40% | 2.6 | 100% |
Asking for a count doesn't lower quality. With a count prompt, 46% of same-language questions are usable, the same as without one, and the share holds at about 50% for every N. In cross-lingual tests it is 70% with a count prompt, from 79% at N = 1 to 63% at N = 5.
Training
MIST-QG-1.1 starts from MIST-QG-1.0 and adds a third stage.
Stage 1, same language.
- Data: 991k passages in 324 languages, each paired with up to six questions in its own language. Sources: WebFAQ, MQA, MIRACL, TyDi QA, parts of the KaLM fine-tuning collection, and LLM-written questions on FineWeb-2, WURA and AfriCLIRMatrix passages.
- Filtering: only real questions were kept. Questions that lift a sentence from the passage were removed (tone marks are ignored when matching), and duplicates were dropped.
- Run: one epoch of 7,746 steps at 128 passages per step. Learning rate 2e-5, cosine decay to 10%, 200 warm-up steps.
Stage 2, cross-lingual.
- Data: 36.5k passages in about 300 languages, each with a question in English or French, mixed with 60k same-language passages from stage 1.
- Run: 755 steps, learning rate 1e-5, 30 warm-up steps.
Stage 3, counts and new directions (new in 1.1).
- Data: 200.7k passages:
- 100k same-language passages from stage 1, 70k of them with several questions;
- the stage 2 cross-lingual set;
- 64k passages whose questions were translated by Qwen3.5-27B into English or French, from English or French into the 30 languages above, or between those 30.
- Translation checks: a translation was kept only if it had the same number of questions, each still a question, and GlotLID confirmed the language. 98% passed.
- Count prompts: 60% of examples use one. N is drawn from 1 to the number of reference questions, and the target is that many of them, in their original order.
- Run: 1,569 steps, learning rate 1e-5, 30 warm-up steps.
All stages:
- Loss: computed on the question tokens only.
- Precision and optimiser: bf16, gradient checkpointing, 8-bit AdamW (β = 0.9, 0.95).
- Sequence length: up to 1,024 tokens.
- Hardware: one A100 80 GB.
The test passages of every evaluation were held out from all training.
License
The model is released under Apache-2.0, the licence of its base model, Qwen3.5-4B-Base. The training data combines sources under their own licences: Apache-2.0, CC-BY-4.0, CC-BY-SA (Wikipedia text) and ODC-BY (FineWeb-2). Translated questions were written by Qwen3.5-27B (Apache-2.0).
Citation
@misc{mist-qg-1.1,
title = {MIST-QG-1.1: multilingual question generation with question counts and cross-lingual directions},
author = {Olaverse},
year = {2026},
url = {https://huggingface.co/olaverse/MIST-QG-1.1}
}
- Downloads last month
- -


