Гайды
POST /chat/completions принимает выбранную модель и messages в формате диалога. Роли: system, developer, user, assistant, tool. Для tool-сообщения обязателен tool_call_id.
Поддержка tools, response_format, reasoning и лимитов зависит от модели и выбранного маршрута. Неизвестный или несовместимый параметр отклоняется до обращения к модели. Инструменты возвращаются клиенту; сервис не исполняет клиентские функции.
Обычный запрос использует stream: false. Для потоковой выдачи текста передайте stream: true; протокол и повтор запроса описаны в гайде Streaming.
Обычный результат содержит choices и usage. Завершение по лимиту токенов может вернуть пустой текст; проверяйте finish_reason и задавайте достаточный лимит.
Длительный текст: Prefer: respond-async, прежние model/messages и Idempotency-Key; затем GET /requests/{id}. При completed используйте result. Ограничения клиентского соединения не отменяют уже принятую генерацию. Синхронное ожидание допускает общий сохранённый срок операции; клиент и прокси должны разрешать такое ожидание.
cURL · POST /chat/completions
curl "https://formula-ai.ru/api/v1/chat/completions" \
-H "Authorization: Bearer $AI_SERVICE_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: example-text-1" \
--data-binary "{
\"model\": \"$AI_SERVICE_MODEL\",
\"messages\": [
{
\"role\": \"user\",
\"content\": \"Reply OK\"
}
]
}"
PHP · POST /chat/completions
<?php
$key = getenv("AI_SERVICE_API_KEY");
$url = "https://formula-ai.ru/api/v1/chat/completions";
$handle = curl_init($url);
curl_setopt_array($handle, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode(["model" => getenv("AI_SERVICE_MODEL"), "messages" => [["role" => "user", "content" => "Reply OK"]]], JSON_THROW_ON_ERROR),
CURLOPT_HTTPHEADER => ["Authorization: Bearer " . $key, "Content-Type: application/json", "Idempotency-Key: first-text-1"],
]);
if (getenv("AI_SERVICE_CA")) {
curl_setopt($handle, CURLOPT_CAINFO, getenv("AI_SERVICE_CA"));
}
$body = curl_exec($handle);
if ($body === false) {
throw new RuntimeException(curl_error($handle));
}
$status = curl_getinfo($handle, CURLINFO_RESPONSE_CODE);
curl_close($handle);
$result = json_decode($body, true, 512, JSON_THROW_ON_ERROR);
echo json_encode(["status" => $status, "result" => $result], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_THROW_ON_ERROR);
Примеры cURL используют Bash. Задайте AI_SERVICE_API_KEY и AI_SERVICE_MODEL; модель выберите из /models. В PHP для опроса/файла задайте AI_SERVICE_REQUEST_ID/AI_SERVICE_MEDIA_ID, для правки — AI_SERVICE_SOURCE_URL. Для локального сертификата используйте доверенный CA через --cacert, для PHP — AI_SERVICE_CA. Проверку TLS сохраняйте включённой.