SDKs e bibliotecas cliente

Use o SDK da OpenAI, da Anthropic ou do Google com o Atlas Cloud, além de clientes prontos para copiar e colar para geração de imagem, vídeo e áudio em Python e Node.js.

O Atlas Cloud não distribui um SDK próprio e, para modelos de linguagem, você não precisa de nenhum — a API fala os formatos que os SDKs existentes já usam. Para geração de mídia, esta página traz um cliente pequeno que você pode copiar para o seu projeto.

O que você está chamandoComo
Modelos de linguagemAponte o SDK da OpenAI, da Anthropic ou do Google para o Atlas Cloud
Imagem, vídeo, áudio, 3DHTTP puro nos endpoints assíncronos — cliente abaixo
De um terminal ou da CIA CLI
De uma IDE assistida por IAO Servidor MCP

Modelos de linguagem

Mude a base URL e a chave de API. Todo o resto permanece igual.

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)

Os modelos diferem quanto ao protocolo que aceitam — alguns só funcionam com Messages, outros só com Responses. Consulte a referência de API do modelo antes de supor que o Chat Completions funciona. Veja Protocolos de API para LLM.

Cliente de geração de mídia

A geração de imagem, vídeo, áudio e 3D é assíncrona: envie e depois consulte o status. Aqui está um cliente mínimo completo.

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}"}

# O endpoint é definido pelo tipo de saída: 3D passa por image; fala, música e transcrição passam por 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:
    """Envia uma tarefa de geração e retorna o ID da predição. Os parâmetros ficam no nível superior, não dentro de 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:
    """Consulta até a tarefa chegar a um estado final. O intervalo cresce aos poucos para evitar chamadas desnecessárias."""
    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"A geração falhou: {data.get('error') or data['status']}")
            return data

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

    raise TimeoutError(f"A tarefa {prediction_id} não terminou em {timeout} segundos")


def upload(path: str) -> str:
    """Envia um arquivo local e o converte em uma URL utilizável em requisições de geração."""
    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])

Duas coisas que este cliente acerta e que é fácil errar:

  1. Os parâmetros ficam no nível superior, ao lado de model — não embrulhados em um objeto input.
  2. Em modelos de transcrição e de letras de música, outputs[0] é texto, não uma URL. Não faça o download às cegas. Veja Modelos de áudio.

Notas para produção

  • Prefira webhooks ao polling em vídeo, que pode levar minutos. Veja Webhooks.
  • Repita em 429, 500, 503, 504 com backoff exponencial. Não repita 400, 401, 402, 403. Veja Erros e limites de taxa.
  • Tenha cuidado ao repetir envios. Um envio que expirou pode ter sido aceito mesmo assim, e uma nova tentativa às cegas cria uma segunda tarefa cobrada. Prefira enviar de forma assíncrona e consultar o status.
  • Registre o X-Request-ID de cada resposta — é o que o suporte precisa para rastrear uma chamada.

Bibliotecas da comunidade

Os wrappers mantidos pela comunidade estão listados em awesome-atlas-cloud-integrations. Eles são mantidos de forma independente — verifique o que um wrapper faz antes de usá-lo em produção.

Relacionado

Last updated on

On this page