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 panggil | Caranya |
|---|---|
| Model bahasa | Arahkan SDK OpenAI, Anthropic, atau Google ke Atlas Cloud |
| Gambar, video, audio, 3D | HTTP biasa ke endpoint asinkron — klien di bawah ini |
| Dari terminal atau CI | CLI |
| Dari IDE berbantuan AI | MCP Server |
Model bahasa
Ubah base URL dan API key-nya. Selebihnya tetap sama.
pip install openaiimport 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:
- Parameter diletakkan di tingkat teratas, bersebelahan dengan
model— bukan dibungkus dalam objekinput. - 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,504dengan exponential backoff. Jangan mengulang400,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-IDdari 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