Способы вызова ML-сервисов
Все сервисы в Caila предназначены, в первую очередь, для использования через API для интеграции в приложения.
Способы подключения
Получить доступ к Caila-сервисам можно несколькими способами:
-
по HTTP через Caila API;
-
по GRPC;
-
через адаптеры, симулирующие API широко известных облачных сервисов:
- OpenAI API;
- OpenAI-direct API;
- Yandex SpeechKit API для TTS сервисов;
-
с помощью Python SDK;
-
с помощью Java SDK.
Подробное описание каждого из вариантов смотрите на вложенных страницах.
Общие условия
Для доступа к любому ML-сервису вам понадобятся следующие элементы:
- Идентификатор сервиса, например,
just-ai/claude. Идентификатор всегда состоит из двух частей:<author>/<service>. Идентификатор сервиса можно найти на странице в Каталоге или скопировать последние два элемента из URL страницы сервиса. - API-ключ. Подробнее в разделе Доступ к API.
- Тип данных запроса и ответа, а также примеры запроса. Эта информация обычно приведена на странице сервиса в Каталоге.
Контракт Caila-сервиса
Общим для всех ML-сервисов является то, что все сервисы реализуют один метод predict. Сигнатура метода, упрощённо, выглядит так:
fun <PredictRequest, PredictConfig, PredictResponse>
predict(request: PredictRequest, config: PredictConfig?): PredictResponse
Типы данных PredictRequest, PredictConfig, PredictResponse являются шаблонными. Т.е. метод predict у каждого сервиса
называется одинаково и имеет одинаковое число параметров, но конкретные типы запроса и ответа у каждого сервиса могут быть разными.
Спецификацию метода predict можно найти в Caila API. В спецификации присутствует несколько вариаций метода /predict. Отличаются они только способом передачи параметров, а по сути выполняют одну и ту же операцию.
Спецификацию типов PredictRequest, PredictConfig, PredictResponse для каждого конкретного сервиса нужно искать на его странице в Каталоге. Например: https://caila.io/catalog/just-ai/openai-proxy.
Типы задач
Понятие task-type в Caila определяет структуру типов PredictRequest и PredictResponse. Сервисы определённого
task-type обязаны использовать типы данных, заданные в этом task-type.