Skip to main content
acedatacloud est le SDK Python officiel d’Ace Data Cloud, qui encapsule tous les services sur api.acedata.cloud en méthodes typées telles que client.openai.chat.completions.create(...), client.images.generate(...), client.search.google(...), etc., tout en fournissant deux ensembles de clients, synchrones et asynchrones. Il est basé sur httpx, supporte le streaming SSE, la réessai automatique, les exceptions typées et la validation de type pydantic. Adresse du code source et du package :

Installation

Si vous avez besoin de payer sur la chaîne X402 (sans chemin API Token), installez-en un autre :
Sortie de vérification de version dans un venv propre :
Explication des résultats :
  • La version du package est 2026.4.26.1 (CalVer, révision du 26 avril 2026).
  • AceDataCloud est le client synchrone, AsyncAceDataCloud est le client asynchrone asyncio.
  • Ce SDK ne dépend pas de pydantic, le corps de réponse retourne uniformément un dict. Cela diffère de openai-python, il faut en tenir compte lors de la migration.

Préparer le Token API

Référez-vous à Aperçu du SDK - Demander un Token API pour obtenir le token, puis dans le shell export :
Lors de la construction du client, ne passez pas api_token, le SDK lira automatiquement la variable d’environnement ACEDATACLOUD_API_TOKEN. Si votre environnement contient déjà ACEDATACLOUD_API_KEY (convention du dépôt de projet), veuillez le passer explicitement : AceDataCloud(api_token=os.environ["ACEDATACLOUD_API_KEY"]).

Exemple 1 : chat.completions (synchronisé)

Résultat de l’exécution du programme :
Explication des résultats :
  • id est l’ID de réponse, que vous pouvez trouver dans Historique d’utilisation.
  • content ADC_PY_SDK_OK est l’identifiant fixe réellement retourné par le modèle.
  • res["usage"] retourne un dict, ce n’est pas un modèle pydantic ; un appel consomme environ 24 tokens.

Exemple 2 : chat.completions (streaming SSE)

Lorsque stream=True, create retourne un générateur ordinaire, chaque fois qu’il yield un chunk dict analysé.
Résultat de l’exécution du programme :
Explication des résultats :
  • Le délai de la première image est de 2104 ms, les 11 images suivantes n’ont pris que 7 ms pour arriver — une fois que le service commence à streamer, il est facile de consommer localement.
  • Le chunk est un dict ordinaire, il suffit de récupérer les valeurs en toute sécurité en utilisant .get() selon le format SSE d’OpenAI.
  • Dans la production réelle, il est recommandé de yield tout en poussant SSE vers le frontend, le délai total de la première image est proche de 2 secondes.

Exemple 3 : AsyncAceDataCloud (asynchrone)

L’API de AsyncAceDataCloud est complètement symétrique à celle de la version synchrone, sauf que toutes les méthodes IO retournent des coroutines. Elle est adaptée aux services FastAPI / aiohttp / asyncio.
Résultat de l’exécution du programme :
Explication des résultats :
  • La version asynchrone et la version synchrone empruntent le même chemin HTTP, seule l’implémentation du pool de connexions diffère (httpx.AsyncClient).
  • Lors de la sortie, il est explicitement nécessaire d’await client.close() pour fermer le pool de connexions ; dans les services à long cycle de vie, il suffit de le fermer une fois avant la sortie du processus.
  • Le délai unique est similaire à celui de la version synchrone, mais l’asynchrone montre son avantage dans les scénarios de concurrence — une boucle d’événements peut exécuter simultanément des dizaines ou des centaines de requêtes en cours.

Exemple 4 : images.generate (NanoBanana)

L’API NanoBanana est un service d’image généré de manière synchrone, ne pas passer wait — l’appel SDK attendra toujours que le service retourne 200.
Résultat du programme :
Explication des résultats :
  • image_url est une adresse stable sur le CDN, pouvant être téléchargée ou intégrée dans une page web.
  • Les 18,9 secondes sont presque entièrement dues à l’inférence du modèle ; le coût du SDK local n’est que de quelques millisecondes.
  • Pour des tâches réellement asynchrones comme Midjourney, Sora, Veo, Suno, il est nécessaire d’utiliser wait=True ou de faire un TaskHandle.wait() manuellement, voir SDK tâches et réponses en streaming.

Exemple 5 : Gestion des erreurs typées

La hiérarchie des exceptions est cohérente avec TypeScript : AuthenticationError (401), TokenMismatchError (token ne correspondant pas au service), InsufficientBalanceError (solde insuffisant), ResourceDisabledError (service désactivé), ValidationError (400), RateLimitError (429), ModerationError (403 vérification de contenu), APIError (erreur générale), TimeoutError (délai d’attente), TransportError (erreur réseau).

Options de configuration

Le timeout du SDK Python et le poll_interval / max_wait de TaskHandle sont tous deux en secondes, le SDK TypeScript utilise des millisecondes, il faut faire attention lors de la migration entre les langages. Voir SDK tâches et réponses en streaming.
Le SDK lit par défaut la variable d’environnement ACEDATACLOUD_API_TOKEN ; cet article utilise ACEDATACLOUD_API_KEY pour être cohérent avec d’autres tutoriels comme Claude Code VS Code Tutorial, il est nécessaire d’injecter explicitement avec api_token=os.environ["ACEDATACLOUD_API_KEY"].

Avancé : X402 gestionnaire de paiement

Le processus complet et les résultats réels sur la chaîne sont disponibles dans SDK + gestionnaire de paiement X402.

Comment vérifier le solde restant

Vous pouvez vérifier le solde restant de votre compte via Ace Data Cloud Console - Liste des applications. Vous pouvez consulter tout l’historique d’utilisation et les détails de facturation via Ace Data Cloud Console - Historique d’utilisation.

En savoir plus