OpenMultiDocumentation
Console

Streaming

Passez stream: true : la réponse arrive en Server-Sent Events (SSE), au format OpenAI standard. Le flux du fournisseur est transmis intact — votre parsing existant continue de fonctionner.

stream = client.chat.completions.create(
    model="auto",
    messages=[{"role": "user", "content": "Raconte-moi une histoire."}],
    stream=True,
)
for chunk in stream:
    delta = chunk.choices[0].delta.content if chunk.choices else None
    if delta:
        print(delta, end="", flush=True)

Le coût arrive dans le dernier chunk

Le chunk final du flux porte le bloc usage, avec usage.cost — le montant exact débité de votre solde, comme en non-stream :

data: {"id":"...","choices":[],"usage":{"prompt_tokens":12,"completion_tokens":180,"cost":0.000214}}

data: [DONE]

Ne coupez pas la lecture au dernier token de contenu si vous voulez le coût : lisez jusqu'à [DONE].

La décision de routage est dans les en-têtes

En streaming, le corps commence avant que la réponse complète existe — la décision de routage est donc exposée dans les en-têtes HTTP de la réponse :

En-tête Contenu
X-OpenMulti-Model l'id du modèle réellement servi
X-OpenMulti-Reason la trace de routage lisible (même contenu que openmulti.reason)
with client.chat.completions.with_streaming_response.create(...) as response:
    print(response.headers.get("x-openmulti-model"))

Robustesse

  • Les retries et bascules de chemin (voir Modèles et routage) ne s'appliquent qu'avant le premier octet transmis : un flux entamé n'est jamais rejoué silencieusement.
  • Un flux amont qui se fige est coupé après 60 secondes sans chunk, plutôt que de rester suspendu indéfiniment.