OpenEuroLLM / OpenEuroLLM/Taskboard

Synthetic Data Generation for Multilingual Instruction Following

Open
#345 5 comments 0 reactions 1 assignee View on GitHub

@abhash-er is already working on this.

Since Jul 13, 2026.

Dominant language
No language data
Stars
3
Forks
0
PR merge metrics
No merged PRs in 30d

Description

Goal
The goal is to generate high-quality multilingual instruction-following (IF) data from a multilingual-capable frontier model. This dataset boosts multilingual performance after instruction finetuning, complementing the English-heavy Dolci-Instruct SFT distribution used to train OLMo-3-7B.

Description
This is a complementary issue to the #186.
The Plan:

  • We use Gemma 4 (gemma-4-31B-it, bf16) served locally with vLLM on Leonardo (TP=2, A100) to generate the data : cheaper than the OpenRouter API at production scale and gives full bf16 quality.
  • Two-stage generation per example: first synthesize a diverse instruction prompt, then generate its response. Prompts are sampled across a meta-prompt axis space (topics × personas × constraints, see synthgen/prompts.py).
  • Generation runs in three phases:
    1. Pilot — generate a small batch and eyeball it.
    2. Back-translation QC — translate a generated non-English example back to English and inspect for fidelity, fluency, and instruction integrity.
    3. Scale to production — once quality is acceptable, run the full per-language target.
  • Long-running jobs use checkpoint/resume by id (generate_vllm.py), chaining 2–5 jobs since a single 24h job can't finish the whole run.
  • Post-generation: leakage/contamination filter, then dedupe by (lang, normalized-prompt), then verify pass (language-id + constraint-compliance checks).

Deliverable scope
For now, High-quality synthetic IF samples for 11 European languages: es, fr, de, it, pt, pl, nl, cs, ro, el, uk. The first iteration is available at openeurollm/EU-Instruct-Synthetic

Production target was 200k/language (n_per_lang_phase3 = 200_000, → 2.2M, to match Dolci-Instruct scale). Actual shipped corpus after leakage filter + dedupe:

  • 1,497,276 unique SFT pairs.
  • Per-language n ranges ~119k (fr) → ~150k (cs); response median 720–925 chars.
  • Verify yield: language-id 94–98%, constraint-compliance 93–97%.

Dependencies

  • Local vLLM serving stack on Leonardo (gemma-4-31B-it weights), exposed to synthgen generate via an --endpoints-dir of *.endpoint files.
  • OPENROUTER_API_KEY — only for the optional back-translation spot-check (paid).
  • Downstream: mixing into open-instruct for OLMo 3 7B SFT #186

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.