[![Ornith 1.0 Blog](https://img.shields.io/badge/%F0%9F%90%A6%20Ornith%201.0%20Blog-FD8E5B)](https://ornith.ai/ornith_1_0.html)  |  [![Ornith 1.5 Blog](https://img.shields.io/badge/%F0%9F%90%A6%20Ornith%201.5%20Blog-FD8E5B)](https://ornith.ai/ornith_1_5.html)
--- # Ornith Aloha! 🌺 **Ornith** is a family of self-improving open-source models for agentic tasks. This repo covers both generations: - 🐦 [**Ornith-1.5**](#ornith-15) *(latest)* — extends self-scaffolding into a complete end-to-end **self-improvement loop**: the model proposes new tasks, generates task-specific scaffolds, and produces solution rollouts for reinforcement learning. Model weights at [HuggingFace](https://huggingface.co/collections/ornith-ai/ornith-15), and more details can be found at [blog](https://ornith.ai/ornith_1_5.html). - 🐦 [**Ornith-1.0**](#ornith-10) — the first release, which jointly optimizes the scaffold and the resulting solution rollouts. Model weights at [HuggingFace](https://huggingface.co/collections/ornith-ai/ornith-10), and more details can be found at [blog](https://ornith.ai/ornith_1_0.html). Both generations are **MIT licensed, globally accessible, and free from regional limitations**. Ornith 397B Benchmark Results ## Benchmarks ### 397B
Ornith-1.5-397B Ornith-1.0-397B DeepSeek-V4-Flash-0731 (284B) GLM-5.2 (753B) Claude Opus 4.8 Kimi K3 (2.8T)
Coding
Terminal-Bench 2.1 (Terminus-2)86.177.582.7818588.3
Terminal-Bench 2.1 (Claude Code)85.278.281.882.778.9-
SWE-bench Verified8682.481.68385.886.2
SWE-bench Pro65.162.264.462.168-
SWE-bench Multilingual79.678.977.978.475.7-
DeepSWE56854.446.25967.5
Frontier-Bench v0.113.52.76.15.121.123
NL2Repo59.548.254.248.969.7-
SWE Atlas - QnA55.641.251.65059.759.7
Reasoning
HLE (no tools)44.630.23540.549.843.5
HLE (with tools)56.147.550.854.757.956
GPQA Diamond92.888.191.491.293.693.5
Agentic
MCP-Atlas8076.474.677.882.282.3
Toolathlon-Verified71.243.270.348.276.273.2
WideSearch80.875.277.37972.9-
BrowseComp86.679.784.885.684.391.2
ClawEval81.477.177.678.880.2-
### 35B-A3B
Ornith-1.5-35B-A3B Ornith-1.0-35B-A3B Qwen3.6-35B-A3B Gemma4-31B (dense) Muse-Glimmer-30B (dense) Qwen3.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.2--48.6
SWE-bench Verified7975.673.4527676.4
SWE-bench Pro59.650.449.535.751.251.6
SWE-bench Multilingual71.469.367.251.7-69.3
DeepSWE2200--1
Frontier-Bench v0.15.11.41.4--1.4
NL2Repo46.234.629.415.5-36.8
SWE Atlas - QnA39.837.115.5--20.4
Reasoning
HLE (no tools)25.620.821.419.52228.7
HLE (with tools)33.430.128.926.5-48.3
GPQA Diamond89.286.28684.383.588.4
Agentic
MCP-Atlas70.264.462.85575.572.3
Toolathlon-Verified48.742.441.740.8-38.3
WideSearch67.863.460.154.2-74
BrowseComp67.663.562--78.6
ClawEval72.569.868.748.5-70.7
### 9B
Ornith-1.5-9B Ornith-1.0-9B Qwen3.5-9B Qwen3.6-35B-A3B Gemma4-31B (dense)
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 (no tools)20.216.814.721.419.5
HLE (with 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

* All results reported for Ornith-1.5 are averaged over five independent runs.
* Terminal-Bench 2.1 (Terminus-2): evaluated with the Harbor/Terminus-2 framework, parser=json, temperature=1.0, top_p=1.0, 128K context window. Each run uses a 4-hour timeout with 32 CPU cores and 48GB RAM, averaged over 5 runs. We adjust the Qwen chat template to keep training and inference consistent and modify Harbor to align with vLLM's reasoning_content key.
* Terminal-Bench 2.1 (Claude Code): evaluated with Claude Code 2.1.126, parser=json, temperature=1.0, top_p=1.0, max_new_tokens=131072, averaged over 5 runs (Qwen chat template likewise modified).
* SWE-bench Verified / Pro / Multilingual: OpenHands harness, temp=1.0, top_p=0.95, 256K context window. Anti-hacking safeguards applied throughout: Git history is removed from the local repository image to prevent access to prior solutions or commits, and network access is disabled.
* DeepSWE: Claude Code harness, temperature=1.0, top_p=0.95, 256K context window.
* SWE Atlas QnA: mini-SWE-agent harness, temp=1.0, top_p=0.95, 128K context window, averaged over 5 runs.
* NL2Repo: temperature=1.0, top_p=1.0, 400K context, 48K output. Access to specified GitHub repositories and pip packages is blocked to prevent reward hacking.
* HLE: evaluated using Claude 4.6 Opus as the judge model.
* MCP-Atlas: all models evaluated in thinking mode on the 500-task public subset, 10-minute timeout per task, Claude 4.8 Opus as the judge model.
* Toolathlon-Verified: official evaluation service with the maximum token limit set to 128K.
* ClawEval: an agentic code benchmark over real-user task distributions; temp=0.6, 256K context.

--- ## Quickstart > **NOTE** > > **Ornith models (1.0 and 1.5) are reasoning models**: by default the assistant turn opens with a ` … ` block before the final answer. The serving recipes below enable a reasoning parser so the chain-of-thought is returned in a separate `reasoning_content` field, and a tool-call parser so the model's `` blocks are surfaced as OpenAI-style `tool_calls`. > > Serving Ornith requires recent runtimes: > > - **Transformers** ≥ 5.8.1 > - **vLLM** ≥ 0.19.1 > - **SGLang** ≥ 0.5.9 > > Recommended sampling parameters: > > - **For general tasks:** `temperature=1.0`, `top_p=0.95`, `top_k=20`, `min_p=0.0`, `presence_penalty=1.5`, `repetition_penalty=1.0` > - **For precise coding tasks:** `temperature=0.6`, `top_p=0.95`, `top_k=20`, `min_p=0.0`, `presence_penalty=0.0`, `repetition_penalty=1.0` ### Serving Ornith Both generations ship as a dense **9B** model plus two **Mixture-of-Experts** models (**35B**, **397B**). All checkpoints expose the same OpenAI-compatible interface and support a **256K (262,144-token) context window**; the dense 9B fits on a single 80GB GPU, while the MoE checkpoints are sharded across a multi-GPU node with tensor parallelism. **Ornith-1.5 checkpoints (latest):** | Checkpoint | Architecture | Format | Best for | |---|---|---|---| | [Ornith-1.5-9B](https://huggingface.co/ornith-ai/Ornith-1.5-9B) | Dense (~9B) | bf16 | Single-GPU serving & fine-tuning | | [Ornith-1.5-9B-GGUF](https://huggingface.co/ornith-ai/Ornith-1.5-9B-GGUF) | Dense (~9B) | GGUF (quantized) | Local inference via llama.cpp / Ollama | | [Ornith-1.5-9B-MLX](https://huggingface.co/ornith-ai/Ornith-1.5-9B-MLX) | Dense (~9B) | MLX | Local inference on Apple Silicon | | Ornith-1.5-9B-MLX ([4bit](https://huggingface.co/ornith-ai/Ornith-1.5-9B-MLX-4bit) / [6bit](https://huggingface.co/ornith-ai/Ornith-1.5-9B-MLX-6bit) / [8bit](https://huggingface.co/ornith-ai/Ornith-1.5-9B-MLX-8bit)) | Dense (~9B) | MLX (quantized) | Local inference on Apple Silicon via MLX | | [Ornith-1.5-35B-A3B](https://huggingface.co/ornith-ai/Ornith-1.5-35B-A3B) | MoE (35B-A3B) | bf16 | Full-precision multi-GPU serving | | [Ornith-1.5-35B-A3B-FP8](https://huggingface.co/ornith-ai/Ornith-1.5-35B-A3B-FP8) | MoE (35B-A3B) | FP8 | ~Half the VRAM on FP8-capable GPUs | | [Ornith-1.5-35B-A3B-NVFP4](https://huggingface.co/ornith-ai/Ornith-1.5-35B-A3B-NVFP4) | MoE (35B-A3B) | NVFP4 | 4-bit serving on NVIDIA Blackwell GPUs | | [Ornith-1.5-35B-A3B-GGUF](https://huggingface.co/ornith-ai/Ornith-1.5-35B-A3B-GGUF) | MoE (35B-A3B) | GGUF (quantized) | Local inference via llama.cpp / Ollama | | [Ornith-1.5-35B-A3B-MLX](https://huggingface.co/ornith-ai/Ornith-1.5-35B-A3B-MLX) | MoE (35B-A3B) | MLX | Local inference on Apple Silicon | | Ornith-1.5-35B-A3B-MLX ([4bit](https://huggingface.co/ornith-ai/Ornith-1.5-35B-A3B-MLX-4bit) / [6bit](https://huggingface.co/ornith-ai/Ornith-1.5-35B-A3B-MLX-6bit) / [8bit](https://huggingface.co/ornith-ai/Ornith-1.5-35B-A3B-MLX-8bit)) | MoE (35B-A3B) | MLX (quantized) | Local inference on Apple Silicon via MLX | | [Ornith-1.5-397B](https://huggingface.co/ornith-ai/Ornith-1.5-397B) | MoE (397B) | bf16 | Full-precision serving on a multi-GPU node | | [Ornith-1.5-397B-FP8](https://huggingface.co/ornith-ai/Ornith-1.5-397B-FP8) | MoE (397B) | FP8 | Memory-efficient serving on FP8-capable GPUs | | [Ornith-1.5-397B-NVFP4](https://huggingface.co/ornith-ai/Ornith-1.5-397B-NVFP4) | MoE (397B) | NVFP4 | 4-bit serving on NVIDIA Blackwell GPUs | | [Ornith-1.5-397B-GGUF](https://huggingface.co/ornith-ai/Ornith-1.5-397B-GGUF) | MoE (397B) | GGUF (quantized) | Local inference via llama.cpp / Ollama | **Ornith-1.0 checkpoints:** | Checkpoint | Architecture | Format | Best for | |---|---|---|---| | [Ornith-1.0-9B](https://huggingface.co/ornith-ai/Ornith-1.0-9B) | Dense (~9B) | bf16 | Single-GPU serving & fine-tuning | | [Ornith-1.0-9B-GGUF](https://huggingface.co/ornith-ai/Ornith-1.0-9B-GGUF) | Dense (~9B) | GGUF (quantized) | Local inference via llama.cpp / Ollama | | [Ornith-1.0-35B](https://huggingface.co/ornith-ai/Ornith-1.0-35B) | MoE (35B) | bf16 | Full-precision multi-GPU serving | | [Ornith-1.0-35B-FP8](https://huggingface.co/ornith-ai/Ornith-1.0-35B-FP8) | MoE (35B) | FP8 | ~Half the VRAM on FP8-capable GPUs | | [Ornith-1.0-35B-GGUF](https://huggingface.co/ornith-ai/Ornith-1.0-35B-GGUF) | MoE (35B) | GGUF (quantized) | Local inference via llama.cpp / Ollama | | [Ornith-1.0-397B](https://huggingface.co/ornith-ai/Ornith-1.0-397B) | MoE (397B) | bf16 | Full-precision serving on a multi-GPU node | | [Ornith-1.0-397B-FP8](https://huggingface.co/ornith-ai/Ornith-1.0-397B-FP8) | MoE (397B) | FP8 | Memory-efficient serving on FP8-capable GPUs | The recipes below stand up an OpenAI-compatible server under the shared alias `Ornith-1.5` (swap `1.5` for `1.0` everywhere to serve the previous generation). Set `MODEL` to the checkpoint you want, and match `--tensor-parallel-size` / `--tp` to your GPU count. #### vLLM ```bash # Pick a checkpoint — dense 9B, or MoE 35B / 397B (use Ornith-1.0-*-FP8 for lower-VRAM serving): MODEL=deepreinforce-ai/Ornith-1.5-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.5 \ --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 (use Ornith-1.0-*-FP8 for lower-VRAM serving): MODEL=deepreinforce-ai/Ornith-1.5-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.5 \ --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 ``` #### For Long-Context Ornith-1.5 and Ornith-1.0 series models handle context windows of up to 262,144 tokens. When a task's combined input and output must go beyond this limit, we suggest extending the effective window with RoPE scaling — YaRN is the technique we validate against, and it is already built into both vLLM and SGLang. With a scaling factor of 4.0, the usable window grows to roughly 1M tokens. You can turn YaRN on in either of two ways: - **Edit the checkpoint's `config.json`.** Add a `rope_scaling` block to the model configuration: ```json { "rope_scaling": { "rope_type": "yarn", "factor": 4.0, "original_max_position_embeddings": 262144 } } ``` - **Override at launch time.** Leave the checkpoint untouched and extend the serve commands above with the equivalent flags. vLLM: ```bash VLLM_ALLOW_LONG_MAX_MODEL_LEN=1 vllm serve ornith-ai/Ornith-1.5-9B ... --hf-overrides '{"rope_scaling": {"rope_type": "yarn", "factor": 4.0, "original_max_position_embeddings": 262144}}' --max-model-len 1000000 ``` SGLang: ```bash SGLANG_ALLOW_OVERWRITE_LONGER_CONTEXT_LEN=1 python -m sglang.launch_server ... --json-model-override-args '{"rope_scaling": {"rope_type": "yarn", "factor": 4.0, "original_max_position_embeddings": 262144}}' --context-length 1000000 ``` > **NOTE** > > Open-source runtimes implement YaRN *statically*: the same scaling factor is applied to every request regardless of its length, which can slightly hurt quality on ordinary-length inputs. Only enable `rope_scaling` when your workload genuinely needs the longer window, and size `factor` to match it — the target window is roughly `factor` × 262,144, so if your requests top out around 524,288 tokens, `factor: 2.0` is the better setting. ### Using Ornith via the Chat Completions API Once a vLLM or SGLang server is running, talk to it with any OpenAI-compatible client. #### Basic Usage ```python from openai import OpenAI client = OpenAI( base_url="http://localhost:8000/v1", api_key="EMPTY", # any non-empty string works for a local server ) response = client.chat.completions.create( model="Ornith-1.5", messages=[ {"role": "user", "content": "Write a one-line Python lambda that squares a number."} ], temperature=0.6, top_p=0.95, max_tokens=1024, ) message = response.choices[0].message # reasoning_content holds the trace; content holds the final answer. print("reasoning:", getattr(message, "reasoning_content", None)) print("answer:", message.content) ``` You can also stream tokens, or hand the model tools — Ornith emits well-formed function calls that the server parses into the standard `tool_calls` field: ```python tools = [ { "type": "function", "function": { "name": "get_weather", "description": "Get the current weather for a city", "parameters": { "type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"], }, }, } ] response = client.chat.completions.create( model="Ornith-1.5", messages=[{"role": "user", "content": "What is the weather in Paris right now?"}], tools=tools, tool_choice="auto", temperature=0.6, max_tokens=2048, ) tool_call = response.choices[0].message.tool_calls[0] print(tool_call.function.name, tool_call.function.arguments) # -> get_weather {"city": "Paris"} ``` You can point any OpenAI-compatible SDK (Python, Node.js, etc.) or `curl` at the same `/v1/chat/completions` endpoint. ## Agentic Usage Ornith models excel in tool-calling and agentic coding capabilities. ### Agent Frameworks Because Ornith exposes an OpenAI-compatible endpoint with tool calling, it works out of the box with standard agent frameworks. Below is a minimal example that connects Ornith to tools through an MCP server. ```python import os from openai import OpenAI client = OpenAI( base_url=os.getenv("OPENAI_BASE_URL", "http://localhost:8000/v1"), api_key=os.getenv("OPENAI_API_KEY", "EMPTY"), ) tools = [ { "type": "function", "function": { "name": "run_shell", "description": "Run a shell command and return its output.", "parameters": { "type": "object", "properties": { "command": {"type": "string", "description": "The command to run"} }, "required": ["command"], }, }, } ] messages = [{"role": "user", "content": "List the Python files in the current directory."}] response = client.chat.completions.create( model="Ornith-1.5", messages=messages, tools=tools, temperature=0.6, top_p=0.95, ) print(response.choices[0].message) ``` **Examples of using Ornith with agent harness:** #### Hermes Agent ```bash # Hermes talks to any OpenAI-compatible endpoint — point it at your Ornith server. export OPENAI_BASE_URL="http://localhost:8000/v1" export OPENAI_API_KEY="EMPTY" export MODEL="Ornith-1.5" ``` #### OpenHands ```bash pip install openhands-ai # OpenHands routes through LiteLLM; the "openai/" prefix selects the OpenAI-compatible path. export LLM_MODEL="openai/Ornith-1.5" export LLM_BASE_URL="http://localhost:8000/v1" export LLM_API_KEY="EMPTY" # Launch the CLI (or run the official OpenHands Docker image with the same env vars). openhands ``` #### llama.cpp / Ollama ```bash # Both runtimes load a GGUF build — currently published for the Ornith-1.0 9B and 35B checkpoints (swap -9B for -35B). # llama.cpp — serve an OpenAI-compatible API on port 8000. llama-server -hf deepreinforce-ai/Ornith-1.0-9B-GGUF --port 8000 -c 262144 # Ollama — pull and chat with the same GGUF straight from Hugging Face. ollama run hf.co/deepreinforce-ai/Ornith-1.0-9B-GGUF ``` #### Unsloth Studio ```bash pip install unsloth # Load Ornith for fast local inference or fine-tuning (Python): # from unsloth import FastLanguageModel # model, tokenizer = FastLanguageModel.from_pretrained( # "deepreinforce-ai/Ornith-1.5-9B", # or Ornith-1.0-9B # max_seq_length=262144, # load_in_4bit=True, # ) ``` #### OpenClaw ```bash # OpenClaw talks to any OpenAI-compatible endpoint — point it at your Ornith server. export OPENAI_BASE_URL="http://localhost:8000/v1" export OPENAI_API_KEY="EMPTY" export OPENAI_MODEL="Ornith-1.5" ``` ### Coding CLIs Ornith is optimized for terminal-based coding agents. Point any OpenAI-compatible coding CLI at your Ornith endpoint (set `OPENAI_BASE_URL` and `OPENAI_API_KEY`) to understand large codebases, automate tedious work, and ship faster. #### OpenCode ```bash # Register your local Ornith endpoint as a provider in ~/.config/opencode/opencode.json: # # { # "$schema": "https://opencode.ai/config.json", # "provider": { # "ornith": { # "npm": "@ai-sdk/openai-compatible", # "name": "Ornith (local)", # "options": { "baseURL": "http://localhost:8000/v1", "apiKey": "EMPTY" }, # "models": { "Ornith-1.5": { "name": "Ornith-1.5" } } # } # } # } opencode ``` ### Citation If you find our work helpful, feel free to give us a cite. ```bibtex @misc{ornith-1.5, title = {{Ornith-1.5}: From Self-Scaffolding to Self-Improvement}, url = {https://ornith.ai/ornith_1_5.html}, author = {{Ornith Team}}, year = {2026} } @misc{ornith-1.0, title = {{Ornith-1.0}: Agentic Coding, Open to All}, url = {https://ornith.ai/ornith_1_0.html}, author = {{Ornith Team}}, year = {2026} } ```