Streaming
Les interfaces OpenAI (/v1/chat/completions) et Anthropic (/v1/messages) supportent toutes deux le streaming via les Server-Sent Events. L'API Responses (/v1/responses) diffuse ses propres événements response.* ; consultez Responses API. Le streaming est le comportement par défaut recommandé pour tout ce qui implique un prompt long, une sortie longue ou une limite de tokens élevée — il évite les délais d'attente des requêtes et vous permet de rendre les tokens au fur et à mesure de leur arrivée.
Flux de style 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 réponse est une séquence de data: lignes, chacune étant un fragment de complétion de chat, se terminant par 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)
Suivi de l'utilisation
UberLLM injecte stream_options: {"include_usage": true} pour les upstreams qui le supportent, ainsi le chunk final contient un objet usage avec les décomptes de tokens de prompt et de completion, et cost_usd : ce qui est facturé pour cette requête, en dollars US (ce que le fournisseur a facturé pour elle). Lorsque l'upstream n'envoie pas de chunk d'utilisation, UberLLM en ajoute un avant data: [DONE]. Sur /v1/messages, le coût se trouve dans le usage de l'événement message_delta.
Votre requête est réglée au coût que le marketplace rapporte pour cet appel ; lorsque l'utilisation est manquante, la passerelle se rabat sur une estimation du tokenizer et marque la requête comme estimée dans votre journal d'activité. Les en-têtes d'un stream sont envoyés avant que le coût ne soit connu, donc un stream n'a pas d'en-tête X-UberLLM-Cost-USD : lisez usage.cost_usd.
Annulations
Si vous vous déconnectez en cours de streaming, la passerelle annule la requête en amont et ne facture que les tokens qui ont été réellement streamés. Vous n'êtes jamais facturé pour une réponse complète que vous n'avez pas reçue, et aucun solde réservé n'est bloqué.
Maintien d'activité
La passerelle envoie un commentaire immédiat : ping dès la connexion et des messages de maintien d'activité périodiques, afin que les flux de longue durée survivent aux délais d'inactivité des proxys.