B2BB2B LLM

OpenAI-kompatibel Batch API

Last opp JSONL batch-inndatafiler og behandle OpenAI-kompatible batcher gjennom Model Gates holdbare kø.

OpenAI-kompatibel Batch API

Model Gate implementerer OpenAI Files + Batch-arbeidsflyten på https://api.model-gate.com/v1. Dette er et kompatibilitetslag: hvert JSONL-element kjøres gjennom den normale Model Gate-inferensbanen. Model Gate gjør det ikke send inn en oppstrøms leverandørbasert OpenAI-batch.

Filer/Batch lese-/kontrollendepunkter er et kontrollplan: en ellers gyldig aktiv API-legitimasjon kan liste/lese/laste ned/avbryte/slette eksisterende ressurser selv når kontosaldoen for øyeblikket er null eller en tilbakestillbar forbruksgrense er oppbrukt. Lagerproduserende operasjoner er forskjellige: POST /v1/files og POST /v1/batches krever ny positiv saldo/forbruksopptak før Model Gate setter inn fil-/jobb-/varedata. En nullbalansenøkkel kan derfor ikke laste opp JSONL eller opprette ny batchlagring. Faktiske batchvarer kontrollerer fortsatt innleggelsen på nytt ved kravtidspunktet og står i kø hvis midlene senere er oppbrukt. JSONL-inndata leses inkrementelt og valideres/settes inn linje for linje; Model Gate beholder ikke hele 200 MB-inndata pluss alle forespørselselementer i prosessminnet mens du oppretter en batch. Per-bruker lagret-byte/fil/aktiv-jobb/kø-elementkvoter gir en uavhengig grense for databasemisbruk.

Støttede batchendepunkter i denne utgivelsen er:

  • /v1/responses
  • /v1/chat/completions
  • /v1/embeddings
  • /v1/images/generations

Hvert utførte element er merket request_mode=batch, batch_protocol=openai, med sin batch_job_public_id og custom_id.

1. Last opp en JSONL-inndatafil

Hver ikke-tom linje inneholder custom_id, method, url, og body. URL-en må være lik endepunktet som senere ble levert 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."}}

Forespørsel

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. Opprett batchen

completion_window må være 24h.

Forespørsel

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

Forespørsel

curl https://api.model-gate.com/v1/batches/batch_01K... \
  -H "Authorization: Bearer mg_live_..."

Svar — fullført

{
  "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. Last ned resultater

Forespørsel

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, kansellerte eller utløpte varer skrives til error_file_id som JSONL registrerer med response:null og en error gjenstand.

5. List batcher

limit standard til 20 og må være fra 1 til 100. Bruk after for markørpaginering.

Forespørsel

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
}

Fullførte batchobjekter kan inkludere et aggregat usage objekt når avgjort Model Gate-forespørselsregnskap er tilgjengelig.

6. Avbryt en batch

Avbryt hindrer elementer i kø fra å starte; et element som allerede er under behandling, kan fullføres.

Forespørsel

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, oppføring og sletting

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 valgfrie purpose, after, og order=asc|desc; limit standard til 10000 og må 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
}

Slett en ikke-referert/utløpt-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
}

Grenser og gjenopprettingssemantikk

Model Gate godtar opptil 50 000 JSONL-elementer og begrenser den opplastede filen til den konfigurerte OPENAI_BATCH_MAX_FILE_BYTES verdi (200 MiB som standard). Hver enkelt batchvare må også passe til Model Gates normal MAX_REQUEST_BODY_BYTES begrense. custom_id verdier må være unike. Batch-elementer kan ikke brukes stream:true eller nestet async:true. Store JSONL-filer vedvares internt som databasebiter i stedet for én overdimensjonert SQL-verdi.

Utførelsesgjenoppretting er minst én gang, ikke akkurat-en gang. Hvis en arbeider stopper etter at en oppstrømsforespørsel ble akseptert, men før resultatet er varig registrert, kan en utløpt leieavtale føre til at samme Model Gate-forespørsels-ID prøves på nytt. Oppgjør forblir idempotent for allerede ferdige forespørselsrader, men verktøy/eksterne bivirkninger initiert av en modell bør i seg selv være idempotente.

Hver JSONL-vare tas opp umiddelbart før en arbeider gjør krav på den. Ellers gyldige varer står i kø mens gjeldende kontosaldo er ikke-positiv eller den tilbakestillelige forbruksgrensen for nøkkel/gruppe allerede er oppbrukt. Denne ventetilstanden bruker ikke et forsøk eller oppretter en feilpost; en senere påfylling, tilbakestilling av bruk eller grenseøkning gjør automatisk de resterende elementene kvalifisert. Model Gate reserverer ikke en teoretisk maksimal batchkostnad. Elementer som allerede er innrømmet kan derfor gjøres opp i sin helhet selv når samtidig arbeid gjør den endelige saldoen negativ eller gir en liten forbruksgrenseoverskridelse, hvoretter nye varer står i kø til kontoen er kvalifisert igjen.

Prising og regnskap

Batchadapteren bruker ikke leverandørbasert batchkjøring. Hver vare går gjennom normal Model Gate-modellruting og oppgjør, og mottar deretter prismalens Batch forespørsel pris koeffisient. Misligholde: 1.

Hvis koeffisienten er 0.5, en vare hvis normale Model Gate-kostnad er 0.02 debiteres som 0.01. Offisiell referanseprising forblir uendret. Den anvendte koeffisienten er snapshottet og lagret på forespørselen om revisjon.

Feil

{
  "error": {
    "message": "line 2 url must match batch endpoint /v1/responses",
    "type": "invalid_request_error",
    "param": null,
    "code": "invalid_batch_file"
  }
}