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

OpenAI SDK

Chat Completions, стриминг, инструменты и эмбеддинги через OpenAI SDK.

Morphogen совместим с OpenAI API. Укажите base_url и ключ Morphogen, остальной код остаётся прежним. Подойдут Python, TypeScript и любой клиент с настраиваемым адресом.

Подключение

import os
from openai import OpenAI

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

Модели можно брать любые текстовые из client.models.list(), не только GPT: claude-sonnet-5 отвечает через тот же клиент.

Запрос

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

Всегда передавайте max_tokens: без него резервируется сумма по максимальной длине ответа, и при небольшом балансе запрос вернёт 402. Параметры запроса: Chat Completions.

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

stream = client.chat.completions.create(
    model="claude-sonnet-5",
    max_tokens=300,
    stream=True,
    messages=[{"role": "user", "content": "Напиши хокку про дождь"}],
)
for chunk in stream:
    if chunk.choices and chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)

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

tools = [{
    "type": "function",
    "function": {
        "name": "get_weather",
        "description": "Погода в городе",
        "parameters": {
            "type": "object",
            "properties": {"city": {"type": "string"}},
            "required": ["city"],
        },
    },
}]
resp = client.chat.completions.create(
    model="gpt-6-sol",
    max_tokens=300,
    tools=tools,
    messages=[{"role": "user", "content": "Какая погода в Казани?"}],
)
call = resp.choices[0].message.tool_calls[0]
print(call.function.name, call.function.arguments)

Выполните функцию у себя и верните результат сообщением с role: "tool" в следующем запросе. Инструменты работают у моделей с поддержкой tool use.

Эмбеддинги

emb = client.embeddings.create(model="bge-m3", input=["Как вернуть товар?"])
print(len(emb.data[0].embedding))

Параметры: Embeddings.

Responses API

Тот же клиент вызывает client.responses.create(...). Хранения истории нет: не передавайте store=True и previous_response_id, иначе будет 400 stateful_not_supported. Подробности: Responses.

Обработка ошибок

import openai

try:
    client.chat.completions.create(model="claude-sonnet-5", max_tokens=100, messages=[...])
except openai.RateLimitError as e:
    print("лимит, повторите через", e.response.headers.get("retry-after"), "с")
except openai.APIStatusError as e:
    print(e.status_code, e.body)

Код ошибки лежит в e.body["error"]["code"]. Все коды: Ошибки.

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