@acedatacloud/sdk est le SDK TypeScript / JavaScript 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., avec un flux SSE intégré, une stratégie de réessai avec backoff et des exceptions typées.
Il peut être utilisé dans Node.js, Deno, Bun et les navigateurs modernes (avec bundler).
Adresse du code source et du package :
- Dépôt SDK : https://github.com/AceDataCloud/SDK
- npm SDK : https://www.npmjs.com/package/@acedatacloud/sdk
Installation
- La version du package est
2026.504.2(CalVer, 2ème révision de la 504ème semaine ISO de l’année 2026). AceDataCloudest la classe principale utilisée pour construire le client, accessible depuis l’exportation par défaut.
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 :
apiToken, 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), vous pouvez le passer explicitement : new AceDataCloud({ apiToken: process.env.ACEDATACLOUD_API_KEY }).
Exemple 1 : chat.completions (non stream)
id chatcmpl-DldCcLvkTFaioST8e6SjOl0wJScQAest l’ID de réponse compatible avec OpenAI, que vous pouvez retrouver dans l’historique utilisation du tableau de bord.content ADC_TS_SDK_OKest l’identifiant fixe réellement retourné par le modèle, prouvant que la réponse n’a pas été altérée par le SDK.- Une complétion de chat consomme environ 22 tokens, facturée au tarif unitaire de gpt-4o-mini.
- Le SDK déclare la réponse comme
Record<string, unknown>, à l’exécution c’est un objet JSON, l’accès par point comme.id/.choices[0].message.contentfonctionne sous.mjs, Node REPL, Bun ; dans un projet TypeScript strict, il peut être nécessaire d’utiliser(res as any).idou de désactivernoImplicitAnydans tsconfig.
Exemple 2 : chat.completions (stream SSE)
En activantstream: true, create retourne un itérateur asynchrone, chaque trame étant un ChatCompletionChunk.
- Le délai de la première trame de 2481 ms est le temps pris par le modèle pour générer le premier token ; les 12 trames suivantes sont toutes arrivées en moins de 135 ms.
- Les 13 trames combinées forment
"1 2 3 4 5", chaque token étant dans une trame séparée + la dernière trame contenantfinish_reason. - Le streaming ne consomme pas moins de tokens que le mode non stream, mais le délai du premier mot est considérablement réduit, ce qui est adapté pour une interface utilisateur en temps réel.
Exemple 3 : images.generate (NanoBanana)
client.images.generate({ provider: 'nano-banana', ... }) retourne directement de manière synchrone, pas besoin de passer le paramètre wait — l’API NanoBanana génère en synchronisation.
image_urlest une adresse stable sur le CDN, que vous pouvez directement utiliser dans<img src />ou télécharger.- La majorité des 16,6 secondes est consacrée à l’inférence du modèle, les coûts du SDK local étant négligeables.
trace_idest l’ID de requête attribué par la plateforme, si un problème survient, fournir cet ID au support client peut aider à localiser rapidement le problème.- Pour les services asynchrones (Midjourney, Sora, Veo, etc.), un polling de TaskHandle est nécessaire, voir Polling de tâches SDK et réponses en streaming.
Exemple 4 : Gestion des erreurs typées
Le SDK lancera des erreurs sous forme de sous-classes spécifiques (AuthenticationError / BadRequestError / RateLimitError / InternalServerError / APIConnectionError, etc.) en fonction de l’état HTTP, vous pouvez utiliser instanceof pour des branches précises.
- 401 est automatiquement mappé à
AuthenticationError, le code métier peut utiliserinstanceofpour des branches précises. code: invalid_tokenprovient de PlatformGateway, facilitant la comparaison avec les journaux backend.- De même 429 →
RateLimitError, 400 →BadRequestError, 5xx →InternalServerError.
Exemple 5 : Routage multi-modèles
Un même client peut passer librement entre plusieurs services, tant que le nom du modèle est identique.- Un code, un token, couvrant les services de modèles OpenAI / Google / DeepSeek / xAI.
gemini-2.5-flashn’a pas retournéADC_OKcette fois, en raison des différences de style de sortie du modèle - le SDK n’a pas silencieusement absorbé quoi que ce soit, transmettant fidèlement les mots du modèle au code métier.- Les prix sont facturés selon le prix unitaire réel de chaque token, le chemin ne passe qu’une seule fois par PlatformGateway.
Exemple 6 : Recherche Google
- Une seule requête a obtenu 10 résultats organiques, le nom du champ est
organic(pasorganic_results). - La recherche passe par le service Serp, facturé à la demande.
- Une même instance de client peut à la fois chatter et rechercher, un seul token suffit.
Options de configuration
Utilisation dans le navigateur
@acedatacloud/sdk est un package ESM + ISO (isomorphe), pouvant être directement importé dans des navigateurs modernes avec bundler. Attention : ne pas coder en dur le token API dans le code frontend. Recommandations pour le frontend :
- Utiliser X402
paymentHandler— le portefeuille utilisateur signe USDC à la demande, sans besoin de token. - Ou utiliser le SDK sur votre propre serveur, le navigateur n’appelant que votre backend.
Avancé : Polling de tâches et réponses en streaming
- Services de type tâche (Midjourney, Sora, Veo, Suno) : utiliser
TaskHandlepour le polling, les détails d’unité, de délai d’attente et de réessai se trouvent dans SDK Polling de tâches et Streaming. - Chat en streaming : l’exemple 2 de cette page a déjà été démontré ; l’audio / vidéo en streaming est également pris en charge.
Avancé : Hooks de paiement X402
Si vous ne souhaitez pas demander de token API et préférez payer à la demande sur la chaîne, vous pouvez utiliserpaymentHandler :
createX402PaymentHandleraccepte côté TypeScript{ network, evmProvider, evmAddress, preferScheme? }(chaîne EVM) ou{ network: 'solana', solanaWallet }(Solana). Si le serveur Node n’a paswindow.ethereum, utilisezviem’screateWalletClient(basé sur la clé privée) pour encapsuler un fournisseur compatible EIP-1193 à transmettre ; les détails et les résultats réels sur la chaîne se trouvent dans SDK + Hooks de paiement X402.

