啾啾!🐦 我们隆重推出 Ornith-1.5,这是在通过端到端自我提升来构建基础模型道路上迈出的重要一步。
Ornith-1.5 在 Ornith-1.0(基于 Qwen3.5 和 Gemma4 开发,并额外进行了持续预训练、中期训练和后训练)的基础上,将自我提升循环从脚手架与展开优化,扩展到对任务生成、脚手架构建和解决方案展开的联合优化。Ornith-1.5 不再依赖固定的人工策划任务集和手工设计的框架,而是持续生成新的训练任务,发现解决这些任务的有效策略,并通过强化学习改进策略。有关任务、框架和展开奖励设计的更多细节,请参阅我们的博客。
本模型卡片介绍的是 Ornith-1.5-35B-A3B,Ornith-1.5 系列中的中型混合专家模型。它每个 token 仅激活约 3B 参数,却在所有代码和智能体基准测试中显著超越了同规模的 Qwen 3.6-35B,并在智能体编码任务上以较大优势胜过 Gemma 4-31B 和 Muse Glimmer-30B 等密集模型。
| Ornith-1.5-35B-A3B | Ornith-1.0-35B-A3B | Qwen3.6-35B-A3B | Gemma-4-31B | Muse-Glimmer-30B | Qwen3.5-397B | |
|---|---|---|---|---|---|---|
| 代码 | ||||||
| Terminal-Bench 2.1 (Terminus-2) | 67.8 | 64.2 | 52.5 | 42.1 | 51.7 | 53.5 |
| Terminal-Bench 2.1 (Claude Code) | 68.5 | 62.8 | 49.2 | - | - | 48.6 |
| SWE-bench Verified | 79 | 75.6 | 73.4 | 52 | 76 | 76.4 |
| SWE-bench Pro | 59.6 | 50.4 | 49.5 | 35.7 | 51.2 | 51.6 |
| SWE-bench Multilingual | 71.4 | 69.3 | 67.2 | 51.7 | - | 69.3 |
| DeepSWE | 22 | 0 | 0 | - | - | 1 |
| Frontier-Bench v0.1 | 5.1 | 1.4 | 1.4 | - | - | 1.4 |
| NL2Repo | 46.2 | 34.6 | 29.4 | 15.5 | - | 36.8 |
| SWE Atlas - QnA | 39.8 | 37.1 | 15.5 | - | - | 20.4 |
| 推理 | ||||||
| HLE (无工具) | 25.6 | 20.8 | 21.4 | 19.5 | 22 | 28.7 |
| HLE (带工具) | 33.4 | 30.1 | 28.9 | 26.5 | - | 48.3 |
| GPQA Diamond | 89.2 | 86.2 | 86 | 84.3 | 83.5 | 88.4 |
| 智能体 | ||||||
| MCP-Atlas | 70.2 | 64.4 | 62.8 | 55 | 75.5 | 72.3 |
| Toolathlon-Verified | 48.7 | 42.4 | 41.7 | 40.8 | - | 38.3 |
| WideSearch | 67.8 | 63.4 | 60.1 | 54.2 | - | 74 |
| BrowseComp | 67.6 | 63.5 | 62 | - | - | 78.6 |
| ClawEval | 72.5 | 69.8 | 68.7 | 48.5 | - | 70.7 |
* Ornith-1.5 的所有结果均为五次独立运行的平均值。
* Terminal-Bench 2.1 (Terminus-2):我们使用 Harbor/Terminus-2 框架评估 Terminal-Bench 2.1,参数设置为 parser=json、temperature=1.0、top_p=1.0 以及 128K 上下文窗口。每次运行使用 4 小时超时,配备 32 个 CPU 核心和 48GB 内存,结果取 5 次运行的平均值。我们调整了 Qwen 聊天模板以确保训练与推理之间的一致性 (https://huggingface.co/ornith-ai/Ornith-1.5-35B-A3B/blob/main/chat_template.jinja),并修改了 Harbor 以与 vLLM 的 reasoning_content 键对齐。
* Terminal-Bench 2.1 (Claude Code):我们使用 Claude Code 2.1.126 评估 Terminal-Bench 2.1,参数设置为 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 上下文窗口。整个评估过程中应用了防作弊保障措施:从本地仓库镜像中移除 Git 历史记录,防止模型访问先前的解决方案或提交记录;禁用网络访问,防止模型获取外部信息或资源。
* DeepSWE:使用 Claude Code 框架评估,temperature=1.0、top_p=0.95、256K 上下文窗口。
* SWE Atlas QnA:使用 mini SWE agent 框架,temp=1.0、top_p=0.95、128K 上下文窗口。结果取 5 次运行的平均值。
* NL2Repo:temperature=1.0、top_p=1.0、400K 上下文、48K 输出。阻止访问指定的 GitHub 仓库和 pip 包以防止奖励作弊。
* HLE:使用 Claude 4.6 Opus 作为评判模型进行评估。
* MCP-Atlas:所有模型均在思考模式下对 500 个任务的公开子集进行评估,每个任务超时 10 分钟。我们使用 Claude 4.8 Opus 作为评判模型。
* Toolathlon-Verified:我们使用官方评估服务,最大 token 限制设置为 128K。
* ClawEval:基于真实用户任务分布的智能体代码基准测试;temp=0.6,256K 上下文。
Ornith-1.5-35B-A3B 是一个推理模型:默认情况下,助手回复会以<think> … </think>块开头,随后才是最终答案。以下部署方案启用了推理解析器,可将思维链内容单独返回到reasoning_content字段中;同时启用了工具调用解析器,可将模型的<tool_call>块以OpenAI风格的tool_calls形式呈现。
部署Ornith-1.5-35B-A3B需要较新的运行时环境:
推荐的采样参数:
temperature=0.6,top_p=0.95,top_k=20temperature=1.0Ornith-1.5-35B-A3B 是一个约35B参数的混合专家模型,每个token仅激活约3B参数(bf16精度下约70 GB)。以下方案可在2× 80GB GPU上搭建一个兼容OpenAI的服务器,为256K上下文留出足够余量;请根据你的硬件调整 --tensor-parallel-size / --tp 参数。
vllm serve ornith-ai/Ornith-1.5-35B-A3B \
--served-model-name Ornith-1.5-35B-A3B \
--host 0.0.0.0 --port 8000 \
--tensor-parallel-size 2 \
--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-35B-A3B \
--served-model-name Ornith-1.5-35B-A3B \
--host 0.0.0.0 --port 8000 \
--tp 2 \
--context-length 262144 \
--mem-fraction-static 0.85 \
--tool-call-parser qwen3_coder \
--reasoning-parser qwen3Ornith-1.5-35B-A3B 可处理高达 262,144 个 token 的上下文窗口。当某项任务的输入与输出合计超出此限制时,我们建议通过 RoPE 缩放来扩展有效窗口——YaRN 是我们验证过的方案,且已内置于 vLLM 和 SGLang 中。将缩放因子设为 4.0 后,可用窗口可扩展至约 100 万 token。
您可以通过以下两种方式启用 YaRN:
修改检查点的 config.json。 在模型配置中添加 rope_scaling 配置块:
{
"rope_scaling": {
"rope_type": "yarn",
"factor": 4.0,
"original_max_position_embeddings": 262144
}
}启动时覆盖配置。 保持检查点不变,在启动命令中附加等效参数。
vLLM:
VLLM_ALLOW_LONG_MAX_MODEL_LEN=1 vllm serve ornith-ai/Ornith-1.5-35B-A3B ... --hf-overrides '{"rope_scaling": {"rope_type": "yarn", "factor": 4.0, "original_max_position_embeddings": 262144}}' --max-model-len 1000000SGLang:
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开源运行时以静态方式实现 YaRN:无论请求长短,都会施加相同的缩放因子,这可能对普通长度输入的质量产生轻微影响。仅在您的任务确实需要更长窗口时才启用 rope_scaling,并将 factor 设置为匹配的规模——目标窗口约为 factor × 262,144,因此如果您的请求上限约为 524,288 个 token,则 factor: 2.0 是更合适的选择。
当 vLLM 或 SGLang 服务器运行后,即可使用任何兼容 OpenAI 的客户端与之通信。
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-35B-A3B",
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 <think> trace; content holds the final answer.
print("reasoning:", getattr(message, "reasoning_content", None))
print("answer:", message.content)您也可以流式传输令牌,或将工具交给模型——Ornith-1.5-35B-A3B 能够生成格式规范的函数调用,服务器会将其解析为标准 tool_calls 字段:
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-35B-A3B",
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"}您可以将任何兼容OpenAI的SDK(如Python、Node.js等)或curl指向同一个/v1/chat/completions端点。
Ornith-1.5-35B-A3B在工具调用和智能体编码方面表现出色。它提供了兼容OpenAI的端点,支持工具调用,并能与标准智能体框架开箱即用。
将Ornith与智能体结合使用的示例:
ollama run hf.co/ornith-ai/Ornith-1.5-35B-A3B-GGUF# Atomic.chat loads a GGUF build of Ornith (ornith-ai/Ornith-1.5-35B-A3B-GGUF)
# through llama.cpp's OpenAI-compatible API on port 8000.
llama-server -hf ornith-ai/Ornith-1.5-35B-A3B-GGUF --port 8000 -c 262144# llama.cpp — serve an OpenAI-compatible API on port 8000.
llama-server -hf ornith-ai/Ornith-1.5-35B-A3B-GGUF --port 8000 -c 262144# 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-ai/Ornith-1.5-35B-A3B"# 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-ai/Ornith-1.5-35B-A3B"pip install unsloth
# Load Ornith for fast local inference or fine-tuning (Python):
# from unsloth import FastLanguageModel
# model, tokenizer = FastLanguageModel.from_pretrained(
# "ornith-ai/Ornith-1.5-35B-A3B",
# max_seq_length=262144,
# load_in_4bit=True,
# )Ornith-1.5-35B-A3B 专为基于终端的编码代理优化。将任何兼容 OpenAI 的编码 CLI 指向你的 Ornith-1.5-35B-A3B 端点(设置 OPENAI_BASE_URL 和 OPENAI_API_KEY),即可理解大型代码库、自动化繁琐工作,并加速交付。
# 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-ai/Ornith-1.5-35B-A3B": { "name": "Ornith-1.5-35B-A3B" } }
# }
# }
# }
opencode如果您觉得我们的工作对您有帮助,欢迎引用我们。
@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}
}