Streaming
OpenAI (/v1/chat/completions) と Anthropic (/v1/messages) の両方のインターフェースは、Server-Sent Events を介した streaming をサポートしています。Responses API (/v1/responses) は独自の response.* イベントを streaming します。詳細は Responses API] を参照してください。streaming は、長いプロンプト、長い出力、または高い token cap を持つあらゆるものに対して推奨されるデフォルトです。これにより、リクエストのタイムアウトを回避し、トークンが到着するにつれてレンダリングできます。
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."}]
}'
レスポンスは、data:行の一連のチャット補完チャンクであり、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)
利用状況の会計
UberLLMは、それをサポートするアップストリームに対してstream_options: {"include_usage": true}を挿入します。そのため、最終的なチャンクには、プロンプトと完了のトークン数、およびcost_usd:このリクエストが米ドルで請求される金額(プロバイダーがそれに請求した金額です)を含むusageオブジェクトが含まれます。アップストリームが利用状況チャンクを送信しない場合、UberLLMはdata: [DONE]の前にそれを追加します。/v1/messagesでは、費用はmessage_deltaイベントのusageにあります。
お客様のリクエストは、その呼び出しに対してマーケットプレイスが報告する費用で決済されます。利用状況が不足している場合、ゲートウェイはトークナイザーの見積もりにフォールバックし、お客様のアクティビティログでリクエストを見積もり済みとしてフラグ付けします。ストリームのヘッダーは、費用が判明する前に送信されます。そのため、ストリームにはX-UberLLM-Cost-USDヘッダーがありません。usage.cost_usdをお読みください。
中断
ストリーミング中に接続を切断した場合、ゲートウェイはアップストリームのリクエストをキャンセルし、実際にストリーミングされたトークンに対してのみ精算します。受信しなかった完全なレスポンスに対して料金が請求されることはなく、予約された残高が宙ぶらりんになることもありません。
キープアライブ
ゲートウェイは、接続時に即座に: pingコメントを送信し、定期的なキープアライブも送信します。これにより、長時間のストリームがプロキシのアイドルタイムアウトを回避できます。