Semana 3 · Capítulo 4 · Básico
stream = client.responses.create(
model="gpt-5.4-nano",
input=prompt,
stream=True,
)
for event in stream:
if event.type == "response.output_text.delta":
print(event.delta, end="", flush=True)
stream=True cambia el tipo de retorno a eventos tipadosresponse.output_text.deltaflush=True no es negociable; Python bufferea stdout por defectostream = client.models.generate_content_stream(
model="gemini-3.1-flash-lite",
contents=prompt,
)
for chunk in stream:
if chunk.text:
print(chunk.text, end="", flush=True)
generate_content_stream es el gemelo en streaming.text o viene vacíoCada uno es su propio proyecto de docker-compose bajo
code/showcase/<slug>/.
def run_stream(input: str) -> Iterator[str]:
stream = client.responses.create(..., stream=True)
for event in stream:
if event.type == "response.output_text.delta":
yield event.delta
def run(input: str) -> str:
return "".join(run_stream(input))
run_stream es la lecciónrun es un acumulador de una líneaPOST /api/ai → string final (sin streaming)POST /api/ai/stream → feed SSE de eventos {delta}El streaming está a un argumento de keyword de una app que se siente mejor. El modelo nunca se volvió más rápido. La experiencia de la espera, sí. Úsalo cada vez que el output sea lo bastante largo como para que un lector se cambie de pestaña.