SDK & Library Klien

Gunakan SDK OpenAI, Anthropic, atau Google dengan Atlas Cloud, lengkap dengan klien siap salin untuk pembuatan gambar, video, dan audio dalam Python dan Node.js.

Atlas Cloud tidak menyediakan SDK sendiri, dan untuk model bahasa Anda memang tidak memerlukannya — API ini memahami format yang sudah dipakai SDK yang ada. Untuk pembuatan media, halaman ini menyediakan klien ringkas yang dapat Anda salin ke dalam proyek Anda.

Yang Anda panggilCaranya
Model bahasaArahkan SDK OpenAI, Anthropic, atau Google ke Atlas Cloud
Gambar, video, audio, 3DHTTP biasa ke endpoint asinkron — klien di bawah ini
Dari terminal atau CICLI
Dari IDE berbantuan AIMCP Server

Model bahasa

Ubah base URL dan API key-nya. Selebihnya tetap sama.

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)

Setiap model berbeda dalam protokol yang diterimanya — sebagian hanya bekerja dengan Messages, sebagian lain hanya dengan Responses. Periksa referensi API model tersebut sebelum berasumsi Chat Completions dapat dipakai. Lihat Protokol LLM API.

Klien pembuatan media

Pembuatan gambar, video, audio, dan 3D bersifat asinkron: kirim, lalu lakukan polling. Berikut klien minimal yang lengkap.

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

# Endpoint ditentukan oleh tipe keluaran: 3D memakai image; suara, musik, dan transkripsi semuanya memakai 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:
    """Kirim sebuah tugas dan kembalikan prediction ID-nya. Parameter diletakkan di tingkat teratas, bukan di dalam objek `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:
    """Lakukan polling sampai tugas mencapai status terminal, dengan backoff yang makin panjang."""
    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"Generation failed: {data.get('error') or data['status']}")
            return data

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

    raise TimeoutError(f"Job {prediction_id} did not finish within {timeout}s")


def upload(path: str) -> str:
    """Unggah berkas lokal dan kembalikan URL yang dapat dipakai dalam permintaan pembuatan."""
    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])

Dua hal yang ditangani klien ini dengan benar dan mudah keliru dilakukan:

  1. Parameter diletakkan di tingkat teratas, bersebelahan dengan model — bukan dibungkus dalam objek input.
  2. Untuk model transkripsi dan lirik, outputs[0] berupa teks, bukan URL. Jangan langsung mengunduhnya. Lihat Model Audio.

Catatan untuk produksi

  • Utamakan webhook daripada polling untuk video, yang dapat memakan waktu beberapa menit. Lihat Webhook.
  • Ulangi permintaan pada 429, 500, 503, 504 dengan exponential backoff. Jangan mengulang 400, 401, 402, 403. Lihat Error & Batas Laju.
  • Berhati-hatilah saat mengulang pengiriman tugas. Pengiriman yang kehabisan waktu mungkin sebenarnya sudah diterima, dan pengulangan membabi buta akan menciptakan tugas kedua yang ikut ditagih. Lebih baik kirim secara asinkron lalu lakukan polling.
  • Catat X-Request-ID dari setiap respons — itulah yang dibutuhkan tim dukungan untuk melacak sebuah panggilan.

Library komunitas

Wrapper yang dikelola komunitas terdaftar di awesome-atlas-cloud-integrations. Semuanya dikelola secara independen — periksa dulu apa yang dilakukan sebuah wrapper sebelum memakainya di produksi.

Terkait

Last updated on

On this page