B2BB2B LLM

OpenAI-kompatibelt Batch API

Ladda upp JSONL-batchinmatningsfiler och bearbeta OpenAI-kompatibla batcher genom Model Gates hållbara kö.

OpenAI-kompatibelt Batch API

Model Gate implementerar OpenAI Files + Batch-arbetsflödet på https://api.model-gate.com/v1. Detta är ett kompatibilitetslager: varje JSONL-objekt exekveras genom den normala Model Gate-inferensvägen. Model Gate gör det inte skicka in en uppströms leverantörsbaserad OpenAI-batch.

Filer/Batch-läs/kontrollslutpunkter är ett kontrollplan: en annars giltig aktiv API-referens kan lista/läsa/ladda ner/avbryta/ta bort befintliga resurser även när kontosaldot för närvarande är noll eller en återställningsbar utgiftsgräns är förbrukad. Lagringsproducerande operationer är olika: POST /v1/files och POST /v1/batches kräva nytt positivt saldo/utgiftsinträde innan Model Gate infogar fil/jobb/artikeldata. En nollbalansnyckel kan därför inte ladda upp JSONL eller skapa ny batchlagring. Faktiska batchartiklar kontrollerar fortfarande antagningen på nytt vid tidpunkten för arbetaranmälan och står i kö om pengarna senare är förbrukade. JSONL-indata läses inkrementellt och valideras/infogas rad för rad; Model Gate behåller inte hela 200 MB indata plus alla begärandekroppar i processminnet när en batch skapas. Per användare lagrad-byte/fil/aktivt-jobb/köade-objekt-kvoter ger en oberoende databas-missbruksgräns.

Batch-slutpunkter som stöds i den här utgåvan är:

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

Varje utfört objekt är markerat request_mode=batch, batch_protocol=openai, med sin batch_job_public_id och custom_id.

1. Ladda upp en JSONL-indatafil

Varje icke-tom rad innehåller custom_id, method, url, och body. URL:en måste vara lika med den slutpunkt som senare levereras till /v1/batches.

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

Begäran

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

completion_window måste vara 24h.

Begäran

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. Hämta en batch

Begäran

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

Svar — avslutat

{
  "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. Ladda ner resultat

Begäran

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}

Misslyckade, avbrutna eller utgångna objekt skrivs till error_file_id som JSONL spelar in med response:null och en error objekt.

5. Lista partier

limit standard till 20 och måste vara från 1 till 100. Använda after för markörpaginering.

Begäran

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
}

Färdigställda batchobjekt kan innehålla ett aggregat usage objekt när det avvecklas Model Gate-begäran redovisning är tillgänglig.

6. Avbryt en batch

Avbryt förhindrar köade objekt från att starta; en vara som redan bearbetas kan avslutas.

Begäran

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, listning och radering

Hämta 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
}

Lista filer med valfritt purpose, after, och order=asc|desc; limit standard till 10000 och måste vara från 1 till 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
}

Ta bort en fil som inte hänvisas till/förfallit-kompatibel:

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 och återställningssemantik

Model Gate accepterar upp till 50 000 JSONL-objekt och begränsar den uppladdade filen till den konfigurerade OPENAI_BATCH_MAX_FILE_BYTES värde (200 MiB som standard). Varje enskild batchartikel måste också passa Model Gates normala MAX_REQUEST_BODY_BYTES begränsa. custom_id värden måste vara unika. Batchartiklar kan inte användas stream:true eller kapslade async:true. Stora JSONL-filer finns kvar internt som databasbitar snarare än ett överdimensionerat SQL-värde.

Exekutiv återställning är åtminstone en gång, inte precis-en gång. Om en arbetare slutar efter att en uppströmsbegäran har accepterats men innan dess resultat har registrerats varaktigt, kan ett utgånget hyresavtal göra att samma Model Gate-begäran-ID provas igen. Avveckling förblir idempotent för redan avslutade begäranrader, men verktyg/externa bieffekter som initieras av en modell bör i sig vara idempotenta.

Varje JSONL-objekt tillåts omedelbart innan en arbetare gör anspråk på det. Annars giltiga artiklar står i kö medan det aktuella saldot är icke-positivt eller den återställningsbara utgiftsgränsen för nyckel/grupp redan är förbrukad. Detta vänteläge förbrukar inte ett försök eller skapar en felpost; en senare påfyllning, användningsåterställning eller gränshöjning gör automatiskt de återstående föremålen kvalificerade. Model Gate reserverar inte en teoretisk maximal batchkostnad. Föremål som redan har angetts kan därför lösas i sin helhet även när samtidigt arbete gör att det slutliga saldot blir negativt eller ger ett litet överskridande av utgiftsgränsen, varefter nya föremål står i kö tills kontot är kvalificerat igen.

Prissättning och redovisning

Batchadaptern använder inte leverantörsbaserad batchkörning. Varje artikel går igenom normal Model Gate-modell routing och avräkning, och får sedan prismallen Priskoefficient för batchbegäran. Standard: 1.

Om koefficienten är 0.5, en vara vars normala Model Gate-kostnad är 0.02 debiteras som 0.01. Officiell referensprissättning förblir oförändrad. Den tillämpade koefficienten avbildas och lagras på begäran om revision.

Fel

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