MorphogenДокументация

Anthropic SDK

Messages API, стриминг, инструменты и кеш промпта через Anthropic SDK.

Morphogen принимает формат Anthropic Messages. Укажите base_url без /v1 и ключ Morphogen. Формат подходит для любой текстовой модели каталога, не только для Claude.

Подключение

import os
from anthropic import Anthropic

client = Anthropic(
    base_url="https://api.morphogen.ru",
    api_key=os.environ["MORPHOGEN_API_KEY"],
)

SDK сам добавляет путь /v1/messages и заголовок x-api-key.

Запрос

msg = client.messages.create(
    model="claude-sonnet-5",
    max_tokens=300,
    system="Отвечай коротко.",
    messages=[{"role": "user", "content": "Чем отличается TCP от UDP?"}],
)
print(msg.content[0].text)
print(msg.usage.input_tokens, msg.usage.output_tokens)

В этом формате max_tokens обязателен. Параметры запроса: Messages.

Потоковый ответ

with client.messages.stream(
    model="claude-sonnet-5",
    max_tokens=300,
    messages=[{"role": "user", "content": "Напиши хокку про дождь"}],
) as stream:
    for text in stream.text_stream:
        print(text, end="", flush=True)

Вызов инструментов

tools = [{
    "name": "get_weather",
    "description": "Погода в городе",
    "input_schema": {
        "type": "object",
        "properties": {"city": {"type": "string"}},
        "required": ["city"],
    },
}]
msg = client.messages.create(
    model="claude-sonnet-5",
    max_tokens=300,
    tools=tools,
    messages=[{"role": "user", "content": "Какая погода в Казани?"}],
)
for block in msg.content:
    if block.type == "tool_use":
        print(block.name, block.input)

Результат функции верните блоком tool_result в следующем сообщении пользователя.

Кеш промпта

Длинный повторяющийся префикс отметьте блоком cache_control:

msg = client.messages.create(
    model="claude-sonnet-5",
    max_tokens=300,
    system=[{
        "type": "text",
        "text": open("instructions.md").read(),
        "cache_control": {"type": "ephemeral"},
    }],
    messages=[{"role": "user", "content": "Вопрос по инструкции"}],
)

Поле проходит к модели как есть, запись и чтение кеша учитываются в расходе. У моделей GPT и Gemini кеш неявный, cache_control для них не нужен.

Картинки на входе

import base64

data = base64.standard_b64encode(open("schema.png", "rb").read()).decode()
msg = client.messages.create(
    model="claude-sonnet-5",
    max_tokens=300,
    messages=[{
        "role": "user",
        "content": [
            {"type": "image", "source": {"type": "base64", "media_type": "image/png", "data": data}},
            {"type": "text", "text": "Что на схеме?"},
        ],
    }],
)

Ошибки

Ошибки приходят в формате Anthropic. При 429 SDK читает retry-after и повторяет запрос сам. Поля error.code в них нет, кроме key_revoked: читайте статус, error.type и error.message. Список ошибок: Ошибки.

На этой странице