Ornith-1.5: Van Self-Scaffolding naar Self-Improvement

Vandaag introduceren we Ornith-1.5, een belangrijke stap richting het bouwen van foundation models via end-to-end zelfverbetering. Ornith-1.5 breidt het self-scaffolding framework uit dat werd geïntroduceerd in Ornith-1.0 tot een completere lus van zelfverbetering: het model stelt nieuwe taken voor, genereert taakspecifieke scaffolds en produceert solution rollouts voor reinforcement learning. Hiermee creëert het model continu nieuwe leerervaringen waaruit het zichzelf kan verbeteren.

Modelvarianten en Prestaties

Ornith-1.5 is beschikbaar in drie modelgroottes: 397B MoE, 35B MoE en 9B dense. Het model is ontworpen voor sterke algemene intelligentie op het gebied van redeneren, agentische taken en coderen. Ornith-1.5 behaalt state-of-the-art prestaties onder open-source modellen van vergelijkbare grootte over een breed scala aan benchmarks.

Ornith-1.5-397B (Flagship)

Op de grootste schaal behaalt Ornith-1.5-397B een score van 86,1 op Terminal-Bench 2.1 en 56,0 op DeepSWE. Hiermee presteert het model op hetzelfde niveau als Claude Opus 4.8 (85,0 en 59,0) en overtreft het toonaangevende open-source modellen van vergelijkbare grootte, waaronder GLM-5.2 (82,7 en 46,2) en DeepSeek-V4-Flash-0731 (82,7 en 54,4).

Ornith-1.5-35B

De 35B MoE variant presteert significant beter dan zijn gelijke, Qwen 3.6-35B, op alle coding- en agentische benchmarks. Ondanks dat er slechts 3B parameters per token worden geactiveerd, overtreft dit model ook dense modellen zoals Gemma 4-31B en Meta’s Muse Glimmer-30B met grote marges op agentic coding:

  • Terminal-Bench 2.1: 68,5 (tegenover 43,4 voor Gemma 4-31B en 51,7 voor Muse Glimmer-30B).
  • SWE-Bench Verified: 79,0 (tegenover 52,0 voor Gemma 4-31B en 76,0 voor Muse Glimmer-30B).

Ornith-1.5-9B (Edge)

De compacte Ornith-1.5-9B levert eveneens opmerkelijk sterke resultaten met een score van 47,0 op Terminal-Bench 2.1 en 70,6 op SWE-Bench Verified. Met de gekwantiseerde Ornith-1.5-9B-Mobile versie kan het model eenvoudig worden ingezet op iPhone- en Android-apparaten, terwijl het grotere modellen zoals Gemma 4-31B en Qwen 3.6-35B substantieel overtreft.

---

Zelfverbetering via Zelfgegenereerde Taken, Harnesses en Oplossingen

Ornith-1.5 breidt Ornith-1.0 uit door de zelfverbeteringslus te verbreden. In plaats van alleen de optimalisatie van scaffolds en rollouts, optimaliseert het model nu gezamenlijk de generatie van taken, de constructie van scaffolds en de solution rollouts. In plaats van te vertrouwen op een vaste set door mensen gecureerde taken en handmatig ontworpen harnesses, genereert Ornith-1.5 continu nieuwe trainingstaken, ontdekt effectieve strategieën om deze op te lossen en verbetert de policy via reinforcement learning.

De drie fasen van de trainingscyclus

Elke trainingscyclus verloopt in drie fasen, waarbij gebruik wordt gemaakt van de omgeving of codebase, instructies over het taaktype en de eerdere geschiedenis van het model:

  1. Taakvoorstel: Het systeem stelt progressief moeilijkere taken voor die verder gaan dan wat het model al heeft opgelost. Dit legt tekortkomingen in de capaciteiten bloot en verschuift continu de grens van de training.
  2. Scaffold-generatie: Voor elke taak genereert of verfijnt het model een taakspecifieke scaffold. Dit omvat de instructies, tools, decompositiestrategie en de orchestratie die worden gebruikt om het probleem te benaderen.
  3. Solution Rollout: Op basis van de taak en de scaffold produceert de policy een solution rollout.

De beloning (reward) uit de rollout wordt teruggekoppeld naar alle drie de fasen. Hierdoor leert het systeem niet alleen betere oplossingen te produceren, maar ook nuttigere trainingstaken te genereren en effectievere scaffolds te bouwen. Dit creëert een gesloten lus waarbij sterkere policies leiden tot moeilijkere taken, wat weer leidt tot betere leer-signalen.

---

Technische Definitie van Beloningen (Rewards)

Taakbeloning (Task Reward)

Voor de opzet vraag → scaffold → rollout definiëren we de taakbeloning aan de hand van drie signalen: validiteit, frontier-moeilijkheid en nieuwheid.

Laat $q$ een gegenereerde vraag zijn, $s$ de bijbehorende scaffold, en $\{\taui\}{i=1}^{N}$ een set van solution rollouts. De taakbeloning $R_{\text{task}}$ wordt gedefinieerd als:

$$ R{\text{task}} = \underbrace{V(q,s)}{\text{Is het valide en verifieerbaar?}} \times \underbrace{D\!\left(q,s,\{\taui\}{i=1}^{N}\right)}{\text{Zit het op het juiste moeilijkheidsniveau?}} \times \underbrace{N(q)}{\text{Is het voldoende nieuw?}} $$

1. Validiteit en Verifieerbaarheid ($V$)

Een nuttige taak moet een goed gedefinieerde leeromgeving vormen. De vraag moet coherent en oplosbaar zijn, terwijl de scaffold correct moet worden uitgevoerd en kandidaat-oplossingen betrouwbaar moet kunnen evalueren.

We definiëren $V(q,s) \in [0,1]$. Validiteit fungeert als een harde poort: $$ V(q,s)=0 \quad\Rightarrow\quad R_{\text{task}}=0 $$ Dit voorkomt dat slecht gevormde taken of onbetrouwbare scaffolds beloond worden simpelweg omdat ze "moeilijk" lijken.

2. Frontier-moeilijkheid ($D$)

De meest nuttige taken zijn noch triviaal, noch onmogelijk. De moeilijkheid wordt geschat op basis van de rollouts van het model. We bepalen het empirische succespercentage $p$ over $N$ rollouts:

$$ p = \frac{1}{N} \sum{i=1}^{N} \mathbf{1}\!\left[s(q,\taui)=\text{succes}\right] $$

Taken waarvan het succespercentage dicht bij een doelniveau $p^*$ (gezet op 0,2) ligt, worden beloond:

$$ D(q,s,\{\tau_i\}) = \exp\!\left(-\frac{(p-p^*)^2}{2\sigma^2}\right) $$

3. Nieuwheid en Diversiteit ($N$)

Om te voorkomen dat het model telkens kleine variaties van dezelfde taken genereert, voegen we een nieuwheidsterm toe:

$$ N(q) = 1 - \max{qj \in \mathcal{B}} \operatorname{sim}(q,q_j) $$

waarbij $\mathcal{B}$ een buffer is van eerder gegenereerde of getrainde taken.

Harness- en Rollout-beloningen

De harness $h$ (de evaluatieomgeving) wordt beloond als deze is afgestemd op de taak, getrouw is aan de kwaliteit van de oplossing en resistent is tegen reward hacking:

$$ R{\text{harness}} = \underbrace{C(q,h)}{\text{Taak-afstemming}} \times \underbrace{F\!\left(h,\{\taui\}\right)}{\text{Beloningsgetrouwheid}} \times \underbrace{H(h)}_{\text{Hack-resistentie}} $$

Elke rollout $\tau_i$ wordt direct gescoord door de gegenereerde harness:

$$ R{\text{rollout}}(\taui) = \underbrace{h(q,\taui)}{\text{Taaksucces}} $$

Vraaggeneratie, harness-generatie en solution rollouts worden allemaal geoptimaliseerd met GRPO (Group Relative Policy Optimization), waardoor de drie fasen gezamenlijk kunnen verbeteren binnen dezelfde lus.

---

Benchmark Resultaten

Ornith-1.5-397B

BenchmarkOrnith-1.5 (397B)DeepSeek-V4-Flash (284B)GLM-5.2 (753B)Claude Opus 4.8Kimi K3 (2.8T)Ornith-1.0 (397B)
Coding
Terminal Bench 2.1 (Terminus-2)86.182.7818588.377.5
Terminal Bench 2.1 (Claude Code)85.281.882.778.978.2
SWE-bench Verified8681.68385.886.282.4
SWE-bench Pro65.164.462.16862.2
SWE-bench Multilingual79.677.978.475.778.9
DeepSWE5654.446.25967.58
Frontier-Bench v0.113.56.15.121.1232.7
NL2Repo59.554.248.969.748.2
SWE Atlas – QnA55.651.65059.759.741.2
Reasoning
HLE (zonder tools)44.63540.549.843.530.2
HLE (met tools)56.150.854.757.95647.5
GPQA Diamond92.891.491.293.693.588.1
Agentic
MCP-Atlas8074.677.882.282.376.4
Toolathlon-Verified71.270.348.276.273.243.2
WideSearch80.877.37972.975.2
BrowseComp86.684.885.684.391.279.7
ClawEval81.477.678.880.277.1

Ornith-1.5-35B

BenchmarkOrnith-1.5-35B-A3BOrnith-1.0-35B-A3BQwen 3.6-35B-A3BGemma-4-31BMuse-Glimmer-30BQwen 3.5-397B
Coding
Terminal Bench 2.1 (Terminus-2)67.864.252.542.151.753.5
Terminal Bench 2.1 (Claude Code)68.562.849.248.6
SWE-bench Verified7975.673.4527676.4
SWE-bench Pro59.650.449.535.751.251.6
SWE-bench Multilingual71.469.367.251.769.3
DeepSWE22001
Frontier-Bench v0.15.11.41.41.4
NL2Repo46.234.629.415.536.8
SWE Atlas – QnA39.837.115.520.4
Reasoning
HLE (zonder tools)25.620.821.419.52228.7
HLE (met tools)33.430.128.926.548.3
GPQA Diamond89.286.28684.383.588.4
Agentic
MCP-Atlas70.264.462.85575.572.3
Toolathlon-Verified48.742.441.740.838.3
WideSearch67.863.460.154.274
BrowseComp67.663.56278.6
ClawEval72.569.868.748.570.7

Ornith-1.5-9B

BenchmarkOrnith-1.5-9BOrnith-1.0-9BQwen 3.5-9BQwen 3.6-35B-A3BGemma-4-31B
Coding
Terminal Bench 2.1 (Terminus-2)46.243.121.352.542.1
Terminal Bench 2.1 (Claude Code)4740.618.949.2
SWE-bench Verified70.669.453.273.452
SWE-bench Pro47.542.931.349.535.7
SWE-bench Multilingual54.45239.767.251.7
NL2Repo32.427.216.229.415.5
SWE Atlas – QnA20.617.99.215.5
Reasoning
HLE (zonder tools)20.216.814.721.419.5
HLE (met tools)30.526.424.528.926.5
GPQA Diamond86.482.581.78684.3
Agentic
MCP-Atlas54.249.446.862.855
Toolathlon-Verified41.233.429.641.752.8
WideSearch59.555.853.660.154.2
BrowseComp56.444.841.562
ClawEval66.563.153.268.748.5

---

Voetnoten en Evaluatiedetails

  • Gemiddelden: Alle gerapporteerde resultaten voor Ornith-1.5 zijn gemiddelden over vijf onafhankelijke runs.
  • Terminal-Bench 2.1 (Terminus-2): Geëvalueerd met het Harbor/Terminus-2 framework (parser=json, temp=1.0, top\_p=1.0, 128K context window). 4 uur timeout, 32 CPU-cores, 48GB RAM. Qwen chat template is aangepast voor consistentie.
  • Terminal-Bench 2.1 (Claude Code): Geëvalueerd met Claude Code 2.1.126 (parser=json, temp=1.0, top\p=1.0, max\new\_tokens=131072).
  • SWE-Bench (Verified, Pro, Multilingual): Gebruik van OpenHands harness (temp=1.0, top\_p=0.95, 256k context window). Anti-hacking maatregelen: Git-historie verwijderd en netwerktoegang uitgeschakeld.
  • DeepSWE: Geëvalueerd met de Claude Code harness (temp=1.0, top\_p=0.95, 256K context window).
  • SWE Atlas (QnA, RF, TW): Gebruik van mini SWE agent harness (temp=1.0, top\_p=0.95, 128K context window).
  • NL2Repo: Temp=1.0, top\_p=1.0, 400K context, 48K output. Toegang tot specifieke GitHub repositories en pip-pakketten geblokkeerd.
  • HLE: Geëvalueerd met Claude 4.6 Opus als judge model.
  • MCP-Atlas: Modellen geëvalueerd in 'thinking mode' op de publieke subset van 500 taken, timeout van 10 minuten per taak. Claude 4.8 Opus gebruikt als judge model.
  • Tool-Decathlon: Gebruik van officiële evaluatiedienst, max token limit 128K.
  • ClawEval: Agentische code benchmark op basis van real-user task distributies; temp=0.6 en 256K context.