SDKs & Client-Bibliotheken
Nutzen Sie das OpenAI-, Anthropic- oder Google-SDK mit Atlas Cloud — dazu fertige Clients zum Kopieren für Bild-, Video- und Audiogenerierung in Python und Node.js.
Atlas Cloud liefert kein eigenes SDK, und für Sprachmodelle brauchen Sie auch keins — die API spricht die Formate, die vorhandene SDKs bereits verwenden. Für die Mediengenerierung finden Sie auf dieser Seite einen kleinen Client, den Sie in Ihr Projekt kopieren können.
| Was Sie aufrufen | Wie |
|---|---|
| Sprachmodelle | Richten Sie das OpenAI-, Anthropic- oder Google-SDK auf Atlas Cloud aus |
| Bild, Video, Audio, 3D | Einfaches HTTP gegen die asynchronen Endpunkte — Client weiter unten |
| Aus dem Terminal oder der CI | Die CLI |
| Aus einer KI-gestützten IDE | Der MCP Server |
Sprachmodelle
Ändern Sie die Basis-URL und den API-Schlüssel. Alles andere bleibt gleich.
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)Modelle unterscheiden sich darin, welches Protokoll sie akzeptieren — manche funktionieren nur mit Messages, andere nur mit Responses. Prüfen Sie die API-Referenz des Modells, bevor Sie annehmen, dass Chat Completions funktioniert. Siehe LLM-API-Protokolle.
Client für die Mediengenerierung
Die Generierung von Bild, Video, Audio und 3D läuft asynchron: einreichen, dann pollen. Hier ein vollständiger, minimaler Client.
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}"}
# Der Endpunkt richtet sich nach dem Ausgabetyp: 3D läuft über image, Sprache/Musik/Transkription über 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:
"""Generierungsaufgabe einreichen, gibt die Prediction-ID zurück. Parameter stehen flach auf oberster Ebene, nicht in einem input-Objekt."""
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:
"""Pollen, bis die Aufgabe einen Endzustand erreicht. Das Intervall wächst schrittweise, um unnötigen Leerlauf zu vermeiden."""
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"Generierung fehlgeschlagen: {data.get('error') or data['status']}")
return data
time.sleep(delay)
delay = min(delay * 1.5, 10.0)
raise TimeoutError(f"Aufgabe {prediction_id} wurde nicht innerhalb von {timeout} Sekunden abgeschlossen")
def upload(path: str) -> str:
"""Lokale Datei hochladen und in eine URL umwandeln, die in Generierungsanfragen verwendet werden kann."""
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])Zwei Dinge, die dieser Client richtig macht und die man leicht falsch macht:
- Parameter stehen auf oberster Ebene, neben
model— nicht eingepackt in eininput-Objekt. - Bei Transkriptions- und Songtext-Modellen ist
outputs[0]Text, keine URL. Laden Sie ihn nicht blind herunter. Siehe Audio-Modelle.
Hinweise für den Produktivbetrieb
- Bevorzugen Sie Webhooks statt Polling bei Video, das Minuten dauern kann. Siehe Webhooks.
- Wiederholen Sie bei
429,500,503,504mit exponentiellem Backoff. Wiederholen Sie nicht bei400,401,402,403. Siehe Fehler & Ratenbegrenzungen. - Vorsicht beim Wiederholen von Einreichungen. Eine Einreichung, die in ein Timeout gelaufen ist, kann dennoch angenommen worden sein, und ein blinder Retry erzeugt eine zweite abrechenbare Aufgabe. Reichen Sie stattdessen asynchron ein und pollen Sie.
- Protokollieren Sie
X-Request-IDaus jeder Antwort — genau das benötigt der Support, um einen Aufruf nachzuverfolgen.
Community-Bibliotheken
Von der Community gepflegte Wrapper sind in awesome-atlas-cloud-integrations aufgeführt. Sie werden unabhängig gepflegt — prüfen Sie, was ein Wrapper tut, bevor Sie ihn produktiv einsetzen.
Verwandte Themen
Last updated on