@acedatacloud/sdk — это официальный TypeScript / JavaScript SDK от Ace Data Cloud, который оборачивает все сервисы на api.acedata.cloud в типизированные методы, такие как client.openai.chat.completions.create(...), client.images.generate(...), client.search.google(...) и т.д., с поддержкой SSE потоковой передачи, повторных попыток с экспоненциальной задержкой и типизированных исключений.
Можно использовать в Node.js, Deno, Bun и современных браузерах (с бандлером).
Исходный код и адрес пакета:
- Репозиторий SDK: https://github.com/AceDataCloud/SDK
- npm SDK: https://www.npmjs.com/package/@acedatacloud/sdk
Установка
- Версия пакета —
2026.504.2(CalVer, 2-е исправление 504-й ISO недели 2026 года). AceDataCloud— это основной класс для построения клиента, доступный из стандартного экспорта.
Подготовка API Token
Согласно Обзору SDK - Запрос API Token получите токен, затем в shell выполнитеexport:
apiToken, SDK автоматически прочитает переменную окружения ACEDATACLOUD_API_TOKEN. Если в вашей среде уже сохранен ACEDATACLOUD_API_KEY (по соглашению проекта), вы можете явно передать: new AceDataCloud({ apiToken: process.env.ACEDATACLOUD_API_KEY }).
Пример 1: chat.completions (непотоковый)
id chatcmpl-DldCcLvkTFaioST8e6SjOl0wJScQA— это ID ответа, совместимый с OpenAI, который можно найти в истории использования в консоли.content ADC_TS_SDK_OK— это фиксированный идентификатор, который модель возвращает, подтверждающий, что ответ не был изменен SDK.- Один chat completion потребляет около 22 токенов, согласно тарифу gpt-4o-mini.
- SDK объявляет ответ как
Record<string, unknown>, во время выполнения это будет JSON-объект, доступ к полям через.id/.choices[0].message.contentбудет работать в.mjs, Node REPL, Bun; в строгих проектах TypeScript может потребоваться(res as any).idили отключениеnoImplicitAnyв tsconfig.
Пример 2: chat.completions (SSE потоковый)
При включенииstream: true метод create возвращает асинхронный итератор, каждая часть которого является ChatCompletionChunk.
- Задержка первой части 2481 мс — это время, необходимое модели для генерации первого токена; последующие 12 частей пришли за 135 мс.
- 13 частей в сумме составляют
"1 2 3 4 5", каждый токен представлен отдельной частью + последняя часть содержитfinish_reason. - Потоковая передача не экономит токены по сравнению с непотоковой, но задержка первого токена значительно снижена, что подходит для создания интерфейсов в реальном времени.
Пример 3: images.generate (NanoBanana)
client.images.generate({ provider: 'nano-banana', ... }) возвращает результат синхронно, не требуется передавать параметр wait — API NanoBanana изначально синхронный.
image_url— это стабильный адрес на CDN, который можно использовать напрямую в<img src />или для загрузки.- Большая часть времени в 16.6 секунд уходит на вывод модели, затраты на локальный SDK можно игнорировать.
trace_id— это ID запроса, назначенный платформой, если возникнут проблемы, предоставьте этот ID службе поддержки для быстрого поиска.- Для асинхронных сервисов (Midjourney, Sora, Veo и т.д.) требуется опрос TaskHandle, подробности см. в SDK опрос задач и потоковые ответы.
Пример 4: типизированная обработка ошибок
SDK будет выбрасывать ошибки в зависимости от HTTP статуса в конкретные подклассы (AuthenticationError / BadRequestError / RateLimitError / InternalServerError / APIConnectionError и т.д.), что позволяет использовать instanceof для точной обработки.
- 401 автоматически отображается как
AuthenticationError, бизнес-код может использоватьinstanceofдля точной ветвления. code: invalid_tokenпоступает от PlatformGateway, что удобно для сопоставления с логами на сервере.- Аналогично 429 →
RateLimitError, 400 →BadRequestError, 5xx →InternalServerError.
Пример 5: маршрутизация нескольких моделей
Один и тот же клиент может свободно переключаться между несколькими сервисами, достаточно, чтобы имена моделей совпадали.- Один код, один токен, охватывающий четыре типа сервисов моделей: OpenAI / Google / DeepSeek / xAI.
gemini-2.5-flashв этот раз не вернулADC_OK, это связано с различиями в стиле вывода модели — SDK не скрывает ничего, а точно передает оригинальные слова модели бизнесу.- Цены рассчитываются по реальной цене токена, путь проходит только один раз через PlatformGateway.
Пример 6: Поиск в Google
- Один запрос возвращает 10 органических результатов, имя поля
organic(неorganic_results). - Поиск проходит через Serp сервис, оплата производится за каждую операцию.
- Один и тот же экземпляр клиента может как общаться, так и искать, одного токена достаточно.
Опции конфигурации
Использование в браузере
@acedatacloud/sdk является ESM + ISO (гомоморфный) пакетом, который можно напрямую import в современных браузерах с бандлером. Обратите внимание: не кодируйте токен API в коде фронтенда. Рекомендуется для фронтенда:
- Использовать X402
paymentHandler— пользовательский кошелек оплачивает USDC за каждую операцию, токен не требуется. - Или использовать SDK на своем сервере, браузер только вызывает ваш собственный бэкенд.
Продвинутый: опрос задач и потоковые ответы
- Сервисы, связанные с задачами (Midjourney, Sora, Veo, Suno): используйте
TaskHandleдля опроса, детали единиц, тайм-аутов и повторов смотрите в SDK опрос задач и потоковые ответы. - Потоковый чат: пример 2 на этой странице уже продемонстрировал; потоковое аудио / видео также поддерживается.
Продвинутый: X402 платежные хуки
Если вы не хотите запрашивать токен API и хотите оплачивать по мере использования, вы можете использоватьpaymentHandler:
createX402PaymentHandlerна стороне TypeScript принимает{ network, evmProvider, evmAddress, preferScheme? }(EVM цепь) или{ network: 'solana', solanaWallet }(Solana). На серверной стороне Node, еслиwindow.ethereumотсутствует, используйтеviem’screateWalletClient(на основе приватного ключа), чтобы обернуть совместимый с EIP-1193 провайдер и передать его; подробные методы и реальные результаты на цепи смотрите в SDK + X402 платежные хуки.

