Los siete elementos
Nuestro banco de pruebas descubre los modelos en lugar de tenerlos escritos a mano: le pregunta a la API de cada proveedor qué existe y luego filtra lo que no son modelos de chat (embeddings, audio, moderación, endpoints de imágenes). Para la mayoría de los proveedores, ese filtro es una lista de exclusión: se descarta lo que coincide y se conserva el resto. Para OpenAI era una lista de conservación:
OPENAI_KEEP_PREFIXES = ['gpt-4', 'gpt-3.5-turbo', 'o1', 'o3', 'o4', 'o3-mini', 'o1-pro']
Un modelo sobrevivía solo si su id empezaba con alguno de esos prefijos. gpt-5.6-sol no empieza con ninguno. Tampoco gpt-5.4, ni gpt-5-mini, ni ninguno de los treinta y nueve ids 5.x que OpenAI estaba sirviendo. Se obtenían de la API, se comparaban con la lista y se descartaban en silencio, en cada ejecución programada, durante 69 días, desde el primer commit del banco de pruebas el 2026-05-24 hasta que lo encontramos el 2026-08-01.
La clasificación no mentía sobre nada de lo que medía. Cada número era real. Simplemente respondía una pregunta que nadie había hecho: de los modelos de OpenAI que casualmente probamos, ¿cuál es el mejor? La respuesta era gpt-4.1, era correcta y no servía de nada.
Por qué no sonó la alarma
Esta es la parte que vale la pena copiar. Ya tenemos un cron cuyo único trabajo es notar cuando un proveedor lanza un modelo nuevo: compara la lista de modelos descubiertos entre una ejecución y la siguiente, y envía un resumen de lanzamientos, retiros y cambios de precio. Se lanzó GPT-5. Se lanzó GPT-5.4. Se lanzó la familia 5.6. Nunca dijo nada.
No podía. El vigilante lee la lista de modelos que el banco de pruebas descubrió, y el descubrimiento filtraba la familia 5.x antes de que el vigilante llegara a verla. El detector estaba aguas abajo del defecto. Desde donde estaba, OpenAI no había lanzado nada en diez semanas, lo cual es indistinguible de que OpenAI de verdad no hubiera lanzado nada.
Un monitor que lee datos filtrados hereda los puntos ciegos del filtro. El nuestro se construyó para responder “¿apareció algo nuevo?”, y respondió con honestidad sobre una lista que ya había sido censurada. Cuando un detector se queda callado, la primera pregunta no es “¿está tranquilo el mundo?”, sino “¿qué alimenta a esto, y todavía puede ver?”.
Las listas de conservación fallan cerradas y en silencio
La lección estructural trata de hacia qué lado falla un filtro. Nuestros otros proveedores usan listas de exclusión: se descarta lo que coincide con embed, whisper, tts y se conserva todo lo demás. Cuando un proveedor lanza algo nuevo, una lista de exclusión lo deja pasar. Puede llegar sin precio o mal etiquetado, y uno lo nota, porque aparece una fila extraña en una página que uno revisa.
Una lista de conservación falla al revés. Llega algo nuevo y se descarta, y la falla no produce ninguna fila, ningún error, ninguna línea de registro: produce una ausencia, que se ve exactamente igual a que el proveedor no haya lanzado nada. El filtro de todos los demás proveedores fallaba abierto y de forma ruidosa. La única lista de conservación fallaba cerrada y en silencio, y fue la que se rompió.
Ninguna de las dos es correcta en abstracto. Una lista de conservación es el valor predeterminado más seguro cuando el costo de admitir algo equivocado es alto, y por eso las listas de permitidos son la forma correcta para los permisos de los agentes. El error es usar una donde el costo de pasar algo por alto es alto y nadie está atento al silencio. El descubrimiento de modelos es exactamente eso.
La corrección necesitó su propia protección
Agregar 'gpt-5' a la lista de conservación tomó una línea y de inmediato creó un segundo problema. El prefijo admite a toda la familia, incluidas cuatro generaciones ya superadas (de la 5.0 a la 5.3, veinticuatro ids) para las que no teníamos precios. Un modelo sin precio en nuestras tablas reporta null, que se muestra como $0 en una página pública de costo-eficiencia. La corrección habría reemplazado un “mejor modelo” equivocado por dos docenas de modelos de frontera que parecían gratuitos.
Así que el cambio excluye las generaciones a las que no les ponemos precio, y ahí dentro hay una trampa más. Las reglas de exclusión comparan subcadenas, y gpt-5 a secas es una subcadena de todos los modelos de la familia: excluirlo de esa forma habría vuelto a ocultar todo lo que acabábamos de destapar. Hizo falta una regla aparte, de coincidencia exacta, para ese único id.
La regla que dejamos por escrito después: ponerle precio a una generación antes de dejar de excluirla, y tratar cualquier lista de prefijos de modelos escrita a mano como algo que caduca. El descubrimiento automático está tan al día como su filtro, y nada más.
Lo que costó, y lo que no afirmamos
Diez semanas de una respuesta pública equivocada a “¿cuál es el mejor modelo de OpenAI?” y, como la clasificación alimenta nuestras propias recomendaciones de enrutamiento, diez semanas en las que no pudimos recomendar ningún modelo GPT-5 para nada. Desde entonces les pusimos precio y probamos las familias 5.4, 5.5 y 5.6; ahora se ejecutan en cada pasada programada.
Un límite honesto sobre el alcance: GPT-5 apareció por primera vez en la API de OpenAI el 2025-08-01, casi un año antes de que encontráramos esto, pero nuestro banco de pruebas no existió hasta el 2026-05-24, así que la vida del defecto es de 69 días, no de un año. Es el número más pequeño y más exacto, y es el que citamos.
Lo encontramos a mano mientras agregábamos la familia 5.6, no porque alguna verificación lo detectara; así que la verdadera corrección nunca fue el cambio de una línea en el filtro. Fue la prueba que no existía. Esa prueba ya está escrita: diez verificaciones sin conexión sobre los filtros de descubrimiento, que comprueban que cada modelo que probamos sobrevive al filtro de su propio proveedor, que cada modelo probado tiene precio y que los mapas de contexto y de soporte de herramientas conocen cada familia. Está probada en negativo: volver a introducir el error original de una sola palabra hace fallar cinco de las diez, y cada una nombra la causa. Una prueba que no puede fallar ante el error que documenta es decoración.
Escribirla sacó a la luz de inmediato un segundo caso con la misma forma, en otro proveedor; resultó ser deliberado, así que ahora la prueba lo permite de forma explícita en lugar de relajarse. Y tiene un límite que vale la pena nombrar: estas verificaciones son sin conexión, así que no pueden notar una generación de la que nadie les ha hablado. Una persona todavía tiene que agregar la familia nueva a una lista; luego la prueba hace cumplir los otros cuatro lugares donde hay que conectarla. Es una brecha más pequeña que la que teníamos al principio, no la ausencia de brecha.
Publicamos nuestras correcciones por la misma razón por la que publicamos una comparativa de enrutadores que nos favoreció menos que la anterior. Una clasificación es un instrumento, y un instrumento que nadie audita es una afirmación disfrazada con bata de laboratorio. Esta se equivocó de una forma que tardó diez semanas y una auditoría manual en notarse; vale la pena decirlo en voz alta, para que la próxima persona que construya una revise su filtro desde el primer día.