Python
Справочник API
Zukko работает с официальными SDK — менять код не нужно, только base_url и ключ.
| SDK | Base URL | Key |
|---|---|---|
OpenAI (openai) | https://api.zukko.pro/v1 | fetch_... |
Anthropic (anthropic) | https://api.zukko.pro | fetch_... |
1OpenAI SDK
bash
pip install openaipython
from openai import OpenAI
client = OpenAI(base_url="https://api.zukko.pro/v1", api_key="fetch_...")
r = client.chat.completions.create(
model="claude-sonnet-5",
messages=[{"role": "user", "content": "Привет!"}],
)
print(r.choices[0].message.content)В model можно передать и модель OpenAI, например gpt-5.6-sol, и дешёвую glm-5.3-flash.
Потоковый ответ
python
stream = client.chat.completions.create(
model="claude-sonnet-5",
messages=[{"role": "user", "content": "Напиши хайку про код"}],
stream=True,
)
for chunk in stream:
if chunk.choices:
print(chunk.choices[0].delta.content or "", end="", flush=True)
elif chunk.usage:
print(f"\n[токены: {chunk.usage.prompt_tokens} вход, {chunk.usage.completion_tokens} выход]")Проверка if chunk.choices обязательна. Zukko включает stream_options.include_usage, и в конце потока приходит отдельный фрагмент с usage и пустым choices — без проверки chunk.choices[0] упадёт с IndexError.
Стоимость запроса
Заголовок X-Zukko-Cost-Micros (в микродолларах) доступен через with_raw_response:
python
raw = client.chat.completions.with_raw_response.create(
model="glm-5.3-flash",
messages=[{"role": "user", "content": "Привет!"}],
)
print(raw.headers.get("x-zukko-cost-micros"))
r = raw.parse()Заголовок есть только у обычных (не потоковых) ответов.
2Anthropic SDK
bash
pip install anthropicpython
from anthropic import Anthropic
client = Anthropic(base_url="https://api.zukko.pro", api_key="fetch_...")
msg = client.messages.create(
model="claude-sonnet-5",
max_tokens=1024,
messages=[{"role": "user", "content": "Привет!"}],
)
print(msg.content[0].text)Потоковый ответ
python
with client.messages.stream(
model="claude-sonnet-5",
max_tokens=1024,
messages=[{"role": "user", "content": "Напиши хайку про код"}],
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)3Ключ из переменных окружения
Не храните ключ в коде:
bash
export OPENAI_BASE_URL="https://api.zukko.pro/v1"
export OPENAI_API_KEY="fetch_..."python
from openai import OpenAI
client = OpenAI() # возьмёт OPENAI_BASE_URL и OPENAI_API_KEYЛюбую модель из каталога можно подставить в model — список: GET /v1/models. Коды ошибок — в разделе Ошибки API.