B2BB2B LLM

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