JMAX Centro de ayudaEnglish
Centro de ayuda › Guías paso a paso

Gestionar el harness: qué mira JMAX de sí mismo, y qué hacer con eso

JMAX mide cada turno: qué herramienta llamó, qué falló, qué le dijo al modelo para desatascarlo, si eso sirvió, cuánto tardó y con qué cerebro. Esta guía es para leer esos datos y decidir con ellos.

No hay pantalla todavía: se mira con un comando.


El comando

En PowerShell, que es lo que abre Windows por defecto:

cd D:\I+D-PROGRESO\inversagpt
& "$env:LOCALAPPDATA\Programs\JMAX\python\python.exe" scripts\ver_traza.py

El & del principio no es opcional: sin él, PowerShell trata la ruta entre comillas como texto y no la ejecuta. En cmd sería %LOCALAPPDATA% y sin &.

Hay que usar el Python de JMAX, no el del sistema: es el único que sabe abrir la base cifrada.

Se puede ejecutar con JMAX abierto — solo lee.

Variante Para qué
scripts\ver_traza.py El tablero completo
... --turnos 30 Más turnos en la lista
... --presupuestos Probar otros topes sobre lo ya grabado
... --repo La base de desarrollo en vez de la instalada

Si salen cuadraditos en vez de acentos: chcp 65001 antes del comando.


Cómo leer el tablero

Cada cerebro: qué cumple y qué le cuesta

modelo                          dónde   turnos  cumple  pasos   seg  puntaje  agotados
orcarouter/Qwen3.8-27B-Unc...   local       17    100%    5.2   129     76.6         0
Columna Qué dice Cuándo preocupa
dónde Si corre en tu equipo o en la nube Si dice nube y creías que era local, el presupuesto que se le aplica es el equivocado
cumple Turnos que acabaron con resultado Por debajo del 80 %
pasos Cuántas herramientas necesita de media Si sube con el tiempo, el modelo está dando vueltas
seg Cuánto tarda de media Más de 180 s en local es un usuario que se va
puntaje Resumen de todo lo anterior Sirve para comparar, no como nota
agotados Turnos cortados por presupuesto Cualquier número > 0 merece mirarse

agotados es la columna que más importa. Si sube con los modelos locales, el harness los está estrangulando y hay que darles más presupuesto.

Los últimos turnos

Una línea por turno, con ✓ si cumplió, ✗ si no, y ⚠ con el motivo si se agotó: «se alcanzó el tope de 28 pasos», «llevaba 180 segundos sin dar señales».

Las herramientas que más fallan

Ordenadas por fallos. El tiempo medio de cada una también sale aquí: una herramienta lenta gasta el presupuesto de reloj de todo el turno.

Pistas: cuáles desatascan y cuáles no

 66.7%  (2/3)  ui_click   La pantalla cambió desde el último ui_snapshot...
  0.0%  (0/4)  fs_read    Ese paso falló. No repitas la misma llamada...

Una pista «acierta» si, después de darla, el modelo volvió a llamar a esa misma herramienta y le salió bien.

Una pista que se da mucho y casi nunca desatasca es una pista mala: o el texto no dice qué hacer, o el modelo no puede hacerlo. Las del 0 % con muchas veces son las primeras que hay que reescribir.

Lo aprendido: qué desatasca cada error

fs:no existe ruta indicada      → fs_search (4x)

Sale solo, de mirar qué hizo el modelo después de cada fallo. Hacen falta tres casos del mismo error resueltos igual para que se atreva a aconsejar. Con menos, no dice nada — y eso es lo correcto: una pista equivocada manda al modelo por un camino que no lleva a ningún sitio.

Huecos: lo que nadie sabe resolver

Es la lista de trabajo. Cada línea es una pista que falta por escribir o una herramienta que hay que arreglar, ordenada por lo que molesta.

Escalera de desatasco

Qué peldaño se probó y si funcionó. Cuando uno acumule cinco casos, el orden se recalcula para ese modelo.


Probar otros topes sin gastar un token

& "$env:LOCALAPPDATA\Programs\JMAX\python\python.exe" scripts\ver_traza.py --presupuestos
  local (el de ahora)    turnos 20 · cumple 100.0% · ESTRANGULA 0 · ahorra 0.0s · puntaje 76.80
  apretado               turnos 20 · cumple  95.0% · ESTRANGULA 1 · ahorra 0.0s · puntaje 72.88

Corre cada configuración sobre los turnos ya grabados, sin llamar al modelo ni una vez.

La columna que manda es ESTRANGULA: turnos que salieron bien y que ese tope habría cortado antes de terminar. Un presupuesto que sube el puntaje estrangulando turnos buenos no es mejor, es más barato, que no es lo mismo.

Lo que NO puede decirte: el simulador solo conoce los pasos que de verdad ocurrieron. Sabe cuándo habría cortado; no sabe qué habría contestado el modelo con otra pista o con otro orden de la escalera. Para eso hay que volver a llamarlo.


Qué hacer ante cada hallazgo

Lo que ves Qué significa Qué hacer
agotados sube en local El presupuesto ahoga al modelo Subir LOCAL en jmax/core/presupuestos.py, o esperar a los 20 turnos para que se calcule solo
agotados siempre 0 y seg bajo Sobra margen Bajar el tope: los turnos perdidos se cortarán antes
Muchos turnos con ✗ El modelo no resuelve Mirar «herramientas que más fallan»: ¿es el modelo o es un conector roto?
Una pista al 0 % con 5+ veces El texto no dice qué hacer Reescribirla en _HINTS de harness.py
Un hueco con muchas veces Nadie sabe resolver ese error Escribir la pista, o arreglar la herramienta
pasos sube semana a semana El modelo da vueltas Revisar el selector de herramientas: quizá recibe demasiadas
Un turno con ⚠ «sin dar señales» El servidor de modelos se atragantó Comprobar que el servidor esté vivo; si pasa mucho, subir silencio

Cambiar los presupuestos

Los topes de partida están en jmax/core/presupuestos.py:

NUBE  = Presupuesto(pasos=40, segundos=300.0, desatascos=3, silencio=90.0)
LOCAL = Presupuesto(pasos=28, segundos=600.0, desatascos=2, silencio=180.0)

Un modelo local necesita menos pasos y más reloj que uno de nube: falla más pero cada intento tarda mucho más, así que el tope que muerde es el reloj.

silencio son los segundos sin que ocurra nada antes de dar el turno por perdido. Es el que evita que la ventana se quede muda cuando el servidor de modelos deja de contestar.

Cuando un modelo acumule 20 turnos cumplidos, sus topes dejan de salir de esa tabla y se calculan de sus propios percentiles (p75 de pasos, p90 de segundos, con un 50 % de holgura), con suelo y techo para que nunca se quede sin margen ni deje al usuario media hora esperando.

Antes de cambiar nada a ojo, pruébalo con --presupuestos: para eso está.


Rutina sugerida

Cada semana, cinco minutos:

  1. Corre el visor.
  2. Mira agotados y cumple por cerebro.
  3. Mira los huecos: si alguno creció, ahí está el trabajo de la semana.
  4. Si cambiaste algo la semana pasada, compara el puntaje con el anterior.

Al cerrar un piloto: corre --presupuestos sobre los turnos de ese cliente para saber si los topes le quedaban cortos.


Dónde vive cada cosa

Qué Dónde
La traza y el puntaje jmax/core/traza.py
Los presupuestos por modelo jmax/core/presupuestos.py
Las pistas aprendidas jmax/core/pistas.py
La repetición offline jmax/core/repeticion.py
La escalera de desatasco jmax/core/desatascar.py
Las reglas del harness jmax/core/harness.py
El visor scripts/ver_traza.py
Las tablas traza_pasos y traza_turnos, en backend/data/jmax.db

Los datos se quedan en el equipo, dentro de la base cifrada, como todo lo demás. No salen a ningún sitio.


Lo que todavía no hay


Para probarlo paso a paso

Los diez casos con lo que espera cada uno están en docs/planes/pruebas-dream-rsi.md. El porqué de cada mejora, en docs/planes/mejoras-dream-rsi.md.

¿No encuentras la respuesta?

Cuéntanos qué pasa: el ticket queda unido a tu licencia y te respondemos por correo.

Abrir un ticket de soporte