B2BB2B LLM

OpenAI-compatibele Batch API

Upload JSONL-batchinvoerbestanden en verwerk OpenAI-compatibele batches via de duurzame wachtrij van Model Gate.

OpenAI-compatibele Batch API

Model Gate implementeert de OpenAI Files + Batch-workflow aan https://api.model-gate.com/v1. Dit is een compatibiliteitslaag: elk JSONL-item wordt uitgevoerd via het normale Model Gate-inferentiepad. Model Gate wel niet een upstream-provider-native OpenAI-batch indienen.

Bestanden/Batch lees-/controle-eindpunten vormen een controlevlak: een anderszins geldige actieve API-referentie kan bestaande bronnen weergeven/lezen/downloaden/annuleren/verwijderen, zelfs als het accountsaldo momenteel nul is of een opnieuw instelbare bestedingslimiet is opgebruikt. Opslagproducerende activiteiten zijn verschillend: POST /v1/files En POST /v1/batches nieuwe opname van positief saldo/uitgaven vereisen voordat Model Gate bestands-/taak-/itemgegevens invoegt. Een zero-balance-sleutel kan daarom geen JSONL uploaden of nieuwe batchopslag maken. Werkelijke batchartikelen controleren nog steeds de toegang opnieuw op het moment dat de werknemer claimt en blijven in de wachtrij staan ​​als het geld later op is. JSONL-invoer wordt stapsgewijs gelezen en regel voor regel gevalideerd/ingevoegd; Model Gate bewaart niet de volledige invoer van 200 MB plus alle aanvraagteksten in het procesgeheugen tijdens het maken van een batch. Quota voor opgeslagen bytes/bestand/actieve taak/items in de wachtrij bieden een onafhankelijke grens voor databasemisbruik.

Ondersteunde batcheindpunten in deze release zijn:

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

Elk uitgevoerd item wordt gemarkeerd request_mode=batch, batch_protocol=openai, met zijn batch_job_public_id En custom_id.

1. Upload een JSONL-invoerbestand

Elke niet-lege regel bevat custom_id, method, url, En body. De URL moet gelijk zijn aan het eindpunt waaraan later wordt geleverd /v1/batches.

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

Verzoek

curl https://api.model-gate.com/v1/files \
  -H "Authorization: Bearer mg_live_..." \
  -F "purpose=batch" \
  -F "[email protected]"

Reactie — 200

{
  "id": "file-01K...",
  "object": "file",
  "bytes": 322,
  "created_at": 1786610000,
  "filename": "batch.jsonl",
  "purpose": "batch",
  "status": "processed",
  "status_details": null
}

2. Maak de batch aan

completion_window moet zijn 24h.

Verzoek

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

Reactie — 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. Haal een batch op

Verzoek

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

Reactie - voltooid

{
  "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. Resultaten downloaden

Verzoek

curl https://api.model-gate.com/v1/files/file-01KOUTPUT.../content \
  -H "Authorization: Bearer mg_live_..."

Reactie — 200

{"id":"batch_req_01K...","custom_id":"request-1","response":{"status_code":200,"request_id":"01K...","body":{"id":"resp_...","status":"completed"}},"error":null}

Er wordt naar mislukte, geannuleerde of verlopen items geschreven error_file_id zoals JSONL registreert met response:null en een error voorwerp.

5. Maak een lijst van batches

limit standaard ingesteld op 20 en moet afkomstig zijn 1 naar 100. Gebruik after voor cursorpaginering.

Verzoek

curl "https://api.model-gate.com/v1/batches?limit=20&after=batch_01K..." \
  -H "Authorization: Bearer mg_live_..."

Reactie — 200

{
  "object": "list",
  "data": [],
  "first_id": null,
  "last_id": null,
  "has_more": false
}

Voltooide batchobjecten kunnen een aggregatie bevatten usage object wanneer de boekhouding van Model Gate-verzoeken is vereffend.

6. Een batch annuleren

Annuleren voorkomt dat items in de wachtrij worden gestart; een item dat al is verwerkt, kan worden voltooid.

Verzoek

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

Reactie — 200

{
  "id": "batch_01K...",
  "object": "batch",
  "status": "cancelling",
  "request_counts": {
    "total": 2,
    "completed": 0,
    "failed": 0
  }
}

7. Metagegevens van bestanden, vermelding en verwijdering

Metagegevens ophalen:

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
}

Geef bestanden weer met optioneel purpose, after, En order=asc|desc; limit standaard ingesteld op 10000 en moet afkomstig zijn 1 naar 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
}

Een bestand zonder referentie/verlopen compatibel verwijderen:

curl -X DELETE https://api.model-gate.com/v1/files/file-01K... \
  -H "Authorization: Bearer mg_live_..."
{
  "id": "file-01K...",
  "object": "file",
  "deleted": true
}

Limieten en herstelsemantiek

Model Gate accepteert maximaal 50.000 JSONL-items en beperkt het geüploade bestand tot het geconfigureerde OPENAI_BATCH_MAX_FILE_BYTES waarde (standaard 200 MiB). Elk individueel batchartikel moet ook passen bij de standaard van Model Gate MAX_REQUEST_BODY_BYTES beperken. custom_id waarden moeten uniek zijn. Batchartikelen kunnen niet worden gebruikt stream:true of genest async:true. Grote JSONL-bestanden worden intern bewaard als database-brokken in plaats van als één te grote SQL-waarde.

Uitvoeringsherstel is minstens één keer, niet precies één keer. Als een werknemer stopt nadat een upstream-aanvraag is geaccepteerd, maar voordat het resultaat ervan duurzaam is vastgelegd, kan een verlopen leaseovereenkomst ervoor zorgen dat dezelfde Model Gate-aanvraag-ID opnieuw wordt geprobeerd. De afwikkeling blijft idempotent voor reeds voltooide verzoekrijen, maar door een model geïnitieerde tool/externe bijwerkingen zouden zelf idempotent moeten zijn.

Elk JSONL-item wordt onmiddellijk toegelaten voordat een werknemer het claimt. Anders geldige items blijven in de wachtrij staan ​​terwijl het huidige rekeningsaldo niet-positief is of de opnieuw instelbare bestedingslimiet voor de sleutel/groep al is bereikt. Deze wachtstatus verbruikt geen poging en creëert geen foutrecord; een latere opwaardering, gebruiksreset of limietverhoging zorgt ervoor dat de resterende items automatisch in aanmerking komen. Model Gate hanteert geen theoretische maximale batchkosten. Reeds toegelaten artikelen kunnen daarom volledig worden verrekend, zelfs als gelijktijdig werk het eindsaldo negatief maakt of een kleine overschrijding van de bestedingslimiet oplevert, waarna nieuwe artikelen in de wachtrij blijven staan ​​totdat de account weer in aanmerking komt.

Prijzen en boekhouding

De batchadapter maakt geen gebruik van batchuitvoering van de provider. Elk item doorloopt de normale routering en afwikkeling van het Model Gate-model en ontvangt vervolgens de prijssjablonen Prijscoëfficiënt voor batchverzoek. Standaard: 1.

Als de coëfficiënt is 0.5, een artikel waarvan de normale Model Gate-kosten bedragen 0.02 wordt afgeschreven als 0.01. De officiële referentieprijzen blijven ongewijzigd. De toegepaste coëfficiënt wordt in een momentopname opgenomen en opgeslagen in het auditverzoek.

Fouten

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