Streaming
Tanto las superficies de OpenAI (/v1/chat/completions) como las de Anthropic (/v1/messages)
soportan streaming a través de Server-Sent Events. La Responses API (/v1/responses)
hace streaming de sus propios response.* eventos; consulta Responses API. El streaming es la opción predeterminada recomendada
para cualquier cosa con un prompt largo, una salida larga o un límite de tokens alto —
evita los request timeouts y te permite renderizar tokens a medida que llegan.
Stream al estilo OpenAI
curl -N https://api.uberllm.dev/v1/chat/completions \
-H "Authorization: Bearer $UBERLLM_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek/deepseek-v4-flash",
"stream": true,
"messages": [{"role": "user", "content": "Count to five, one per line."}]
}'
La respuesta es una secuencia de data: líneas, cada una un fragmento de completado de chat, terminando con data: [DONE].
from openai import OpenAI
client = OpenAI(base_url="https://api.uberllm.dev/v1", api_key="ull_...")
with client.chat.completions.create(
model="deepseek/deepseek-v4-flash",
stream=True,
messages=[{"role": "user", "content": "Write a short poem."}],
) as stream:
for chunk in stream:
delta = chunk.choices[0].delta.content
if delta:
print(delta, end="", flush=True)
Contabilidad de uso
UberLLM inyecta stream_options: {"include_usage": true} para los upstreams que lo soportan, por lo que el chunk final lleva un objeto usage con los recuentos de tokens de prompt y completion, y cost_usd: lo que se factura por esta solicitud, en dólares estadounidenses (lo que el proveedor cobró por ella). Cuando el upstream no envía un chunk de uso, UberLLM añade uno antes de data: [DONE]. En /v1/messages el costo está en el usage del evento message_delta.
Tu solicitud se liquida al costo que el marketplace informa para esa llamada; cuando falta el uso, el gateway recurre a una estimación del tokenizer y marca la solicitud como estimada en tu registro de actividad. Los headers de un stream se envían antes de que se conozca el costo, por lo que un stream no tiene un header X-UberLLM-Cost-USD: lee usage.cost_usd.
Cancelaciones
Si te desconectas a mitad de la transmisión, la pasarela cancela la solicitud ascendente y se conforma con los tokens que realmente se transmitieron. Nunca se te cobra por una respuesta completa que no recibiste, y ningún saldo reservado queda atascado.
Mantenimiento de conexión
La pasarela envía un comentario inmediato : ping al conectar y señales de actividad periódicas, para que las transmisiones de larga duración sobrevivan a los tiempos de espera de inactividad del proxy.