Skip to main content
acedatacloud es el SDK oficial de Python de Ace Data Cloud, que encapsula todos los servicios en api.acedata.cloud en métodos tipificados como client.openai.chat.completions.create(...), client.images.generate(...), client.search.google(...), etc., y proporciona dos conjuntos de clientes, sincrónicos y asíncronos. Está basado en httpx, soporta flujos SSE, reintentos automáticos, excepciones tipificadas y validación de tipos de pydantic. Dirección del código fuente y del paquete:

Instalación

Si necesitas pagar en la cadena X402 (sin ruta de API Token), instala otro:
Salida de verificación de versión en un venv limpio:
Explicación de resultados:
  • La versión del paquete es 2026.4.26.1 (CalVer, revisión del 26 de abril de 2026).
  • AceDataCloud es el cliente sincrónico, AsyncAceDataCloud es el cliente asíncrono de asyncio.
  • Este SDK no depende de pydantic, el cuerpo de respuesta devuelve un dict de manera uniforme. Esto es diferente de openai-python, y se debe tener en cuenta al migrar.

Preparar el API Token

Consulta Visión general del SDK - Solicitar API Token para obtener el token, luego en la shell export:
Al construir el cliente, no pases api_token, el SDK leerá automáticamente la variable de entorno ACEDATACLOUD_API_TOKEN. Si ya tienes ACEDATACLOUD_API_KEY almacenado en tu entorno (convenio del repositorio del proyecto), por favor, pásalo explícitamente: AceDataCloud(api_token=os.environ["ACEDATACLOUD_API_KEY"]).

Ejemplo 1: chat.completions (sincrónico)

Resultado de la ejecución del programa:
Explicación de resultados:
  • id es el ID de respuesta, que se puede buscar en Historial de uso.
  • content ADC_PY_SDK_OK es el identificador fijo que devuelve realmente el modelo.
  • res["usage"] devuelve un dict, no un modelo de pydantic; una llamada consume aproximadamente 24 tokens.

Ejemplo 2: chat.completions (flujo SSE)

Cuando stream=True, create devuelve un generador normal, cada vez que produce un chunk dict analizado.
Resultado de la ejecución del programa:
Explicación de resultados:
  • La latencia del primer frame es de 2104 ms, y las siguientes 11 frames solo tomaron 7 ms en total — una vez que el servicio comienza a fluir, el consumo local es inmediato.
  • El chunk es un dict normal, se puede acceder a los valores de manera segura usando .get() según el formato SSE de OpenAI.
  • En producción, se recomienda enviar SSE al frontend mientras se produce, con una latencia total de inicio cercana a 2 segundos.

Ejemplo 3: AsyncAceDataCloud (asíncrono)

La API de AsyncAceDataCloud es completamente simétrica a la versión sincrónica, solo que todos los métodos de IO devuelven corutinas. Es adecuado para servicios FastAPI / aiohttp / asyncio.
Resultado de la ejecución del programa:
Explicación de resultados:
  • La versión asíncrona y la versión sincrónica utilizan la misma ruta HTTP, solo que la implementación del pool de conexiones es diferente (httpx.AsyncClient).
  • Al salir, se debe await client.close() explícitamente para cerrar el pool de conexiones; en servicios de larga duración, solo se necesita cerrar una vez antes de que el proceso termine.
  • La latencia única es similar a la sincrónica, y en escenarios de concurrencia, la asincronía muestra su ventaja: un event loop puede manejar decenas o cientos de solicitudes en vuelo simultáneamente.

Ejemplo 4: images.generate (NanoBanana)

La API de NanoBanana es un servicio de generación de imágenes sincrónico, no pases wait — la llamada del SDK esperará continuamente a que el servicio devuelva 200.
Resultados del programa:
Descripción de los resultados:
  • image_url es una dirección estable en CDN, que se puede descargar o incrustar directamente en una página web.
  • En 18.9 segundos, casi todo fue el razonamiento del modelo; el costo del SDK local fue solo unos pocos milisegundos.
  • Para tareas realmente asincrónicas como Midjourney, Sora, Veo, Suno, se necesita usar wait=True o hacer polling manual con TaskHandle.wait(), ver Polling de tareas y respuestas en streaming del SDK.

Ejemplo 5: Manejo de errores tipificados

La jerarquía de excepciones es consistente con TypeScript: AuthenticationError (401), TokenMismatchError (token no coincide con el servicio), InsufficientBalanceError (saldo insuficiente), ResourceDisabledError (servicio deshabilitado), ValidationError (400), RateLimitError (429), ModerationError (403 revisión de contenido), APIError (general), TimeoutError (tiempo de espera), TransportError (capa de red).

Opciones de configuración

El timeout del SDK de Python y el poll_interval / max_wait de TaskHandle están en segundos, el SDK de TypeScript utiliza milisegundos, se debe tener especial cuidado al migrar entre lenguajes. Ver Polling de tareas y respuestas en streaming del SDK.
El SDK lee por defecto la variable de entorno ACEDATACLOUD_API_TOKEN; en este artículo, para unificar con otros tutoriales como Claude Code VS Code Tutorial, se utiliza ACEDATACLOUD_API_KEY, que requiere api_token=os.environ["ACEDATACLOUD_API_KEY"] para inyección explícita.

Avanzado: X402 controlador de pagos

El proceso completo y los resultados en la cadena real se pueden ver en SDK + controlador de pagos X402.

Cómo ver el saldo restante

A través de Consola de Ace Data Cloud - Lista de aplicaciones, se puede ver el saldo restante de la cuenta actual. A través de Consola de Ace Data Cloud - Historial de uso se puede ver todo el historial de uso y detalles de facturación.

Conocer más