SDK et bibliothèques clientes
Utilisez le SDK OpenAI, Anthropic ou Google avec Atlas Cloud, plus des clients prêts à copier pour la génération d'images, de vidéos et d'audio en Python et Node.js.
Atlas Cloud ne fournit pas son propre SDK, et pour les modèles de langage vous n'en avez pas besoin — l'API parle les formats que les SDK existants utilisent déjà. Pour la génération de médias, cette page propose un petit client à copier dans votre projet.
| Ce que vous appelez | Comment |
|---|---|
| Modèles de langage | Pointez le SDK OpenAI, Anthropic ou Google vers Atlas Cloud |
| Image, vidéo, audio, 3D | Du HTTP brut vers les points de terminaison asynchrones — client ci-dessous |
| Depuis un terminal ou une CI | La CLI |
| Depuis un IDE assisté par IA | Le serveur MCP |
Modèles de langage
Changez l'URL de base et la clé API. Tout le reste ne bouge pas.
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)Les modèles diffèrent quant au protocole qu'ils acceptent — certains ne fonctionnent qu'avec Messages, d'autres seulement avec Responses. Consultez la référence d'API du modèle avant de supposer que Chat Completions fonctionne. Voir Protocoles d'API LLM.
Client de génération de médias
La génération d'images, de vidéos, d'audio et de 3D est asynchrone : on soumet, puis on interroge. Voici un client minimal complet.
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}"}
# Le point de terminaison dépend du type de sortie : la 3D passe par image, la parole/musique/transcription par 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:
"""Soumettre une tâche de génération et renvoyer l'ID de prédiction. Les paramètres sont à plat au premier niveau, pas dans un objet 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:
"""Interroger jusqu'à l'état final. L'intervalle augmente progressivement pour éviter les appels inutiles."""
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"Échec de la génération : {data.get('error') or data['status']}")
return data
time.sleep(delay)
delay = min(delay * 1.5, 10.0)
raise TimeoutError(f"La tâche {prediction_id} ne s'est pas terminée en {timeout} secondes")
def upload(path: str) -> str:
"""Téléverser un fichier local et le convertir en URL utilisable dans une requête de génération."""
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])Deux choses que ce client fait correctement et qu'il est facile de rater :
- Les paramètres vont au premier niveau, à côté de
model— pas enveloppés dans un objetinput. - Pour les modèles de transcription et de paroles de chanson,
outputs[0]est du texte, pas une URL. Ne le téléchargez pas aveuglément. Voir Modèles audio.
Notes pour la production
- Préférez les webhooks au polling pour la vidéo, qui peut prendre plusieurs minutes. Voir Webhooks.
- Réessayez sur
429,500,503,504avec un backoff exponentiel. Ne réessayez pas sur400,401,402,403. Voir Erreurs et limites de débit. - Soyez prudent en réessayant les soumissions. Une soumission arrivée en timeout peut malgré tout avoir été acceptée, et une retentative aveugle crée une seconde tâche facturée. Soumettez plutôt en asynchrone et faites du polling.
- Journalisez
X-Request-IDdepuis chaque réponse — c'est ce dont le support a besoin pour retracer un appel.
Bibliothèques communautaires
Les wrappers maintenus par la communauté sont listés dans awesome-atlas-cloud-integrations. Ils sont maintenus indépendamment — vérifiez ce que fait un wrapper avant de l'utiliser en production.
Voir aussi
Last updated on