Batch API kompatibilní s OpenAI
Nahrajte dávkové vstupní soubory JSONL a zpracujte dávky kompatibilní s OpenAI prostřednictvím odolné fronty Model Gate.
Batch API kompatibilní s OpenAI
Model Gate implementuje pracovní postup OpenAI Files + Batch https://api.model-gate.com/v1. Toto je vrstva kompatibility: každá položka JSONL se provádí normální cestou odvození modelu Gate. Model Gate ano ne odeslat dávku OpenAI nativního poskytovatele.
Soubory/dávkové čtení/kontrola koncových bodů jsou řídicí rovinou: jinak platné aktivní pověření API může vypisovat/číst/stahovat/zrušit/mazat existující zdroje, i když je zůstatek účtu aktuálně nulový nebo je vyčerpán resetovatelný limit výdajů. Operace výroby úložiště jsou různé: POST /v1/files a POST /v1/batches vyžadovat nový kladný zůstatek/útratu, než Model Gate vloží data souboru/úlohy/položky. Klíč s nulovým zůstatkem proto nemůže nahrát JSONL ani vytvořit nové dávkové úložiště. Skutečné položky šarže stále znovu kontrolují příjem v době žádosti pracovníka a zůstávají ve frontě, pokud budou prostředky později vyčerpány. Vstup JSONL se načítá postupně a ověřuje/vkládá se řádek po řádku; Model Gate neuchová celých 200 MB vstupu plus všechna těla požadavků v paměti procesu při vytváření dávky. Kvóty uloženého bajtu/souboru/aktivního úkolu/položky ve frontě pro uživatele poskytují nezávislou hranici zneužití databáze.
Podporované koncové body dávky v tomto vydání jsou:
/v1/responses/v1/chat/completions/v1/embeddings/v1/images/generations
Každá provedená položka je označena request_mode=batch, batch_protocol=openai, s jeho batch_job_public_id a custom_id.
1. Nahrajte vstupní soubor JSONL
Každý neprázdný řádek obsahuje custom_id, method, urla body. Adresa URL se musí rovnat koncovému bodu dodanému později /v1/batches.
Příklad 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."}}
Žádost
curl https://api.model-gate.com/v1/files \
-H "Authorization: Bearer mg_live_..." \
-F "purpose=batch" \
-F "[email protected]"
Odpověď - 200
{
"id": "file-01K...",
"object": "file",
"bytes": 322,
"created_at": 1786610000,
"filename": "batch.jsonl",
"purpose": "batch",
"status": "processed",
"status_details": null
}
2. Vytvořte dávku
completion_window musí být 24h.
Žádost
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"}
}'
Odpověď - 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. Načtěte dávku
Žádost
curl https://api.model-gate.com/v1/batches/batch_01K... \
-H "Authorization: Bearer mg_live_..."
Odpověď – dokončeno
{
"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. Stáhněte si výsledky
Žádost
curl https://api.model-gate.com/v1/files/file-01KOUTPUT.../content \
-H "Authorization: Bearer mg_live_..."
Odpověď - 200
{"id":"batch_req_01K...","custom_id":"request-1","response":{"status_code":200,"request_id":"01K...","body":{"id":"resp_...","status":"completed"}},"error":null}
Do položek se zapisují neúspěšné, zrušené položky nebo položky, jejichž platnost vypršela error_file_id jak zaznamenává JSONL s response:null a error objekt.
5. Seznam šarží
limit výchozí na 20 a musí být od 1 na 100. Použití after pro stránkování kurzoru.
Žádost
curl "https://api.model-gate.com/v1/batches?limit=20&after=batch_01K..." \
-H "Authorization: Bearer mg_live_..."
Odpověď - 200
{
"object": "list",
"data": [],
"first_id": null,
"last_id": null,
"has_more": false
}
Dokončené dávkové objekty mohou obsahovat agregát usage je k dispozici účtování požadavků Model Gate.
6. Zrušte dávku
Zrušit zabrání spuštění položek ve frontě; již zpracování položky může být dokončeno.
Žádost
curl -X POST https://api.model-gate.com/v1/batches/batch_01K.../cancel \
-H "Authorization: Bearer mg_live_..."
Odpověď - 200
{
"id": "batch_01K...",
"object": "batch",
"status": "cancelling",
"request_counts": {
"total": 2,
"completed": 0,
"failed": 0
}
}
7. Metadata souboru, výpis a odstranění
Načíst metadata:
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
}
Seznam souborů s volitelným purpose, aftera order=asc|desc; limit výchozí na 10000 a musí být od 1 na 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
}
Odstranění neodkazovaného/kompatibilního souboru s vypršenou platností:
curl -X DELETE https://api.model-gate.com/v1/files/file-01K... \
-H "Authorization: Bearer mg_live_..."
{
"id": "file-01K...",
"object": "file",
"deleted": true
}
Limity a sémantika obnovy
Model Gate přijímá až 50 000 položek JSONL a omezuje nahrávaný soubor na nakonfigurovaný soubor OPENAI_BATCH_MAX_FILE_BYTES hodnotu (standardně 200 MiB). Každá jednotlivá položka šarže musí také odpovídat normálu Model Gate MAX_REQUEST_BODY_BYTES omezit. custom_id hodnoty musí být jedinečné. Dávkové položky nelze použít stream:true nebo vnořené async:true. Velké soubory JSONL jsou uloženy interně jako databázové bloky, nikoli jako jedna příliš velká hodnota SQL.
Obnova exekuce je alespoň jednou, ne přesně jednou. Pokud se pracovník zastaví poté, co byl přijat upstream požadavku, ale předtím, než je jeho výsledek trvale zaznamenán, může vypršení platnosti zapůjčení způsobit opakování stejného ID požadavku Model Gate. Vypořádání zůstává idempotentní pro již hotové řádky požadavků, ale nástroj/externí vedlejší efekty iniciované modelem by samy o sobě měly být idempotentní.
Každá položka JSONL je přijata bezprostředně předtím, než ji pracovník uplatní. Jinak platné položky zůstávají ve frontě, dokud není aktuální zůstatek účtu kladný nebo je již vyčerpán limit útraty, který lze resetovat klíčem/skupinou. Tento stav čekání nespotřebovává pokus ani nevytváří chybový záznam; pozdější dobití, resetování využití nebo zvýšení limitu automaticky učiní zbývající položky způsobilými. Model Gate si nerezervuje teoretické maximální náklady na šarži. Již přijaté položky se proto mohou v plné výši vyrovnat, i když souběžná práce způsobí záporný konečný zůstatek nebo způsobí malé překročení limitu útraty, po kterém zůstanou nové položky ve frontě, dokud nebude účet opět způsobilý.
Ceny a účetnictví
Dávkový adaptér nepoužívá dávkové spouštění nativního poskytovatele. Každá položka prochází běžným modelovým trasováním a vypořádáním modelu Gate a poté obdrží šablonu cen Koeficient ceny šarže požadavku. Výchozí: 1.
Pokud je koeficient 0.5, položka, jejíž běžná cena Model Gate je 0.02 je zatížen jako 0.01. Oficiální referenční cena zůstává nezměněna. Použitý koeficient se zaznamená a uloží do požadavku na audit.
Chyby
{
"error": {
"message": "line 2 url must match batch endpoint /v1/responses",
"type": "invalid_request_error",
"param": null,
"code": "invalid_batch_file"
}
}