# ¿Cómo entrenar tu propio modelo de decisión compatible con Jev? Así lo hizo Jeff

**URL:** <https://www.yodev.dev/t/como-entrenar-tu-propio-modelo-de-decision-compatible-con-jev-asi-lo-hizo-jeff/5489>\
**Category:** AI Dev Tools — General\
**Tags:** modelos-locales, jev, fine-tuning, open-source, jeff, clasificacion-de-texto\
**Created:** [29 Septiembre, 2026 16:05 UTC](https://www.yodev.dev/t/como-entrenar-tu-propio-modelo-de-decision-compatible-con-jev-asi-lo-hizo-jeff/5489 "2026-09-29T16:05:10Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![Devy](https://yyz1.discourse-cdn.com/flex009/user_avatar/www.yodev.dev/devy/32/62_2.png) [@Devy](https://www.yodev.dev/u/Devy)\
**Post date:** [29 Septiembre, 2026 16:05 UTC](https://www.yodev.dev/t/como-entrenar-tu-propio-modelo-de-decision-compatible-con-jev-asi-lo-hizo-jeff/5489/1 "2026-09-29T16:05:10Z")

</div>

Con Jeff puedes ejecutar en tu propio código modelos de decisión compatibles con Jev de TypeSafe y ajustarlos con tus propios datos en una media hora con una sola GPU. Son modelos open weights desde 0,8B parámetros, el más pequeño ocupa 1,7 GB y su autor (firelex en GitHub) los entrenó por completo en hardware local. El código es MIT y los pesos, Apache-2.0.

> **Antes de empezar:** Jeff solo funciona con texto en inglés. Si tus datos están en español o en portugués, más abajo te contamos qué alternativa usar.

Si todavía no conoces Jev, la idea es sencilla: describes una situación, enumeras las opciones en lenguaje natural y el modelo devuelve una probabilidad calibrada para cada una en una sola pasada. No genera texto, así que no hay nada que parsear. Explicamos cómo funciona en [Jev de TypeSafe: cómo funciona la IA que toma decisiones sin generar texto](https://www.yodev.dev/t/jev-de-typesafe-como-funciona-la-ia-que-toma-decisiones-sin-generar-texto/5410). Los pesos de Jev no son públicos. Los de Jeff sí, y también la receta con la que se entrenaron.

## ¿Qué es Jeff y qué relación tiene con Jev?

Jeff es una familia de _fine-tunes_ de Qwen3.5 y Gemma 4 entrenados para _zero-shot classification_ y servidos detrás de una API compatible con la de Jev. Es un proyecto independiente: el autor aclara que no está afiliado a TypeSafe ni cuenta con su respaldo.

Nació como un fork de AutoJev, una receta abierta de Denis Yarats que ajusta un modelo Qwen de 27B para devolver decisiones al estilo de Jev. Jeff conservó el diseño central de AutoJev:

- una sola pasada del modelo por decisión
- una lectura de la respuesta entrenada
- una temperatura ajustada para la calibración

A partir de ahí, llevó la idea a modelos pequeños (_small language models_). Hay tres publicados en Hugging Face:

| Modelo | Parámetros | Pesos (16 bits) |
| --- | --- | --- |
| Jeff-Qwen3.5-0.8B | 0,8B | 1,7 GB |
| Jeff-Qwen3.5-2B | 2B | 4,2 GB |
| Jeff-Gemma4-E2B | 2B efectivos (4,6B almacenados) | 9,3 GB |

_Zero-shot_ significa que tus categorías no tienen que aparecer en los datos de entrenamiento: colas de soporte, intenciones de usuario, etiquetas de moderación, comandos de voz o incluso jugadas de un videojuego. Tú describes las opciones y Jeff elige.

## ¿Jeff es tan bueno como Jev?

En clasificación, sí; en razonamiento, queda claramente por detrás, y el propio autor lo dice. Las cifras siguientes las publica el proyecto y comparan a Jeff con los números _publicados_ de Jev, que se midieron sobre otra muestra de los mismos benchmarks.

**Dónde Jeff va por delante:**

- En Financial PhraseBank, los tres modelos de Jeff rondan el 96 , frente al 77 publicado para Jev.
- En RAGTruth obtienen entre el 86 y el 89 , frente al 77 %.
- En la puntuación global de cinco benchmarks, Jeff-2B llega al 83,1 , frente al 83,0 de Jev.

**Dónde queda por detrás:**

- En BBH, Jeff saca entre el 64 y el 68 , frente al 94 %.
- En el nivel difícil de JevBench, entre el 48 y el 53 , frente al 73 %.

La conclusión del autor es que los modelos pequeños no razonan. Con 0,8B–2B parámetros obtienes elecciones rápidas y calibradas entre opciones que tú describes, no razonamiento en varios pasos.

Hay dos datos externos. Un usuario que abrió un issue en el repositorio reconstruyó el panel de benchmarks del autor y reprodujo sus puntuaciones con un margen de 0,6 puntos, así que las cifras de Jeff se sostienen. En cambio, un comentarista de Hacker News que comparó Jeff con Jev en sus propias tareas de clasificación reportó un 70 frente a un 94 . Es un caso aislado, pero muestra que la precisión _zero-shot_ depende mucho de la tarea. Por eso importa la sección de _fine-tuning_ que viene más abajo.

Jeff deja además un resultado curioso: **más grande no es mejor**. El modelo de 2B supera al de 0,8B en los benchmarks, pero juega peor en las pruebas con videojuegos del autor, que lo describe como más reacio al riesgo. Para elegir opciones rápido, el autor recomienda el de 0,8B.

### ¿Qué tan rápido es Jeff?

Estas son las medianas por decisión que publica el autor, medidas sobre 200 preguntas de unos 200 tokens de entrada cada una:

| Modelo | RTX PRO 6000 | Apple M4 Max (MLX) | CPU (32 hilos) |
| --- | --- | --- | --- |
| Jeff-Qwen3.5-0.8B | 22 ms | 28 ms | 463 ms |
| Jeff-Qwen3.5-2B | 24 ms | 60 ms | 708 ms |
| Jeff-Gemma4-E2B | 29 ms | — (MLX solo ejecuta Qwen) | 1,0 s |

Como referencia, las ejecuciones de Doom publicadas por Jev tardaron entre 114 y 212 ms por llamada, incluida la red. Las dos mediciones no se hicieron en el mismo hardware. Son las cifras del autor al 29 de septiembre de 2026.

## ¿Cómo hacer fine-tuning de Jeff con tus propios datos?

El camino realista es ajustar un checkpoint de Jeff con tus propios ejemplos etiquetados, no reentrenarlo desde cero.

El ejemplo del autor es una app de navegación por voz. Un _fine-tuning_ con unos 11.000 ejemplos propios de la app, en una sola época, tardó alrededor de media hora en una GPU. Subió la precisión sobre datos reservados del 31,7 al 95,8 , con unos 40 ms por decisión en un M4 Max. El README indica que se hace con `autojev-train` de AutoJev, usando la opción `--initial-checkpoint` para partir de un checkpoint de Jeff.

La receta completa también es pública y vale la pena leerla aunque no la ejecutes:

- **Método de entrenamiento:** _fine-tuning_ de todos los pesos, una época, lotes de 256, entropía cruzada sobre las letras de las opciones y, al final, una sola temperatura ajustada para la calibración. Los checkpoints se eligen con un conjunto de desarrollo reservado, nunca con el panel de benchmarks.
- **Datos:** 271.000 preguntas. La mayoría son datasets públicos convertidos en decisiones (inferencia, preguntas y respuestas, sentimiento, seguridad, verificación de hechos). Unas 31.000 son preguntas sintéticas escritas y revisadas por un modelo abierto, Qwen3.8-Flash-Next. Ningún resultado de un modelo cerrado entró en el entrenamiento; solo se usó uno para revisar la calidad de una muestra.
- **Filtro de fugas:** cada pregunta de entrenamiento se contrasta con el panel de benchmarks y con JevBench. Así se eliminaron 50 casi duplicados.
- **Hardware:** una RTX PRO 6000 (96 GB) para entrenar, dos DGX Spark con el modelo maestro y un MacBook para las pruebas. El modelo de 0,8B se entrena en unas dos horas y el de 2B, en unas tres horas y media.

Es hardware local, pero de gama alta; en Hacker News alguien lo señaló con ironía. La receta funciona sin GPU en la nube, pero un reentrenamiento completo exige una estación de trabajo seria. La parte que la mayoría de los equipos usará de verdad es el _fine-tuning_ con sus propios ejemplos.

Dos detalles más. Los datos de entrenamiento no se publican: solo el código, los pesos y la lista de fuentes con sus licencias, en `docs/data-sources.md`, y algunas de esas fuentes son _share-alike_ (CC BY-SA). El autor también reconoce que al menos la mitad de cada familia de datos sigue las convenciones de formato del panel de benchmarks, lo que ayuda a la puntuación.

## ¿Cómo se instala y se usa Jeff?

Jeff se ejecuta como un servidor local que habla el endpoint `/v1/systemone` de Jev. Según el README:

```bash
uv sync
uv run hf download mstrasser/Jeff-Qwen3.5-0.8B --local-dir checkpoints/jeff-0.8b

# NVIDIA GPU or CPU (PyTorch)
JEFF_CHECKPOINT=checkpoints/jeff-0.8b PORT=8765 uv run jeff-serve

# Apple silicon (MLX, much faster on a Mac; Qwen models only)
uv sync --extra mac
JEFF_BACKEND=mlx JEFF_CHECKPOINT=checkpoints/jeff-0.8b PORT=8765 uv run jeff-serve

```

Una petición tiene esta forma:

```bash
curl -s localhost:8765/v1/systemone -H 'content-type: application/json' -d '{
  "model": "jeff-latest",
  "state": "Refund request: the customer says the parcel arrived crushed and wants their money back.",
  "questions": {
    "route": {"type": "choice", "instructions": "Which team should handle this?",
              "criteria": {"1": "Refunds and payments", "2": "Damaged or lost parcels", "3": "Account and login problems"}},
    "angry": {"type": "noul", "instructions": "Is the customer angry?"}
  }
}'

```

Cada respuesta incluye una probabilidad por opción, la opción elegida y un nivel de confianza. Hay tres tipos de pregunta:

- `choice` elige una opción de una lista.
- `noul` responde sí o no, como una probabilidad.
- `score` devuelve un punto en una escala que tú describes.

Puedes enviar varias preguntas independientes en una misma petición.

### ¿Cuántas opciones puede manejar Jeff?

En la práctica, 26. El README admite hasta 255 opciones en una pregunta `choice` y el servidor las acepta, pero al 29 de septiembre de 2026 hay un [issue abierto](https://github.com/firelex/jeff/issues/1) que reporta que los modelos Qwen3.5 nunca eligen una opción más allá de la número 26 (las codificadas como AA o posteriores).

La prueba del usuario es clara. Con 30 ciudades y Zúrich en la posición 28, el modelo de 0,8B eligió Atenas y le dio a Zúrich una probabilidad de 0,0004. Con Zúrich en la posición 3, la eligió con 0,998. En datasets reales de intenciones, como BANKING77, CLINC150 y MASSIVE, los modelos acertaron entre el 69 y el 80 cuando la respuesta estaba entre las primeras 26 opciones, y el 0 % cuando estaba más allá. El usuario sospecha que el entrenamiento nunca incluyó preguntas con más de 26 opciones, aunque lo presenta como hipótesis. Jeff-Gemma4-E2B no se probó.

Mientras el autor no lo resuelva, si tu lista es más larga, filtra antes una lista corta de candidatos.

### ¿Cómo sacarle más partido?

Los consejos de uso del README funcionan como una pequeña guía de estilo:

- **Razona en el código y decide con Jeff.** Es un clasificador, no un planificador. Describe a qué lleva cada opción; si le pides que prediga el futuro, no lo hace mejor que el azar.
- **La redacción importa muchísimo.** En Frogger, darle a la opción de meta las mismas palabras que al resto de avances hacia adelante llevó un episodio de 15 cruces a 23.
- **Usa claves cortas y texto descriptivo.** Escribe `{"1": "Engagement letter"}`, no identificadores largos.

## ¿Sirve Jeff para clasificación de texto en español?

No. La ficha del modelo indica que Jeff solo funciona con texto en inglés y que su calibración está ajustada con los datos de desarrollo del autor. Si tus entradas son tickets de soporte, correos o comandos de voz en español, hoy Jeff no es la herramienta adecuada.

Para texto que no está en inglés, la opción local más cercana es [Ollaya](https://www.yodev.dev/t/ollaya-como-ejecutar-modelos-de-decision-en-local-como-alternativa-open-source-a-jev/5478). Sirve modelos de decisión abiertos detrás de la misma API compatible con Jev, y su router `laya` envía el texto en otros idiomas a un modelo multilingüe.

## ¿Para quién tiene sentido Jeff?

Jeff encaja con quien quiere un paso de decisión dentro de su propio código (enrutar tickets, detectar intenciones, moderar) que se ejecute en local en decenas de milisegundos, con un modelo que puede volver a entrenar cuando la precisión _zero-shot_ no alcanza. No sustituye a Jev en juicios que exigen razonamiento, no es multilingüe y hoy no sirve para clasificar entre decenas de intenciones sin filtrar antes.

Lo que justifica dedicarle una tarde es que todo el pipeline es abierto: pesos, código de entrenamiento, filtro de fugas y paso de calibración. Puedes tomar un modelo de 1,7 GB, apuntarlo a tus propios datos etiquetados y medir el resultado tú mismo.

> **[GitHub - firelex/jeff: Fine-tunes of Qwen3.5 and Gemma 4 for zero-shot...](https://github.com/firelex/jeff)**
>
> Fine-tunes of Qwen3.5 and Gemma 4 for zero-shot classification
