Views
No views yet


| Ornith-1.5-9B | Ornith-1.0-9B | Qwen3.5-9B | Qwen3.6-35B-A3B | Gemma-4-31B | |
|---|---|---|---|---|---|
| Coding | |||||
| Terminal-Bench 2.1 (Terminus-2) | 46.2 | 43.1 | 21.3 | 52.5 | 42.1 |
| Terminal-Bench 2.1 (Claude Code) | 47 | 40.6 | 18.9 | 49.2 | - |
| SWE-bench Verified | 70.6 | 69.4 | 53.2 | 73.4 | 52 |
| SWE-bench Pro | 47.5 | 42.9 | 31.3 | 49.5 | 35.7 |
| SWE-bench Multilingual | 54.4 | 52 | 39.7 | 67.2 | 51.7 |
| NL2Repo | 32.4 | 27.2 | 16.2 | 29.4 | 15.5 |
| SWE Atlas - QnA | 20.6 | 17.9 | 9.2 | 15.5 | - |
| Reasoning | |||||
| HLE (no tools) | 20.2 | 16.8 | 14.7 | 21.4 | 19.5 |
| HLE (with tools) | 30.5 | 26.4 | 24.5 | 28.9 | 26.5 |
| GPQA Diamond | 86.4 | 82.5 | 81.7 | 86 | 84.3 |
| Agentic | |||||
| MCP-Atlas | 54.2 | 49.4 | 46.8 | 62.8 | 55 |
| Toolathlon-Verified | 41.2 | 33.4 | 29.6 | 41.7 | 52.8 |
| WideSearch | 59.5 | 55.8 | 53.6 | 60.1 | 54.2 |
| BrowseComp | 56.4 | 44.8 | 41.5 | 62 | - |
| ClawEval | 66.5 | 63.1 | 53.2 | 68.7 | 48.5 |
<think> … </think> 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 <tool_call> blocks are surfaced as OpenAI-style tool_calls.temperature=1.0, top_p=0.95, top_k=20, min_p=0.0, presence_penalty=1.5, repetition_penalty=1.0temperature=0.6, top_p=0.95, top_k=20, min_p=0.0, presence_penalty=0.0, repetition_penalty=1.0--tensor-parallel-size / --tp if you want to shard across more GPUs.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-codepython -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 qwen3config.json. Add a rope_scaling block to the model configuration:1{
2 "rope_scaling": {
3 "rope_type": "yarn",
4 "factor": 4.0,
5 "original_max_position_embeddings": 262144
6 }
7}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 1000000SGLANG_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 1000000rope_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.1from openai import OpenAI
2
3client = OpenAI(
4 base_url="http://localhost:8000/v1",
5 api_key="EMPTY", # any non-empty string works for a local server
6)
7
8response = client.chat.completions.create(
9 model="Ornith-1.5-9B",
10 messages=[
11 {"role": "user", "content": "Write a one-line Python lambda that squares a number."}
12 ],
13 temperature=0.6,
14 top_p=0.95,
15 max_tokens=1024,
16)
17
18message = response.choices[0].message
19# reasoning_content holds the <think> trace; content holds the final answer.
20print("reasoning:", getattr(message, "reasoning_content", None))
21print("answer:", message.content)tool_calls field:1tools = [
2 {
3 "type": "function",
4 "function": {
5 "name": "get_weather",
6 "description": "Get the current weather for a city",
7 "parameters": {
8 "type": "object",
9 "properties": {"city": {"type": "string"}},
10 "required": ["city"],
11 },
12 },
13 }
14]
15
16response = client.chat.completions.create(
17 model="Ornith-1.5-9B",
18 messages=[{"role": "user", "content": "What is the weather in Paris right now?"}],
19 tools=tools,
20 tool_choice="auto",
21 temperature=0.6,
22 max_tokens=2048,
23)
24
25tool_call = response.choices[0].message.tool_calls[0]
26print(tool_call.function.name, tool_call.function.arguments)
27# -> get_weather {"city": "Paris"}curl at the same /v1/chat/completions endpoint.ollama run ornith-1.5:9b1# Both runtimes load a GGUF build of Ornith (publish one at ornith-ai/Ornith-1.5-9B-GGUF).
2
3# llama.cpp — serve an OpenAI-compatible API on port 8000.
4llama-server -hf hf.co/ornith-ai/Ornith-1.5-9B-GGUF --port 8000 -c 2621441# Both runtimes load a GGUF build of Ornith (publish one at ornith-ai/Ornith-1.5-9B-GGUF).
2
3# llama.cpp — serve an OpenAI-compatible API on port 8000.
4llama-server -hf hf.co/ornith-ai/Ornith-1.5-9B-GGUF --port 8000 -c 2621441# Hermes talks to any OpenAI-compatible endpoint — point it at your Ornith server.
2export OPENAI_BASE_URL="http://localhost:8000/v1"
3export OPENAI_API_KEY="EMPTY"
4export MODEL="ornith-ai/Ornith-1.5-9B"1# OpenClaw talks to any OpenAI-compatible endpoint — point it at your Ornith server.
2export OPENAI_BASE_URL="http://localhost:8000/v1"
3export OPENAI_API_KEY="EMPTY"
4export OPENAI_MODEL="ornith-ai/Ornith-1.5-9B"1pip install unsloth
2
3# Load Ornith for fast local inference or fine-tuning (Python):
4# from unsloth import FastLanguageModel
5# model, tokenizer = FastLanguageModel.from_pretrained(
6# "unsloth/Ornith-1.5-9B-GGUF",
7# max_seq_length=262144,
8# load_in_4bit=True,
9# )OPENAI_BASE_URL and OPENAI_API_KEY) to understand large codebases, automate tedious work, and ship faster.1# Register your local Ornith endpoint as a provider in ~/.config/opencode/opencode.json:
2#
3# {
4# "$schema": "https://opencode.ai/config.json",
5# "provider": {
6# "ornith": {
7# "npm": "@ai-sdk/openai-compatible",
8# "name": "Ornith (local)",
9# "options": { "baseURL": "http://localhost:8000/v1", "apiKey": "EMPTY" },
10# "models": { "ornith-ai/Ornith-1.5-9B": { "name": "Ornith-1.5-9B" } }
11# }
12# }
13# }
14
15opencode1@misc{ornith_1_5,
2 title = {{Ornith-1.5}: From Self-Scaffolding to Self-Improvement},
3 url = {https://ornith.ai/ornith_1_5.html},
4 author = {{Ornith Team}},
5 year = {2026}
6}