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

Пакетные запросы

Доступные

Актуальный список моделей, поддерживающих фоновую обработку, можно получить динамически через API эндпоинт: https://bothub.chat/api/v2/openai/v1/batches/models и https://bothub.chat/api/v2/replicate/v1/models

Пакетные запросы (Batches API) предназначены для асинхронной обработки огромных объемов данных. Вместо того чтобы ждать ответ на каждый запрос к модели при классификации, переводе или парсинге, вы собираете все задачи в один файл .jsonl и запускаете фоновую обработку на сервере BotHub.

Архитектура полностью совместима со спецификацией OpenAI Batch API, поэтому вы можете использовать официальные SDK без изменения логики формирования данных.


1. Запуск пакетной обработки​

Процесс запуска состоит из двух этапов: сначала вы загружаете файл с задачами (формат JSON Lines), а затем инициализируете саму очередь на генерацию.

Пример структуры файла my_tasks.jsonl перед загрузкой:

{"custom_id": "task-translate-001", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "claude-opus-4.6", "messages": [{"role": "system", "content": "Переведи текст на французский язык."}, {"role": "user", "content": "Привет, как дела?"}], "max_tokens": 100}}
{"custom_id": "task-generate-003", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "claude-opus-4.6", "messages": [{"role": "user", "content": "Напиши короткое хокку про нейросети."}], "max_tokens": 50}}

Шаг 1. Загрузка файла​

Файл должен иметь формат .jsonl, где каждая строка — это отдельный запрос к Chat Completions API. Обратите внимание, что параметр purpose всегда должен быть равен "batch".

import OpenAI from 'openai';
import fs from 'fs';

const openai = new OpenAI({
apiKey: 'ВАШ_API_КЛЮЧ_BOTHUB',
baseURL: 'https://openai.bothub.chat/v1'
});

async function uploadFile() {
const file = await openai.files.create({
file: fs.createReadStream('my_tasks.jsonl'),
purpose: 'batch',
});
console.log(file.id); // Сохраните этот ID для следующего шага
}

uploadFile();

Шаг 2. Создание задачи​

Используйте полученный file_id для старта генерации. Платформа резервирует под выполнение окно в 24h (на данный момент это единственное доступное значение).

async function createBatch() {
const batch = await openai.batches.create({
input_file_id: 'АЙДИ_РАНЕЕ_ЗАГРУЖЕННОГО_ФАЙЛА', // ID из предыдущего шага
endpoint: '/v1/chat/completions',
completion_window: '24h'
});
console.log(batch);
}

createBatch();

2. Мониторинг и получение результатов​

Поскольку обработка занимает время, вам необходимо периодически проверять статус задачи. Как только статус изменится на completed, вы сможете скачать готовый файл.

Статусы жизненного цикла пакета
  • validating — проверка структуры файла сервером.
  • in_progress — отправка запросов провайдерам нейросетей.
  • completed — успешное завершение, файл с ответами готов к загрузке.
  • failed — критическая ошибка (например, невалидный JSON или нулевой баланс).
  • cancelled — обработка прервана пользователем по API.

Шаг 1. Проверка статуса​

Для отслеживания подробных расходов по операции передавайте флаг include_usage=true в строке запроса.

async function checkStatus() {
const batch = await openai.batches.retrieve('АЙДИ_БАТЧА');
console.log('Текущий статус:', batch.status);

if (batch.status === 'completed') {
console.log('ID готового файла:', batch.output_file_id);
}
}

checkStatus();

Шаг 2. Скачивание результата​

Используйте идентификатор файла из поля output_file_id, чтобы получить итоговый документ. Строки в нем могут идти не по порядку, поэтому всегда сопоставляйте ответы по полю custom_id, которое вы задавали изначально.

async function getResult() {
const response = await fetch('https://openai.bothub.chat/v1/files/АЙДИ_ФАЙЛА', {
headers: { 'Authorization': 'Bearer ВАШ_API_КЛЮЧ_BOTHUB' }
});

const link = await response.text();
console.log(link);
}

getResult();

3. Управление пакетами​

Дополнительные методы для контроля над запущенными задачами и историей.

Отмена запроса​

Позволяет экстренно остановить генерацию. Деньги спишутся только за те задачи, которые нейросеть успела отработать до отмены.

await openai.batches.cancel('АЙДИ_БАТЧА');

Список всех пакетов​

Возвращает историю с поддержкой пагинации (limit от 1 до 100, offset).

const list = await openai.batches.list({ limit: 20 });
for await (const batch of list) {
console.log(batch.id, batch.status);
}

Рекомендации​

  • Локальная валидация: Заранее проверяйте .jsonl файлы. Лишняя запятая или неэкранированный символ переведут весь пакет в статус failed без запуска обработки.
  • Частота опроса (Polling): Не злоупотребляйте проверками статуса. Для мелких задач (до 1000 строк) опрашивайте сервер раз в 30 секунд, для крупных — раз в 2–5 минут.
  • Контроль ошибок генерации: Статус пакета completed подтверждает только завершение работы шлюза. Обязательно проверяйте status_code внутри каждой отдельной строки результата на предмет локальных ошибок (превышение лимитов или цензура).