5,63 GB en tu laptop y 70.6 en SWE-bench Verified: instalando Ornith-1.5-9B

Ornith publicó 1.5 en agosto en tres escalas — 397B MoE, 35B MoE y 9B denso — con pesos abiertos bajo MIT y cuantizaciones el mismo día para las tres. El titular que la empresa quiere que leas es el del modelo grande: el 397B saca 86.1 en Terminal-Bench 2.1 y queda al lado de Claude Opus 4.8. Muy bien. Tú no vas a correr un modelo de 397B, y yo tampoco.

El número que merece tu atención está en el otro extremo de la familia. El 9B saca 70.6 en SWE-bench Verified. Como referencia, el 397B en esa misma tabla saca 86. El modelo que es cuarenta y cuatro veces más chico conserva el 82% del puntaje — y el archivo que bajas para tenerlo pesa 5,63 GB.

Eso es una laptop. Vamos a instalarlo.

Qué se publicó de verdad, y qué te cuesta cada tamaño

Ornith subió todo a Hugging Face en la colección ornith-15 el mismo día: pesos en bf16 para los tres tamaños, GGUF para los tres, FP8 y NVFP4 para los dos MoE, y MLX para el 9B y el 35B. Todas las model cards que revisé declaran MIT. Vale la pena señalarlo porque la página del anuncio no usa la palabra “license” ni “MIT” en ningún lado — la licencia vive únicamente en las cards de Hugging Face.

Esta es la escalera de hardware honesta:

Modelo Arquitectura Lo que pide la card Camino local realista
Ornith-1.5-397B MoE 8× H200 141GB, tensor parallel 8 No va a pasar en tu escritorio
Ornith-1.5-35B-A3B MoE, ~3B activos/token 2× GPU de 80GB en bf16 (~70 GB) Quant GGUF, workstation
Ornith-1.5-9B Denso una GPU de 80GB en bf16 (~19 GB) Q4_K_M, 5,63 GB, cualquier laptop moderna

La guía de la propia card del 9B — “serves on a single 80GB GPU” — está escrita para alguien que alquila una H100. El repo GGUF está escrito para el resto de nosotros. Ese es el que quieres.

Cuantizaciones disponibles del 9B, con su peso real en disco:

  • Q4_K_M — 5,63 GB
  • Q5_K_M — 6,47 GB
  • Q6_K — 7,36 GB
  • Q8_0 — 9,53 GB
  • BF16 — 17,9 GB

Empieza con Q4_K_M. Si la salida te decepciona en tu trabajo real, sube un escalón antes de concluir que el modelo es malo — saltar a Q5_K_M te cuesta menos de un gigabyte.

Instalarlo: tres caminos

El rápido — Ollama

ollama run ornith-1.5:9b

Eso es todo. Ollama baja un build cuantizado y te deja en un chat. Si solo quieres saber si el modelo merece más de tu tiempo, gasta tres minutos acá primero.

El que te da control — llama.cpp

Ollama elige el quant por ti. llama.cpp te deja nombrarlo:

llama-server -hf ornith-ai/Ornith-1.5-9B-GGUF:Q4_K_M --port 8000

Eso te levanta un endpoint compatible con OpenAI en localhost:8000 al que puedes apuntar cualquier cliente. Cambia el tag después de los dos puntos para cambiar de quant — :Q5_K_M, :Q6_K, :Q8_0 — y llama.cpp descarga solo lo que pediste.

La card del 9B también trae la invocación a contexto completo:

llama-server -hf hf.co/ornith-ai/Ornith-1.5-9B-GGUF --port 8000 -c 262144

No arranques por ahí. Ese -c 262144 es el contexto máximo declarado del modelo, y en un 9B denso el KV cache a un cuarto de millón de tokens es bastante más grande que los 5,63 GB de pesos que acabas de bajar — lo que te va a matar el proceso es esa reserva de memoria, no el archivo del modelo. Ni la model card ni el repo GGUF publican una cifra de KV cache a ninguna longitud de contexto, que es exactamente el número que necesita alguien en una laptop y exactamente la columna que la tabla no tiene. Mídelo tú en lugar de adivinar: arranca en -c 8192, mira tu RAM, y duplica hasta encontrar tu techo. Después deja tu contexto de trabajo un escalón por debajo.

Apple Silicon — MLX

mlx_lm.chat --model "ornith-ai/Ornith-1.5-9B-MLX"

o como servidor:

mlx_lm.server --model "ornith-ai/Ornith-1.5-9B-MLX"

Una salvedad que importa en una Mac: el repo 9B-MLX pesa 17,9 GB y es bf16 — no es un build cuantizado. Si tienes 16 GB de memoria unificada, tu camino es GGUF por llama.cpp, no este.

Los parámetros de sampling no son opcionales

Ornith publica dos perfiles y la diferencia entre ellos es lo bastante grande como para que no corras con los defaults:

  • Uso general: temperature=1.0, top_p=0.95, top_k=20, min_p=0.0, presence_penalty=1.5, repetition_penalty=1.0
  • Código preciso: temperature=0.6, top_p=0.95, top_k=20, min_p=0.0, presence_penalty=0.0, repetition_penalty=1.0

Fíjate en el presence_penalty: 1.5 para chat, 0.0 para código. Es un salto más grande del que recomienda la mayoría de las model cards, y correr trabajo de código con el perfil general es la razón más probable de que tu primera sesión salga mal.

Es un modelo de razonamiento — cuenta con el bloque <think>

Textual de la card:

“Ornith-1.5-9B is a reasoning model: by default the assistant turn opens with a <think> … </think> block before the final answer.”

Es decir: por defecto el turno del asistente abre con un bloque de razonamiento antes de la respuesta final. Las recetas de arriba activan un reasoning parser que devuelve esa cadena de pensamiento en un campo aparte, reasoning_content, en vez de dejarla inline. Si estás cableando esto a tu propio cliente, maneja ese campo — si no, tus usuarios leen al modelo pensando en voz alta antes de que conteste. También significa que tu presupuesto de tokens por turno es más grande de lo que sugiere el largo de la respuesta, algo que conviene saber antes de fijar ese techo de contexto.

Estirar más allá de 262K

Si de verdad necesitas más de 262.144 tokens, la card da un bloque YaRN para la configuración:

{
    "rope_scaling": {
        "rope_type": "yarn",
        "factor": 4.0,
        "original_max_position_embeddings": 262144
    }
}

Un factor de 4.0 apunta a alrededor de 1M de tokens. Dada la realidad del KV cache de más arriba, trata esto como una opción de servidor, no de laptop.

Sobre el teléfono

El anuncio dice que el 9B, “with its quantized Ornith-1.5-9B-Mobile version, can be readily deployed on iPhone and Android devices”, y las tres model cards repiten la afirmación. Ese repo no está publicado. No está en la colección ornith-15, ninguna card lo enlaza, y una búsqueda en Hugging Face devuelve solamente 9B, 9B-GGUF y 9B-MLX. Anunciado, no publicado — así que lo del teléfono es una promesa por ahora, y los 5,63 GB del Q4_K_M en una laptop es lo que sí puedes hacer hoy.

Leer las tablas de benchmarks contra el vendor

Tres cosas sobre los números que la cobertura está aplanando.

Terminal-Bench 2.1 tiene dos columnas de harness, no una. Ornith reporta cada modelo bajo Terminus-2 y bajo Claude Code, y los puntajes divergen. El 397B saca 86.1 con Terminus-2 y 85.2 con Claude Code; el 9B saca 46.2 y 47.0 respectivamente. Si ves una comparación que cita 86.1 para el modelo grande y 47.0 para el chico, esos dos números vienen de harnesses distintos. Bajo uno solo, cualquiera de los dos es defendible — pero no los mezcles.

Ornith le gana a Opus en Terminal-Bench y pierde DeepSWE contra un tercer modelo. Terminus-2: Ornith-1.5-397B 86.1, Claude Opus 4.8 85.0. Con el harness de Claude Code: 85.2 contra 78.9, una ventaja más amplia. Pero en DeepSWE es Ornith 56.0, Opus 59.0 — y Kimi K3 se lleva esa columna con 67.5, muy por delante de los dos. El 35B saca 22 en DeepSWE. El 9B directamente no tiene columna de DeepSWE.

El 9B no gana su propia tabla. Le gana a Qwen3.5-9B con holgura (46.2 contra 21.3 en Terminal-Bench, 70.6 contra 53.2 en SWE-bench Verified) y le gana a Gemma-4-31B. Pero Ornith incluye a Qwen3.6-35B-A3B en esa misma tabla, y ese modelo gana las dos columnas — 52.5 y 73.4. Qwen3.6-35B-A3B también activa cerca de 3B parámetros por token, así que en una máquina con RAM suficiente para sostenerlo, la comparación que enfrenta de verdad alguien que corre local es 9B denso contra un 35B MoE con un presupuesto de cómputo por token parecido, y hoy la gana Qwen. El propio 35B-A3B de Ornith es la respuesta a eso — 68.5 y 79, diecinueve puntos por encima del de Qwen en Terminal-Bench — pero es un modelo de 70 GB en bf16, que es otra máquina.

Todas las cifras son auto-reportadas por Ornith, promediadas sobre cinco corridas independientes, a temperature 1.0 y top_p 1.0 en una ventana de contexto de 128K, con acceso a red deshabilitado e historial de Git removido de los entornos de tarea. Las medidas anti-trampa están mejor documentadas que en la mayoría de los vendors, y los números siguen siendo suyos.

Qué es Ornith-1.5 en realidad

El anuncio abre con: “Today, we are introducing Ornith-1.5, a major step toward building foundation models through end-to-end self-improvement.” Lee las model cards y aparece un cuadro más específico:

“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).”

Que Ornith-1.5 extiende a Ornith-1.0, que a su vez se construyó sobre Qwen3.5 y Gemma4. El 397B lleva el tag de arquitectura qwen3_5_moe. Las recetas de serving llaman a --tool-call-parser qwen3_xml y --reasoning-parser qwen3. La card dice sin vueltas que “we adjust the Qwen chat template to ensure consistency between training and inference”. En Hacker News el hilo llegó a la misma conclusión sin que nadie se lo dijera — colingauvin: “Ornith-1.5-397B is derived from Qwen3.5-397B-A17B via post-training. That process preserves exact parameter count.”

Así que Ornith-1.5 no es un foundation model entrenado desde cero. Son bases abiertas de Qwen y Gemma más un pipeline de post-training — y el pipeline es la parte genuinamente nueva, así que merece una descripción llana en vez de una descalificación.

El loop, en palabras de Ornith: el modelo “proposes new tasks, generates task-specific scaffolds, and produces solution rollouts” para reinforcement learning. La propuesta de tareas está condicionada — “given an environment or codebase, high-level instructions about the task type, and access to the model’s previous task-solving history, the system proposes progressively harder tasks.” El modelo escribe su propio currículum, construye el harness que lo califica y entrena con esos rollouts vía GRPO. Los deltas de 1.0 a 1.5 en las propias tablas de Ornith son lo más parecido a un resultado: el 9B va de 43.1 a 46.2 en Terminal-Bench y de 69.4 a 70.6 en SWE-bench Verified; el 35B va de 64.2 a 68.5 y de 75.6 a 79.

Una pregunta abierta que vale la pena marcar, porque Ornith no la aborda: las cards declaran MIT, pero Gemma4 se distribuye bajo los Gemma Terms of Use de Google, que no están aprobados por la OSI y traen restricciones de uso que MIT no tiene. Las cards de Ornith no llevan atribución ni mención de términos upstream. Para quien instala esto en una laptop, irrelevante. Para cualquiera que vaya a shipear un producto sobre estos pesos, conviene leer las dos licencias antes de comprometerse.

Conectarlo a un agente

La card del 9B lista Hermes Agent, OpenClaw, OpenCode, Ollama y Unsloth Studio como compatibles out of the box, y el endpoint expone tool calling estándar compatible con OpenAI con los tool_calls ya parseados. Así que si ya tienes un agente apuntando a una API hosteada, cambiar base_url a http://localhost:8000/v1 es la mayor parte de la migración.

Los puntajes agénticos son la razón honesta para probarlo en vez de asumir: el 9B marca 54.2 en MCP-Atlas y 41.2 en Toolathlon-Verified. No son números de frontera. Pero un comentarista de HN que está corriendo el 35B-A3B para trabajo real lo reportó “on par with Qwen3.8 27B at a much higher speed and at a higher quant” — a la par de Qwen3.8 27B, bastante más rápido y con mejor quant. Ese es el tipo de afirmación que conviene verificar contra tus propias tareas y no contra una tabla.


¿Alguna vez cambiaste un modelo hosteado por uno local en trabajo real — y qué se rompió primero, la calidad o la ventana de contexto? Cuéntanos en los comentarios, sobre todo si lograste correr Ornith-1.5-9B a un contexto que te deje conforme y en qué valor de -c terminaste.