Batch API kompatibilan s OpenAI-jem
Učitajte JSONL skupne ulazne datoteke i obradite pakete kompatibilne s OpenAI-jem kroz izdržljivi red čekanja Model Gatea.
Batch API kompatibilan s OpenAI-jem
Model Gate implementira tijek rada OpenAI Files + Batch https://api.model-gate.com/v1. Ovo je sloj kompatibilnosti: svaka JSONL stavka se izvodi kroz normalan put zaključivanja Model Gate. Model Gate ima ne podnesite izvornu OpenAI seriju uzvodnog pružatelja usluga.
Datoteke/Krajnje točke skupnog čitanja/kontrole su kontrolna ravnina: inače valjana aktivna vjerodajnica API-ja može navesti/čitati/preuzeti/poništiti/izbrisati postojeće resurse čak i kada je stanje na računu trenutno nula ili je iscrpljeno ograničenje potrošnje koje se može poništiti. Operacije proizvodnje pohrane su različite: POST /v1/files i POST /v1/batches zahtijevati svježi pozitivni saldo/prihvat potrošnje prije nego što Model Gate umetne podatke o datoteci/poslu/stavci. Ključ nulte ravnoteže stoga ne može učitati JSONL ili stvoriti novu skupnu pohranu. Stvarne serijske stavke i dalje ponovno provjeravaju prijem u vrijeme zahtjeva radnika i ostaju u redu čekanja ako se sredstva kasnije potroše. JSONL unos se inkrementalno čita i potvrđuje/umeće red po red; Model Gate ne zadržava kompletan ulaz od 200 MB plus sva tijela zahtjeva u procesnoj memoriji tijekom stvaranja serije. Kvote pohranjenog bajta/datoteke/aktivnog posla/stavke u redu čekanja po korisniku pružaju neovisnu granicu zlouporabe baze podataka.
Podržane krajnje točke serije u ovom izdanju su:
/v1/responses/v1/chat/completions/v1/embeddings/v1/images/generations
Svaka izvršena stavka je označena request_mode=batch, batch_protocol=openai, sa svojim batch_job_public_id i custom_id.
1. Učitajte JSONL ulaznu datoteku
Svaki redak koji nije prazan sadrži custom_id, method, url, i body. URL mora biti jednak krajnjoj točki koja je kasnije dostavljena /v1/batches.
Primjer 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."}}
Zahtjev
curl https://api.model-gate.com/v1/files \
-H "Authorization: Bearer mg_live_..." \
-F "purpose=batch" \
-F "[email protected]"
Odziv — 200
{
"id": "file-01K...",
"object": "file",
"bytes": 322,
"created_at": 1786610000,
"filename": "batch.jsonl",
"purpose": "batch",
"status": "processed",
"status_details": null
}
2. Stvorite seriju
completion_window mora biti 24h.
Zahtjev
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"}
}'
Odziv — 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. Dohvatite seriju
Zahtjev
curl https://api.model-gate.com/v1/batches/batch_01K... \
-H "Authorization: Bearer mg_live_..."
Odgovor — završen
{
"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. Preuzmite rezultate
Zahtjev
curl https://api.model-gate.com/v1/files/file-01KOUTPUT.../content \
-H "Authorization: Bearer mg_live_..."
Odziv — 200
{"id":"batch_req_01K...","custom_id":"request-1","response":{"status_code":200,"request_id":"01K...","body":{"id":"resp_...","status":"completed"}},"error":null}
Upisuju se neuspjele, otkazane ili istekle stavke error_file_id kao što JSONL bilježi s response:null i an error objekt.
5. Navedite serije
limit zadano 20 i mora biti iz 1 do 100. Koristiti after za paginaciju pokazivača.
Zahtjev
curl "https://api.model-gate.com/v1/batches?limit=20&after=batch_01K..." \
-H "Authorization: Bearer mg_live_..."
Odziv — 200
{
"object": "list",
"data": [],
"first_id": null,
"last_id": null,
"has_more": false
}
Dovršeni skupni objekti mogu uključivati agregat usage objekt kada se podmiri Dostupno je računovodstvo zahtjeva modela Vrata.
6. Otkažite seriju
Odustani sprječava pokretanje stavki u redu čekanja; stavka koja se već obrađuje može završiti.
Zahtjev
curl -X POST https://api.model-gate.com/v1/batches/batch_01K.../cancel \
-H "Authorization: Bearer mg_live_..."
Odziv — 200
{
"id": "batch_01K...",
"object": "batch",
"status": "cancelling",
"request_counts": {
"total": 2,
"completed": 0,
"failed": 0
}
}
7. Metapodaci datoteke, popis i brisanje
Dohvati metapodatke:
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
}
Popis datoteka s izborom purpose, after, i order=asc|desc; limit zadano 10000 i mora biti iz 1 do 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
}
Izbrišite nereferenciranu/isteklu kompatibilnu datoteku:
curl -X DELETE https://api.model-gate.com/v1/files/file-01K... \
-H "Authorization: Bearer mg_live_..."
{
"id": "file-01K...",
"object": "file",
"deleted": true
}
Ograničenja i semantika oporavka
Model Gate prihvaća do 50.000 JSONL stavki i ograničava učitanu datoteku na konfigurirano OPENAI_BATCH_MAX_FILE_BYTES vrijednost (200 MiB prema zadanim postavkama). Svaka pojedinačna stavka serije također mora odgovarati normali Model Gate MAX_REQUEST_BODY_BYTES ograničiti. custom_id vrijednosti moraju biti jedinstvene. Skupne stavke ne mogu se koristiti stream:true ili ugniježđeni async:true. Velike JSONL datoteke čuvaju se interno kao dijelovi baze podataka umjesto jedne prevelike SQL vrijednosti.
Oporavak izvršenja je barem-jednom, ne baš jednom. Ako se radnik zaustavi nakon što je uzvodni zahtjev prihvaćen, ali prije nego što se njegov rezultat trajno zabilježi, istekao najam može uzrokovati ponovni pokušaj istog ID-a zahtjeva Model Gate. Namirenje ostaje idempotentno za već gotove retke zahtjeva, ali alat/vanjski sporedni efekti koje pokreće model sami bi trebali biti idempotentni.
Svaka JSONL stavka primljena je neposredno prije nego je radnik preuzme. Inače važeće stavke ostaju u redu čekanja dok trenutno stanje računa nije pozitivno ili je ograničenje potrošnje ključa/grupe koje se može resetirati već iscrpljeno. Ovo stanje čekanja ne troši pokušaj niti stvara zapis pogreške; kasnija dopuna, resetiranje upotrebe ili povećanje limita automatski čini preostale stavke prihvatljivima. Model Gate ne rezervira teoretsku maksimalnu cijenu serije. Stavke koje su već primljene mogu se stoga u cijelosti podmiriti čak i kada istodobni rad učini konačni saldo negativnim ili proizvede malo prekoračenje ograničenja potrošnje, nakon čega nove stavke ostaju na čekanju dok račun ponovno ne bude kvalificiran.
Cijene i računovodstvo
Batch adapter ne koristi izvorno serijsko izvršavanje davatelja. Svaka stavka prolazi kroz uobičajeno usmjeravanje Model Gate modela i poravnanje, a zatim prima predložak cijena Koeficijent cijene paketnog zahtjeva. Zadano: 1.
Ako je koeficijent 0.5, artikl čija je normalna cijena Model Gate 0.02 tereti se kao 0.01. Službene referentne cijene ostaju nepromijenjene. Primijenjeni koeficijent se snima i pohranjuje na zahtjev za reviziju.
Greške
{
"error": {
"message": "line 2 url must match batch endpoint /v1/responses",
"type": "invalid_request_error",
"param": null,
"code": "invalid_batch_file"
}
}