Python SDK (clore-ai)
Этот clore-ai пакет является официальным Python SDK для Clore.ai маркетплейса GPU. Он оборачивает весь REST API в чистый, типобезопасный интерфейс со встроенным ограничением частоты запросов, автоматическими повторными попытками и структурированной обработкой ошибок — так что вы можете сосредоточиться на аренде GPU, а не на HTTP-обвязке.
Установка
pip install clore-aiТребования: Python 3.9+
Пакет устанавливает как Python SDK, так и clore CLI.
Аутентификация
Получите ваш API-ключ в панели управления Clore.ai → API разделе.
Вариант 1: переменная окружения (рекомендуется)
export CLORE_API_KEY=your_api_key_hereSDK читает CLORE_API_KEY автоматически — изменения кода не требуются.
Вариант 2: конфигурационный файл CLI
clore config set api_key YOUR_API_KEYЭто сохраняет ключ в ~/.clore/config.json.
Вариант 3: передайте напрямую в коде
⚠️ Важно: API Clore.ai использует
authзаголовок для аутентификации, неAuthorization: Bearer. SDK обрабатывает это автоматически.
Быстрый старт
Синхронный клиент (CloreAI)
Конструктор
Клиент поддерживает контекстные менеджеры для автоматической очистки:
wallets()
Получите балансы ваших кошельков и адреса для пополнения.
Возвращает: List[Wallet]
name
str
Название валюты (например, "bitcoin", "CLORE-Blockchain", "USD-Blockchain")
balance
float | None
Текущий баланс
deposit
str | None
Адрес пополнения
withdrawal_fee
float | None
Комиссия за вывод
marketplace()
Поиск по GPU-маркетплейсу с необязательными фильтрами на стороне клиента.
Параметры:
gpu
str | None
None
Фильтр по модели GPU (регистронезависимое совпадение по подстроке)
min_gpu_count
int | None
None
Минимальное количество GPU
min_ram_gb
float | None
None
Минимальный объем RAM в ГБ
max_price_usd
float | None
None
Максимальная цена в час в USD
available_only
bool
True
Возвращать только серверы, доступные для аренды
Возвращает: List[MarketplaceServer]
Каждый MarketplaceServer предоставляет удобные свойства для наиболее распространенных полей, а также доступ к полным вложенным данным:
id
int
Уникальный ID сервера
gpu_model
str | None
Описание основной GPU (например, "1x NVIDIA GeForce RTX 4090")
gpu_count
int
Количество GPU (из gpu_array)
ram_gb
float | None
RAM в ГБ
price_usd
float | None
Цена по требованию в USD
spot_price_usd
float | None
Спотовая цена в USD
available
bool
Доступен ли сервер (не арендован)
location
str | None
Код страны из сетевых характеристик
Для продвинутых сценариев вы можете получить доступ к полной вложенной структуре:
specs
ServerSpecs | None
Полные аппаратные характеристики (specs.gpu, specs.ram, specs.cpu, specs.disk, specs.net, и т. д.)
price
ServerPrice | None
Полный объект цены (price.usd.on_demand_usd, price.usd.spot, price.on_demand, и т. д.)
rented
bool | None
Находится ли сервер сейчас в аренде
reliability
float | None
Оценка надежности сервера
rating
ServerRating | None
Рейтинг сервера (rating.avg, rating.cnt)
Примечание: Этот
marketplace()эндпоинт открыт — он работает без API-ключа.
my_servers()
Список серверов, которые вы предоставляете на маркетплейс Clore.ai.
Возвращает: List[MyServer]
id
int
ID сервера
name
str | None
Имя сервера
gpu_model
str | None
Описание основной GPU
ram_gb
float | None
RAM в ГБ
status
str
Читаемый статус: "Онлайн", "Офлайн", "Отключен", или "Не работает"
connected
bool | None
Подключен ли сервер
online
bool | None
В сети ли сервер
visibility
str | None
"public" или "private"
server_config(server_name)
Получите конфигурацию конкретного сервера, который вы хостите.
Параметры:
server_name
str
Имя сервера
Возвращает: ServerConfig
name
str | None
Имя сервера
gpu_model
str | None
Описание основной GPU
mrl
int | None
Максимальная длительность аренды в часах
on_demand_price
float | None
Первая доступная цена по требованию в USD
spot_price
float | None
Первая доступная спотовая цена в USD
specs
ServerSpecs | None
Полные аппаратные спецификации
connected
bool | None
Подключен ли сервер
visibility
str | None
"public" или "private"
my_orders(include_completed)
Получите ваши текущие заказы, при необходимости включая выполненные/истекшие.
Параметры:
include_completed
bool
False
Включать выполненные/истекшие заказы
Возвращает: List[Order]
id
int
Уникальный ID заказа
server_id
int | None
ID сервера
type
str
"on-demand" или "spot"
status
str | None
Статус заказа
image
str | None
Docker-образ
currency
str | None
Валюта оплаты
price
float | None
Цена заказа в день
pub_cluster
str | None
Публичное имя хоста/IP для доступа
tcp_ports
dict | None
Сопоставления TCP-портов
spot_marketplace(server_id)
Просмотрите спотовые предложения рынка для конкретного сервера.
Параметры:
server_id
int
ID сервера для проверки
Возвращает: SpotMarket
offers
List[SpotOffer] | None
Список спотовых предложений (order_id, price, server_id)
server
SpotServerInfo | None
Информация о сервере (минимальная цена, видимость, статус онлайн)
currency_rates_in_usd
Dict[str, float] | None
Курсы обмена валют в USD
create_order(...)
Создайте новый заказ по требованию или спотовый заказ. Так вы арендуете GPU.
Заказ по требованию
Спотовый заказ
Параметры:
server_id
int
Да
ID сервера для аренды
image
str
Да
Docker-образ (например, "cloreai/ubuntu22.04-cuda12")
type
str
Да
"on-demand" или "spot"
currency
str
Да
Валюта оплаты (например, "bitcoin")
ssh_password
str
Нет
Пароль SSH (буквенно-цифровой, максимум 32 символа)
ssh_key
str
Нет
Публичный ключ SSH (максимум 3072 символа)
ports
dict
Нет
Сопоставления портов, например, {"22": "tcp", "8888": "http"}
env
dict
Нет
Переменные окружения
jupyter_token
str
Нет
Токен Jupyter Notebook (максимум 32 символа)
command
str
Нет
Команда shell для выполнения после запуска контейнера
spot_price
float
Только для спота
Цена в день для спотовых заказов
required_price
float
Нет
Зафиксировать конкретную цену (только по требованию)
autossh_entrypoint
str
Нет
Использовать SSH entrypoint Clore.ai
gpu_count
int
Нет
Арендуйте только N GPU на серверах с частичной арендой (только по требованию); опустите, чтобы арендовать весь риг
gpu_indices
list[int]
Нет
Точные слоты GPU из partial_gpu_rental.free_indices; длина должна равняться gpu_count; опустите для автоматического выбора
Возвращает: сырой ответ API ({"code": 0} при успехе); получите созданный заказ через my_orders()
Ограничение частоты запросов:
create_orderимеет специальную 5-секундную паузу между вызовами. SDK обеспечивает это автоматически.
cancel_order(order_id, issue)
Отменить активный заказ или spot-предложение. При желании сообщите о проблеме с сервером.
Параметры:
order_id
int
Да
ID заказа для отмены
issue
str
Нет
Причина отмены / сообщение о проблеме (макс. 2048 символов)
Возвращает: Dict[str, Any]
set_server_settings(...)
Обновить настройки сервера, который вы размещаете на маркетплейсе.
Параметры:
name
str
Да
Имя сервера
availability
bool
Нет
Может ли сервер быть арендован
mrl
int
Нет
Максимальная длительность аренды в часах
on_demand
float
Нет
Цена по требованию в день
spot
float
Нет
Минимальная spot-цена в день
Возвращает: Dict[str, Any]
set_spot_price(order_id, price)
Обновить цену вашего spot-предложения на рынке.
Параметры:
order_id
int
ID spot-заказа/предложения
price
float
Новая цена в день
Возвращает: Dict[str, Any]
Примечание: Вы можете понижать spot-цены только раз в 600 секунд и только на ограниченный шаг. API возвращает
code: 6с подробностями, если вы превысите эти лимиты.
Асинхронный клиент (AsyncCloreAI)
Этот AsyncCloreAI клиент предоставляет те же методы, что и CloreAI, но все они возвращают корутины. Используйте его, когда вам нужны параллельные вызовы API или вы работаете в асинхронном приложении.
Базовое использование
Параллельные операции
Запускайте несколько вызовов API параллельно с asyncio.gather:
Доступные методы
AsyncCloreAI поддерживает все те же методы, что и CloreAI:
await wallets()
Получить балансы кошельков
await marketplace(...)
Поиск на маркетплейсе
await my_servers()
Список ваших размещённых серверов
await server_config(name)
Получить конфигурацию сервера
await my_orders(...)
Список ваших заказов
await spot_marketplace(server_id)
Получить spot-предложения на рынке
await create_order(...)
Создать новый заказ
await cancel_order(...)
Отменить заказ
await set_server_settings(...)
Обновить настройки сервера
await set_spot_price(...)
Обновить spot-цену
Обработка ошибок
SDK предоставляет структурированные классы исключений для каждого кода ошибки API.
Коды ошибок
0
—
Успех
1
DBError
Ошибка базы данных
2
InvalidInputError
Неверные входные данные
3
AuthError
Неверный API-токен
4
InvalidEndpointError
Неверная конечная точка
5
RateLimitError
Превышено ограничение частоты запросов
6
FieldError
Ошибка в конкретном поле (см. error поле в ответе)
Все классы исключений наследуются от CloreAPIError и включают:
e.code— числовой код ошибкиe.response— полный словарь ответа API (если доступен)
Ограничение частоты запросов
SDK включает встроенный ограничитель частоты запросов, который автоматически соблюдает лимиты Clore.ai:
Большинство конечных точек
1 запрос/секунду
create_order
1 запрос/5 секунд
Когда API возвращает ошибку ограничения частоты запросов (код 5), SDK применяет экспоненциальную задержку и повторяет попытку до max_retries раз (по умолчанию: 3). Вам не нужно добавлять time.sleep() между вызовами.
Как это работает
Перед каждым запросом ограничитель частоты ждёт, пока истечёт минимальный интервал.
create_orderвызовы имеют дополнительную 5-секундную паузу.При ошибках ограничения частоты SDK делает экспоненциальный откат: 1с → 2с → 4с → ...
После
max_retriesнеудачных попытокRateLimitErrorвызывается
Настроить поведение повторных попыток
Конфигурация
Файл конфигурации
CLI хранит конфигурацию в ~/.clore/config.json:
Порядок разрешения
SDK определяет API-ключ в следующем порядке:
api_keyаргумент, переданный конструкторуCLORE_API_KEYпеременная окруженияapi_keyполе в~/.clore/config.json
Переменные окружения
CLORE_API_KEY
API-ключ для аутентификации
Дальше
Справочник CLI — Используйте Clore.ai из вашего терминала
REST API — Сырая документация API для кастомных интеграций
On-Demand vs Spot — Поймите модели ценообразования
Доступные Docker-образы — Предсобранные образы для GPU-нагрузок
Последнее обновление
Это было полезно?