Desarrollo IA

Open-Jev en Qwen: modelos que deciden sin generar

22 de septiembre de 2026
9 min de lectura
Modelos de decisión Open-Jev sobre Qwen 2B, 9B y 27B
Compartir:

Todo pipeline de agentes que shippeo tiene el mismo paso aburrido: obligar a un LLM a elegir una opción y rezar que el JSON parsee. Open-Jev ataca exactamente ese paso. Es un proyecto abierto e independiente de Zefan Cai que convierte checkpoints Qwen en modelos de decisión tipada: le pasás contexto más preguntas explícitas y devuelve probabilidades sobre tus opciones directo — sin texto autoregresivo ni JSON que parsear.

Leí la página del proyecto, los reportes de evaluación y ambas cards de Hugging Face para que no tengas que hacerlo vos. Abajo: la ficha de los adapters 2B/9B más el hermano DeBERTa 0.4B, qué mejora de verdad contra el prompting, un quickstart funcional, los límites honestos — incluyendo que el run de 27B sigue pendiente — y mi veredicto.

1. Ficha técnica: dos familias, una interfaz

Hay que separar dos artefactos. La línea principal es Open-Jev: adapters LoRA más un decision head escalar entrenados sobre Qwen3.5 2B y 9B. El hermano es com-kotobalabs/open-jev-deberta-v3-large: un encoder DeBERTa-v3-large de 0.4B con scoring head de 3 capas. Ambos exponen las mismas tres preguntas tipadas — choice, noul (probabilidad sí/no) y score (rúbrica ordenada) — y responden en un forward pass.

Open-Jev 2B

Adapter LoRA + decision head sobre Qwen3.5-2B. Accuracy hard-label 94,71% test / 86,02% OOD, auditado.

Open-Jev 9B

Adapter LoRA + decision head sobre Qwen3.5-9B. Accuracy hard-label 97,54% test / 91,97% OOD, auditado.

Open-Jev 27B

El run sobre Qwen3.8-27B empezó optimizer updates con 148.639 filas fijas. Resultados finales pendientes — sin accuracy para citar todavía.

Variante DeBERTa

0.4B params, choice hasta 255 opciones, score en 2–10 niveles, noul. 512 tokens total (estado cortado a 256). Apache-2.0.

Licencia

El código original de Open-Jev es MIT. Los paquetes requieren los pesos base Qwen pineados; la card de datos documenta exclusiones de redistribución con guía de reconstrucción.

Estado

Research preview, septiembre 2026. Checkpoints 2B/9B liberados; entreno 27B en curso; variante DeBERTa publicada en Hugging Face.

27B pendiente — dicho explícitamente

La página del proyecto es inequívoca: una nueva iteración 27B sobre 148.639 filas fijas empezó los optimizer updates y sus resultados finales están pendientes. Cada número de accuracy de este post pertenece a los checkpoints 2B/9B liberados. Tratá cualquier claim de 27B que veas por ahí como especulación hasta que la tabla auditada se actualice.

La escala held-out detrás de los titulares

Cada modelo completo se mide en 26.452 filas de decisión held-out, de las cuales 25.492 hard-label alimentan el accuracy (10.046 test + 15.446 OOD). Es un held-out serio, no un split demo de 200 preguntas — con el caveat de que las etiquetas son referencias sintéticas, como cubro en límites.

2. Qué mejora contra promptear un LLM

El pitch no es “modelo más inteligente” — es “primitiva tipada más barata”. Si tu pipeline ya obliga a un modelo grande a escupir una etiqueta, Open-Jev reemplaza esa llamada por un modelo chico que solo devuelve distribuciones. Los números son reportados por el proyecto y auditados según el reporte de evaluación — marco exactamente qué cubren y qué no.

📈

9B hard-label: 97,54% test / 91,97% OOD

2B con 94,71% / 86,02%97,54% / 91,97%

El adapter 9B gana ~3 puntos in-domain y ~6 OOD sobre el 2B en 25.492 filas hard-label. El OOD es el número que importa para routing real, y 92% ahí es genuinamente fuerte.

📈

Cero fallos de structured-output, por construcción

LLM + JSON schema + retriesUn forward pass → distribución

Nada se genera, así que no hay nada que parsear. La card DeBERTa lo dice sin vueltas: el error de structured-output es 0 por construcción. Cada loop flaky de parse-and-retry de tu harness desaparece.

📈

Hasta 255 opciones en un pass (DeBERTa)

Batches de 52 opciones en la línea Qwen255 opciones, un solo pass

La variante 0.4B puntúa cada opción en un forward pass — banking77 intent sobre 77 opciones llega a 0,916 de accuracy. Para routing de intents con label sets grandes, ese es todo el partido.

📈

Probabilidades calibradas, no vibes

Confianza verbalizadaECE 0,022 in-domain

Temperatura post-hoc ajustada en split de validación da ECE de 0,022 in-domain (DeBERTa) y temperatura guardada de ~1,897 en el 9B. Estos números sí se pueden thresholdear.

📈

Existe un tier viable en CPU

Serving clase H1000.4B en CPU

La variante DeBERTa corre fp32 en CPU M1 Max (1,8 s para 4 preguntas) y 28 ms end-to-end para 10 preguntas en una H100, 518 preguntas/s en batch 8. El routing deja de pedir una GPU por llamada.

📈

Receta pública y mínima

Destilación opacaLoRA r8 + head, datos públicos

9B: 20.204 optimizer steps en batch 4, LoRA rank 8 / alpha 16, head iniciado del readout Yes-minus-No. DeBERTa: 18.000 estados / 42.000 preguntas, 1 epoch, ~229 s en una H100. Podés reproducir la forma de esto.

Dónde entra JevBench

Aparte, el proyecto corrió el subset público de JevBench — 231 de 534 tareas, el resto privadas — sobre los checkpoints 2B/9B liberados. El orden de candidatos difiere en 119 de 139 tareas choice y el timing es diagnóstico, no speedup normalizado por hardware. Contexto útil, no titular; la tabla auditada full-data de arriba es el número a citar.

3. Quickstart: decisiones en minutos

Dos caminos verificados. La variante DeBERTa es lo más rápido que podés correr hoy — el snippet sale directo de la model card. Los adapters Qwen piden sus pesos base pineados más el loader de Open-Jev, así que te doy los punteros exactos en vez de comandos inventados.

Opción A — DeBERTa 0.4B (pip + decide, de la card)

# pip install torch transformers safetensors huggingface_hub sentencepiece protobuf
import sys; sys.path.insert(0, “<path to this repo snapshot>”)
from typed_decisions.open_jev import OpenJev

m = OpenJev.from_pretrained(“com-kotobalabs/open-jev-deberta-v3-large”)
m.decide(
    “Me cobraron dos veces el mismo pedido. Quiero mi dinero ya.”,
    [{“type”: “choice”, “instructions”: “¿De qué área es el mensaje?”,
      “options”: [“fees & charges”, “refund & dispute”, “card”, “other”]},
     {“type”: “noul”, “instructions”: “The customer is asking for a refund.”}])
# → [{’choice’: ..., ’probabilities’: {...}, ’confidence’: ...}, {’noul’: ...}]

Opción B — Adapters Qwen de Open-Jev (repo + checkpoints)

git clone https://github.com/Zefan-Cai/Open-Jev
# checkpoints: https://huggingface.co/collections/ZefanCai/open-jev
#   ZefanCai/Open-Jev-2B y ZefanCai/Open-Jev-9B
# splits + manifests: https://huggingface.co/datasets/ZefanCai/Open-Jev
# NOTA: los adapters exigen la revisión upstream Qwen exacta
# indicada en cada paquete (ej. 9B → c202236235762e1c871ad0ccb60c8ee5ba337b9a)

Opción C — Chequeo antes de confiar

# 1. Re-corré los inputs de la comparación de 76 casos con tus etiquetas.
# 2. Re-calibrá temperatura con TUS datos (OOD sobre-confía ~0,03).
# 3. Shuffeá el orden de opciones dos veces — los modelos entrenan
#    consistencia de orden, pero tu harness debe verificarlo por deploy.

Notas de serving que importan

Un AutoPeftModel genérico de text-generation no implementa la interfaz de decisión — tenés que usar el loader de Open-Jev para que apliquen el decision head separado y la temperatura guardada. El prefix caching es opt-in y viene apagado en las mediciones reportadas; dejalo off hasta reproducir el baseline.

Tip: empezá con el 0.4B, graduáte al 9B

Prototipá routing, clasificación de intents y guardrails en la variante DeBERTa — corre en CPU y sus límites están documentados por subgrupo. Pasá al adapter 9B solo cuando el accuracy OOD en tus propias etiquetas justifique una GPU en el loop.

4. Límites honestos

Los modelos de decisión parecen magia hasta que leés las tablas por subgrupo. Esto es lo que revisaría antes de meter cualquiera de estos en un path productivo.

⚠️

Etiquetas sintéticas, no win rates de tarea

Los 94–97% miden acuerdo con etiquetas sintéticas de referencia, no gameplay ni completion de workflows. Una auditoría posterior encontró acciones equivalentes y detalles de policy omitidos. Alto acuerdo no prueba que tu workflow complete.

⚠️

Los agregados esconden subgrupos débiles

Wiki OOD del 9B: 32,74% de accuracy esperada, reasoning OOD 73,60%, y el slice T-Rex de test tiene solo 4 filas. Si tu workload se parece a los slices débiles en vez del promedio, el titular no te aplica.

⚠️

El 27B todavía no existe como resultado

Los optimizer updates arrancaron sobre 148.639 filas fijas, con una etapa comunitaria de 96.849 filas encolada detrás. La página dice claro que ni la preparación ni el progreso implican ganancia de accuracy. No planifiques capacidad sobre números 27B.

⚠️

DeBERTa: solo inglés, 512 tokens, tres dominios

Soporte bancario, reviews de cine, sí/no sobre Wikipedia — lo demás es out-of-distribution y hay que medirlo primero. Las escalas ordenadas no vistas son lo más débil (0,45 en level sets nuevos vs 0,26 de mayoría). El estado se corta a 256 tokens de los 512 totales.

⚠️

Los datos traen exclusiones de redistribución

La card del dataset documenta exclusiones de redistribución y guía de reconstrucción de las mezclas originales en vez de una descarga plana. El código es MIT, pero datos y pesos Qwen conservan sus licencias — leé ambas antes de uso comercial.

Lo que yo no haría

No citaría el 97,54% sin el número OOD al lado, no deployaría en nombre del 27B antes de resultados auditados, y no saltearía la re-calibración en mis datos — el ~0,03 de sobre-confianza OOD es poco hasta que decide un refund.

5. Veredicto: quién debería adoptarlo

Si tu harness obliga a modelos grandes a emitir etiquetas, Open-Jev es hoy el recorte de costo más elegante en abierto: un adapter 9B con ~92% de acuerdo OOD y outputs calibrados, más una variante 0.4B en CPU que elimina el loop parse-retry. Empezá con el snippet DeBERTa sobre tus etiquetas hoy mismo.

Si necesitás generación, argumentos o contexto largo, este no es tu modelo — elige entre opciones que vos le das, nada más. Y si tu superficie de decisión es multilingüe o lejos de los tres dominios de entreno, medí OOD primero: el gap 0,854 → 0,690 in-domain a OOD en la variante chica es el anticipo honesto de lo que espera.

Mi decisión

Adopción con medición para routing, guardrails y verifiers de agentes — 9B donde la GPU sea pagable, 0.4B en todo lo demás. Mirá el run 27B, pero no lo planifiques. Es el raro release abierto cuya sección de límites vale tanto como su tabla de accuracy.

Conclusión

Open-Jev reformula la historia de los modelos chicos: en vez de un generador peor, tenés un decisor mejor. Probabilidades directas, interfaz tipada de tres palabras, números 2B/9B auditados y un hermano CPU-tier lo hacen la respuesta abierta más limpia a la forma de Jev que vi — con el 27B todavía pregunta abierta, como los propios autores dicen.

Cada cifra sale de las dos fuentes de abajo, con los pendientes y puntos débiles marcados, no escondidos. Si lo bencheás en tus labels de routing, quiero saber tu delta OOD.

Machete

  • • LoRA + decision head en Qwen3.5 2B (94,71%/86,02%) y 9B (97,54%/91,97%), auditado en 26.452 filas held-out
  • • 27B en Qwen3.8: entreno iniciado, resultados pendientes — no existen números aún
  • • Hermano DeBERTa 0.4B: 255 opciones, viable en CPU, 0,854 in-domain / 0,690 OOD
Diego Rodriguez

Diego Rodriguez

Ingeniero Senior Full-Stack & AI

Diego tiene mas de 9 anos de experiencia construyendo aplicaciones potenciadas por IA de produccion, desde orquestacion de LLMs y pipelines RAG hasta deteccion de riesgos con ML y sistemas de trading algoritmico.

Conoce mas sobre Diego