B2BB2B LLM

API Batch compatibil cu OpenAI

Încărcați fișiere de intrare în loturi JSONL și procesați loturi compatibile cu OpenAI prin coada durabilă a Model Gate.

API Batch compatibil cu OpenAI

Model Gate implementează fluxul de lucru OpenAI Files + Batch activat https://api.model-gate.com/v1. Acesta este un strat de compatibilitate: fiecare element JSONL este executat prin calea normală de inferență Model Gate. Model Gate face nu trimiteți un lot OpenAI nativ de furnizor în amonte.

Fișierele/punctele finale de citire/control în loturi sunt un plan de control: o autentificare API activă altfel validă poate lista/citește/descărca/anula/șterge resursele existente chiar și atunci când soldul contului este în prezent zero sau o limită de cheltuieli resetabilă este epuizată. Operațiunile de producere a stocării sunt diferite: POST /v1/files şi POST /v1/batches necesită o nouă admitere pentru sold pozitiv/cheltuială înainte ca Model Gate să insereze datele fișierului/postului/articolului. Prin urmare, o cheie de echilibru zero nu poate încărca JSONL sau crea stocare în loturi noi. Loturile efective revin în continuare la admiterea la momentul cererii lucrătorilor și rămân la coadă dacă fondurile sunt epuizate ulterior. Intrarea JSONL este citită incremental și validată/inserată linie cu linie; Model Gate nu reține intrarea completă de 200 MB plus toate corpurile de solicitare în memoria de proces în timp ce creează un lot. Cotele per utilizator stocat-octet/fișier/activ-job/articol-în coadă oferă o limită independentă de abuz în baza de date.

Punctele finale de loturi acceptate în această versiune sunt:

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

Fiecare element executat este marcat request_mode=batch, batch_protocol=openai, cu ei batch_job_public_id şi custom_id.

1. Încărcați un fișier de intrare JSONL

Fiecare linie nevide conține custom_id, method, url, și body. Adresa URL trebuie să fie egală cu punctul final furnizat ulterior /v1/batches.

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

Cerere

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

Răspuns - 200

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

2. Creați lotul

completion_window trebuie să fie 24h.

Cerere

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

Răspuns - 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. Preluați un lot

Cerere

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

Răspuns - finalizat

{
  "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. Descărcați rezultatele

Cerere

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

Răspuns - 200

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

În care sunt scrise articolele eșuate, anulate sau expirate error_file_id așa cum înregistrează JSONL response:null si un error obiect.

5. Listați loturile

limit implicit la 20 și trebuie să fie de la 1 la 100. Utilizare after pentru paginarea cursorului.

Cerere

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

Răspuns - 200

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

Obiectele de lot finalizate pot include un agregat usage obiect atunci când este decontat Contabilitatea cererii Model Gate este disponibilă.

6. Anulați un lot

Anulare împiedică pornirea articolelor aflate în coadă; un articol deja procesat se poate termina.

Cerere

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

Răspuns - 200

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

7. Metadatele fișierului, listare și ștergere

Preluați metadate:

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ți fișierele cu opțional purpose, after, și order=asc|desc; limit implicit la 10000 și trebuie să fie de la 1 la 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
}

Ștergeți un fișier nereferit/compatibil cu expirarea:

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

Limite și semantică de recuperare

Model Gate acceptă până la 50.000 de articole JSONL și limitează fișierul încărcat la cel configurat OPENAI_BATCH_MAX_FILE_BYTES valoare (200 MiB în mod implicit). Fiecare articol individual de lot trebuie, de asemenea, să se potrivească cu normalul modelului Gate MAX_REQUEST_BODY_BYTES limită. custom_id valorile trebuie să fie unice. Elementele lot nu pot fi utilizate stream:true sau imbricate async:true. Fișierele JSONL mari sunt păstrate intern ca fragmente de bază de date, mai degrabă decât o valoare SQL supradimensionată.

Recuperarea execuției este măcar-o dată, nu tocmai-o dată. Dacă un lucrător se oprește după ce o solicitare în amonte a fost acceptată, dar înainte ca rezultatul acesteia să fie înregistrat în mod durabil, un contract de închiriere expirat poate face ca același ID de cerere Model Gate să fie reîncercat. Decontarea rămâne idempotentă pentru rândurile de solicitare deja finalizate, dar efectele secundare externe ale instrumentului/externe inițiate de un model ar trebui să fie ele însele idempotente.

Fiecare articol JSONL este admis imediat înainte ca un lucrător să-l revendice. În caz contrar, articolele valide rămân la coadă în timp ce soldul contului curent este nepozitiv sau limita de cheltuieli resetabilă cheie/grup este deja epuizată. Această stare de așteptare nu consumă o încercare și nu creează o înregistrare de eroare; o reîncărcare ulterioară, o resetare a utilizării sau o creștere a limitei face automat eligibile articolele rămase. Model Gate nu rezervă un cost maxim teoretic al lotului. Prin urmare, articolele deja admise se pot deconta integral chiar și atunci când munca concomitentă face soldul final negativ sau produce o depășire mică a limitei de cheltuieli, după care articolele noi rămân în coadă până când contul este din nou eligibil.

Prețuri și contabilitate

Adaptorul batch nu utilizează execuția batch nativă de furnizor. Fiecare articol trece prin rutarea și decontarea modelului Model Gate normal, apoi primește șablonul de preț Coeficient de preț cerere lot. Implicit: 1.

Dacă coeficientul este 0.5, un articol al cărui cost normal pentru Model Gate este 0.02 este debitat ca 0.01. Prețul oficial de referință rămâne neschimbat. Coeficientul aplicat este instantaneu și stocat la cererea de audit.

Erori

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