Перейти к основному содержимому

Caila Async Predict API

Async Predict API позволяет отправлять асинхронные запросы к Caila-сервису. Запросы ставятся в очередь на обработку, их статус и результат можно получить отдельными запросами. Такой режим полезен для долгих predict-запросов, когда синхронный HTTP-вызов может прерваться по таймауту клиента или соединения.

Async Predict API описывает только протокол асинхронного взаимодействия с Caila. Формат входных и выходных данных зависит от конкретного Caila-сервиса. За подробной информацией обратитесь к описанию сервиса в каталоге.

Когда использовать

Используйте Async Predict API, если:

  • обработка запроса может занять десятки минут или часы;
  • не нужно держать HTTP-соединение открытым всё время обработки;
  • результат можно получить позже, когда обработка завершится.

Для коротких запросов используйте синхронный Predict API. Он возвращает результат сразу в ответе на POST /predict или POST /predict-with-config.

Жизненный цикл задачи

В Async Predict API задача — это асинхронный predict-запрос, который платформа поставила в очередь на обработку. У задачи есть идентификатор taskId: по нему можно проверить текущее состояние обработки, получить результат или отменить выполнение.

  1. Создайте задачу одним из методов POST …/async/predict (см. Методы ниже).
  2. Сохраните taskId из ответа.
  3. Проверяйте статус с помощью GET …/async/task/{taskId}.
  4. Когда статус станет COMPLETED, получите результат с помощью GET …/async/task/{taskId}/response.
  5. Если нужно прервать выполнение задачи, вызовите метод POST …/async/task/{taskId}/cancel.

Статусы

Статус задачи показывает, на каком этапе выполнения она находится и можно ли получить результат.

СтатусФинальныйОписание
QUEUEDНетЗадача создана и ожидает обработки.
PROCESSINGНетЗадача выполняется: запрос отправляется в сервис или ожидается ответ.
COMPLETEDДаЗадача завершилась, можно запросить результат с помощью GET …/async/task/{taskId}/response.
CANCELEDДаЗадача отменена или завершилась с ошибкой во время обработки.

Методы

В таблице перечислены методы для создания задачи, проверки ее состояния, получения результата и отмены выполнения.

Для каждого метода указано право доступа, которое должно быть назначено API-ключу в разделе Моё пространствоAPI-ключи. Если у API-ключа нет нужного права, запрос завершится ошибкой 403 TOKEN_PERMISSION_REQUIRED.

МетодПутьПраво API-ключаНазначение
POST/api/mlpgateway/account/{account}/model/{model}/async/predictЗапросы к моделямСоздать задачу с raw body
POST/api/mlpgateway/account/{account}/model/{model}/async/predict-with-configЗапросы к моделямСоздать задачу с телом PredictRequestData
POST/api/mlpgateway/account/{account}/model/{model}/async/predict-with-config-v2Запросы к моделямСоздать задачу с телом Predict2RequestData
GET/api/mlpgateway/account/{account}/async/task/{taskId}Чтение данныхПолучить статус задачи
GET/api/mlpgateway/account/{account}/async/task/{taskId}/responseЧтение данныхПолучить результат задачи
POST/api/mlpgateway/account/{account}/async/task/{taskId}/cancelИзменение данныхОтменить задачу

Создать задачу с raw body

Метод: POST

Путь: /api/mlpgateway/account/{account}/model/{model}/async/predict

Право доступа API-ключа: «Запросы к моделям»

Path-параметры

ПараметрТипОписание
accountstringID или имя аккаунта — владельца сервиса.
modelstringID или имя сервиса.

Query-параметры

ПараметрТипОбязательныйОписание
configIdintegerНетID конфигурации predict. Если параметр не указан, используется конфигурация сервиса по умолчанию.
dataTypestringНетТип данных запроса, например application/json.

Тело запроса

Тело запроса содержит данные predict-запроса, передаваемого в сервис. Формат данных зависит от сервиса.

Ответ

При успешном создании задачи метод возвращает 200 OK и строку taskId.

"a1b2c3d4-e5f6-7890-abcd-ef1234567890"

Пример

curl --request POST 'https://caila.io/api/mlpgateway/account/{account}/model/{model}/async/predict?dataType=application/json' \
--header 'MLP-API-KEY: {api_token}' \
--header 'Content-Type: application/json' \
--data-raw '{
"text": "Привет"
}'

Создать задачу с PredictRequestData

Метод: POST

Путь: /api/mlpgateway/account/{account}/model/{model}/async/predict-with-config

Право доступа API-ключа: «Запросы к моделям»

Path-параметры

ПараметрТипОписание
accountstringID или имя аккаунта — владельца сервиса.
modelstringID или имя сервиса.

Тело запроса

Тело запроса имеет формат PredictRequestData.

ПолеТипОбязательноеОписание
dataobjectДаДанные predict-запроса. Формат зависит от сервиса.
configobjectНетКонфигурация predict-запроса. Если поле не указано, используется конфигурация сервиса по умолчанию.
dataTypestringНетТип данных запроса, например application/json.
{
"data": {
"text": "Привет"
},
"config": {
"temperature": 0.2
},
"dataType": "application/json"
}

Ответ

При успешном создании задачи метод возвращает 200 OK и строку taskId.

Пример

curl --request POST 'https://caila.io/api/mlpgateway/account/{account}/model/{model}/async/predict-with-config' \
--header 'MLP-API-KEY: {api_token}' \
--header 'Content-Type: application/json' \
--data-raw '{
"data": {
"text": "Привет"
},
"config": {
"temperature": 0.2
},
"dataType": "application/json"
}'

Создать задачу с Predict2RequestData

Метод: POST

Путь: /api/mlpgateway/account/{account}/model/{model}/async/predict-with-config-v2

Право доступа API-ключа: «Запросы к моделям»

predict-with-config-v2 используется, когда клиенту удобнее передавать data и config в виде строк. Обычно это JSON, сериализованный в строку.

Path-параметры

ПараметрТипОписание
accountstringID или имя аккаунта — владельца сервиса.
modelstringID или имя сервиса.

Тело запроса

Тело запроса имеет формат Predict2RequestData.

ПолеТипОбязательноеОписание
datastringДаДанные predict-запроса в виде строки.
configstringНетКонфигурация predict в виде строки. Если поле не указано, используется конфигурация сервиса по умолчанию.
dataTypestringНетТип данных запроса, например application/json.
{
"data": "{\"text\":\"Привет\"}",
"config": "{\"temperature\":0.2}",
"dataType": "application/json"
}

Ответ

При успешном создании задачи метод возвращает 200 OK и строку taskId.

Пример

curl --request POST 'https://caila.io/api/mlpgateway/account/{account}/model/{model}/async/predict-with-config-v2' \
--header 'MLP-API-KEY: {api_token}' \
--header 'Content-Type: application/json' \
--data-raw '{
"data": "{\"text\":\"Привет\"}",
"config": "{\"temperature\":0.2}",
"dataType": "application/json"
}'

Получить статус задачи

Метод: GET

Путь: /api/mlpgateway/account/{account}/async/task/{taskId}

Право доступа API-ключа: «Чтение данных»

Path-параметры

ПараметрТипОписание
accountstringID или имя аккаунта, от имени которого создана задача.
taskIdstringИдентификатор задачи.

Ответ

Метод возвращает 200 OK и объект AsyncTaskData.

{
"taskId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"callerId": 123,
"status": "PROCESSING",
"createdAt": 1715000000000,
"completedAt": null
}

Пример

curl --request GET 'https://caila.io/api/mlpgateway/account/{account}/async/task/{taskId}' \
--header 'MLP-API-KEY: {api_token}'

Получить результат задачи

Метод: GET

Путь: /api/mlpgateway/account/{account}/async/task/{taskId}/response

Право доступа API-ключа: «Чтение данных»

Path-параметры

ПараметрТипОписание
accountstringID или имя аккаунта, от имени которого создана задача.
taskIdstringИдентификатор задачи.

Ответ

HTTP-статусОписание
200 OKЗадача завершена, в теле находится ответ сервиса.
204 No ContentЗадача еще не завершена.
404 Not FoundЗадача или сохраненный результат не найдены. Например, результат мог быть удален после истечения TTL.
Другой статусОшибка, которую вернул сервис.
примечание

Текущая реализация сохраняет результат Async Predict API с Content-Type: application/json. Не используйте dataType исходного запроса как гарантию Content-Type ответа.

Пример

curl --request GET 'https://caila.io/api/mlpgateway/account/{account}/async/task/{taskId}/response' \
--header 'MLP-API-KEY: {api_token}'

Пример готового результата:

{
"result": "Готово"
}

Если задача еще выполняется:

HTTP/1.1 204 No Content

Отменить задачу

Метод: POST

Путь: /api/mlpgateway/account/{account}/async/task/{taskId}/cancel

Право доступа API-ключа: «Изменение данных»

Path-параметры

ПараметрТипОписание
accountstringID или имя аккаунта, от имени которого создана задача.
taskIdstringИдентификатор задачи.

Ответ

Если задача найдена и запрос на отмену принят, метод возвращает 200 OK без тела. После отмены проверьте статус с помощью метода GET /api/mlpgateway/account/{account}/async/task/{taskId}.

Пример

curl --request POST 'https://caila.io/api/mlpgateway/account/{account}/async/task/{taskId}/cancel' \
--header 'MLP-API-KEY: {api_token}'

Модели данных

AsyncTaskData

AsyncTaskData возвращается методом GET /api/mlpgateway/account/{account}/async/task/{taskId}.

ПолеТипОписание
taskIdstringИдентификатор задачи.
callerIdintegerID аккаунта, от имени которого создана задача.
statusstringОдин из статусов: QUEUED, PROCESSING, COMPLETED, CANCELED.
createdAtintegerВремя создания задачи, Unix timestamp в миллисекундах.
completedAtinteger или nullВремя завершения задачи, Unix timestamp в миллисекундах. Для незавершенной задачи значение null.

PredictRequestData

PredictRequestData используется в POST /api/mlpgateway/account/{account}/model/{model}/async/predict-with-config.

ПолеТипОбязательноеОписание
dataobjectДаДанные predict-запроса.
configobjectНетКонфигурация predict-запроса.
dataTypestringНетТип данных запроса.

Predict2RequestData

Predict2RequestData используется в POST /api/mlpgateway/account/{account}/model/{model}/async/predict-with-config-v2.

ПолеТипОбязательноеОписание
datastringДаДанные predict-запроса в виде строки.
configstringНетКонфигурация predict-запроса в виде строки.
dataTypestringНетТип данных запроса.

Пример полного цикла вызовов для получения результата

curl --request POST 'https://caila.io/api/mlpgateway/account/{account}/model/{model}/async/predict' \
--header 'MLP-API-KEY: {api_token}' \
--header 'Content-Type: application/json' \
--data-raw '{"text":"Привет"}'

TASK_ID='a1b2c3d4-e5f6-7890-abcd-ef1234567890'

while true; do
STATUS=`curl --silent --request GET "https://caila.io/api/mlpgateway/account/{account}/async/task/${TASK_ID}" \
--header 'MLP-API-KEY: {api_token}' | jq --raw-output '.status'`

echo "Status: ${STATUS}"

if [ "${STATUS}" = "COMPLETED" ] || [ "${STATUS}" = "CANCELED" ]; then
break
fi

sleep 5
done

if [ "${STATUS}" = "COMPLETED" ]; then
curl --request GET "https://caila.io/api/mlpgateway/account/{account}/async/task/${TASK_ID}/response" \
--header 'MLP-API-KEY: {api_token}'
fi

Ограничения и квоты

  • Доступ к аккаунту. Получать статус, результат и отменять задачу может только аккаунт, которому принадлежит задача.
  • Права доступа API-ключа. API-ключу должно быть назначено право для выполняемой операции: для создания задачи — «Запросы к моделям», для получения статуса и результата — «Чтение данных», для отмены — «Изменение данных».
  • Доступ к сервису. При создании задачи аккаунт, от имени которого выполняется запрос, должен иметь доступ к целевому Caila-сервису. Для публичных сервисов применяются правила публичного тестирования.
  • Idle jobs. Количество задач в очереди ограничено лимитом количества запросов в секунду из настроек аккаунта, но не больше системного лимита 250.
  • Active jobs. Количество одновременно выполняемых задач ограничено лимитом количества запросов в секунду из настроек аккаунта, но не больше системного лимита 50.
  • Rate limiting. Запросы на создание задач входят в лимит запросов в секунду, заданный в настройках аккаунта.
  • Хранение и TTL результата. Ответы длиннее 150 символов сохраняются в хранилище файлов и имеют TTL 7 дней. После удаления сохраненного результата запрос GET …/async/task/{taskId}/response вернет 404 Not Found.
  • Streaming. Async Predict API не отправляет частичный результат по мере обработки: результат доступен только после завершения задачи.

Ошибки

Async-specific ошибки

Код ошибкиHTTP statusКогда возникает
TOO_MANY_IDLE_ASYNC_TASKS429Превышен лимит задач, ожидающих обработки.
ASYNC_REQUEST_BODY_WAS_LOST404Не удалось восстановить тело асинхронного запроса во время обработки.
ASYNC_RESPONSE_IS_CORRUPTED404Не удалось прочитать сохраненный результат задачи.
ENTITY_NOT_FOUND_BY_ID404Задача с указанным taskId не найдена.
ACCESS_TO_ANOTHER_ACCOUNT_DENIED или ACCESS_TO_ANOTHER_ACCOUNT_NOT_PUBLIC_DENIED403Запрос обращается к задаче или аккаунту, к которым у клиента нет доступа.
TOKEN_PERMISSION_REQUIRED403У API-ключа нет права доступа, нужного для метода.

Общие ошибки predict-запросов

HTTP statusКогда возникает
400 Bad RequestНекорректный запрос, несуществующий сервис или отсутствие активных инстансов.
401 UnauthorizedAPI-ключ отсутствует или не найден.
402 Payment RequiredАккаунт заблокирован биллингом.
403 ForbiddenУ клиента нет доступа к аккаунту, сервису или операции.
429 Too Many RequestsПревышен лимит запросов в секунду или лимит асинхронных задач.
504 Gateway TimeoutСервис не ответил в пределах таймаута для predict-запросов.