SDK de Python (clore-ai)
El clore-ai paquete es el SDK oficial de Python para el Clore.ai mercado de GPU. Envuelve toda la API REST en una interfaz limpia y con tipos seguros con limitación de tasa incorporada, reintentos automáticos y manejo estructurado de errores — para que puedas concentrarte en alquilar GPUs, no en la plomería HTTP.
Instalación
pip install clore-aiRequisitos: Python 3.9+
El paquete instala tanto el SDK de Python como el clore CLI.
Autenticación
Obtén tu clave de API desde el panel de control de Clore.ai → API sección.
Opción 1: Variable de entorno (recomendado)
export CLORE_API_KEY=tu_clave_api_aquiEl SDK lee CLORE_API_KEY automáticamente — no se necesitan cambios en el código.
Opción 2: Archivo de configuración del CLI
clore config set api_key TU_API_KEYEsto almacena la clave en ~/.clore/config.json.
Opción 3: Pasar directamente en el código
⚠️ Importante: La API de Clore.ai usa la
authcabecera para la autenticación, noAuthorization: Bearer. El SDK lo maneja automáticamente.
Inicio rápido
Cliente sincrónico (CloreAI)
CloreAI)Constructor
El cliente soporta gestores de contexto para limpieza automática:
wallets()
wallets()Obtén los saldos de tus wallets y las direcciones de depósito.
Devuelve: List[Wallet]
name
str
Nombre de la moneda (p. ej. "bitcoin", "CLORE-Blockchain", "USD-Blockchain")
balance
float | None
Saldo actual
deposit
str | None
Dirección de depósito
withdrawal_fee
float | None
Tarifa de retiro
marketplace()
marketplace()Busca en el mercado de GPU con filtros opcionales del lado del cliente.
Parámetros:
gpu
str | None
None
Filtrar por modelo de GPU (coincidencia de subcadena sin distinción de mayúsculas)
min_gpu_count
int | None
None
Número mínimo de GPUs
min_ram_gb
float | None
None
RAM mínima en GB
max_price_usd
float | None
None
Precio máximo por hora en USD
available_only
bool
True
Solo devolver servidores que están disponibles para alquilar
Devuelve: List[MarketplaceServer]
Cada MarketplaceServer proporciona propiedades convenientes para los campos más comunes, además de acceso a los datos anidados completos:
id
int
ID único del servidor
gpu_model
str | None
Descripción de la GPU principal (p. ej. "1x NVIDIA GeForce RTX 4090")
gpu_count
int
Número de GPUs (de gpu_array)
ram_gb
float | None
RAM en GB
price_usd
float | None
Precio bajo demanda en USD
spot_price_usd
float | None
Precio spot en USD
available
bool
Si el servidor está disponible (no alquilado)
location
str | None
Código de país según las especificaciones de la red
Para casos de uso avanzados, puedes acceder a la estructura anidada completa:
specs
ServerSpecs | None
Especificaciones completas de hardware (specs.gpu, specs.ram, specs.cpu, specs.disk, specs.net, etc.)
price
ServerPrice | None
Objeto de precio completo (price.usd.on_demand_usd, price.usd.spot, price.on_demand, etc.)
rented
bool | None
Si el servidor está actualmente alquilado
reliability
float | None
Puntuación de fiabilidad del servidor
rating
ServerRating | None
Calificación del servidor (rating.avg, rating.cnt)
Nota: El
marketplace()el endpoint es público — funciona sin clave de API.
my_servers()
my_servers()Enumera los servidores que estás proporcionando al mercado de Clore.ai.
Devuelve: List[MyServer]
id
int
ID del servidor
name
str | None
Nombre del servidor
gpu_model
str | None
Descripción de la GPU principal
ram_gb
float | None
RAM en GB
status
str
Estado legible por humanos: "Online", "Offline", "Disconnected", o "Not Working"
connected
bool | None
Si el servidor está conectado
online
bool | None
Si el servidor está en línea
visibility
str | None
"public" o "private"
server_config(server_name)
server_config(server_name)Obtén la configuración de un servidor específico que alojas.
Parámetros:
server_name
str
Nombre del servidor
Devuelve: ServerConfig
name
str | None
Nombre del servidor
gpu_model
str | None
Descripción de la GPU principal
mrl
int | None
Duración mínima de alquiler en horas
on_demand_price
float | None
Primer precio disponible bajo demanda en USD
spot_price
float | None
Primer precio spot disponible en USD
specs
ServerSpecs | None
Especificaciones completas de hardware
connected
bool | None
Si el servidor está conectado
visibility
str | None
"public" o "private"
my_orders(include_completed)
my_orders(include_completed)Obtén tus órdenes actuales, opcionalmente incluyendo las completadas/expiradas.
Parámetros:
include_completed
bool
False
Incluir órdenes completadas/expiradas
Devuelve: List[Order]
id
int
ID único de la orden
server_id
int | None
ID del servidor
type
str
"on-demand" o "spot"
status
str | None
Estado de la orden
image
str | None
Imagen de Docker
currency
str | None
Moneda de pago
price
float | None
Precio de la orden por día
pub_cluster
str | None
Hostname/IP público para acceso
tcp_ports
dict | None
Mapeos de puertos TCP
spot_marketplace(server_id)
spot_marketplace(server_id)Ver ofertas del mercado spot para un servidor específico.
Parámetros:
server_id
int
ID del servidor a verificar
Devuelve: SpotMarket
offers
List[SpotOffer] | None
Lista de ofertas spot (order_id, price, server_id)
server
SpotServerInfo | None
Información del servidor (precios mínimos, visibilidad, estado en línea)
currency_rates_in_usd
Dict[str, float] | None
Tasas de cambio de monedas en USD
create_order(...)
create_order(...)Crea una nueva orden on-demand o spot. Así es como alquilas una GPU.
Orden on-demand
Orden spot
Parámetros:
server_id
int
Sí
ID del servidor a alquilar
image
str
Sí
Imagen de Docker (p. ej. "cloreai/ubuntu22.04-cuda12")
type
str
Sí
"on-demand" o "spot"
currency
str
Sí
Moneda de pago (p. ej. "bitcoin")
ssh_password
str
No
Contraseña SSH (alfanumérica, máximo 32 caracteres)
ssh_key
str
No
Clave pública SSH (máx. 3072 caracteres)
ports
dict
No
Mapeos de puertos, p. ej. {"22": "tcp", "8888": "http"}
env
dict
No
Variables de entorno
jupyter_token
str
No
Token de Jupyter notebook (máx. 32 caracteres)
command
str
No
Comando de shell a ejecutar después de iniciar el contenedor
spot_price
float
Solo spot
Precio por día para órdenes spot
required_price
float
No
Asegurar un precio específico (solo on-demand)
autossh_entrypoint
str
No
Usar el punto de entrada SSH de Clore.ai
Devuelve: Orden
Límite de tasa:
create_ordertiene un tiempo de espera especial de 5 segundos entre llamadas. El SDK lo aplica automáticamente.
cancel_order(order_id, issue)
cancel_order(order_id, issue)Cancelar una orden activa u oferta spot. Opcionalmente reportar un problema con el servidor.
Parámetros:
order_id
int
Sí
ID de la orden a cancelar
issue
str
No
Razón de la cancelación / reporte de problema (máx. 2048 caracteres)
Devuelve: Dict[str, Any]
set_server_settings(...)
set_server_settings(...)Actualizar la configuración de un servidor que alojas en el mercado.
Parámetros:
name
str
Sí
Nombre del servidor
availability
bool
No
Si el servidor puede ser alquilado
mrl
int
No
Duración mínima de alquiler en horas
on_demand
float
No
Precio por día bajo demanda
spot
float
No
Precio mínimo spot por día
Devuelve: Dict[str, Any]
set_spot_price(order_id, price)
set_spot_price(order_id, price)Actualizar el precio de tu oferta en el mercado spot.
Parámetros:
order_id
int
ID de la orden/oferta spot
price
float
Nuevo precio por día
Devuelve: Dict[str, Any]
Nota: Solo puedes bajar los precios spot una vez cada 600 segundos, y por un tamaño de paso limitado. La API devuelve
code: 6con detalles si excedes estos límites.
Cliente asíncrono (AsyncCloreAI)
AsyncCloreAI)El AsyncCloreAI client proporciona los mismos métodos que CloreAI, pero todos devuelven corrutinas. Úsalo cuando necesites llamadas de API concurrentes o estés trabajando dentro de una aplicación async.
Uso básico
Operaciones concurrentes
Ejecuta múltiples llamadas a la API en paralelo con asyncio.gather:
Métodos disponibles
AsyncCloreAI soporta todos los mismos métodos que CloreAI:
await wallets()
Obtener saldos de wallets
await marketplace(...)
Buscar en el mercado
await my_servers()
Listar tus servidores alojados
await server_config(name)
Obtener configuración del servidor
await my_orders(...)
Listar tus órdenes
await spot_marketplace(server_id)
Obtener ofertas del mercado spot
await create_order(...)
Crear una nueva orden
await cancel_order(...)
Cancelar una orden
await set_server_settings(...)
Actualizar la configuración del servidor
await set_spot_price(...)
Actualizar el precio spot
Manejo de errores
El SDK proporciona clases de excepción estructuradas para cada código de error de la API.
Códigos de error
0
—
Éxito
1
DBError
Error de base de datos
2
InvalidInputError
Datos de entrada inválidos
3
AuthError
Token de API inválido
4
InvalidEndpointError
Endpoint inválido
5
RateLimitError
Límite de velocidad excedido
6
FieldError
Error en un campo específico (ver error campo en la respuesta)
Todas las clases de excepción heredan de CloreAPIError e incluyen:
e.code— código numérico de errore.response— diccionario de respuesta completa de la API (cuando esté disponible)
Limitación de velocidad
El SDK incluye un limitador de velocidad incorporado que aplica automáticamente los límites de Clore.ai:
La mayoría de endpoints
1 solicitud/segundo
create_order
1 solicitud/5 segundos
Cuando la API devuelve un error de límite de velocidad (código 5), el SDK aplica retroceso exponencial y reintenta hasta max_retries veces (por defecto: 3). No necesitas añadir time.sleep() entre llamadas.
Cómo funciona
Antes de cada solicitud, el limitador de velocidad espera hasta que haya transcurrido el intervalo mínimo.
create_orderlas llamadas imponen una pausa adicional de 5 segundos.En errores por límite de velocidad, el SDK retrocede exponencialmente: 1s → 2s → 4s → ...
Después de
max_retriesintentos fallidos, seRateLimitErrorlanza una excepción.
Personalizar el comportamiento de reintentos
Configuración
Archivo de configuración
El CLI almacena la configuración en ~/.clore/config.json:
Orden de resolución
El SDK resuelve la clave de API en este orden:
api_keyargumento pasado al constructorCLORE_API_KEYvariable de entornoapi_keycampo en~/.clore/config.json
Variables de entorno
CLORE_API_KEY
Clave de API para autenticación
Próximos pasos
Referencia CLI — Usa Clore.ai desde tu terminal
REST API — Documentación cruda de la API para integraciones personalizadas
On-Demand vs Spot — Entender los modelos de precios
Imágenes Docker disponibles — Imágenes preconstruidas para cargas de trabajo en GPU
Última actualización
¿Te fue útil?