Capítulo 2 · OpenAI y Gemini, una hora, dos SDKs
load_dotenv(find_dotenv()) encuentra el .env en la raíz del cursoresponse = client.responses.create(
model="gpt-5.4-nano",
input="...",
)
print(response.output_text)
OpenAI() lee OPENAI_API_KEY por sí solo.
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)responses.create vs models.generate_contentinput vs contentsresponse.output_text vs response.textMismo trabajo. Misma forma.
Cada una es su propio proyecto de docker compose up. Entra una pestaña del navegador, sale una respuesta de IA.
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.
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.
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.