Batch API

Пакетная обработка запросов для экономии до 50%

Только для моделей OpenAI

Batch API на данный момент доступен только для моделей OpenAI (gpt-5, gpt-4.1 и т.п.)
В настоящий момент мы не предоставляем пакетную обработку заданий для моделей Claude, Gemini и др.

Что такое Batch API?

Batch API позволяет отправлять большие объёмы запросов в виде пакета для асинхронной обработки. Это идеально подходит для задач, не требующих мгновенного ответа:

  • Массовая классификация или анализ данных
  • Генерация контента для большого количества записей
  • Обработка датасетов и подготовка данных
  • Автоматизированное тестирование промптов
  • и т.п.
Экономия до 50%

Стоимость обработки через Batch API на 50% ниже, чем при обычных синхронных запросах.
Результаты становятся доступны от нескольких минут до 24 часов, обычно значительно быстрее.

Процесс работы

1

Подготовка

Создайте JSONL файл с запросами

2

Загрузка

Загрузите файл через Files API

3

Создание

Создайте batch-задачу

4

Результат

Скачайте результаты

Шаг 1: Подготовка JSONL файла

Создайте файл requests.jsonl где каждая строка — отдельный JSON-объект с запросом:

{"custom_id": "req-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "gpt-4.1-mini", "messages": [{"role": "user", "content": "Переведи на французский: Привет"}], "max_tokens": 100}}
{"custom_id": "req-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "gpt-4.1-mini", "messages": [{"role": "user", "content": "Сколько будет 2+2?"}], "max_tokens": 100}}
{"custom_id": "req-3", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "gpt-4.1-mini", "messages": [{"role": "user", "content": "Назови любой цвет"}], "max_tokens": 100}}

custom_id — уникальный идентификатор запроса, который вернётся в результатах. Используйте его для сопоставления ответов с исходными запросами.

Шаг 2: Загрузка файла

Загрузите JSONL файл через Files API. Обязательно укажите target_model_names с названием модели:

curl -X POST https://api.ai-mediator.ru/v1/files \
    -H "Authorization: Bearer $AI_MEDIATOR_API_KEY" \
    -F purpose="batch" \
    -F file="@requests.jsonl" \
    -F target_model_names="gpt-4.1-mini" \
    -F 'expires_after[anchor]=created_at' \
    -F 'expires_after[seconds]=90000'

Важно: Время жизни файла (expires_after) должно строго превышать максимальное время выполнения задачи. Например, для задачи допускающей обработку до 24 часов, срок жизни файла может составлять 90000 секунд. В то же время, срок жизни файлов в нашем API не может превышать 48 часов.

Ответ содержит id загруженного файла:

{
  "id": "file-abc123...",
  "bytes": 1267,
  "created_at": 1234567890,
  "filename": "modified_file.jsonl",
  "object": "file",
  "purpose": "batch",
  "status": "uploaded"
}

Шаг 3: Создание batch-задачи

Создайте batch-задачу, указав ID загруженного файла:

curl -X POST https://api.ai-mediator.ru/v1/batches \
    -H "Authorization: Bearer $AI_MEDIATOR_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
        "input_file_id": "file-abc123...",
        "endpoint": "/v1/chat/completions",
        "completion_window": "24h"
    }'

Ответ содержит id созданной batch-задачи:

{
  "id": "batch_xyz789...",
  "object": "batch",
  "status": "validating",
  "input_file_id": "file-abc123...",
  "completion_window": "24h",
  "created_at": 1234567890,
  "endpoint": "/v1/chat/completions"
}

Шаг 4: Проверка статуса

Периодически проверяйте статус выполнения batch-задачи:

curl https://api.ai-mediator.ru/v1/batches/batch_xyz789... \
    -H "Authorization: Bearer $AI_MEDIATOR_API_KEY"

Поле status содержит статус задачи (validating, in_progress, finalizing, completed, failed и т.п.).
Поле output_file_id содержит ID файла с результатами.

Шаг 5: Скачивание результатов

После завершения (статус completed) скачайте результаты, используя output_file_id из ответа:

curl https://api.ai-mediator.ru/v1/files/OUTPUT_FILE_ID/content \
    -H "Authorization: Bearer $AI_MEDIATOR_API_KEY"

Результат — JSONL файл, где каждая строка содержит ответ с соответствующим custom_id:

{"id": "resp-1", "custom_id": "req-1", "response": {"status_code": 200, "body": {"choices": [{"message": {"content": "Bonjour"}}]}}}
{"id": "resp-2", "custom_id": "req-2", "response": {"status_code": 200, "body": {"choices": [{"message": {"content": "2+2 = 4"}}]}}}
{"id": "resp-3", "custom_id": "req-3", "response": {"status_code": 200, "body": {"choices": [{"message": {"content": "Синий"}}]}}}

Полный пример на Python

import os
import time
from openai import OpenAI

client = OpenAI(
    api_key=os.environ.get('AI_MEDIATOR_API_KEY'),
    base_url="https://api.ai-mediator.ru/v1"
)

# 1. Загрузка файла
with open("requests.jsonl", "rb") as f:
    file_response = client.files.create(
        file=f,
        purpose="batch",
        expires_after={"anchor": "created_at", "seconds": 172800},
        extra_body={"target_model_names": "gpt-4.1-mini"}
    )
print(f"File ID: {file_response.id}")

# 2. Создание batch-задачи
batch = client.batches.create(
    input_file_id=file_response.id,
    endpoint="/v1/chat/completions",
    completion_window="24h"
)
print(f"Batch ID: {batch.id}")

# 3. Ожидание завершения
while batch.status not in ["completed", "failed", "cancelled"]:
    time.sleep(30)
    batch = client.batches.retrieve(batch.id)
    print(f"Status: {batch.status}")

# 4. Скачивание результатов
if batch.status == "completed":
    result = client.files.content(batch.output_file_id)
    print(result.text)