← capítulo

Primera llamada a la API

Capítulo 2 · OpenAI y Gemini, una hora, dos SDKs

La hora

Primero la plomería

OpenAI en una línea

response = client.responses.create(
    model="gpt-5.4-nano",
    input="...",
)
print(response.output_text)

OpenAI() lee OPENAI_API_KEY por sí solo.

Gemini en una línea

client = genai.Client(api_key=os.environ["GEMINI_API_KEY"])
response = client.models.generate_content(
    model="gemini-3.1-flash-lite",
    contents="...",
)
print(response.text)

Las tres diferencias

Mismo trabajo. Misma forma.

Ponlo a trabajar — tres apps web

Cada una es su propio proyecto de docker compose up. Entra una pestaña del navegador, sale una respuesta de IA.

Un backend, dos SDKs

PROVIDER = os.environ.get("PROVIDER", "openai")
ai = importlib.import_module(f"ai_{PROVIDER}")
# POST /api/ai -> ai.run(req.input)

PROVIDER=gemini docker compose up --build cambia el SDK sin tocar main.py. El mismo loader está en los tres showcases, byte por byte.

Corre cualquiera

cd code/showcase/<slug>
bash bootstrap-secrets.sh
docker compose up --build
# open http://localhost:3000

Tres showcases. Misma forma. Sigue siendo una sola llamada a la API cada uno.

Lo que te llevas

Haz que la plomería se vuelva reflejo desde ahora. La key en el entorno, nunca en el código fuente. Cárgala antes del cliente. Falla fuerte y temprano. Cada capítulo posterior se apoya en esto.