OpenAI-kompatibel Batch API
Upload JSONL batch-inputfiler og bearbejd OpenAI-kompatible batches gennem Model Gates holdbare kø.
OpenAI-kompatibel Batch API
Model Gate implementerer OpenAI Files + Batch workflow på https://api.model-gate.com/v1. Dette er et kompatibilitetslag: hvert JSONL-element udføres gennem den normale Model Gate-inferenssti. Model Gate gør ikke indsende en opstrøms udbyder-native OpenAI-batch.
Filer/Batchlæse/kontrolslutpunkter er et kontrolplan: en ellers gyldig aktiv API-legitimationsoplysninger kan liste/læse/downloade/annullere/slette eksisterende ressourcer, selv når kontosaldoen i øjeblikket er nul, eller en nulstillelig forbrugsgrænse er opbrugt. Lagerproducerende operationer er forskellige: POST /v1/files og POST /v1/batches kræver ny positiv saldo/forbrugsadgang, før Model Gate indsætter fil/job/varedata. En nulbalancenøgle kan derfor ikke uploade JSONL eller oprette ny batch-lagring. Faktiske batchvarer kontrollerer stadig optagelsen igen på tidspunktet for arbejderansøgning og forbliver i kø, hvis midlerne senere er opbrugt. JSONL-input læses trinvist og valideres/indsættes linje for linje; Model Gate beholder ikke hele 200 MB input plus alle anmodningstekster i proceshukommelsen, mens der oprettes en batch. Per-bruger stored-byte/file/active-job/queued-item-kvoter giver en uafhængig database-misbrugsgrænse.
Understøttede batch-endepunkter i denne udgivelse er:
/v1/responses/v1/chat/completions/v1/embeddings/v1/images/generations
Hvert udført emne er markeret request_mode=batch, batch_protocol=openai, med sin batch_job_public_id og custom_id.
1. Upload en JSONL-inputfil
Hver ikke-tom linje indeholder custom_id, method, url, og body. URL'en skal svare til det slutpunkt, der senere leveres til /v1/batches.
Eksempel 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."}}
Anmodning
curl https://api.model-gate.com/v1/files \
-H "Authorization: Bearer mg_live_..." \
-F "purpose=batch" \
-F "[email protected]"
Svar - 200
{
"id": "file-01K...",
"object": "file",
"bytes": 322,
"created_at": 1786610000,
"filename": "batch.jsonl",
"purpose": "batch",
"status": "processed",
"status_details": null
}
2. Opret batchen
completion_window skal være 24h.
Anmodning
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"}
}'
Svar - 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. Hent en batch
Anmodning
curl https://api.model-gate.com/v1/batches/batch_01K... \
-H "Authorization: Bearer mg_live_..."
Svar — afsluttet
{
"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. Download resultater
Anmodning
curl https://api.model-gate.com/v1/files/file-01KOUTPUT.../content \
-H "Authorization: Bearer mg_live_..."
Svar - 200
{"id":"batch_req_01K...","custom_id":"request-1","response":{"status_code":200,"request_id":"01K...","body":{"id":"resp_...","status":"completed"}},"error":null}
Mislykkede, annullerede eller udløbne varer skrives til error_file_id som JSONL optager med response:null og en error objekt.
5. Liste partier
limit standard til 20 og skal være fra 1 til 100. Bruge after til markørpaginering.
Anmodning
curl "https://api.model-gate.com/v1/batches?limit=20&after=batch_01K..." \
-H "Authorization: Bearer mg_live_..."
Svar - 200
{
"object": "list",
"data": [],
"first_id": null,
"last_id": null,
"has_more": false
}
Fuldførte batchobjekter kan indeholde et aggregat usage objekt, når afviklet Model Gate-anmodningsregnskab er tilgængeligt.
6. Annuller en batch
Annuller forhindrer varer i kø i at starte; en vare, der allerede er i behandling, kan afsluttes.
Anmodning
curl -X POST https://api.model-gate.com/v1/batches/batch_01K.../cancel \
-H "Authorization: Bearer mg_live_..."
Svar - 200
{
"id": "batch_01K...",
"object": "batch",
"status": "cancelling",
"request_counts": {
"total": 2,
"completed": 0,
"failed": 0
}
}
7. Filmetadata, liste og sletning
Hent 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
}
Liste filer med valgfri purpose, after, og order=asc|desc; limit standard til 10000 og skal være fra 1 til 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
}
Slet en ikke-refereret/udløbet-kompatibel fil:
curl -X DELETE https://api.model-gate.com/v1/files/file-01K... \
-H "Authorization: Bearer mg_live_..."
{
"id": "file-01K...",
"object": "file",
"deleted": true
}
Grænser og gendannelsessemantik
Model Gate accepterer op til 50.000 JSONL-elementer og begrænser den uploadede fil til den konfigurerede OPENAI_BATCH_MAX_FILE_BYTES værdi (200 MiB som standard). Hver enkelt batchvare skal også passe til Model Gates alm MAX_REQUEST_BODY_BYTES begrænse. custom_id værdier skal være unikke. Batchvarer kan ikke bruges stream:true eller indlejret async:true. Store JSONL-filer bevares internt som databaseklumper i stedet for én overdimensioneret SQL-værdi.
Gendannelse af udførelse er mindst én gang, ikke ligefrem én gang. Hvis en arbejder stopper, efter at en upstream-anmodning er blevet accepteret, men før resultatet er varigt registreret, kan en udløbet lejekontrakt medføre, at det samme Model Gate-anmodnings-id prøves igen. Afregning forbliver idempotent for allerede afsluttede anmodningsrækker, men værktøjs-/eksterne bivirkninger initieret af en model bør i sig selv være idempotente.
Hvert JSONL-element optages umiddelbart før en arbejder gør krav på det. Ellers gyldige varer forbliver i kø, mens den løbende kontosaldo er ikke-positiv, eller den nøgle/gruppe-nulstillelige forbrugsgrænse allerede er opbrugt. Denne ventetilstand bruger ikke et forsøg eller opretter en fejlregistrering; en senere opfyldning, nulstilling af brug eller begrænsning gør automatisk de resterende varer kvalificerede. Model Gate reserverer ikke en teoretisk maksimal batchpris. Elementer, der allerede er optaget, kan derfor afregnes fuldt ud, selv når samtidig arbejde gør den endelige saldo negativ eller giver en lille overskridelse af forbrugsgrænsen, hvorefter nye varer forbliver i kø, indtil kontoen igen er kvalificeret.
Pris og regnskab
Batchadapteren bruger ikke udbyderindbygget batchudførelse. Hver vare gennemgår normal Model Gate model routing og afregning, og modtager derefter prisskabelonens Batch anmodning pris koefficient. Misligholdelse: 1.
Hvis koefficienten er 0.5, en vare, hvis normale Model Gate-pris er 0.02 debiteres som 0.01. Den officielle referencepris forbliver uændret. Den anvendte koefficient er snapshottet og gemt på anmodningen om revision.
Fejl
{
"error": {
"message": "line 2 url must match batch endpoint /v1/responses",
"type": "invalid_request_error",
"param": null,
"code": "invalid_batch_file"
}
}