プログラミング
Ornith-1.0: エージェントコーディングのための自己改善型オープンソースモデル
Ornith-1.0: self-improving open-source models for agentic coding (github.com)
要約
Ornith-1.0は、エージェントコーディングのための自己改善型オープンソースモデルです。Gemma 4やQwen 3.5をベースに、9Bから397Bまでの多様なモデルサイズで提供され、Terminal-Bench 2.1やSWE-Benchなどの主要なコーディングベンチマークで最先端のパフォーマンスを発揮します。強化学習を利用した自己改善型トレーニングフレームワークを採用し、より質の高いソリューション生成と検索経路の最適化を実現しています。
全文翻訳
Ornith-1.0 アロハ!🌺 Ornith-1.0は、エージェントコーディングのための自己改善型オープンソースモデルです。
主な特徴:
最先端のコーディングエージェント: 9B-Dense、31B-Dense、35B-MoE、397B-MoE(Gemma 4およびQwen 3.5の追加学習済み)が利用可能で、Terminal-Bench 2.1、SWE-Bench、NL2Repo、OpenClawなどのコーディングベンチマークにおいて、同サイズのオープンソースモデルの中で最先端のパフォーマンスを達成しています。
自己改善型トレーニングフレームワーク: Ornith-1.0は、強化学習(RL)を用いて、ソリューションのロールアウトだけでなく、それらのロールアウトを駆動する足場(scaffold)の生成も学習します。足場と結果として得られるソリューションを共同で最適化することにより、モデルはより良い探索経路を発見し、より高品質なソリューションを生成します。
ライセンス: MITライセンスで、グローバルにアクセス可能で、地域的な制限はありません。
ベンチマーク
各モデルは、そのサイズに適したベースラインと比較して評価されます。3つのモデルすべてで同じハーネスとデコード設定を使用しています(表の下の注を参照)。
Ornith-1.0-9B
Ornith-1.0-9B Qwen3.5-9B Qwen3.5-35B Gemma4-12B Gemma4-31B
エージェントコーディング
Terminal-Bench 2.1 (Terminus-2) 43.1 21.3 41.4 21 42.1
Terminal-Bench 2.1 (Claude Code) 40.6 18.9 38.9 - -
SWE-bench Verified 69.4 53.2 70 44.2 52
SWE-bench Pro 42.9 31.3 44.6 27.6 35.7
SWE-bench Multilingual 52 39.7 60.3 32.5 51.7
NL2Repo 27.2 16.2 20.5 10.3 15.5
Claw-eval Avg 63.1 53.2 65.4 32.5 48.5
SWE Atlas - QnA 17.9 9.2 13.2 - -
SWE Atlas - RF 16.6 4.3 10.2 - -
SWE Atlas - TW 15.3 4.4 9.8 - -
Ornith-1.0-35B
Ornith-1.0-35B Qwen3.5-35B Qwen3.6-35B Gemma4-31B Qwen3.5-397B
エージェントコーディング
Terminal-Bench 2.1 (Terminus-2) 64.2 41.4 52.5 42.1 53.5
Terminal-Bench 2.1 (Claude Code) 62.8 38.9 49.2 - 48.6
SWE-bench Verified 75.6 70 73.4 52 76.4
SWE-bench Pro 50.4 44.6 49.5 35.7 51.6
SWE-bench Multilingual 69.3 60.3 67.2 51.7 69.3
NL2Repo 34.6 20.5 29.4 15.5 36.8
Claw-eval Avg 69.8 65.4 68.7 48.5 70.7
SWE Atlas - QnA 37.1 13.2 15.5 - 20.4
SWE Atlas - RF 29.7 10.2 11.4 - 18.4
SWE Atlas - TW 27.8 9.8 13.3 - 18.5
Ornith-1.0-397B
Ornith-1.0-397B Qwen3.5-397B Qwen3.7-Max GLM-5.2-744B Minimax-M3-428B DeepSeek-V4-Pro-1.6T Claude Opus 4.7 Claude Opus 4.8
エージェントコーディング
Terminal-Bench 2.1 (Terminus-2) 77.5 53.5 73.5 81.0 64 64 70.3 85
Terminal-Bench 2.1 (Claude Code) 78.2 48.6 69.8 82.7 - 66.5 69.7 78.9
SWE-bench Verified 82.4 76.4 80.4 - - 80.6 80.8 87.6
SWE-bench Pro 62.2 51.6 60.6 62.1 59 55.4 64.3 69.2
SWE-bench Multilingual 78.9 69.3 78.3 - - 76.2 - -
NL2Repo 48.2 36.8 47.2 48.9 42.1 - - 69.7
Claw-eval Avg 77.1 70.7 65.2 - - 75.8 78.2 -
SWE Atlas - QnA 41.2 20.4 - - 37.9 27.2 40.3 48.8
SWE Atlas - RF 42.6 18.4 - - - 48.6 46.7 -
SWE Atlas - TW 39.1 18.5 - - 30.8 - 38.5 -
* Terminal-Bench 2.1 (Terminus-2): Harbor/Terminus-2フレームワークで評価、parser=json、temperature=1.0、top_p=1.0、128Kコンテキストウィンドウ。各実行は4時間のタイムアウト、32 CPUコア、48GB RAMを使用し、5回の実行の平均。Qwenチャットテンプレートを調整してトレーニングと推論の一貫性を保ち、HarborをvLLMのreasoning_contentキーに合わせるように変更。
* Terminal-Bench 2.1 (Claude Code): Claude Code 2.1.126で評価、parser=json、temperature=1.0、top_p=1.0、max_new_tokens=131072、5回の実行の平均(Qwenチャットテンプレートも同様に修正)。
* SWE-bench Verified / Pro / Multilingual: OpenHandsハーネス、temp=1.0、top_p=0.95、256Kコンテキストウィンドウ。
* SWE Atlas QnA / RF / TW: mini-SWE-agentハーネス、temp=1.0、top_p=0.95、128Kコンテキストウィンドウ、5回の実行の平均。
* NL2Repo: temperature=1.0、top_p=1.0、400Kコンテキスト、48K出力、アンチハッキングフィルター。
* ClawEval: 実ユーザーのタスク分布に基づくエージェントコードベンチマーク;temp=0.6、256Kコンテキスト。
クイックスタート
注意 Ornith-1.0は推論モデルです。デフォルトでは、アシスタントの応答は最終回答の前に<think> … </think>ブロックで始まります。以下の提供レシピは、推論パーサーを有効にして思考の連鎖を個別のreasoning_contentフィールドに返し、ツール呼び出しパーサーを有効にしてモデルの<tool_call>ブロックをOpenAIスタイルのtool_callsとして表示します。
Ornith-1.0の提供には最新のランタイムが必要です:
Transformers ≥ 5.8.1
vLLM ≥ 0.19.1
SGLang ≥ 0.5.9
推奨サンプリングパラメータ: temperature=0.6, top_p=0.95, top_k=20(報告されたベンチマーク設定を再現するにはtemperature=1.0を使用)。
Ornith-1.0の提供
Ornith-1.0は、密な9Bモデルと2つのMixture-of-Expertsモデル(35B、397B)として出荷されます。すべてのチェックポイントは同じOpenAI互換インターフェースを公開し、256K(262,144トークン)のコンテキストウィンドウをサポートします。密な9Bは単一の80GB GPUに収まりますが、MoEチェックポイントはテンソル並列化によりマルチGPUノードにシャーディングされます。各サイズは複数の精度/フォーマットバリアントで公開されています:
チェックポイント アーキテクチャ フォーマット 最適な用途
Ornith-1.0-9B Dense (~9B) bf16 単一GPUでの提供とファインチューニング
Ornith-1.0-9B-GGUF Dense (~9B) GGUF (量子化) llama.cpp / Ollama経由のローカル推論
Ornith-1.0-35B MoE (35B) bf16 全精度マルチGPUでの提供
Ornith-1.0-35B-FP8 MoE (35B) FP8 FP8対応GPUでのVRAMを約半分に削減
Ornith-1.0-35B-GGUF MoE (35B) GGUF (量子化) llama.cpp / Ollama経由のローカル推論
Ornith-1.0-397B MoE (397B) bf16 マルチGPUノードでの全精度提供
Ornith-1.0-397B-FP8 MoE (397B) FP8 FP8対応GPUでのメモリ効率の良い提供
以下のレシピは、Ornith-1.0という共有エイリアスでOpenAI互換サーバーを構築します。MODELを希望のチェックポイントに設定し、--tensor-parallel-size / --tpをGPUの数に合わせてください。
vLLM
```bash
# Pick a checkpoint — dense 9B, or MoE 35B / 397B (append -FP8 for lower-VRAM serving):
MODEL=deepreinforce-ai/Ornith-1.0-397B
# MoE checkpoints (35B / 397B): shard across the node with tensor parallelism.
# Dense checkpoint (9B): fits on a single 80GB GPU — drop --tensor-parallel-size.
vllm serve $MODEL \
--served-model-name Ornith-1.0 \
--tensor-parallel-size 8 \
--host 0.0.0.0 --port 8000 \
--max-model-len 262144 \
--gpu-memory-utilization 0.90 \
--enable-prefix-caching \
--enable-auto-tool-choice --tool-call-parser qwen3_xml \
--reasoning-parser qwen3 \
--trust-remote-code
```
SGLang
```bash
# Pick a checkpoint — dense 9B, or MoE 35B / 397B (append -FP8 for lower-VRAM serving):
MODEL=deepreinforce-ai/Ornith-1.0-397B
# MoE checkpoints (35B / 397B): shard with --tp ; dense 9B: drop --tp for a single GPU.
python -m sglang.launch_server \
--model-path $MODEL \
--served-model-name Ornith-1.0 \
--tp 8 \
--host 0.0.0.0 --port 8000 \
--context-length 262144 \
--mem-fraction-static 0.85 \
--tool-call-parser qwen3_coder \
--reasoning-parser qwen3
```
Hugging Face Transformers
素早いローカルテスト(またはオフライン生成をスクリプト化するため)には、Transformersでモデルを直接ロードします。最新のリリースがインストールされていることを確認してください(Transformersのインストールガイドを参照)。Ornith-1.0にはtransformers >= 5.8.1が必要です。密な9Bチェックポイントは、ローカルで最も簡単に実行できます。
```python
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "deepreinforce-ai/Ornith-1.0-9B" # or -35B / -397B
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
model_name, dtype="auto", device_map="auto",
)
messages = [
{"role": "user", "content": "Write a Python function is_prime(n). Keep it short."}
]
text = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True,
)
inputs = tokenizer(text, return_tensors="pt").to(model.device)
generated = model.generate(
**inputs, max_new_tokens=512, do_sample=True, temperature=0.6, top_p=0.95, top_k=20,
)
output_ids = generated[0][inputs.input_ids.shape[1]:]
# The reply contains a <think> ... </think> reasoning block followed by the answer.
content = tokenizer.decode(output_ids, skip_special_tokens=True)
print(content)
```
推論トレースと最終回答を分割するには、</think>マーカーでパースします。
```python
text = tokenizer.decode(output_ids, skip_special_tokens=True)
if "</think>" in text:
reasoning, answer = text.split("</think>", 1)
reasoning = reasoning.replace("<think>", "").strip()
answer = answer.strip()
else:
reasoning, answer = "", text.strip()
```
チャット補完API経由でOrnith-1.0を使用する
vLLMまたはSGLangサーバーが実行されたら、OpenAI互換クライアントでそれに話しかけます。
基本的な使用法
```python
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:8000/v1",
api_key="EMPTY", # any non-empty string works for
```