SDK и клиентские библиотеки

Используйте SDK OpenAI, Anthropic или Google с Atlas Cloud, а также готовые клиенты для генерации изображений, видео и аудио на Python и Node.js.

Atlas Cloud не выпускает собственный SDK, а для языковых моделей он и не нужен — API понимает те форматы, которые уже используют существующие SDK. Для генерации медиа на этой странице есть небольшой клиент, который можно скопировать в свой проект.

Что вы вызываетеКак
Языковые моделиНаправьте SDK OpenAI, Anthropic или Google на Atlas Cloud
Изображения, видео, аудио, 3DОбычные HTTP-запросы к асинхронным эндпоинтам — клиент ниже
Из терминала или CICLI
Из IDE с поддержкой ИИMCP-сервер

Языковые модели

Измените базовый URL и API-ключ. Всё остальное остаётся прежним.

pip install openai
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["ATLASCLOUD_API_KEY"],
    base_url="https://api.atlascloud.ai/v1",
)

response = client.chat.completions.create(
    model="deepseek-ai/deepseek-v3.2",
    messages=[{"role": "user", "content": "Explain HTTP vs HTTPS"}],
)
print(response.choices[0].message.content)

Модели различаются по тому, какой протокол они принимают: одни работают только с Messages, другие — только с Responses. Прежде чем считать, что Chat Completions подойдёт, проверьте справочник API конкретной модели. См. Протоколы LLM API.

Клиент для генерации медиа

Генерация изображений, видео, аудио и 3D выполняется асинхронно: сначала отправка, затем опрос. Ниже — полный минимальный клиент.

import os
import time
import requests

API_KEY = os.environ["ATLASCLOUD_API_KEY"]
BASE = "https://api.atlascloud.ai/api/v1"
HEADERS = {"Authorization": f"Bearer {API_KEY}"}

# Эндпоинт определяется типом вывода: 3D идёт через image, речь/музыка/транскрипция — через audio
ENDPOINTS = {
    "image": f"{BASE}/model/generateImage",
    "video": f"{BASE}/model/generateVideo",
    "audio": f"{BASE}/model/generateAudio",
}
TERMINAL = {"completed", "succeeded", "failed", "timeout"}


def submit(kind: str, model: str, **params) -> str:
    """Отправляет задачу генерации и возвращает ID предсказания. Параметры передаются плоско на верхнем уровне, а не внутри input."""
    response = requests.post(
        ENDPOINTS[kind],
        headers=HEADERS,
        json={"model": model, **params},
        timeout=60,
    )
    response.raise_for_status()
    return response.json()["data"]["id"]


def wait(prediction_id: str, timeout: int = 600) -> dict:
    """Опрашивает задачу до перехода в конечное состояние. Интервал постепенно растёт, чтобы избежать лишних запросов."""
    deadline = time.time() + timeout
    delay = 2.0

    while time.time() < deadline:
        response = requests.get(
            f"{BASE}/model/prediction/{prediction_id}",
            headers=HEADERS,
            timeout=30,
        )
        response.raise_for_status()
        data = response.json()["data"]

        if data.get("status") in TERMINAL:
            if data["status"] in ("failed", "timeout"):
                raise RuntimeError(f"Генерация не удалась: {data.get('error') or data['status']}")
            return data

        time.sleep(delay)
        delay = min(delay * 1.5, 10.0)

    raise TimeoutError(f"Задача {prediction_id} не завершилась за {timeout} секунд")


def upload(path: str) -> str:
    """Загружает локальный файл и возвращает URL, пригодный для запросов генерации."""
    with open(path, "rb") as f:
        response = requests.post(
            f"{BASE}/model/uploadMedia", headers=HEADERS, files={"file": f}, timeout=600
        )
    response.raise_for_status()
    data = response.json()["data"]
    return data.get("download_url") or data.get("url")


if __name__ == "__main__":
    pid = submit("image", "MODEL_ID", prompt="a ceramic mug on a linen backdrop")
    result = wait(pid)
    print(result["outputs"][0])

Две вещи, которые этот клиент делает правильно и в которых легко ошибиться:

  1. Параметры передаются на верхнем уровне, рядом с model, а не внутри объекта input.
  2. Для моделей транскрипции и генерации текстов песен outputs[0] — это текст, а не URL. Не скачивайте его вслепую. См. Аудиомодели.

Замечания для промышленной эксплуатации

  • Предпочитайте вебхуки опросу для видео, генерация которого может занимать минуты. См. Вебхуки.
  • Повторяйте при 429, 500, 503, 504 с экспоненциальным отступлением. Не повторяйте при 400, 401, 402, 403. См. Ошибки и лимиты запросов.
  • Будьте осторожны с повторной отправкой задач. Отправка, завершившаяся по таймауту, могла быть принята, и слепой повтор создаст вторую оплачиваемую задачу. Вместо этого отправляйте асинхронно и опрашивайте статус.
  • Логируйте X-Request-ID из каждого ответа — именно он нужен поддержке, чтобы отследить вызов.

Библиотеки сообщества

Обёртки, поддерживаемые сообществом, перечислены в awesome-atlas-cloud-integrations. Они развиваются независимо — проверьте, что делает обёртка, прежде чем использовать её в продакшене.

Связанные материалы

Last updated on

On this page