Apunta el SDK de OpenAI a una nueva base URL
Dos cambios llevan aquí una app que ya usa el SDK de OpenAI: la base URL y la clave. Chat completions, responses, streaming y tool calling van igual.
Una aplicación que ya habla con el SDK de OpenAI no hay que reescribirla para que hable con nosotros. Se mueven dos cosas: la base URL con la que se construye el cliente y la clave con la que se autentica. Todo lo que hay por encima y por debajo de esas dos líneas — la llamada, los messages, los parámetros, la forma en que lees la respuesta — se queda exactamente como lo escribiste.
Las dos líneas que cambian
En Python, la base URL y la clave son los dos argumentos con los que se construye el cliente. Nada de lo que viene después del constructor es nuestro:
import os
from openai import OpenAI
client = OpenAI(
base_url="https://aifromu.com/v1",
api_key=os.environ["AIFROMU_API_KEY"],
)
resp = client.chat.completions.create(
model="terra",
messages=[{"role": "user", "content": "Hello"}],
)
print(resp.choices[0].message.content)
En Node, las mismas dos, dentro del objeto con el que se construye el cliente:
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://aifromu.com/v1",
apiKey: process.env.AIFROMU_API_KEY,
});
const resp = await client.chat.completions.create({
model: "terra",
messages: [{ role: "user", content: "Hello" }],
});
console.log(resp.choices[0].message.content);
La clave sale del portal del cliente: inicia sesión, abre la página Keys, y la clave que reclamas ahí es la que envía este cliente. Los dos ejemplos la leen del entorno y no del archivo, bajo el nombre AIFROMU_API_KEY, porque una clave guardada junto al código es una clave que hay que rotar en el momento en que alguien clona el repositorio.
Los dos endpoints, streaming y herramientas
Aquí se sirven tanto /v1/chat/completions como /v1/responses, así que el que tu código ya llame es el que puede seguir llamando: no hay ninguna migración entre los dos que hacer para entrar. El streaming pasa sin cambios, y el tool calling también: la petición sube con la forma que le diste y los eventos vuelven con la forma que el SDK ya está parseando.
Qué pasa con tus nombres de modelo
Los cuatro alias — astra, sol, terra y luna — funcionan directamente, así que un cliente que nombra uno está pidiendo exactamente el modelo de esa tarjeta. Un cliente que nombra un modelo de OpenAI se lee, en cambio, como su clase de peso: un nombre con mini o nano se sirve como luna, un nombre corriente de la serie 4 como terra, un nombre frontier o de la serie o como sol, y un nombre gpt-6 como astra. Eso es lo que permite que una línea model sin tocar siga funcionando en la primera petición después de mover la base URL, y lo que cuesta es lo que se cobra: la clase que sirvió la petición, no el nombre que la pidió.
Un nombre que no encaja en ninguna parte no se adivina: la petición se rechaza con un mensaje que nombra los cuatro modelos, así que una mala configuración es algo que ves en la primera llamada y no algo que descubres en una factura. Adivinar sería el peor de los dos fallos, porque sería silencioso: un nombre leído como la clase equivocada sirve a un cliente por debajo de coste y le cobra a otro una capacidad que nunca recibió, y ninguna de las dos peticiones lo dice.
Comprueba que funciona y lee los errores
La primera llamada es toda la verificación: si la respuesta vuelve, la base URL y la clave son correctas las dos, y nada más en el archivo necesitaba cambiar. Si no vuelve, el rechazo te dice cuál de las dos era — una clave inservible se contesta como clave inválida, y un modelo que esta pasarela no sirve se contesta con los cuatro nombres que sí sirve.
Los errores son igual de sinceros el resto del camino. Cuando el proveedor rechaza una petición, el motivo de validación que dio te llega tal cual en vez de quedar aplastado en una cadena opaca, así que un contexto demasiado largo o un parámetro mal puesto lo dice la propia respuesta. El Retry-After se conserva en un 429, porque es la cabecera con la que los SDK marcan el ritmo de sus reintentos, y un límite de tasa retransmitido sin ella es un límite que tu cliente tiene que adivinar.
Un nombre que no encaja en ninguna parte no se adivina: la petición se rechaza con un mensaje que nombra los cuatro modelos, así que una mala configuración es algo que ves en la primera llamada y no algo que descubres en una factura.
Traducción automática, pendiente de revisión por un hablante nativo. La versión en inglés es la de referencia.