README.md
26.2 KB · 415 lines · markdown Raw
1 ---
2 library_name: transformers
3 license: mit
4 license_link: https://huggingface.co/ornith-ai/Ornith-1.5-9B/blob/main/LICENSE
5 pipeline_tag: text-generation
6 ---
7
8
9 <img width="600px" src="assets/ornith_logo.png">
10
11
12 # Ornith-1.5-9B
13
14
15 Chirp Chirp! 🐦 We are introducing Ornith-1.5, a major step toward building foundation models through end-to-end self-improvement.
16
17 Ornith-1.5 extends Ornith-1.0 (which was developed on top of Qwen3.5 and Gemma4 with additional continued pretraining, mid-training, and post-training) by expanding the self-improvement loop from scaffold and rollout optimization to jointly optimizing task generation, scaffold construction, and solution rollouts. Rather than relying on a fixed set of human-curated tasks and manually designed harnesses, Ornith-1.5 continuously generates new training tasks, discovers effective strategies for solving them, and improves the policy through reinforcement learning. For more details on the task, harness, and rollout reward design, please refer to our [blog](https://ornith.ai/ornith_1_5.html).
18
19 <img style="width: 100%; max-width: 900px;" src="assets/ornith_9b_eval.png" alt="Ornith 1.5 9B Benchmark Results" title="Ornith 1.5 9B Benchmark Results">
20
21 ## Ornith 1.5 9B
22
23 This model card documents **Ornith-1.5-9B**, the most lightweight member of the Ornith-1.5 family — a 9B dense model designed for efficient single-GPU deployment, and edge-deployable on mobile devices via its quantized Ornith-1.5-9B-Mobile variant.
24
25 ### Benchmarks
26
27
28 <div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;width:120%;margin:0 auto;padding:16px 0">
29 <table style="width:120%;table-layout:fixed;border-collapse:collapse;font-size:13px">
30 <thead><tr>
31 <th style="width:28%;padding:10px 7px;text-align:left;font-weight:600;border-bottom:2px solid #FD8E5B;color:#FD8E5B"></th>
32 <th style="width:14.40%;padding:10px 7px;text-align:center;font-weight:700;border-bottom:2px solid #FD8E5B;color:#FD8E5B;font-size:14px;background:rgba(253, 142, 91, 0.12)">Ornith-1.5-9B</th>
33 <th style="width:14.40%;padding:10px 7px;text-align:center;font-weight:500;border-bottom:2px solid #FD8E5B;color:#FD8E5B;font-size:14px">Ornith-1.0-9B</th>
34 <th style="width:14.40%;padding:10px 7px;text-align:center;font-weight:500;border-bottom:2px solid #FD8E5B;color:#FD8E5B;font-size:14px">Qwen3.5-9B</th>
35 <th style="width:14.40%;padding:10px 7px;text-align:center;font-weight:500;border-bottom:2px solid #FD8E5B;color:#FD8E5B;font-size:14px">Qwen3.6-35B-A3B</th>
36 <th style="width:14.40%;padding:10px 7px;text-align:center;font-weight:500;border-bottom:2px solid #FD8E5B;color:#FD8E5B;font-size:14px">Gemma-4-31B <sub></sub></th>
37 </tr></thead>
38 <tbody>
39 <tr><td colspan="6" style="padding:8px 12px;font-weight:600;color:#FD8E5B;border-bottom:1px solid rgba(253, 142, 91, 0.2);background:rgba(253, 142, 91, 0.1)">Coding</td></tr>
40 <tr>
41 <td style="padding:7px 7px;padding-left:20px;border-bottom:1px solid rgba(128, 128, 128, 0.15);">Terminal-Bench 2.1 <sub><small>(Terminus-2)</small></sub></td>
42 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15);font-weight:600;color:#FD8E5B;background:rgba(253, 142, 91, 0.06)">46.2</td>
43 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">43.1</td>
44 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">21.3</td>
45 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">52.5</td>
46 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">42.1</td>
47 </tr>
48 <tr>
49 <td style="padding:7px 7px;padding-left:20px;border-bottom:1px solid rgba(128, 128, 128, 0.15);">Terminal-Bench 2.1 <sub><small>(Claude Code)</small></sub></td>
50 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15);font-weight:600;color:#FD8E5B;background:rgba(253, 142, 91, 0.06)">47</td>
51 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">40.6</td>
52 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">18.9</td>
53 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">49.2</td>
54 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">-</td>
55 </tr>
56 <tr>
57 <td style="padding:7px 7px;padding-left:20px;border-bottom:1px solid rgba(128, 128, 128, 0.15);">SWE-bench Verified</td>
58 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15);font-weight:600;color:#FD8E5B;background:rgba(253, 142, 91, 0.06)">70.6</td>
59 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">69.4</td>
60 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">53.2</td>
61 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">73.4</td>
62 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">52</td>
63 </tr>
64 <tr>
65 <td style="padding:7px 7px;padding-left:20px;border-bottom:1px solid rgba(128, 128, 128, 0.15);">SWE-bench Pro</td>
66 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15);font-weight:600;color:#FD8E5B;background:rgba(253, 142, 91, 0.06)">47.5</td>
67 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">42.9</td>
68 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">31.3</td>
69 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">49.5</td>
70 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">35.7</td>
71 </tr>
72 <tr>
73 <td style="padding:7px 7px;padding-left:20px;border-bottom:1px solid rgba(128, 128, 128, 0.15);">SWE-bench Multilingual</td>
74 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15);font-weight:600;color:#FD8E5B;background:rgba(253, 142, 91, 0.06)">54.4</td>
75 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">52</td>
76 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">39.7</td>
77 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">67.2</td>
78 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">51.7</td>
79 </tr>
80 <tr>
81 <td style="padding:7px 7px;padding-left:20px;border-bottom:1px solid rgba(128, 128, 128, 0.15);">NL2Repo</td>
82 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15);font-weight:600;color:#FD8E5B;background:rgba(253, 142, 91, 0.06)">32.4</td>
83 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">27.2</td>
84 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">16.2</td>
85 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">29.4</td>
86 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">15.5</td>
87 </tr>
88 <tr>
89 <td style="padding:7px 7px;padding-left:20px;border-bottom:1px solid rgba(128, 128, 128, 0.15);">SWE Atlas - QnA</td>
90 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15);font-weight:600;color:#FD8E5B;background:rgba(253, 142, 91, 0.06)">20.6</td>
91 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">17.9</td>
92 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">9.2</td>
93 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">15.5</td>
94 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">-</td>
95 </tr>
96 <tr><td colspan="6" style="padding:8px 12px;font-weight:600;color:#FD8E5B;border-bottom:1px solid rgba(253, 142, 91, 0.2);background:rgba(253, 142, 91, 0.1)">Reasoning</td></tr>
97 <tr>
98 <td style="padding:7px 7px;padding-left:20px;border-bottom:1px solid rgba(128, 128, 128, 0.15);">HLE <sub><small>(no tools)</small></sub></td>
99 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15);font-weight:600;color:#FD8E5B;background:rgba(253, 142, 91, 0.06)">20.2</td>
100 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">16.8</td>
101 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">14.7</td>
102 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">21.4</td>
103 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">19.5</td>
104 </tr>
105 <tr>
106 <td style="padding:7px 7px;padding-left:20px;border-bottom:1px solid rgba(128, 128, 128, 0.15);">HLE <sub><small>(with tools)</small></sub></td>
107 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15);font-weight:600;color:#FD8E5B;background:rgba(253, 142, 91, 0.06)">30.5</td>
108 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">26.4</td>
109 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">24.5</td>
110 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">28.9</td>
111 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">26.5</td>
112 </tr>
113 <tr>
114 <td style="padding:7px 7px;padding-left:20px;border-bottom:1px solid rgba(128, 128, 128, 0.15);">GPQA Diamond</td>
115 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15);font-weight:600;color:#FD8E5B;background:rgba(253, 142, 91, 0.06)">86.4</td>
116 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">82.5</td>
117 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">81.7</td>
118 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">86</td>
119 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">84.3</td>
120 </tr>
121 <tr><td colspan="6" style="padding:8px 12px;font-weight:600;color:#FD8E5B;border-bottom:1px solid rgba(253, 142, 91, 0.2);background:rgba(253, 142, 91, 0.1)">Agentic</td></tr>
122 <tr>
123 <td style="padding:7px 7px;padding-left:20px;border-bottom:1px solid rgba(128, 128, 128, 0.15);">MCP-Atlas</td>
124 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15);font-weight:600;color:#FD8E5B;background:rgba(253, 142, 91, 0.06)">54.2</td>
125 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">49.4</td>
126 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">46.8</td>
127 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">62.8</td>
128 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">55</td>
129 </tr>
130 <tr>
131 <td style="padding:7px 7px;padding-left:20px;border-bottom:1px solid rgba(128, 128, 128, 0.15);">Toolathlon-Verified</td>
132 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15);font-weight:600;color:#FD8E5B;background:rgba(253, 142, 91, 0.06)">41.2</td>
133 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">33.4</td>
134 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">29.6</td>
135 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">41.7</td>
136 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">52.8</td>
137 </tr>
138 <tr>
139 <td style="padding:7px 7px;padding-left:20px;border-bottom:1px solid rgba(128, 128, 128, 0.15);">WideSearch</td>
140 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15);font-weight:600;color:#FD8E5B;background:rgba(253, 142, 91, 0.06)">59.5</td>
141 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">55.8</td>
142 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">53.6</td>
143 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">60.1</td>
144 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">54.2</td>
145 </tr>
146 <tr>
147 <td style="padding:7px 7px;padding-left:20px;border-bottom:1px solid rgba(128, 128, 128, 0.15);">BrowseComp</td>
148 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15);font-weight:600;color:#FD8E5B;background:rgba(253, 142, 91, 0.06)">56.4</td>
149 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">44.8</td>
150 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">41.5</td>
151 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">62</td>
152 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">-</td>
153 </tr>
154 <tr>
155 <td style="padding:7px 7px;padding-left:20px;border-bottom:1px solid rgba(128, 128, 128, 0.15);">ClawEval</td>
156 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15);font-weight:600;color:#FD8E5B;background:rgba(253, 142, 91, 0.06)">66.5</td>
157 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">63.1</td>
158 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">53.2</td>
159 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">68.7</td>
160 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">48.5</td>
161 </tr>
162 </tbody>
163 </table>
164
165 <p style="margin-top:12px;font-size:10px;opacity:0.7">
166 * All results reported for Ornith-1.5 are averaged over five independent runs.<br/>
167 * Terminal-Bench 2.1 (Terminus-2): We evaluate Terminal-Bench 2.1 using the Harbor/Terminus-2 framework with parser=json, temperature=1.0, top_p=1.0, and a 128K context window. Each run uses a 4-hour timeout with 32 CPU cores and 48GB RAM, and results are averaged over 5 runs. We adjust the Qwen chat template to ensure consistency between training and inference (https://huggingface.co/ornith-ai/Ornith-1.5-9B/blob/main/chat_template.jinja), and modify Harbor to align with vLLM's reasoning_content key.<br/>
168 * Terminal-Bench 2.1 (Claude Code): We evaluate Terminal-Bench 2.1 using Claude Code 2.1.126 with parser=json, temperature=1.0, top_p=1.0, max_new_tokens=131072. Results are averaged over 5 runs. Again, Qwen chat template needs to be modified.<br/>
169 * SWE-Bench Verified, Pro and Multilingual: using OpenHands harness with temp=1.0, top_p=0.95, 256k context window. Anti-hacking safeguards are applied throughout evaluation: Git history is removed from the local repository image to prevent access to prior solutions or commits; network access is disabled, preventing the model from retrieving external information or resources.<br/>
170 * DeepSWE: Evaluated using the Claude Code harness with temperature=1.0, top_p=0.95, and a 256K context window.<br/>
171 * SWE Atlas QnA: using mini SWE agent harness with temp=1.0, top_p=0.95, 128K context window. Results are averaged over 5 runs.<br/>
172 * NL2Repo: with 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.<br/>
173 * HLE: Evaluated using Claude 4.6 Opus as the judge model.<br/>
174 * MCP-Atlas: All models were evaluated in thinking mode on the 500-task public subset, with a 10-minute timeout per task. We use Claude 4.8 Opus as the judge model.<br/>
175 * Toolathlon-Verified: We use the official evaluation service with the maximum token limit set to 128K.<br/>
176 * ClawEval: An agentic code benchmark over real-user task distributions; temp=0.6 and 256K context.<br/>
177 </p>
178
179 </div>
180
181
182 ## Quickstart
183
184 <div style="border-left:4px solid #FD8E5B;background:rgba(253,142,91,0.1);border-radius:6px;padding:12px 16px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;font-size:14px;line-height:1.6">
185 <div style="font-weight:700;color:#FD8E5B;margin-bottom:6px">📝 NOTE</div>
186 <p style="margin:0 0 10px"><b>Ornith-1.5-9B</b> is a <b>reasoning model</b>: by default the assistant turn opens with a <code style="background:rgba(253,142,91,0.15);padding:1px 5px;border-radius:4px">&lt;think&gt; … &lt;/think&gt;</code> block before the final answer. The serving recipes below enable a reasoning parser so the chain-of-thought is returned in a separate <code style="background:rgba(253,142,91,0.15);padding:1px 5px;border-radius:4px">reasoning_content</code> field, and a tool-call parser so the model's <code style="background:rgba(253,142,91,0.15);padding:1px 5px;border-radius:4px">&lt;tool_call&gt;</code> blocks are surfaced as OpenAI-style <code style="background:rgba(253,142,91,0.15);padding:1px 5px;border-radius:4px">tool_calls</code>.</p>
187 <p style="margin:0 0 6px">Serving Ornith-1.5-9B requires recent runtimes:</p>
188 <ul style="margin:0 0 10px;padding-left:20px">
189 <li><b>Transformers</b> ≥ 5.8.1</li>
190 <li><b>vLLM</b> ≥ 0.19.1</li>
191 <li><b>SGLang</b> ≥ 0.5.9</li>
192 </ul>
193 <p style="margin:0 0 6px">Recommended sampling parameters:</p>
194 <ul style="margin:0;padding-left:20px">
195 <li><b>For general tasks:</b> <code style="background:rgba(253,142,91,0.15);padding:1px 5px;border-radius:4px">temperature=1.0</code>, <code style="background:rgba(253,142,91,0.15);padding:1px 5px;border-radius:4px">top_p=0.95</code>, <code style="background:rgba(253,142,91,0.15);padding:1px 5px;border-radius:4px">top_k=20</code>, <code style="background:rgba(253,142,91,0.15);padding:1px 5px;border-radius:4px">min_p=0.0</code>, <code style="background:rgba(253,142,91,0.15);padding:1px 5px;border-radius:4px">presence_penalty=1.5</code>, <code style="background:rgba(253,142,91,0.15);padding:1px 5px;border-radius:4px">repetition_penalty=1.0</code></li>
196 <li><b>For precise coding tasks:</b> <code style="background:rgba(253,142,91,0.15);padding:1px 5px;border-radius:4px">temperature=0.6</code>, <code style="background:rgba(253,142,91,0.15);padding:1px 5px;border-radius:4px">top_p=0.95</code>, <code style="background:rgba(253,142,91,0.15);padding:1px 5px;border-radius:4px">top_k=20</code>, <code style="background:rgba(253,142,91,0.15);padding:1px 5px;border-radius:4px">min_p=0.0</code>, <code style="background:rgba(253,142,91,0.15);padding:1px 5px;border-radius:4px">presence_penalty=0.0</code>, <code style="background:rgba(253,142,91,0.15);padding:1px 5px;border-radius:4px">repetition_penalty=1.0</code></li>
197 </ul>
198 </div>
199
200 ### Serving Ornith-1.5-9B
201
202 Ornith-1.5-9B is a dense ~9B model (≈19 GB in bf16), so it serves on a **single 80GB GPU**. The recipes below stand up an OpenAI-compatible server; add `--tensor-parallel-size` / `--tp` if you want to shard across more GPUs.
203
204 * vLLM
205
206 ```bash
207 vllm serve ornith-ai/Ornith-1.5-9B --served-model-name Ornith-1.5-9B --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
208 ```
209
210 * SGLang
211
212
213 ```bash
214 python -m sglang.launch_server --model-path ornith-ai/Ornith-1.5-9B --served-model-name Ornith-1.5-9B --host 0.0.0.0 --port 8000 --context-length 262144 --mem-fraction-static 0.85 --tool-call-parser qwen3_coder --reasoning-parser qwen3
215 ```
216
217 #### For Long-Context
218
219 Ornith-1.5-9B handles 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.
220
221 You can turn YaRN on in either of two ways:
222
223 - **Edit the checkpoint's `config.json`.** Add a `rope_scaling` block to the model configuration:
224
225 ```json
226 {
227 "rope_scaling": {
228 "rope_type": "yarn",
229 "factor": 4.0,
230 "original_max_position_embeddings": 262144
231 }
232 }
233 ```
234
235 - **Override at launch time.** Leave the checkpoint untouched and extend the serve commands above with the equivalent flags.
236
237 vLLM:
238
239 ```bash
240 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
241 ```
242
243 SGLang:
244
245 ```bash
246 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
247 ```
248
249 <div style="border-left:4px solid #FD8E5B;background:rgba(253,142,91,0.1);border-radius:6px;padding:12px 16px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;font-size:14px;line-height:1.6">
250 <div style="font-weight:700;color:#FD8E5B;margin-bottom:6px">📝 NOTE</div>
251 <p style="margin:0">Open-source runtimes implement YaRN <i>statically</i>: the same scaling factor is applied to every request regardless of its length, which can slightly hurt quality on ordinary-length inputs. Only enable <code style="background:rgba(253,142,91,0.15);padding:1px 5px;border-radius:4px">rope_scaling</code> when your workload genuinely needs the longer window, and size <code style="background:rgba(253,142,91,0.15);padding:1px 5px;border-radius:4px">factor</code> to match it — the target window is roughly <code style="background:rgba(253,142,91,0.15);padding:1px 5px;border-radius:4px">factor</code> × 262,144, so if your requests top out around 524,288 tokens, <code style="background:rgba(253,142,91,0.15);padding:1px 5px;border-radius:4px">factor: 2.0</code> is the better setting.</p>
252 </div>
253
254 ### Using Ornith-1.5-9B via the Chat Completions API
255
256 Once a vLLM or SGLang server is running, talk to it with any OpenAI-compatible client.
257
258 #### Basic Usage
259
260 ```python
261 from openai import OpenAI
262
263 client = OpenAI(
264 base_url="http://localhost:8000/v1",
265 api_key="EMPTY", # any non-empty string works for a local server
266 )
267
268 response = client.chat.completions.create(
269 model="Ornith-1.5-9B",
270 messages=[
271 {"role": "user", "content": "Write a one-line Python lambda that squares a number."}
272 ],
273 temperature=0.6,
274 top_p=0.95,
275 max_tokens=1024,
276 )
277
278 message = response.choices[0].message
279 # reasoning_content holds the <think> trace; content holds the final answer.
280 print("reasoning:", getattr(message, "reasoning_content", None))
281 print("answer:", message.content)
282 ```
283
284 You can also stream tokens, or hand the model tools — Ornith-1.5-9B emits well-formed function calls that the server parses into the standard `tool_calls` field:
285
286 ```python
287 tools = [
288 {
289 "type": "function",
290 "function": {
291 "name": "get_weather",
292 "description": "Get the current weather for a city",
293 "parameters": {
294 "type": "object",
295 "properties": {"city": {"type": "string"}},
296 "required": ["city"],
297 },
298 },
299 }
300 ]
301
302 response = client.chat.completions.create(
303 model="Ornith-1.5-9B",
304 messages=[{"role": "user", "content": "What is the weather in Paris right now?"}],
305 tools=tools,
306 tool_choice="auto",
307 temperature=0.6,
308 max_tokens=2048,
309 )
310
311 tool_call = response.choices[0].message.tool_calls[0]
312 print(tool_call.function.name, tool_call.function.arguments)
313 # -> get_weather {"city": "Paris"}
314 ```
315
316 You can point any OpenAI-compatible SDK (Python, Node.js, etc.) or `curl` at the same `/v1/chat/completions` endpoint.
317
318
319 ## Agentic Usage
320
321 Ornith-1.5-9B exposes an OpenAI-compatible endpoint with tool calling, it works out of the box with standard agent frameworks.
322
323 **Examples of using Ornith with agents:**
324
325
326 #### Ollama
327 ```bash
328 ollama run ornith-1.5:9b
329 ```
330
331
332 #### Atomic.chat
333 ```bash
334 # Both runtimes load a GGUF build of Ornith (publish one at ornith-ai/Ornith-1.5-9B-GGUF).
335
336 # llama.cpp — serve an OpenAI-compatible API on port 8000.
337 llama-server -hf hf.co/ornith-ai/Ornith-1.5-9B-GGUF --port 8000 -c 262144
338 ```
339
340 #### llama.cpp
341 ```bash
342 # Both runtimes load a GGUF build of Ornith (publish one at ornith-ai/Ornith-1.5-9B-GGUF).
343
344 # llama.cpp — serve an OpenAI-compatible API on port 8000.
345 llama-server -hf hf.co/ornith-ai/Ornith-1.5-9B-GGUF --port 8000 -c 262144
346 ```
347
348 #### Hermes Agent
349 ```bash
350 # Hermes talks to any OpenAI-compatible endpoint — point it at your Ornith server.
351 export OPENAI_BASE_URL="http://localhost:8000/v1"
352 export OPENAI_API_KEY="EMPTY"
353 export MODEL="ornith-ai/Ornith-1.5-9B"
354 ```
355
356 #### OpenClaw
357
358 ```bash
359 # OpenClaw talks to any OpenAI-compatible endpoint — point it at your Ornith server.
360 export OPENAI_BASE_URL="http://localhost:8000/v1"
361 export OPENAI_API_KEY="EMPTY"
362 export OPENAI_MODEL="ornith-ai/Ornith-1.5-9B"
363 ```
364
365 #### Unsloth Studio
366
367 ```bash
368 pip install unsloth
369
370 # Load Ornith for fast local inference or fine-tuning (Python):
371 # from unsloth import FastLanguageModel
372 # model, tokenizer = FastLanguageModel.from_pretrained(
373 # "unsloth/Ornith-1.5-9B-GGUF",
374 # max_seq_length=262144,
375 # load_in_4bit=True,
376 # )
377 ```
378
379
380 ### Coding CLIs
381
382 Ornith-1.5-9B is optimized for terminal-based coding agents. Point any OpenAI-compatible coding CLI at your Ornith-1.5-9B endpoint (set `OPENAI_BASE_URL` and `OPENAI_API_KEY`) to understand large codebases, automate tedious work, and ship faster.
383
384 #### OpenCode
385 ```bash
386 # Register your local Ornith endpoint as a provider in ~/.config/opencode/opencode.json:
387 #
388 # {
389 # "$schema": "https://opencode.ai/config.json",
390 # "provider": {
391 # "ornith": {
392 # "npm": "@ai-sdk/openai-compatible",
393 # "name": "Ornith (local)",
394 # "options": { "baseURL": "http://localhost:8000/v1", "apiKey": "EMPTY" },
395 # "models": { "ornith-ai/Ornith-1.5-9B": { "name": "Ornith-1.5-9B" } }
396 # }
397 # }
398 # }
399
400 opencode
401 ```
402
403 ### Citation
404
405 If you find our work helpful, feel free to give us a cite.
406
407 ```bibtex
408 @misc{ornith_1_5,
409 title = {{Ornith-1.5}: From Self-Scaffolding to Self-Improvement},
410 url = {https://ornith.ai/ornith_1_5.html},
411 author = {{Ornith Team}},
412 year = {2026}
413 }
414 ```
415