OpenAI apaga GPT-4, o1 y o3-mini el 23 de octubre: qué se rompe en tu código (y no es solo el nombre del modelo)

Foto de Marco Orta | 15 min de lectura
Portada tipográfica: la palabra OpenAI sobre un diff fechado el 2026-10-23, - model: 'gpt-4-turbo' en rojo y + model: 'gpt-5.6-sol' en verde
Tabla de Contenidos

    El 23 de octubre de 2026 OpenAI apaga gpt-3.5-turbo, gpt-4, gpt-4-turbo, o1, o1-pro, o3-mini, o4-mini, gpt-4.1-nano, un snapshot de gpt-4o y gpt-image-1. La página de deprecaciones hace que el arreglo parezca cambiar un texto: poner gpt-5.6-sol, -terra o -luna donde estaba el nombre viejo. Ese cambio es lo fácil, y en mucho código ni siquiera es donde está el problema.

    Después de cambiar el nombre se rompen cuatro cosas, y una más se rompe en código donde el nombre nunca aparece: LangChain y LlamaIndex siguen usando gpt-3.5-turbo por defecto, así que un proyecto que jamás escribió un nombre de modelo usa uno que muere en 32 días. Abajo va todo, verificado contra la documentación de OpenAI tal como estaba el 21 de septiembre y contra el código fuente de las librerías. Donde algo sale de reportes de usuarios y no de OpenAI, lo digo.

    Si lo que necesitas es el calendario completo de todos los proveedores (Anthropic, Gemini, Azure) y cómo saber si el chatbot de un negocio está afectado, está en la guía de retiros de modelos de IA. Este post es el lado del código.

    Qué se apaga y qué dice OpenAI que uses

    Sale de la página de deprecaciones, sección «2026-04-22: Legacy GPT model snapshots». OpenAI lo anunció por correo el 22 de abril; la columna de sustitutos se editó después, porque nombra modelos que salieron en julio. Los precios son de nivel estándar, por millón de tokens, entrada / salida, según la página de precios:

    Se apaga el 23 de octubrePrecioSustitutoPrecioCambio
    gpt-3.5-turbo (-0125, -completions)$0.50 / $1.50gpt-5.6-terra$2 / $124× / 8×
    gpt-4 (-0613, -completions)$30 / $60gpt-5.6-sol$4 / $20más barato
    gpt-4-turbo (-2024-04-09)$10 / $30gpt-5.6-sol$4 / $20más barato
    gpt-4o-2024-05-13$5 / $15gpt-5.6-sol$4 / $20≈ / 1.3×
    gpt-4.1-nano$0.10 / $0.40gpt-5.6-luna$0.20 / $1.202× / 3×
    o1$15 / $60gpt-5.6-sol$4 / $20más barato
    o1-pro$150 / $600gpt-5.6-sol en modo pro$4 / $20 + más tokensmás barato
    o3-mini$1.10 / $4.40gpt-5.6-sol$4 / $203.6× / 4.5×
    o4-mini$1.10 / $4.40gpt-5.6-terra$2 / $121.8× / 2.7×
    gpt-image-1$10 / $40 (tokens de imagen)gpt-image-2$8 / $30más barato

    Tres detalles que la tabla esconde:

    • El alias gpt-4o no está en la lista. Apunta a gpt-4o-2024-08-06 según su página de modelo, y solo muere el snapshot de mayo de 2024. gpt-4o-mini y gpt-4.1 (sin -nano) tampoco están.
    • Los $4 / $20 de Sol son una promoción. OpenAI dice que está «disponible al menos hasta el 21 de noviembre de 2026» y la describe como un recorte del 20 % en entrada y del 33 % en salida, lo que deja el precio normal en unos $5 / $30. Presupuesta con ese.
    • Los fine-tunes se van el mismo día: ft-gpt-3.5-turbo, ft-gpt-4, ft-gpt-4.1-nano-2025-04-14, ft-babbage-002 y ft-davinci-002. Más abajo explico por qué no tienen sucesor real.

    Cómo se ve el fallo

    Lo único oficial que dice OpenAI es que «el modelo o endpoint dejará de estar accesible». No documenta el error. Lo que reportaron usuarios tras los apagones de julio y agosto de este año (aquí y aquí) es consistente:

    404 invalid_request_error / model_not_found
    The model `gpt-5.1-codex` has been deprecated, learn more here:
    https://platform.openai.com/docs/deprecations
    

    El SDK de Python lo lanza como openai.NotFoundError. Dos consecuencias prácticas:

    1. No se puede reintentar. Si tu capa reintenta cualquier excepción con espera creciente, el 23 de octubre va a gastar sus reintentos en una petición que nunca va a funcionar, y tus usuarios van a esperarla. Reintenta en 429 y 5xx, no en 404.
    2. Un health check que lista modelos te va a mentir. Según esos mismos reportes, los IDs retirados siguen apareciendo en GET /v1/models después de dejar de funcionar. Un chequeo de arranque que confirma «mi modelo está en la lista» pasa con un modelo muerto. La única prueba fiable es una petición real de un token.

    La Responses API lo redacta distinto («Model not found …»), así que si comparas el texto del mensaje, compara mejor code: model_not_found.

    1. El modelo que nunca escribiste: los defaults de las librerías

    Este es el que atrapa a los equipos que se creen a salvo porque grep gpt-3.5 no encuentra nada. Revisé el código de las librerías que usan casi todos los tutoriales de 2023 y 2024:

    LibreríaModelo por defecto si no pasas unoFuente
    LangChain Python, ChatOpenAI"gpt-3.5-turbo"base.py#L733
    LangChain.js, ChatOpenAI"gpt-3.5-turbo"base.ts#L286
    LlamaIndex, LLM OpenAI"gpt-3.5-turbo", y es al que recurre el core cuando no configuras ningún LLMDEFAULT_OPENAI_MODEL en llama-index-llms-openai
    Vercel AI SDKno tiene modelo por defecto, pero openai.completion() «por ahora solo» admite gpt-3.5-turbo-instructdocs del proveedor OpenAI

    Así que esto, que aparece en incontables README, es una llamada a gpt-3.5-turbo:

    from langchain_openai import ChatOpenAI
    
    llm = ChatOpenAI(temperature=0)   # sin model= → "gpt-3.5-turbo"
    

    Y con LlamaIndex puede ser todavía menos visible: si nunca defines Settings.llm, un query engine construye un OpenAI() por su cuenta, con el mismo default. La clase OpenAIResponses de LlamaIndex usa gpt-4o-mini, que sobrevive.

    El caso de Vercel tiene fecha antes: gpt-3.5-turbo-instruct se apaga el 28 de septiembre, junto con babbage-002 y davinci-002, así que lo que use openai.completion() o el endpoint heredado /v1/completions tiene una semana, no un mes. Esos tres son los únicos modelos que todavía nombra la referencia del endpoint.

    El arreglo siempre es el mismo: pasa el modelo explícito, y léelo de la configuración para que el siguiente apagón sea una variable de entorno y no un deploy.

    Como contraste, laravel/ai 1.x ya usa por defecto gpt-5.6-terra, -luna, -sol y gpt-image-2. Las librerías nuevas lo resolvieron; el problema es el código montado sobre las de 2023.

    2. Las tools en Chat Completions ahora piden el razonamiento apagado

    Todos los sustitutos de la tabla son modelos de razonamiento, y eso cambia el contrato de Chat Completions. De la guía para subir a GPT-5.6:

    For GPT-5.6, function tools in Chat Completions are compatible only with effective reasoning none. Reasoning with tools should use the Responses API.

    El esfuerzo de razonamiento por defecto es medium. Así que un chatbot con function calling que funcionaba con gpt-4-turbo, al que solo le cambias el nombre del modelo, falla en su primera petición. Este es el error que le salió a un equipo con gpt-5.6-luna:

    400 - Function tools with reasoning_effort are not supported for gpt-5.6-luna
    

    Tienes dos salidas. La mínima deja Chat Completions y apaga el razonamiento, que es lo más parecido a como se comportaba gpt-4-turbo:

    const res = await openai.chat.completions.create({
      model: 'gpt-5.6-sol',
      reasoning_effort: 'none',     // obligatorio si pasas tools
      messages,
      tools,
    });
    

    La que recomienda OpenAI es mover esa llamada a la Responses API, donde razonamiento y tools sí funcionan juntos. No es solo renombrar: el prompt de sistema pasa a instructions, las salidas estructuradas se mueven de response_format a text.format y las definiciones de funciones pierden un nivel de anidación:

    // Chat Completions
    tools: [{ type: 'function', function: { name: 'get_order', parameters } }]
    
    // Responses
    tools: [{ type: 'function', name: 'get_order', parameters }]
    

    También cambia el valor por defecto de la validación estricta. Según la guía de migración, en Chat Completions las funciones no son estrictas por defecto, y en Responses omitir strict hace que intente el modo estricto. Si tus esquemas JSON se escribieron a la ligera, define strict a mano en vez de heredar el nuevo default.

    Chat Completions en sí no está deprecado. OpenAI dice que «sigue soportado» y que Responses «se recomienda para todos los proyectos nuevos». No tienes que migrar de endpoint el 23 de octubre, solo decidir qué haces con el razonamiento.

    3. max_tokens: cambia de nombre y ahora paga el razonamiento

    La referencia de Chat Completions marca max_tokens como «deprecado en favor de max_completion_tokens» e «incompatible con los modelos de la serie o». La documentación no dice si GPT-5.6 rechaza max_tokens directamente; el equipo del issue de arriba reporta que todas sus llamadas necesitaron el nombre nuevo. Renómbralo de todas formas.

    Lo que de verdad cambia el comportamiento es qué cuenta el parámetro nuevo. max_completion_tokens cubre «los tokens de salida visibles y los de razonamiento», y los de razonamiento «se cobran como tokens de salida» (guía de razonamiento). El clásico clasificador en gpt-3.5-turbo con max_tokens: 50 para forzar una etiqueta corta, movido a gpt-5.6-terra con su esfuerzo medium por defecto, puede gastarse todo el presupuesto pensando y volver cortado o vacío, y el razonamiento se cobra igual. OpenAI recomienda reservar al menos 25,000 tokens para razonamiento y salida.

    Para tareas cortas y deterministas el arreglo no es más presupuesto, sino nada de razonamiento:

    client.chat.completions.create(
        model="gpt-5.6-terra",
        reasoning_effort="none",        # una etiqueta no necesita pensar
        max_completion_tokens=50,       # antes max_tokens
        messages=messages,
    )
    

    temperature y top_p son una trampa parecida. Para GPT-5.2 y 5.4 la documentación dice que solo se admiten con esfuerzo none; para 5.6 no encontré la regla por escrito. Si los pasas, prueba con y sin razonamiento antes del 23 en vez de descubrirlo en producción.

    4. Los fine-tunes no tienen sucesor

    La columna de sustitutos manda ft-gpt-3.5-turbo a gpt-5.6-terra y ft-gpt-4 a gpt-5.6-sol. Esos son modelos base. Las páginas de GPT-5.6 marcan el fine-tuning como no soportado, y desde el 6 de enero de 2027 los clientes existentes ya no pueden crear trabajos de fine-tuning.

    En la práctica, lo que tu fine-tune aprendió (el tono, el formato de salida, las etiquetas de tu dominio) tiene que pasar al prompt: ejemplos few-shot, un esquema estricto con salidas estructuradas o recuperación de contexto. Planea ese trabajo ya. Es lo único de esta lista que es un proyecto y no un parche, y los datos de entrenamiento con los que armaste el fine-tune son justo de donde vas a sacar los ejemplos.

    5. o1-pro y gpt-image-1: cambian los parámetros, no solo el nombre

    • o1-progpt-5.6-sol en modo pro. La guía es explícita: «no busques ni inventes un slug gpt-5.6-pro aparte». El modo pro es un ajuste de razonamiento de Sol y solo funciona por Responses, no por Chat Completions. o1-pro ya era solo de Responses, así que el endpoint no cambia; cambian el nombre del modelo y el ajuste de razonamiento. OpenAI avisa que el modo pro «hace más trabajo de modelo», así que el precio por token es menor que el de o1-pro pero los tokens por petición suben.
    • gpt-image-1gpt-image-2. La guía de imágenes dice que omitas input_fidelity con gpt-image-2, así que si tus llamadas de edición lo pasan, quítalo. Y si dependes de fondos transparentes, gpt-image-2 solo los ofrece en preview desde el 20 de agosto.

    6. La factura

    Para la familia GPT-4 y o1, el cambio ahorra dinero, más todavía si seguías pagando $30 / $60 por gpt-4-0613. Para todo lo que se eligió por ser barato, cuesta más:

    • Un clasificador o router en gpt-3.5-turbo que procesa 1 millón de tokens de entrada y 200 mil de salida al día cuesta $0.80. En gpt-5.6-terra con el razonamiento apagado, $4.40. Son 5.5× antes de contar un solo token de razonamiento.
    • o3-minigpt-5.6-sol son 3.6× en entrada y 4.5× en salida, y más cuando termine la promoción.
    • gpt-4.1-nanogpt-5.6-luna duplica la entrada y triplica la salida.

    Si una de esas líneas te importa, prueba un nivel más barato que el que sugiere la tabla antes de aceptar el sustituto: la columna dice lo que OpenAI considera equivalente, no lo que tu tarea necesita. El costo por tarea entre proveedores lo desgloso en cuánto cuesta la API de OpenAI, Claude y Gemini. Y no, la tabla no apunta a gpt-6-astra, aunque la guía de razonamiento ahora diga «empieza con» él: a $10 / $50 y sin temperature, top_p ni top_logprobs es otra decisión, que cuento en GPT-6 Astra para desarrolladores.

    La auditoría: tres greps y una petición real

    Desde la raíz del repositorio. El primero busca los IDs que mueren como texto exacto entre comillas, así que se salta gpt-4o, gpt-4o-mini y gpt-4.1, que sobreviven:

    # 1. IDs de modelos que mueren el 23-oct (y el 28-sep), entre comillas
    grep -rnE "['\"\`](gpt-3\.5-turbo[a-z0-9-]*|gpt-4|gpt-4-0613|gpt-4-turbo[a-z0-9-]*|gpt-4-1106-preview|gpt-4o-2024-05-13|gpt-4\.1-nano[a-z0-9-]*|o1|o1-pro[a-z0-9-]*|o1-2024-12-17|o3-mini[a-z0-9-]*|o4-mini[a-z0-9-]*|gpt-image-1|babbage-002|davinci-002)['\"\`]" \
      --exclude-dir={node_modules,vendor,.git} .
    
    # 2. Lo mismo en los archivos de entorno, donde los nombres van sin comillas
    grep -rnE "=(gpt-3\.5|gpt-4(-|$)|o1|o3-mini|o4-mini|gpt-image-1$)" .env* 2>/dev/null
    
    # 3. Constructores que heredan el default de una librería
    grep -rnE "ChatOpenAI\(|llama_index\.llms\.openai|openai\.completion\(" \
      --include=*.py --include=*.ts --include=*.js --exclude-dir=node_modules . | grep -v "model"
    

    El tercero da falsos positivos a propósito (un constructor en varias líneas con model= en otra aparecerá), pero la lista es corta y vale la pena leerla a ojo.

    Luego la prueba que cuenta: por cada modelo que acabes usando, una petición real con tus parámetros de producción (tools, max_completion_tokens, temperature si lo pasas) contra el nombre nuevo. No GET /v1/models, por lo explicado arriba.

    Los nombres de modelo configurados también viven fuera del repo: flujos de Make, Zapier o n8n, el panel del chatbot de un proveedor, una hoja de Google con un script. La guía de retiros tiene la lista de revisión para esos casos.

    El resto del calendario de OpenAI este año

    Todo sale de la misma página de deprecaciones:

    FechaQué se apaga
    24 sepVideos API, sora-2 y sora-2-pro (sin sustituto)
    28 sepgpt-3.5-turbo-instruct, babbage-002, davinci-002, gpt-3.5-turbo-1106
    1 octgpt-5.4-cybergpt-5.6-cyber (20 días de aviso)
    23 octTodo lo de este post
    31 octEvals pasa a solo lectura
    30 novEl panel y la API de Evals, la API v1/prompts y los prompts reutilizables, Agent Builder
    1 dicgpt-image-1-mini, gpt-image-1.5, chatgpt-image-latestgpt-image-2
    11 dicLos snapshots de gpt-5, gpt-5-mini, gpt-5-nano, gpt-5-pro, o3 y o3-pro

    La última fila merece una nota: las páginas de gpt-5 y o3 listan solo el snapshot que se retira, así que muy probablemente los alias mueren con ellos. El README de openai-php/laravel todavía usa 'model' => 'gpt-5' como ejemplo. La Assistants API ya se apagó el 26 de agosto.

    Preguntas frecuentes

    ¿Qué modelos de OpenAI se apagan el 23 de octubre de 2026?

    gpt-3.5-turbo (incluidos gpt-3.5-turbo-0125 y la variante -completions), gpt-4 y gpt-4-0613, gpt-4-turbo y gpt-4-turbo-2024-04-09, gpt-4-1106-preview, gpt-4o-2024-05-13, gpt-4.1-nano, o1, o1-pro, o3-mini, o4-mini y gpt-image-1, además de los modelos con fine-tuning ft-gpt-3.5-turbo, ft-gpt-4, ft-gpt-4.1-nano, ft-babbage-002 y ft-davinci-002. OpenAI lo anunció el 22 de abril de 2026. El alias gpt-4o, gpt-4o-mini y gpt-4.1 no están en la lista.

    ¿Por qué modelo cambio gpt-4 y gpt-3.5-turbo?

    OpenAI indica gpt-5.6-sol como sustituto de gpt-4, gpt-4-turbo, gpt-4o-2024-05-13, o1, o1-pro (en modo pro) y o3-mini; gpt-5.6-terra para gpt-3.5-turbo y o4-mini; gpt-5.6-luna para gpt-4.1-nano; y gpt-image-2 para gpt-image-1. Son modelos de razonamiento, así que cambiar el nombre no basta: las tools en Chat Completions piden reasoning_effort none, y max_tokens pasa a max_completion_tokens, que también cuenta los tokens de razonamiento.

    ¿Qué error devuelve la API de OpenAI con un modelo retirado?

    OpenAI no documenta la respuesta. Los usuarios que se toparon con los apagones de julio y agosto de 2026 reportan HTTP 404 con type invalid_request_error y code model_not_found, que el SDK de Python lanza como openai.NotFoundError. No se debe reintentar. Los IDs retirados pueden seguir apareciendo en GET /v1/models, así que la única comprobación fiable es una petición real.

    ¿LangChain sigue usando gpt-3.5-turbo por defecto?

    Sí. En septiembre de 2026, ChatOpenAI en LangChain Python y en LangChain.js usa gpt-3.5-turbo cuando no pasas un modelo, y el LLM OpenAI de LlamaIndex también (y es al que recurre LlamaIndex cuando no defines Settings.llm). El código que nunca nombra un modelo va a fallar el 23 de octubre. Pasa el modelo de forma explícita.

    ¿Por qué gpt-5.6 falla con «Function tools with reasoning_effort are not supported»?

    Porque en Chat Completions GPT-5.6 solo acepta function tools cuando el esfuerzo de razonamiento efectivo es none, y el valor por defecto es medium. O añades reasoning_effort: none a la petición, que se comporta lo más parecido a gpt-4-turbo, o mueves la llamada a la Responses API, donde tools y razonamiento funcionan juntos.

    ¿Sale más caro migrar a gpt-5.6?

    Depende de lo que tenías. Desde gpt-4, gpt-4-turbo u o1 sale más barato: gpt-5.6-sol cuesta $4 de entrada y $20 de salida por millón de tokens, un precio promocional disponible al menos hasta el 21 de noviembre de 2026. De gpt-3.5-turbo a gpt-5.6-terra es 4 veces el precio de entrada y 8 veces el de salida, y de o3-mini a sol unas 3.6 y 4.5 veces, antes de contar los tokens de razonamiento, que se cobran como salida.

    ¿Qué pasa con mi modelo gpt-3.5-turbo con fine-tuning?

    Se apaga el 23 de octubre de 2026 junto con los modelos base. El sustituto indicado es gpt-5.6-terra base, y GPT-5.6 no admite fine-tuning; desde el 6 de enero de 2027 los clientes existentes no pueden crear trabajos de fine-tuning. Lo que aprendió el fine-tune tiene que pasar al prompt: ejemplos few-shot, salidas estructuradas o recuperación de contexto.

    ¿Te sirvió? Compártelo

    ¿Te sirvió? Recibe la próxima por correo

    Una vez por semana: qué se rompe al actualizar, IA para desarrolladores y lo que estoy construyendo, con fuentes. Sin spam.

    Al suscribirte aceptas nuestro aviso de privacidad.

    Buscar

    Etiquetas

    Migración PHP IA Laravel JavaScript Tutorial Desarrollo Web Upgrade Buenas Prácticas Seguridad OpenAI SEO Backend Claude Laravel 13