README.md
21.2 KB · 442 lines · markdown Raw
1 ---
2 library_name: transformers
3 license: mit
4 license_link: https://huggingface.co/deepreinforce-ai/Ornith-1.0-9B-GGUF/blob/main/LICENSE
5 pipeline_tag: text-generation
6 ---
7
8
9 <img width="600px" src="assets/ornith_logo.png">
10
11 [![Ornith Blog](https://img.shields.io/badge/%F0%9F%A6%A2%EF%B8%8F%20Ornith%20Blog%20-FD8E5B)](https://deep-reinforce.com/ornith.html)
12
13
14 # Ornith-1.0-9B-GGUF
15
16
17 Aloha! 🌺 Today, we are releasing Ornith-1.0, a self-improving family of open-source models for agentic coding.
18
19 Highlights:
20
21 - **State-of-the-Art Coding Agents**: Available in 9B-Dense, 31B-Dense, 35B-MoE, and 397B-MoE (post-trained on top of Gemma 4 and Qwen 3.5), achieving state-of-the-art performance among open-source models of comparable size on coding benchmarks such as Terminal-Bench 2.1, SWE-Bench, NL2Repo and OpenClaw.
22 - **Self-Improving Training Framework**:  Ornith-1.0 employs RL to learn to generate not only solution rollouts, but also the scallfold that drive those rollouts. By jointly optimizing the scaffold and the resulting solution, the model discovers better search trajectories and generates higher-quality solutions.
23 - **Licence**: MIT licensed, globally accessible, and free from regional limitations.
24
25 <img style="width: 100%; max-width: 900px;" src="assets/ornith_9b_eval.png" alt="Ornith 9B Benchmark Results" title="Ornith 9B Benchmark Results">
26
27 ## Ornith 1.0 9B
28
29 This model card documents **Ornith-1.0-9B**, the most lightweight member of the Ornith family, designed for efficient single-GPU deployment.
30
31 ### Benchmarks
32
33
34 <div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;width:100%;margin:0 auto;padding:16px 0">
35 <table style="width:100%;table-layout:fixed;border-collapse:collapse;font-size:13px">
36 <thead><tr>
37 <th style="width:28%;padding:10px 7px;text-align:left;font-weight:600;border-bottom:2px solid #FD8E5B;color:#FD8E5B"></th>
38 <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.0-9B</th>
39 <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>
40 <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-35B</th>
41 <th style="width:14.40%;padding:10px 7px;text-align:center;font-weight:500;border-bottom:2px solid #FD8E5B;color:#FD8E5B;font-size:14px">Gemma4-12B</th>
42 <th style="width:14.40%;padding:10px 7px;text-align:center;font-weight:500;border-bottom:2px solid #FD8E5B;color:#FD8E5B;font-size:14px">Gemma4-31B</th>
43 </tr></thead>
44 <tbody>
45 <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 Coding</td></tr>
46 <tr>
47 <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>
48 <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)">43.1</td>
49 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">21.3</td>
50 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">41.4</td>
51 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">21</td>
52 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">42.1</td>
53 </tr>
54 <tr>
55 <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>
56 <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)">40.6</td>
57 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">18.9</td>
58 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">38.9</td>
59 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">-</td>
60 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">-</td>
61 </tr>
62 <tr>
63 <td style="padding:7px 7px;padding-left:20px;border-bottom:1px solid rgba(128, 128, 128, 0.15);">SWE-bench Verified</td>
64 <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)">69.4</td>
65 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">53.2</td>
66 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">70</td>
67 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">44.2</td>
68 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">52</td>
69 </tr>
70 <tr>
71 <td style="padding:7px 7px;padding-left:20px;border-bottom:1px solid rgba(128, 128, 128, 0.15);">SWE-bench Pro</td>
72 <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)">42.9</td>
73 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">31.3</td>
74 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">44.6</td>
75 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">27.6</td>
76 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">35.7</td>
77 </tr>
78 <tr>
79 <td style="padding:7px 7px;padding-left:20px;border-bottom:1px solid rgba(128, 128, 128, 0.15);">SWE-bench Multilingual</td>
80 <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)">52</td>
81 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">39.7</td>
82 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">60.3</td>
83 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">32.5</td>
84 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">51.7</td>
85 </tr>
86 <tr>
87 <td style="padding:7px 7px;padding-left:20px;border-bottom:1px solid rgba(128, 128, 128, 0.15);">NL2Repo</td>
88 <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)">27.2</td>
89 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">16.2</td>
90 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">20.5</td>
91 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">10.3</td>
92 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">15.5</td>
93 </tr>
94 <tr>
95 <td style="padding:7px 7px;padding-left:20px;border-bottom:1px solid rgba(128, 128, 128, 0.15);">Claw-eval Avg</td>
96 <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)">63.1</td>
97 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">53.2</td>
98 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">65.4</td>
99 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">32.5</td>
100 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">48.5</td>
101 </tr>
102 <tr>
103 <td style="padding:7px 7px;padding-left:20px;border-bottom:1px solid rgba(128, 128, 128, 0.15);">SWE Atlas - QnA</td>
104 <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)">17.9</td>
105 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">9.2</td>
106 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">13.2</td>
107 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">-</td>
108 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">-</td>
109 </tr>
110 <tr>
111 <td style="padding:7px 7px;padding-left:20px;border-bottom:1px solid rgba(128, 128, 128, 0.15);">SWE Atlas - RF</td>
112 <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)">16.6</td>
113 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">4.3</td>
114 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">10.2</td>
115 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">-</td>
116 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">-</td>
117 </tr>
118 <tr>
119 <td style="padding:7px 7px;padding-left:20px;border-bottom:1px solid rgba(128, 128, 128, 0.15);">SWE Atlas - TW</td>
120 <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)">15.3</td>
121 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">4.4</td>
122 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">9.8</td>
123 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">-</td>
124 <td style="padding:7px 7px;text-align:center;border-bottom:1px solid rgba(128, 128, 128, 0.15)">-</td>
125 </tr>
126 </tbody>
127 </table>
128
129 <p style="margin-top:12px;font-size:10px;opacity:0.7">
130 * 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/deepreinforce-ai/Ornith-1.0-397B/blob/main/chat_template.jinja), and modify Harbor to align with vLLM's reasoning_content key.<br/>
131 * 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/>
132 * SWE-Bench Verified, Pro and Multilingual: using OpenHands harness with temp=1.0, top_p=0.95, 256k context window.<br/>
133 * SWE Atlas QnA, RF, TW: using mini SWE agent harness with temp=1.0, top_p=0.95, 128K context window. Results are averaged over 5 runs.<br/>
134 * NL2Repo: with temperature=1.0, top_p=1.0, 400K context, 48K output and anti-hacking filters.<br/>
135 * ClawEval: An agentic code benchmark over real-user task distributions; temp=0.6 and 256K context.<br/>
136 </p>
137
138 </div>
139
140 ## Quickstart
141
142 <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">
143 <div style="font-weight:700;color:#FD8E5B;margin-bottom:6px">📝 NOTE</div>
144 <p style="margin:0 0 10px"><b>Ornith-1.0-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>
145 <p style="margin:0 0 6px">Serving Ornith-1.0-9B requires recent runtimes:</p>
146 <ul style="margin:0 0 10px;padding-left:20px">
147 <li><b>Transformers</b> ≥ 5.8.1</li>
148 <li><b>vLLM</b> ≥ 0.19.1</li>
149 <li><b>SGLang</b> ≥ 0.5.9</li>
150 </ul>
151 <p style="margin:0">Recommended sampling parameters: <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> (use <code style="background:rgba(253,142,91,0.15);padding:1px 5px;border-radius:4px">temperature=1.0</code> to reproduce the reported benchmark setup).</p>
152 </div>
153
154
155 ### Serving Ornith-1.0-9B
156
157 Ornith-1.0-9B is a dense ~9B model (≈19 GB in bf16), so it serves comfortably 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.
158
159 #### vLLM
160
161 ```bash
162 vllm serve deepreinforce-ai/Ornith-1.0-9B \
163 --served-model-name Ornith-1.0-9B \
164 --host 0.0.0.0 --port 8000 \
165 --max-model-len 262144 \
166 --gpu-memory-utilization 0.90 \
167 --enable-prefix-caching \
168 --enable-auto-tool-choice --tool-call-parser qwen3_xml \
169 --reasoning-parser qwen3 \
170 --trust-remote-code
171 ```
172
173 #### SGLang
174
175 ```bash
176 python -m sglang.launch_server \
177 --model-path deepreinforce-ai/Ornith-1.0-9B \
178 --served-model-name Ornith-1.0-9B \
179 --host 0.0.0.0 --port 8000 \
180 --context-length 262144 \
181 --mem-fraction-static 0.85 \
182 --tool-call-parser qwen3_coder \
183 --reasoning-parser qwen3
184 ```
185
186 #### Hugging Face Transformers
187
188 For a quick local test (or to script offline generation), load the model directly with Transformers. Make sure you have a recent release installed — see the [Transformers installation guide](https://huggingface.co/docs/transformers/installation); Ornith-1.0-9B requires `transformers >= 5.8.1`.
189
190 ```python
191 from transformers import AutoModelForCausalLM, AutoTokenizer
192
193 model_name = "deepreinforce-ai/Ornith-1.0-9B"
194
195 tokenizer = AutoTokenizer.from_pretrained(model_name)
196 model = AutoModelForCausalLM.from_pretrained(
197 model_name,
198 dtype="auto",
199 device_map="auto",
200 )
201
202 messages = [
203 {"role": "user", "content": "Write a Python function is_prime(n). Keep it short."}
204 ]
205 text = tokenizer.apply_chat_template(
206 messages,
207 tokenize=False,
208 add_generation_prompt=True,
209 )
210
211 inputs = tokenizer(text, return_tensors="pt").to(model.device)
212 generated = model.generate(
213 **inputs,
214 max_new_tokens=512,
215 do_sample=True,
216 temperature=0.6,
217 top_p=0.95,
218 top_k=20,
219 )
220 output_ids = generated[0][inputs.input_ids.shape[1]:]
221
222 # The reply contains a <think> ... </think> reasoning block followed by the answer.
223 content = tokenizer.decode(output_ids, skip_special_tokens=True)
224 print(content)
225 ```
226
227 To split the reasoning trace from the final answer, parse on the `</think>` marker:
228
229 ```python
230 text = tokenizer.decode(output_ids, skip_special_tokens=True)
231 if "</think>" in text:
232 reasoning, answer = text.split("</think>", 1)
233 reasoning = reasoning.replace("<think>", "").strip()
234 answer = answer.strip()
235 else:
236 reasoning, answer = "", text.strip()
237 ```
238
239 ### Using Ornith-1.0-9B via the Chat Completions API
240
241 Once a vLLM or SGLang server is running, talk to it with any OpenAI-compatible client.
242
243 #### Basic Usage
244
245 ```python
246 from openai import OpenAI
247
248 client = OpenAI(
249 base_url="http://localhost:8000/v1",
250 api_key="EMPTY", # any non-empty string works for a local server
251 )
252
253 response = client.chat.completions.create(
254 model="Ornith-1.0-9B",
255 messages=[
256 {"role": "user", "content": "Write a one-line Python lambda that squares a number."}
257 ],
258 temperature=0.6,
259 top_p=0.95,
260 max_tokens=1024,
261 )
262
263 message = response.choices[0].message
264 # reasoning_content holds the <think> trace; content holds the final answer.
265 print("reasoning:", getattr(message, "reasoning_content", None))
266 print("answer:", message.content)
267 ```
268
269 You can also stream tokens, or hand the model tools — Ornith-1.0-9B emits well-formed function calls that the server parses into the standard `tool_calls` field:
270
271 ```python
272 tools = [
273 {
274 "type": "function",
275 "function": {
276 "name": "get_weather",
277 "description": "Get the current weather for a city",
278 "parameters": {
279 "type": "object",
280 "properties": {"city": {"type": "string"}},
281 "required": ["city"],
282 },
283 },
284 }
285 ]
286
287 response = client.chat.completions.create(
288 model="Ornith-1.0-9B",
289 messages=[{"role": "user", "content": "What is the weather in Paris right now?"}],
290 tools=tools,
291 tool_choice="auto",
292 temperature=0.6,
293 max_tokens=2048,
294 )
295
296 tool_call = response.choices[0].message.tool_calls[0]
297 print(tool_call.function.name, tool_call.function.arguments)
298 # -> get_weather {"city": "Paris"}
299 ```
300
301 You can point any OpenAI-compatible SDK (Python, Node.js, etc.) or `curl` at the same `/v1/chat/completions` endpoint.
302
303
304 ## Agentic Usage
305
306 Ornith-1.0-9B excels in tool-calling and agentic coding capabilities.
307
308 ### Agent Frameworks
309
310 Because Ornith-1.0-9B 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-1.0-9B to tools through an MCP server.
311
312 ```python
313 import os
314 from openai import OpenAI
315
316 client = OpenAI(
317 base_url=os.getenv("OPENAI_BASE_URL", "http://localhost:8000/v1"),
318 api_key=os.getenv("OPENAI_API_KEY", "EMPTY"),
319 )
320
321 tools = [
322 {
323 "type": "function",
324 "function": {
325 "name": "run_shell",
326 "description": "Run a shell command and return its output.",
327 "parameters": {
328 "type": "object",
329 "properties": {
330 "command": {"type": "string", "description": "The command to run"}
331 },
332 "required": ["command"],
333 },
334 },
335 }
336 ]
337
338 messages = [{"role": "user", "content": "List the Python files in the current directory."}]
339
340 response = client.chat.completions.create(
341 model="deepreinforce-ai/Ornith-1.0-9B",
342 messages=messages,
343 tools=tools,
344 temperature=0.6,
345 top_p=0.95,
346 )
347 print(response.choices[0].message)
348 ```
349
350 **Examples of using Ornith with agent harness:**
351
352 #### Hermes Agent
353 ```bash
354 # Hermes talks to any OpenAI-compatible endpoint — point it at your Ornith server.
355 export OPENAI_BASE_URL="http://localhost:8000/v1"
356 export OPENAI_API_KEY="EMPTY"
357 export MODEL="deepreinforce-ai/Ornith-1.0-9B"
358 ```
359
360
361 #### Atomic.chat / Ollama / llama.cpp
362 ```bash
363 # Both runtimes load a GGUF build of Ornith (publish one at deepreinforce-ai/Ornith-1.0-9B-GGUF).
364
365 # llama.cpp — serve an OpenAI-compatible API on port 8000.
366 llama-server -hf deepreinforce-ai/Ornith-1.0-9B-GGUF --port 8000 -c 262144
367
368 # Ollama — pull and chat with the same GGUF straight from Hugging Face.
369 ollama run hf.co/deepreinforce-ai/Ornith-1.0-9B-GGUF
370 ```
371
372 #### OpenClaw
373
374 ```bash
375 # OpenClaw talks to any OpenAI-compatible endpoint — point it at your Ornith server.
376 export OPENAI_BASE_URL="http://localhost:8000/v1"
377 export OPENAI_API_KEY="EMPTY"
378 export OPENAI_MODEL="deepreinforce-ai/Ornith-1.0-9B"
379 ```
380
381 #### Unsloth Studio
382
383 ```bash
384 pip install unsloth
385
386 # Load Ornith for fast local inference or fine-tuning (Python):
387 # from unsloth import FastLanguageModel
388 # model, tokenizer = FastLanguageModel.from_pretrained(
389 # "deepreinforce-ai/Ornith-1.0-9B",
390 # max_seq_length=262144,
391 # load_in_4bit=True,
392 # )
393 ```
394
395 #### OpenHands
396 ```bash
397 pip install openhands-ai
398
399 # OpenHands routes through LiteLLM; the "openai/" prefix selects the OpenAI-compatible path.
400 export LLM_MODEL="openai/deepreinforce-ai/Ornith-1.0-9B"
401 export LLM_BASE_URL="http://localhost:8000/v1"
402 export LLM_API_KEY="EMPTY"
403
404 # Launch the CLI (or run the official OpenHands Docker image with the same env vars).
405 openhands
406 ```
407
408 ### Coding CLIs
409
410 Ornith-1.0-9B is optimized for terminal-based coding agents. Point any OpenAI-compatible coding CLI at your Ornith-1.0-9B endpoint (set `OPENAI_BASE_URL` and `OPENAI_API_KEY`) to understand large codebases, automate tedious work, and ship faster.
411
412 #### OpenCode
413 ```bash
414 # Register your local Ornith endpoint as a provider in ~/.config/opencode/opencode.json:
415 #
416 # {
417 # "$schema": "https://opencode.ai/config.json",
418 # "provider": {
419 # "ornith": {
420 # "npm": "@ai-sdk/openai-compatible",
421 # "name": "Ornith (local)",
422 # "options": { "baseURL": "http://localhost:8000/v1", "apiKey": "EMPTY" },
423 # "models": { "deepreinforce-ai/Ornith-1.0-9B": { "name": "Ornith-1.0-9B" } }
424 # }
425 # }
426 # }
427
428 opencode
429 ```
430
431 ### Citation
432
433 If you find our work helpful, feel free to give us a cite.
434
435 ```bibtex
436 @misc{ornith_9b,
437 title = {{Ornith-1.0-9B}: Agentic Coding, Open to All},
438 url = {https://deep-reinforce.com/ornith_1_0.html},
439 author = {{DeepReinforce Team}},
440 year = {2026}
441 }
442 ```