Model reference · open weights
Ornith-1.0 is an open-weight language model from ornith-ai. Ornith-1.0-35B-FP8 (FP8) weighs 37.7 GB; the smallest configuration that runs it is L40S 48 GB.
Summary of the ornith-ai/Ornith-1.0-35B model card, 2026-10-01. The estimate below is for another build of the family.
What it is
| Released by | ornith-ai |
|---|---|
| Released | 2026-06-21 |
| Parameters | 1M |
| VRAM | 37.7 GB for the weights |
What it runs on
| Card | Requests at once | Context max | Memory | |
|---|---|---|---|---|
| 8K each | 32K each | |||
| RTX 3060 12 GB … RTX 5090 32 GB 5 smaller cards | — | — | — | |
| L40S 48 GB | 12 | 4 | 175K | 44.0 GB |
| A100 80 GB FP8 without its speed-up here | 128 | 47 | all 256K | 78.2 GB |
| H100 80 GB | 106 | 39 | all 256K | 78.1 GB |
| RTX PRO 6000 Blackwell 96 GB | 159 | 59 | all 256K | 93.8 GB |
| DGX Spark (GB10) 128 GB unified | 204 | 75 | all 256K | 107 GB |
| H200 141 GB | 308 | 114 | all 256K | 138 GB |
| B200 180 GB | 430 | 159 | all 256K | 176 GB |
| 2× RTX 4090 24 GB tensor parallel | 13 | 5 | 188K | 23.4 GB a card |
| 2× RTX 3090 24 GB tensor parallel · FP8 without its speed-up here | 14 | 5 | 193K | 23.4 GB a card |
| 2× RTX 5090 32 GB tensor parallel | 65 | 24 | all 256K | 31.0 GB a card |
| 2× L40S 48 GB tensor parallel | 152 | 56 | all 256K | 44.0 GB a card |
| Requests at once | 8K tokens each | 32K tokens each |
|---|---|---|
| 1 | 40.4 GB | 41.0 GB |
| 5 | 41.6 GB | 44.2 GB |
| 8 | 42.5 GB | 46.6 GB |
| 16 | 44.9 GB | 52.9 GB |
| 32 | 49.6 GB | 65.7 GB |
| 64 | 59.1 GB | 91.3 GB |
One card, with vLLM's small-card settings.
Builds
| Build | Params | Precision | Weights | Smallest setup |
|---|---|---|---|---|
| Ornith-1.0-35B ↗ | 1M | BF16 | 70.2 GB | A100 80 GB |
| Ornith-1.0-35B-FP8 (above) ↗ | 35.1B | FP8 | 37.7 GB | L40S 48 GB |
| Ornith-1.0-397B-FP8 ↗ | 396.8B | FP8 | 405 GB | 4× H200 141 GB |
| Ornith-1.0-397B ↗ | 396.8B | BF16 | 794 GB | 8× H200 141 GB |
From the model card
Aloha! 🌺 Today, we are releasing Ornith-1.0, a self-improving family of open-source models for agentic coding.
Highlights:
This model card documents Ornith-1.0-35B, the lightweight member of the Ornith family, designed for efficient single-GPU deployment.
The two recipes below stand up an OpenAI-compatible server on a single 8×80GB GPU node (tensor-parallel 8). Adjust --tensor-parallel-size / --tp to the number of GPUs you have.
vllm serve deepreinforce-ai/Ornith-1.0-35B \
--served-model-name Ornith-1.0-35B \
--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
python -m sglang.launch_server \
--model-path deepreinforce-ai/Ornith-1.0-35B \
--served-model-name Ornith-1.0-35B \
--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 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; Ornith-1.0-35B requires transformers >= 5.8.1.
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "deepreinforce-ai/Ornith-1.0-35B"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
model_name,
dtype="auto",
device_map="auto",
)
messages = [
{"role": "user", "content": "Write a Python function is_prime(n). Keep it short."}
]
text = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True,
)
inputs = tokenizer(text, return_tensors="pt").to(model.device)
generated = model.generate(
**inputs,
max_new_tokens=512,
do_sample=True,
temperature=0.6,
top_p=0.95,
top_k=20,
)
output_ids = generated[0][inputs.input_ids.shape[1]:]
# The reply contains a ... reasoning block followed by the answer.
content = tokenizer.decode(output_ids, skip_special_tokens=True)
print(content)
To split the reasoning trace from the final answer, parse on the `` marker:
text = tokenizer.decode(output_ids, skip_special_tokens=True)
if "" in text:
reasoning, answer = text.split("", 1)
reasoning = reasoning.replace("", "").strip()
answer = answer.strip()
else:
reasoning, answer = "", text.strip()
Once a vLLM or SGLang server is running, talk to it with any OpenAI-compatible client.
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.0-35B",
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-1.0-35B emits well-formed function calls that the server parses into the standard tool_calls field:
tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get the current weather for a city",
"parameters": {
"type": "object",
"properties": {"citQuoted from the model card on Hugging Face. The full card is behind the Hugging Face link above.