B2BB2B LLM

OpenAI互換バッチAPI

JSONL バッチ入力ファイルをアップロードし、Model Gate の耐久性キューを通じて OpenAI 互換バッチを処理します。

OpenAI互換バッチAPI

Model Gate は、OpenAI Files + Batch ワークフローを実装しています。 https://api.model-gate.com/v1。これは互換性レイヤーです。各 JSONL 項目は通常の Model Gate 推論パスを通じて実行されます。モデルゲートは次のことを行います ない アップストリームのプロバイダーネイティブ OpenAI バッチを送信します。

ファイル/バッチ読み取り/制御エンドポイントはコントロール プレーンです。それ以外の場合は有効なアクティブな API 資格情報は、アカウント残高が現在ゼロであるか、リセット可能な使用制限を使い果たしている場合でも、既存のリソースの一覧表示/読み取り/ダウンロード/キャンセル/削除を行うことができます。ストレージ生成操作は次のように異なります。 POST /v1/files そして POST /v1/batches Model Gate がファイル/ジョブ/項目データを挿入する前に、新しいプラス残高/支出許可が必要です。したがって、ゼロ残高キーでは、JSONL をアップロードしたり、新しいバッチ ストレージを作成したりすることはできません。実際のバッチアイテムは、従業員の請求時に入場を再チェックし、後で資金がなくなった場合でもキューに残ったままになります。 JSONL 入力は増分的に読み取られ、行ごとに検証/挿入されます。 Model Gate は、バッチの作成中に、200 MB の入力全体とすべてのリクエスト本文をプロセス メモリに保持しません。ユーザーごとの保存バイト/ファイル/アクティブジョブ/キュー項目クォータは、独立したデータベース悪用境界を提供します。

このリリースでサポートされているバッチ エンドポイントは次のとおりです。

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

実行されたすべての項目にマークが付けられます request_mode=batchbatch_protocol=openai、その batch_job_public_id そして custom_id

1. JSONL入力ファイルをアップロードする

空ではない各行には次の内容が含まれます custom_idmethodurl、 そして 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 そしてからのものでなければなりません 1100。使用 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
}

オプションを使用してファイルをリストする purposeafter、 そして order=asc|desc; limit デフォルトは 10000 そしてからのものでなければなりません 110000:

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 MiB)。個々のバッチ項目も Model Gate の標準に適合する必要があります MAX_REQUEST_BODY_BYTES 限界。 custom_id 値は一意である必要があります。バッチアイテムは使用できません stream:true または入れ子になった async:true。大きな JSONL ファイルは、1 つの大きな SQL 値ではなく、データベースのチャンクとして内部的に保持されます。

実行回復は 少なくとも1回、一度だけではありません。アップストリーム リクエストが受け入れられた後、その結果が永続的に記録される前にワーカーが停止した場合、リースの期限が切れると、同じ Model Gate リクエスト ID が再試行される可能性があります。すでに終了したリクエスト行については決済は冪等のままですが、モデルによって開始されるツール/外部の副作用自体は冪等である必要があります。

各 JSONL 項目は、ワーカーが要求する直前に許可されます。それ以外の場合は、現在のアカウント残高がプラスでない間、またはキー/グループのリセット可能な使用制限がすでに使い果たされている間、有効なアイテムはキューに入れられたままになります。この待機状態では、試行が消費されたり、エラー レコードが作成されたりすることはありません。その後のチャージ、使用量のリセット、または制限の増加により、残りのアイテムが自動的に対象になります。 Model Gate では、理論上の最大バッチ コストが予約されていません。したがって、同時作業によって最終残高がマイナスになったり、支出制限をわずかにオーバーシュートしたりした場合でも、すでに承認されているアイテムは全額決済される可能性があり、その後、アカウントが再び適格になるまで新しいアイテムはキューに残されたままになります。

価格設定と会計

バッチ アダプターは、プロバイダー ネイティブのバッチ実行を使用しません。すべての品目は、通常の Model Gate モデルのルーティングと決済を経て、価格設定テンプレートを受け取ります。 バッチリクエスト価格係数。デフォルト: 1

係数が 0.5、通常の Model Gate コストがかかるアイテム 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"
  }
}