← capítulo

Respuestas en streaming

Semana 3 · Capítulo 4 · Básico

El problema

Qué cambia

OpenAI: un keyword

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)

Gemini: método aparte

stream = 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)

Cuándo conviene el streaming

Tres showcases esta semana

Cada uno es su propio proyecto de docker-compose bajo code/showcase/<slug>/.

El patrón de dos callables

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))

El backend tiene dos endpoints

Conclusión

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.