SDK & Alat
Pakai SDK resmi OpenAI dan Anthropic tanpa perubahan — cukup arahkan ke gateway zrouter dengan API key Anda.
zrouter adalah gateway drop-in: Anda tetap memakai SDK resmi OpenAI dan Anthropic, dan satu-satunya perubahan adalah base URL dan API key. Key zr_<public-id>_<secret> mengautentikasi klien kompatibel OpenAI maupun Anthropic.
Mulai cepat drop-in#
curl -X POST "https://api.zrouter.dev/v1/chat/completions" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "<public-name>",
"messages": [{"role": "user", "content": "Say hello!"}]
}'Streaming#
Streaming berjalan dengan SDK yang sama — setel stream lalu iterasi. Anda hanya ditagih untuk token yang benar-benar terkirim. Lihat Streaming & SSE untuk protokol di baliknya.
from openai import OpenAI
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.zrouter.dev/v1",
)
stream = client.chat.completions.create(
model="<public-name>",
messages=[{"role": "user", "content": "Say hello!"}],
stream=True,
)
for chunk in stream:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="")Buku resep#
Resep salin-tempel untuk tugas yang paling umum. Setiap resep berdiri sendiri; ikuti tautan untuk penjelasan lengkap soal streaming dan penanganan error.
Chat minimal#
from openai import OpenAI
client = OpenAI(api_key="YOUR_API_KEY", base_url="https://api.zrouter.dev/v1")
response = client.chat.completions.create(
model="<public-name>",
messages=[{"role": "user", "content": "Halo!"}],
)
print(response.choices[0].message.content)Streaming minimal#
Set stream lalu iterasi. Lihat Streaming & SSE untuk protokol wire dan contoh SDK dengan pelacakan usage.
from openai import OpenAI
client = OpenAI(api_key="YOUR_API_KEY", base_url="https://api.zrouter.dev/v1")
stream = client.chat.completions.create(
model="<public-name>",
messages=[{"role": "user", "content": "Halo!"}],
stream=True,
)
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="")Penanganan error dengan retry#
Retry hanya kegagalan 429 dan 5xx yang terjadi sebelum byte pertama, dengan exponential backoff dan jitter, maksimum 3 percobaan. Jangan pernah retry 402 (isi ulang saldo Anda). Lihat Penanganan Error.
import random, time
from openai import OpenAI, APIStatusError
client = OpenAI(api_key="YOUR_API_KEY", base_url="https://api.zrouter.dev/v1")
RETRYABLE = {429, 500, 502, 503}
def chat(prompt: str, model: str = "<public-name>") -> str:
for attempt in range(3):
try:
resp = client.chat.completions.create(
model=model,
messages=[{"role": "user", "content": prompt}],
)
return resp.choices[0].message.content or ""
except APIStatusError as err:
if err.status_code == 402:
raise # saldo tidak cukup — jangan pernah retry
if err.status_code in RETRYABLE and attempt < 2:
time.sleep(min(2 ** attempt, 8) + random.random())
continue
raiseDaftar model tersedia#
Tampilkan model yang bisa diakses key Anda beserta nama publiknya — pakai nama itu sebagai argumen model di mana pun. Harga terkini ada di halaman pricing dan Katalog Model publik.
from openai import OpenAI
client = OpenAI(api_key="YOUR_API_KEY", base_url="https://api.zrouter.dev/v1")
for model in client.models.list():
print(model.id)