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 :
- Dépôt SDK : https://github.com/AceDataCloud/SDK
- PyPI : https://pypi.org/project/acedatacloud/
Installation
- La version du package est
2026.4.26.1(CalVer, révision du 26 avril 2026). AceDataCloudest le client synchrone,AsyncAceDataCloudest le client asynchrone asyncio.- Ce SDK ne dépend pas de
pydantic, le corps de réponse retourne uniformément undict. Cela diffère deopenai-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 shellexport :
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é)
idest l’ID de réponse, que vous pouvez trouver dans Historique d’utilisation.content ADC_PY_SDK_OKest l’identifiant fixe réellement retourné par le modèle.res["usage"]retourne undict, ce n’est pas un modèle pydantic ; un appel consomme environ 24 tokens.
Exemple 2 : chat.completions (streaming SSE)
Lorsquestream=True, create retourne un générateur ordinaire, chaque fois qu’il yield un chunk dict analysé.
- 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 deAsyncAceDataCloud 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.
- 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 passerwait — l’appel SDK attendra toujours que le service retourne 200.
image_urlest 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=Trueou de faire unTaskHandle.wait()manuellement, voir SDK tâches et réponses en streaming.
Exemple 5 : Gestion des erreurs typées
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
Letimeoutdu SDK Python et lepoll_interval/max_waitde 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’environnementACEDATACLOUD_API_TOKEN; cet article utiliseACEDATACLOUD_API_KEYpour être cohérent avec d’autres tutoriels comme Claude Code VS Code Tutorial, il est nécessaire d’injecter explicitement avecapi_token=os.environ["ACEDATACLOUD_API_KEY"].

