Velocidad vs calidad
El mismo prompt a un modelo pequeño y rápido y a uno más grande y lento, con las latencias lado a lado. La mayoría de las tareas no necesitan el modelo grande; la habilidad está en decir cuáles sí.
Showcase — Velocidad vs calidad
El mismo prompt a un modelo pequeño y rápido y a uno más grande y lento, con las latencias lado a lado. La mayoría de las tareas no necesitan el modelo grande; la habilidad está en decir cuáles sí.
Córrelo
bash bootstrap-secrets.sh # reads ../../../../.env, writes secrets/
docker compose up --build # default: PROVIDER=openai
Abre http://localhost:3000. Gemini: PROVIDER=gemini docker compose up --build.
Qué hay aquí
backend/ai_openai.py/backend/ai_gemini.py— dos modelos, cronometrados, un prompt.frontend/app/page.tsx— caja de prompt, ambas respuestas con su latencia.
Detenlo
docker compose down
Ejecútalo en tu máquina
Descarga el proyecto como ZIP y córrelo con Docker. Levanta un backend FastAPI y un frontend Next.js en localhost:3000.
Descargar speed-vs-quality.zip
unzip speed-vs-quality.zip
cd speed-vs-quality
bash bootstrap-secrets.sh # one-time: pulls API keys into ./secrets
docker compose up --build # default provider: openai
# or: PROVIDER=gemini docker compose up --build
Escribe algo, elige un proveedor y ejecuta el mismo código de Código contra la API real. Requiere iniciar sesión.
Los mismos módulos que ejecuta el botón Run. El proyecto completo (frontend, Dockerfile, compose) está en el ZIP, pestaña README.
backend/ai_openai.py
"""Showcase 3 (OpenAI): speed vs quality.
The same prompt to a small fast model and a larger slower one, side by side with
their latencies. Most of the time the fast model is good enough and a fraction of
the cost and wait — the skill is knowing which tasks actually need the big model.
"""
import time
from openai import OpenAI
_client = OpenAI()
_FAST = "gpt-5.4-nano"
_QUALITY = "gpt-5.4"
def _call(model: str, prompt: str) -> tuple[str, float]:
start = time.time()
response = _client.responses.create(model=model, input=[{"role": "user", "content": prompt}])
return response.output_text, time.time() - start
def run(prompt: str) -> str:
p = prompt.strip()
if not p:
return "Enter a prompt to send to both models."
fast_out, fast_s = _call(_FAST, p)
qual_out, qual_s = _call(_QUALITY, p)
return (f"FAST — {_FAST} ({fast_s:.2f}s)\n{fast_out}\n\n"
f"{'-' * 40}\n\n"
f"QUALITY — {_QUALITY} ({qual_s:.2f}s)\n{qual_out}")
backend/ai_gemini.py
"""Showcase 3 (Gemini): speed vs quality.
A fast Gemini model and a stronger one on the same prompt, with latencies.
"""
import os
import time
from google import genai
from google.genai import types
_client = genai.Client(api_key=os.environ["GEMINI_API_KEY"])
_FAST = "gemini-3.1-flash-lite"
_QUALITY = "gemini-3.1-pro"
def _call(model: str, prompt: str) -> tuple[str, float]:
start = time.time()
response = _client.models.generate_content(
model=model,
contents=[types.Content(role="user", parts=[types.Part(text=prompt)])],
)
return (response.text or ""), time.time() - start
def run(prompt: str) -> str:
p = prompt.strip()
if not p:
return "Enter a prompt to send to both models."
fast_out, fast_s = _call(_FAST, p)
qual_out, qual_s = _call(_QUALITY, p)
return (f"FAST — {_FAST} ({fast_s:.2f}s)\n{fast_out}\n\n"
f"{'-' * 40}\n\n"
f"QUALITY — {_QUALITY} ({qual_s:.2f}s)\n{qual_out}")
Archivos del proyecto
.gitignoreREADME.es.mdREADME.mdbackend/Dockerfilebackend/ai_gemini.pybackend/ai_openai.pybackend/main.pybackend/requirements.txtbootstrap-secrets.shdocker-compose.ymlfrontend/Dockerfilefrontend/app/layout.tsxfrontend/app/page.tsxfrontend/next.config.tsfrontend/package.jsonfrontend/tsconfig.json