B2BB2B LLM

API batch compatibile con OpenAI

Carica file di input batch JSONL ed elabora batch compatibili con OpenAI tramite la coda durevole di Model Gate.

API batch compatibile con OpenAI

Model Gate implementa il flusso di lavoro OpenAI Files + Batch su https://api.model-gate.com/v1. Questo è un livello di compatibilità: ogni elemento JSONL viene eseguito attraverso il normale percorso di inferenza di Model Gate. Model Gate lo fa non inviare un batch OpenAI nativo del provider upstream.

Gli endpoint di lettura/controllo di file/batch sono un piano di controllo: una credenziale API attiva altrimenti valida può elencare/leggere/scaricare/annullare/eliminare risorse esistenti anche quando il saldo dell'account è attualmente pari a zero o un limite di spesa reimpostabile è esaurito. Le operazioni di produzione dello storage sono diverse: POST /v1/files E POST /v1/batches richiedere una nuova ammissione di saldo positivo/spesa prima che Model Gate inserisca i dati di file/lavoro/articolo. Una chiave a saldo zero pertanto non può caricare JSONL o creare un nuovo archivio batch. Gli elementi batch effettivi continuano a ricontrollare l'ammissione al momento della richiesta del lavoratore e rimangono in coda se i fondi vengono successivamente esauriti. L'input JSONL viene letto in modo incrementale e convalidato/inserito riga per riga; Model Gate non conserva l'input completo di 200 MB più tutti i corpi della richiesta nella memoria del processo durante la creazione di un batch. Le quote di byte archiviati/file/processo attivo/elemento in coda per utente forniscono un limite indipendente di abuso del database.

Gli endpoint batch supportati in questa versione sono:

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

Ogni elemento eseguito è contrassegnato request_mode=batch, batch_protocol=openai, con il suo batch_job_public_id E custom_id.

1. Carica un file di input JSONL

Ogni riga non vuota contiene custom_id, method, url, E body. L'URL deve corrispondere all'endpoint a cui verrà fornito successivamente /v1/batches.

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

Richiesta

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

Risposta: 200

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

2. Crea il batch

completion_window deve essere 24h.

Richiesta

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

Risposta: 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. Recupera un batch

Richiesta

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

Risposta: completata

{
  "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. Scarica i risultati

Richiesta

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

Risposta: 200

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

Vengono scritti gli elementi non riusciti, annullati o scaduti error_file_id come registra JSONL con response:null e un error oggetto.

5. Elenca i lotti

limit il valore predefinito è 20 e deve provenire da 1 A 100. Utilizzo after per l'impaginazione del cursore.

Richiesta

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

Risposta: 200

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

Gli oggetti batch completati possono includere un aggregato usage oggetto quando la contabilità della richiesta Model Gate risolta è disponibile.

6. Annullare un batch

Annulla impedisce l'avvio degli elementi in coda; un elemento già in elaborazione potrebbe terminare.

Richiesta

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

Risposta: 200

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

7. Metadati dei file, elenco ed eliminazione

Recupera i metadati:

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
}

Elenca i file con facoltativo purpose, after, E order=asc|desc; limit il valore predefinito è 10000 e deve provenire da 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
}

Elimina un file senza riferimenti/compatibile scaduto:

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

Limiti e semantica del recupero

Model Gate accetta fino a 50.000 elementi JSONL e limita il file caricato a quelli configurati OPENAI_BATCH_MAX_FILE_BYTES valore (200 MiB per impostazione predefinita). Ogni singolo articolo del lotto deve corrispondere anche alla normalità di Model Gate MAX_REQUEST_BODY_BYTES limite. custom_id i valori devono essere univoci. Gli articoli batch non possono essere utilizzati stream:true o annidato async:true. I file JSONL di grandi dimensioni vengono mantenuti internamente come blocchi di database anziché come valore SQL di grandi dimensioni.

Il recupero dell'esecuzione lo è almeno una volta, non esattamente una volta. Se un lavoratore si ferma dopo che una richiesta upstream è stata accettata ma prima che il suo risultato venga registrato in modo permanente, un lease scaduto può causare un nuovo tentativo con lo stesso ID richiesta Model Gate. La liquidazione rimane idempotente per le righe di richiesta già completate, ma gli effetti collaterali/strumenti esterni avviati da un modello dovrebbero essere essi stessi idempotenti.

Ogni elemento JSONL viene ammesso immediatamente prima che un lavoratore lo richieda. Gli elementi altrimenti validi rimangono in coda mentre il saldo del conto corrente non è positivo o il limite di spesa reimpostabile della chiave/gruppo è già esaurito. Questo stato di attesa non consuma un tentativo né crea un record di errore; una ricarica successiva, un ripristino dell'utilizzo o un aumento del limite rendono automaticamente idonei gli articoli rimanenti. Model Gate non riserva un costo teorico massimo del lotto. Le voci già ammesse possono quindi essere saldate per intero anche quando il lavoro simultaneo rende il saldo finale negativo o produce un piccolo superamento del limite di spesa, dopodiché le nuove voci rimangono in coda finché il conto non torna ad essere idoneo.

Prezzi e contabilità

L'adattatore batch non utilizza l'esecuzione batch nativa del provider. Ogni articolo passa attraverso il normale instradamento e liquidazione del modello Model Gate, quindi riceve il modello di prezzo Coefficiente di prezzo della richiesta batch. Predefinito: 1.

Se il coefficiente è 0.5, un oggetto il cui costo normale di Portale Modello è 0.02 viene addebitato come 0.01. Il prezzo ufficiale di riferimento rimane invariato. Il coefficiente applicato viene istantaneamente registrato e archiviato nella richiesta di audit.

Errori

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