B2BB2B LLM

Пакетный API, совместимый с OpenAI

Загружайте файлы пакетного ввода JSONL и обрабатывайте пакеты, совместимые с OpenAI, через устойчивую очередь Model Gate.

Пакетный API, совместимый с OpenAI

Model Gate реализует рабочий процесс OpenAI Files + Batch на https://api.model-gate.com/v1. Это уровень совместимости: каждый элемент JSONL выполняется через обычный путь вывода Model Gate. Модель Gate делает нет отправьте пакет OpenAI, принадлежащий вышестоящему поставщику.

Конечные точки чтения/управления файлов/пакетной обработки представляют собой плоскость управления: действительные в противном случае активные учетные данные API могут отображать/читать/загружать/отменять/удалять существующие ресурсы, даже если баланс учетной записи в настоящее время равен нулю или сбрасываемый лимит расходов исчерпан. Хранилище-производящие операции бывают разные: POST /v1/files и POST /v1/batches требуют нового подтверждения положительного баланса/расходов до того, как Model Gate вставит данные файла/задания/элемента. Таким образом, ключ с нулевым балансом не может загружать JSONL или создавать новое пакетное хранилище. Фактические элементы партии по-прежнему повторно проверяют прием во время заявки работника и остаются в очереди, если средства позже исчерпаны. Ввод JSONL считывается постепенно и проверяется/вставляется построчно; Model Gate не сохраняет все входные данные размером 200 МБ, а также все тела запроса в памяти процесса при создании пакета. Квоты на количество хранимых байтов, файлов, активных заданий и элементов в очереди для каждого пользователя обеспечивают независимую границу злоупотреблений базой данных.

В этом выпуске поддерживаются следующие конечные точки пакетной обработки:

  • /v1/responses
  • /v1/chat/completions
  • /v1/embeddings
  • /v1/images/generations

Каждый выполненный элемент отмечен request_mode=batch, batch_protocol=openai, с его batch_job_public_id и custom_id.

1. Загрузите входной файл JSONL.

Каждая непустая строка содержит custom_id, method, url, и body. URL-адрес должен совпадать с конечной точкой, позже предоставленной /v1/batches.

Пример batch.jsonl:

{"custom_id":"request-1","method":"POST","url":"/v1/responses","body":{"model":"gpt-5.4","input":"Summarize this text."}}
{"custom_id":"request-2","method":"POST","url":"/v1/responses","body":{"model":"gpt-5.4","input":"Classify this text."}}

Запрос

curl https://api.model-gate.com/v1/files \
  -H "Authorization: Bearer mg_live_..." \
  -F "purpose=batch" \
  -F "[email protected]"

Ответ — 200

{
  "id": "file-01K...",
  "object": "file",
  "bytes": 322,
  "created_at": 1786610000,
  "filename": "batch.jsonl",
  "purpose": "batch",
  "status": "processed",
  "status_details": null
}

2. Создайте пакет

completion_window должно быть 24h.

Запрос

curl https://api.model-gate.com/v1/batches \
  -H "Authorization: Bearer mg_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "input_file_id":"file-01K...",
    "endpoint":"/v1/responses",
    "completion_window":"24h",
    "metadata":{"job":"nightly-evaluation"}
  }'

Ответ — 200

{
  "id": "batch_01K...",
  "object": "batch",
  "endpoint": "/v1/responses",
  "input_file_id": "file-01K...",
  "completion_window": "24h",
  "status": "in_progress",
  "output_file_id": null,
  "error_file_id": null,
  "request_counts": {
    "total": 2,
    "completed": 0,
    "failed": 0
  },
  "metadata": {
    "job": "nightly-evaluation"
  }
}

3. Получить пакет

Запрос

curl https://api.model-gate.com/v1/batches/batch_01K... \
  -H "Authorization: Bearer mg_live_..."

Ответ — завершен

{
  "id": "batch_01K...",
  "object": "batch",
  "endpoint": "/v1/responses",
  "status": "completed",
  "output_file_id": "file-01KOUTPUT...",
  "error_file_id": null,
  "request_counts": {
    "total": 2,
    "completed": 2,
    "failed": 0
  },
  "usage": {
    "input_tokens": 240,
    "input_tokens_details": {"cached_tokens": 0},
    "output_tokens": 90,
    "output_tokens_details": {"reasoning_tokens": 0},
    "total_tokens": 330
  }
}

4. Загрузите результаты

Запрос

curl https://api.model-gate.com/v1/files/file-01KOUTPUT.../content \
  -H "Authorization: Bearer mg_live_..."

Ответ — 200

{"id":"batch_req_01K...","custom_id":"request-1","response":{"status_code":200,"request_id":"01K...","body":{"id":"resp_...","status":"completed"}},"error":null}

Неудачные, отмененные или просроченные элементы записываются в error_file_id как записи JSONL с response:null и error объект.

5. Перечислите партии

limit по умолчанию 20 и должен быть из 1 к 100. Использовать after для нумерации страниц курсора.

Запрос

curl "https://api.model-gate.com/v1/batches?limit=20&after=batch_01K..." \
  -H "Authorization: Bearer mg_live_..."

Ответ — 200

{
  "object": "list",
  "data": [],
  "first_id": null,
  "last_id": null,
  "has_more": false
}

Завершенные пакетные объекты могут включать агрегат usage объект, когда доступен расчетный учет запросов Model Gate.

6. Отменить пакет

Отмена предотвращает запуск элементов в очереди; уже обрабатываемый элемент может завершиться.

Запрос

curl -X POST https://api.model-gate.com/v1/batches/batch_01K.../cancel \
  -H "Authorization: Bearer mg_live_..."

Ответ — 200

{
  "id": "batch_01K...",
  "object": "batch",
  "status": "cancelling",
  "request_counts": {
    "total": 2,
    "completed": 0,
    "failed": 0
  }
}

7. Метаданные файлов, листинг и удаление.

Получить метаданные:

curl https://api.model-gate.com/v1/files/file-01K... \
  -H "Authorization: Bearer mg_live_..."
{
  "id": "file-01K...",
  "object": "file",
  "bytes": 322,
  "filename": "batch.jsonl",
  "purpose": "batch",
  "status": "processed",
  "expires_at": 1789202000
}

Список файлов с необязательным purpose, after, и order=asc|desc; limit по умолчанию 10000 и должен быть из 1 к 10000:

curl "https://api.model-gate.com/v1/files?purpose=batch&order=desc&limit=100" \
  -H "Authorization: Bearer mg_live_..."
{
  "object": "list",
  "data": [],
  "first_id": null,
  "last_id": null,
  "has_more": false
}

Удалите файл, на который нет ссылки/совместимый с истекшим сроком действия:

curl -X DELETE https://api.model-gate.com/v1/files/file-01K... \
  -H "Authorization: Bearer mg_live_..."
{
  "id": "file-01K...",
  "object": "file",
  "deleted": true
}

Ограничения и семантика восстановления

Model Gate принимает до 50 000 элементов JSONL и ограничивает загружаемый файл настроенным OPENAI_BATCH_MAX_FILE_BYTES значение (200 МБ по умолчанию). Каждый отдельный элемент партии также должен соответствовать стандартному стандарту Model Gate. MAX_REQUEST_BODY_BYTES предел. custom_id значения должны быть уникальными. Пакетные элементы не могут использоваться stream:true или вложенный async:true. Большие файлы JSONL сохраняются внутри как фрагменты базы данных, а не как одно слишком большое значение SQL.

Восстановление выполнения хотя бы один раз, не точно-один раз. Если исполнитель останавливается после того, как восходящий запрос был принят, но до того, как его результат будет надежно записан, истекший срок аренды может привести к повторной попытке того же идентификатора запроса Model Gate. Расчет остается идемпотентным для уже завершенных строк запроса, но инструментальные/внешние побочные эффекты, инициированные моделью, сами по себе должны быть идемпотентными.

Каждый элемент JSONL принимается непосредственно перед тем, как исполнитель затребует его. В противном случае действительные элементы остаются в очереди, пока текущий баланс счета не является положительным или лимит расходов, подлежащий сбросу для ключа/группы, уже исчерпан. В этом состоянии ожидания не учитываются попытки и не создается запись об ошибке; более позднее пополнение счета, сброс использования или увеличение лимита автоматически делает доступными оставшиеся элементы. Model Gate не резервирует теоретическую максимальную стоимость партии. Таким образом, уже принятые элементы могут быть оплачены в полном объеме, даже если одновременная работа приводит к отрицательному итоговому балансу или небольшому превышению лимита расходов, после чего новые элементы остаются в очереди до тех пор, пока учетная запись снова не станет приемлемой.

Ценообразование и учет

Пакетный адаптер не использует собственное пакетное выполнение поставщика. Каждый товар проходит обычную маршрутизацию и расчет модели Model Gate, а затем получает шаблон цен. Ценовой коэффициент пакетного запроса. По умолчанию: 1.

Если коэффициент 0.5, предмет, обычная стоимость Модельных ворот которого равна 0.02 списывается как 0.01. Официальные справочные цены остаются неизменными. Примененный коэффициент записывается и сохраняется при запросе на аудит.

Ошибки

{
  "error": {
    "message": "line 2 url must match batch endpoint /v1/responses",
    "type": "invalid_request_error",
    "param": null,
    "code": "invalid_batch_file"
  }
}