Streaming en la terminal con Gemini: respuestas “en vivo” con POO en Python
Inicia sesión para descargarEn este tutorial construimos un mini chat de consola con Gemini y Python que muestra las respuestas “en vivo”, token a token. Aprovechamos el SDK google-genai y una arquitectura sencilla orientada a …
En este tutorial vas a montar un mini chat de consola que se conecta con Gemini y muestra las respuestas en vivo, token a token, como si alguien estuviera escribiendo frente a ti. Al final tendrás un script sencillo, pero muy útil, para probar ideas rápido desde la terminal y ver cómo funciona el streaming de texto en tiempo real.
(.venv) $ python -m stream_chat_gemini
Escribe tu pregunta (o 'salir'):
Tú: ¿colores de la bandera de colombia?
Modelo: Los colores de la bandera de Colombia son:
1. **Amarillo:** Ocupa la mitad superior de la bandera.
2. **Azul:** Ocupa la segunda franja horizontal, un cuarto de la bandera.
3. **Rojo:** Ocupa la tercera y última franja horizontal, el cuarto restante.
Tú: ^C
Hasta luego.
Lo importante es que no vamos a esperar al “JSON gigante del final”. Vamos a usar streaming para ir imprimiendo texto a medida que el modelo lo genera, como si vieras pensar a Gemini en tiempo real.
En el camino vas a ver:
- Cómo usar el SDK
google-genaien modo streaming. - Cómo pasar la API key correctamente sin hardcodearla.
- Cómo separar el proyecto en varios archivos usando programación orientada a objetos:
- Configuración.
- Cliente de IA.
- Interfaz de consola.
- Punto de entrada del programa.
1. Estructura del proyecto
Vamos a trabajar con un proyecto pequeño pero organizado en varios archivos. Primero verás el árbol de carpetas completo y luego iremos recorriendo cada pieza (configuración, cliente de IA, consola y punto de entrada) para que entiendas qué hace y dónde va cada cosa.
stream_chat_gemini/
├── __init__.py
├── __main__.py
├── config.py
├── main.py
├── repl.py
├── requirements.txt
└── streamer.py
2. Requisitos previos
Para seguir este tutorial necesitas tres cosas básicas: tener instalado Python 3.9 o superior (en tu caso lo haremos desde WSL, pero funciona igual en Linux, macOS o Windows), trabajar dentro de un entorno virtual creado con python -m venv .venv y disponer de una API key de Gemini obtenida desde Google AI Studio.
Entorno virtual rápido (ejemplo típico)
En la carpeta donde tengas stream_chat_gemini/ vas a crear y activar un entorno virtual para aislar las dependencias de este proyecto.
python3 -m venv .venv
source .venv/bin/activate
Luego instalamos las dependencias usando el archivo requirements.txt (lo vemos enseguida), para que puedas recrear el entorno del proyecto con un solo comando.
pip install -r stream_chat_gemini/requirements.txt
Exportamos la API key en la sesión:
export GEMINI_API_KEY="TU_NUEVA_API_KEY_SEGURA"
3. Archivo por archivo
3.1 requirements.txt
Empezamos por lo más simple: el archivo de dependencias. Aquí solo declaramos el SDK que necesitamos. Esto hace que cualquiera en la comunidad pueda recrear el entorno del proyecto con un solo comando.
google-genai==1.54.0
requirements.txt mínimo, fijado a una versión específica del SDK que sabes que funciona bien, y el comando que cualquier persona puede usar para instalar esas dependencias en su entorno.
En resumen:
- Un
requirements.txtpequeño y reproducible. - El comando exacto para instalarlo con
pip.
pip install -r requirements.txt
3.2 __init__.py
Este archivo puede estar completamente vacío. Su función importante aquí es decirle a Python:
“esta carpeta stream_chat_gemini es un paquete.”
Gracias a eso puedes hacer cosas como ejecutar el proyecto con
python -m stream_chat_gemini y usar imports relativos del estilo
from .config import ModelConfig sin que Python se queje.
3.3 __main__.py
Este archivo responde a la pregunta clave:
“¿Qué pasa cuando alguien ejecuta python -m stream_chat_gemini?”
En lugar de obligar a la gente a recordar comandos más largos como
python -m stream_chat_gemini.main, aquí definimos un punto de entrada por defecto.
Así, tu paquete se siente más profesional y fácil de usar: basta con invocarlo como módulo y
Python sabe automáticamente qué función debe arrancar.
from .main import main
raise SystemExit(main())
Estás mostrando cómo usar __main__.py como punto de entrada del paquete, de modo que
python -m stream_chat_gemini sepa qué ejecutar.
También introduces un patrón limpio: toda la lógica se delega a una función main() central,
y __main__.py solo se encarga de llamarla. Esto hace que tu código sea más fácil de probar,
reutilizar y mantener.
3.4 config.py
No queremos tener nombres de modelo ni “números mágicos” regados por todo el código. En vez de eso, centralizamos todo en una dataclass inmutable que guarda la configuración del modelo.
Así, si mañana cambias el nombre del modelo, el máximo de tokens o el modo de seguridad, lo haces en un solo archivo y el resto del proyecto sigue limpio y fácil de leer.
from __future__ import annotations
from dataclasses import dataclass
@dataclass(frozen=True)
class ModelConfig:
"""
Configuración mínima del modelo para el microproyecto.
"""
model: str = "gemini-2.5-flash"
temperature: float = 0.2
max_output_tokens: int = 512
Comentarios y valoraciones
No hay comentarios aún. ¡Sé el primero en opinar!