Apariencia
❌ BadRequestError 400: "legacy Interactions API schema is no longer supported"
Clase 12 · al probar el
GeminiProviderreal desde02-Ejercicios/Clase-12/(POST /api/v1/ai/product-description)
🧨 Qué pasó
Con el AI Service corriendo (uvicorn app.main:app --reload) y una GEMINI_API_KEY real ya configurada en .env, el endpoint respondía 502 Bad Gateway:
json
{"detail": "No fue posible obtener respuesta del proveedor de IA"}El mensaje genérico es a propósito (ver Clase 12, sección 8 — nunca se filtra el error crudo del proveedor al cliente), pero el traceback completo sí quedó logueado en la terminal de uvicorn:
google.genai._interactions.BadRequestError: Error code: 400 - {'error': {'message':
'The legacy Interactions API schema is no longer supported. Please upgrade your
google-genai Python SDK to version >= 2.0.0 (e.g., run pip install -U google-genai)
to use the Interactions API. For details and migration examples, see:
https://ai.google.dev/gemini-api/docs/interactions-breaking-changes-may-2026',
'code': 'invalid_request'}}Confirmado que la key sí era válida: si la key estuviera mal, el error sería otro (401/403 de autenticación), no un 400 de "schema no soportado" — Google llegó a procesar la request y la rechazó por el formato, no por las credenciales.
🔍 Causa
requirements.txt fijaba el SDK con un rango desactualizado:
text
google-genai>=1.0,<2.0pip install -r requirements.txt instaló la versión más nueva permitida dentro de ese rango (1.75.0). Pero Google hizo un breaking change en la Interactions API en mayo de 2026 (mencionado en la propia URL del error) que dejó incompatible el schema que usa el SDK 1.x — el código de gemini_provider.py (client.interactions.create(...)) seguía siendo válido como sintaxis de Python, pero el servidor de Google ya no acepta lo que ese SDK viejo le manda por HTTP.
Es un caso real de lo que se explica en Clase 12, sección 6 sobre versionado semántico: un salto de versión MAYOR (1.x → 2.x) es la señal de que puede romper compatibilidad hacia atrás — y acá rompió, del lado del servidor.
✅ Solución
bash
python -m pip install -U google-genaiEsto actualizó el paquete de 1.75.0 a 2.23.0. Después, se corrigió el rango en requirements.txt para que quede fijado a una versión que sí funciona:
diff
- google-genai>=1.0,<2.0
+ google-genai>=2.0,<3.0Confirmado con una llamada real al GeminiProvider (sin pasar por el endpoint, para aislar la causa):
python
from app.providers.gemini_provider import GeminiProvider
from app.prompting import SYSTEM_GUIDANCE, build_product_prompt
from app.schemas import ProductDescriptionRequest
data = ProductDescriptionRequest(
name="Mochila Urbana X", category="Mochilas",
features=["30 litros", "Compartimento para laptop"],
)
provider = GeminiProvider()
model, text = provider.generate(SYSTEM_GUIDANCE, build_product_prompt(data))
print(model, text)
# → gemini-3.8-flash | "La Mochila Urbana X es tu aliada ideal..."Y con el endpoint real, reiniciando uvicorn después de la actualización:
bash
curl -X POST http://127.0.0.1:8000/api/v1/ai/product-description \
-H "Content-Type: application/json" \
-d '{"name": "Mochila Urbana X", "category": "Mochilas", "features": ["30 litros"]}'
# → 200 OK, con description generada de verdad📝 Los tests (
test_health.py,test_prompting.py) siguen pasando igual antes y después del fix — no llaman al SDK real (ver Clase 12, sección 8), por eso este error solo aparece probando el endpoint con una key real, nunca en CI.
⚠️ El propio
.venv/(donde vive la versión instalada del paquete) está en.gitignore— el fix real y compartible es el cambio enrequirements.txt. Sin ese cambio, cualquiera que clone el repo y corrapip install -r requirements.txtvuelve a instalar la 1.x rota.