B2BB2B LLM

Batch API, združljiv z OpenAI

Naložite paketne vhodne datoteke JSONL in obdelajte pakete, združljive z OpenAI, prek vzdržljive čakalne vrste Model Gate.

Batch API, združljiv z OpenAI

Model Gate izvaja potek dela OpenAI Files + Batch https://api.model-gate.com/v1. To je združljivostna plast: vsak element JSONL se izvede po običajni poti sklepanja Model Gate. Model Gate to počne ne predloži paket OpenAI, ki izvira iz ponudnika.

Končne točke datotek/paketnega branja/nadzora so nadzorna ravnina: sicer veljavna aktivna poverilnica API-ja lahko navede/prebere/prenese/prekliče/izbriše obstoječe vire, tudi če je stanje na računu trenutno nič ali je ponastavljiva omejitev porabe izčrpana. Operacije shranjevanja so različne: POST /v1/files in POST /v1/batches zahtevajte nov sprejem pozitivnega stanja/porabe, preden Model Gate vstavi podatke o datoteki/opravilu/predmetu. Ključ z ničelnim stanjem torej ne more naložiti JSONL ali ustvariti novega paketnega pomnilnika. Dejanski serijski predmeti še vedno znova preverijo sprejem ob času zahtevka delavcev in ostanejo v čakalni vrsti, če so sredstva pozneje izčrpana. Vnos JSONL se bere postopoma in preverja/vstavlja vrstico za vrstico; Model Gate med ustvarjanjem paketa ne obdrži celotnega vnosa 200 MB in vseh teles zahtev v pomnilniku procesa. Kvote shranjenega bajta/datoteke/aktivnega opravila/predmetov v čakalni vrsti na uporabnika zagotavljajo neodvisno mejo zlorabe zbirke podatkov.

Podprte paketne končne točke v tej izdaji so:

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

Vsaka izvedena postavka je označena request_mode=batch, batch_protocol=openai, s svojim batch_job_public_id in custom_id.

1. Naložite vhodno datoteko JSONL

Vsaka neprazna vrstica vsebuje custom_id, method, url, in body. URL mora biti enak končni točki, ki ji je pozneje dostavljen /v1/batches.

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

Zahteva

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. Ustvarite paket

completion_window mora biti 24h.

Zahteva

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. Pridobite serijo

Zahteva

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

Odgovor — izpolnjen

{
  "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. Prenesite rezultate

Zahteva

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}

Neuspeli, preklicani ali potečeni elementi se zapišejo error_file_id kot zapise JSONL z response:null in an error predmet.

5. Seznam serij

limit privzeto 20 in mora biti iz 1 do 100. Uporaba after za paginacijo kazalca.

Zahteva

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
}

Dokončani paketni objekti lahko vključujejo agregat usage objekt, ko je poravnan Model Gate obračunavanje zahteve je na voljo.

6. Prekličite serijo

Prekliči prepreči zagon elementov v čakalni vrsti; element, ki se že obdeluje, se lahko konča.

Zahteva

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. Metapodatki datoteke, seznam in brisanje

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

Seznam datotek z izbirnim purpose, after, in order=asc|desc; limit privzeto 10000 in 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 nereferencirano/združljivo datoteko s pretečenim rokom veljavnosti:

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

Omejitve in semantika obnovitve

Model Gate sprejme do 50.000 elementov JSONL in omeji naloženo datoteko na konfigurirano OPENAI_BATCH_MAX_FILE_BYTES vrednost (privzeto 200 MiB). Vsak posamezen element serije mora ustrezati tudi normalnemu modelu Gate MAX_REQUEST_BODY_BYTES omejitev. custom_id vrednosti morajo biti edinstvene. Serijskih predmetov ni mogoče uporabiti stream:true ali ugnezdeni async:true. Velike datoteke JSONL se interno hranijo kot kosi baze podatkov in ne kot ena prevelika vrednost SQL.

Izterjava je vsaj-enkrat, ne ravno enkrat. Če se delavec ustavi, potem ko je bila sprejeta zahteva navzgor, vendar preden je njen rezultat trajno zabeležen, lahko potekel najem povzroči ponovni poskus istega ID-ja zahteve Model Gate. Poravnava ostaja idempotentna za že dokončane vrstice zahtev, vendar bi morali biti stranski učinki orodja/zunanji, ki jih sproži model, sami idempotentni.

Vsak element JSONL je sprejet tik preden ga delavec zahteva. Sicer veljavni elementi ostanejo v čakalni vrsti, medtem ko stanje na tekočem računu ni pozitivno ali pa je omejitev porabe ključa/skupine, ki jo je mogoče ponastaviti, že izčrpana. To stanje čakanja ne porabi poskusa ali ustvari zapisa napake; kasnejša dopolnitev, ponastavitev uporabe ali povečanje omejitve samodejno naredi preostale elemente upravičene. Model Gate si ne pridržuje teoretične najvišje cene serije. Že sprejeti elementi se lahko torej v celoti poravnajo, tudi če je zaradi hkratnega dela končno stanje negativno ali povzroči majhno prekoračitev omejitve porabe, po kateri ostanejo novi elementi v čakalni vrsti, dokler račun ni spet primeren.

Cene in računovodstvo

Paketni adapter ne uporablja izvirnega paketnega izvajanja ponudnika. Vsak artikel gre skozi običajno usmerjanje modela Gate in poravnavo, nato pa prejme predlogo za določanje cen Koeficient cene paketne zahteve. Privzeto: 1.

Če je koeficient 0.5, artikel, katerega običajna cena Model Gate je 0.02 se bremeni kot 0.01. Uradne referenčne cene ostajajo nespremenjene. Uporabljeni koeficient se posname in shrani na zahtevku za revizijo.

Napake

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