API de lots compatible amb OpenAI
Carregueu fitxers d'entrada de lots JSONL i processeu lots compatibles amb OpenAI mitjançant la cua duradora de Model Gate.
API de lots compatible amb OpenAI
Model Gate implementa el flux de treball OpenAI Files + Batch activat https://api.model-gate.com/v1. Aquesta és una capa de compatibilitat: cada element JSONL s'executa a través del camí d'inferència de Model Gate normal. Model Gate ho fa no enviar un lot d'OpenAI natiu del proveïdor amunt.
Els arxius/punts finals de lectura/control per lots són un pla de control: una credencial d'API activa, d'altra manera, vàlida pot enumerar/llegir/descarregar/cancel·lar/suprimir recursos existents fins i tot quan el saldo del compte és actualment zero o s'ha esgotat un límit de despesa reiniciable. Les operacions de producció d'emmagatzematge són diferents: POST /v1/files i POST /v1/batches requereixen una nova admissió de saldo positiu/despesa abans que Model Gate insereixi dades de fitxer/feina/element. Per tant, una clau de balanç zero no pot carregar JSONL ni crear emmagatzematge per lots nou. Els articles reals del lot encara tornen a comprovar l'admissió a l'hora de la reclamació del treballador i romanen a la cua si més tard s'esgoten els fons. L'entrada JSONL es llegeix de manera incremental i es valida/insereix línia per línia; Model Gate no conserva l'entrada completa de 200 MB més tots els cossos de sol·licitud a la memòria de procés mentre es crea un lot. Les quotes de byte/fitxer/job-actiu/element en cua per usuari proporcionen un límit independent d'abús de la base de dades.
Els punts finals per lots admesos en aquesta versió són:
/v1/responses/v1/chat/completions/v1/embeddings/v1/images/generations
Cada element executat està marcat request_mode=batch, batch_protocol=openai, amb la seva batch_job_public_id i custom_id.
1. Carregueu un fitxer d'entrada JSONL
Cada línia no buida conté custom_id, method, url, i body. L'URL ha de ser igual al punt final al qual s'ha subministrat posteriorment /v1/batches.
Exemple 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."}}
Sol·licitud
curl https://api.model-gate.com/v1/files \
-H "Authorization: Bearer mg_live_..." \
-F "purpose=batch" \
-F "[email protected]"
Resposta: 200
{
"id": "file-01K...",
"object": "file",
"bytes": 322,
"created_at": 1786610000,
"filename": "batch.jsonl",
"purpose": "batch",
"status": "processed",
"status_details": null
}
2. Creeu el lot
completion_window ha de ser 24h.
Sol·licitud
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"}
}'
Resposta: 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. Recuperar un lot
Sol·licitud
curl https://api.model-gate.com/v1/batches/batch_01K... \
-H "Authorization: Bearer mg_live_..."
Resposta: completada
{
"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. Descarregar resultats
Sol·licitud
curl https://api.model-gate.com/v1/files/file-01KOUTPUT.../content \
-H "Authorization: Bearer mg_live_..."
Resposta: 200
{"id":"batch_req_01K...","custom_id":"request-1","response":{"status_code":200,"request_id":"01K...","body":{"id":"resp_...","status":"completed"}},"error":null}
S'escriuen els articles fallits, cancel·lats o caducats error_file_id com registra JSONL response:null i un error objecte.
5. Llista de lots
limit per defecte 20 i ha de ser de 1 a 100. Ús after per a la paginació del cursor.
Sol·licitud
curl "https://api.model-gate.com/v1/batches?limit=20&after=batch_01K..." \
-H "Authorization: Bearer mg_live_..."
Resposta: 200
{
"object": "list",
"data": [],
"first_id": null,
"last_id": null,
"has_more": false
}
Els objectes de lot completats poden incloure un agregat usage objecte quan la comptabilitat de sol·licituds Model Gate estigui disponible.
6. Cancel·la un lot
Cancel·la impedeix que comencin els elements a la cua; un element que ja s'està processant pot acabar.
Sol·licitud
curl -X POST https://api.model-gate.com/v1/batches/batch_01K.../cancel \
-H "Authorization: Bearer mg_live_..."
Resposta: 200
{
"id": "batch_01K...",
"object": "batch",
"status": "cancelling",
"request_counts": {
"total": 2,
"completed": 0,
"failed": 0
}
}
7. Metadades del fitxer, llistat i supressió
Recuperar metadades:
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
}
Llista els fitxers amb opcionals purpose, after, i order=asc|desc; limit per defecte 10000 i ha de ser de 1 a 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
}
Suprimeix un fitxer no referenciat/compatible amb caducat:
curl -X DELETE https://api.model-gate.com/v1/files/file-01K... \
-H "Authorization: Bearer mg_live_..."
{
"id": "file-01K...",
"object": "file",
"deleted": true
}
Límits i semàntica de recuperació
Model Gate accepta fins a 50.000 elements JSONL i limita el fitxer penjat al configurat OPENAI_BATCH_MAX_FILE_BYTES valor (200 MiB per defecte). Cada element de lot individual també ha d'ajustar-se a la normalitat de Model Gate MAX_REQUEST_BODY_BYTES límit. custom_id els valors han de ser únics. Els elements del lot no es poden utilitzar stream:true o niuada async:true. Els fitxers JSONL grans es mantenen internament com a fragments de base de dades en lloc d'un valor SQL de gran mida.
La recuperació de l'execució és almenys una vegada, no exactament-una vegada. Si un treballador s'atura després d'acceptar una sol·licitud aigües amunt, però abans que el seu resultat es registri de manera duradora, un contracte d'arrendament vençut pot provocar que es torni a provar el mateix ID de sol·licitud de Model Gate. La liquidació continua sent idempotent per a les files de sol·licituds ja acabades, però els efectes secundaris externs/eines iniciats per un model haurien de ser idempotents.
Cada element JSONL s'admet immediatament abans que un treballador el reclami. En cas contrari, els articles vàlids romanen a la cua mentre el saldo del compte actual no és positiu o el límit de despesa reinicialitzable de claus/grups ja s'ha esgotat. Aquest estat d'espera no consumeix cap intent ni crea un registre d'error; una recàrrega posterior, un restabliment d'ús o un augment del límit fa que els articles restants siguin elegibles automàticament. Model Gate no reserva un cost màxim teòric del lot. Per tant, els articles ja admesos es poden liquidar íntegrament fins i tot quan el treball simultània fa que el saldo final sigui negatiu o produeixi una petita superació del límit de despesa, després del qual els nous articles romanen a la cua fins que el compte torni a ser apte.
Preus i comptabilitat
L'adaptador de lots no utilitza l'execució per lots nativa del proveïdor. Cada article passa per l'encaminament i la liquidació normal del model Model Gate, i després rep la plantilla de preus Coeficient de preu de sol·licitud de lot. Per defecte: 1.
Si el coeficient és 0.5, un article el cost normal de la porta del model és 0.02 es carrega com 0.01. El preu de referència oficial es manté sense canvis. El coeficient aplicat es captura i s'emmagatzema a la sol·licitud d'auditoria.
Errors
{
"error": {
"message": "line 2 url must match batch endpoint /v1/responses",
"type": "invalid_request_error",
"param": null,
"code": "invalid_batch_file"
}
}