Streaming
OpenAI (/v1/chat/completions)와 Anthropic (/v1/messages)의 두 인터페이스 모두 Server-Sent Events를 통한 streaming을 지원합니다. Responses API (/v1/responses)는 자체 response.* 이벤트를 streaming합니다. Responses API]를 참조하세요. Streaming은 긴 prompt, 긴 output 또는 높은 token 제한이 있는 모든 경우에 권장되는 기본값입니다. — 요청 시간 초과를 방지하고 token이 도착하는 대로 렌더링할 수 있게 해줍니다.
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에 있습니다.
귀하의 요청은 마켓플레이스가 해당 호출에 대해 보고하는 비용으로 정산됩니다. 사용량이 누락된 경우, 게이트웨이는 토크나이저 추정치로 대체하고 귀하의 activity log에서 해당 요청을 추정치로 표시합니다. 스트림의 헤더는 비용이 알려지기 전에 전송되므로, 스트림에는 X-UberLLM-Cost-USD 헤더가 없습니다: usage.cost_usd을(를) 읽어보세요.
중단
스트리밍 도중에 연결이 끊기면 게이트웨이가 업스트림 요청을 취소하고 실제로 스트리밍된 토큰에 대해서만 정산합니다. 받지 못한 전체 응답에 대해서는 요금이 청구되지 않으며, 예약된 잔액이 묶여 있지 않습니다.
연결 유지
게이트웨이는 연결 시 즉시 : ping 주석을 보내고 주기적인 연결 유지 신호를 보내므로, 장시간 실행되는 스트림이 프록시 유휴 시간 초과를 견딜 수 있습니다.