Пакетная обработка запросов для экономии до 50%
Batch API на данный момент доступен только для моделей OpenAI (gpt-5, gpt-4.1 и т.п.)
В настоящий момент мы не предоставляем пакетную обработку заданий для моделей Claude, Gemini и др.
Batch API позволяет отправлять большие объёмы запросов в виде пакета для асинхронной обработки. Это идеально подходит для задач, не требующих мгновенного ответа:
Стоимость обработки через Batch API на 50% ниже, чем при обычных синхронных запросах.
Результаты становятся доступны от нескольких минут до 24 часов, обычно значительно быстрее.
Создайте JSONL файл с запросами
Загрузите файл через Files API
Создайте batch-задачу
Скачайте результаты
Создайте файл 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 — уникальный идентификатор запроса, который вернётся в результатах. Используйте его для сопоставления ответов с исходными запросами.
Загрузите 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"
} Создайте 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"
} Периодически проверяйте статус выполнения 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 файла с результатами.
После завершения (статус 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": "Синий"}}]}}} 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) Дополнительные ресурсы: