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=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 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"
}
}