File e Upload
Crea, elenca, scarica ed elimina File persistenti, oppure assembla un File da parti di caricamento multiparte.
La Files API archivia file user_data, batch e
batch_output immutabili con ambito Account e restituisce ID file stabili anziché URL di
storage. Usa un ID file quando un’API accetta una risorsa file riutilizzabile e
usa l’endpoint del contenuto quando la tua applicazione ha bisogno dei byte esatti memorizzati.
Scegli un flusso di upload
- Usa
POST /v1/filesper creare un File da un’unica richiesta multipart. Un Fileuser_datacompletato può contenere fino a52,428,800byte. - Usa
POST /v1/filesconpurpose=batchper un input batch diretto fino a95,000,000byte. - Usa la Uploads API per inviare le Parti prima di comporre il File finale.
Ogni Parte può contenere fino a
67,108,864byte; un Fileuser_datacompletato è limitato a52,428,800byte e un Filebatchcompletato a209,715,200byte. Un Upload non terminato scade dopo un’ora. - I File attivi e le prenotazioni in corso condividono un limite di
archiviazione dell’Account pari a
5,368,709,120byte.
POST /api/v1/files è un flusso di caricamento temporaneo separato che restituisce un URL temporaneo. L’SDK files.create e la CLI runapi files create continuano a utilizzare tale flusso. Utilizzare files.createFile o files.create_file, oppure la CLI runapi files create-file, quando si necessita di un oggetto File persistente.
Autenticare una richiesta
File e Upload utilizzano una Chiave API standard di RunAPI. Inviala come token Bearer:
export RUNAPI_API_KEY="runapi_..."
Ogni File, Upload, Parte e richiesta di contenuto è limitata all’Account autenticato. Un ID di proprietà di un altro Account restituisce 404 senza rivelare se quella risorsa esiste.
Creare un File con un client compatibile
Punta un client compatibile con OpenAI all’URL base RunAPI /v1. Non
sono richiesti campi di richiesta specifici di RunAPI:
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["RUNAPI_API_KEY"],
base_url="https://runapi.ai/v1",
)
with open("knowledge.pdf", "rb") as source:
file = client.files.create(file=source, purpose="user_data")
metadata = client.files.retrieve(file.id)
client.files.content(file.id).write_to_file("knowledge-copy.pdf")
client.files.delete(file.id)
Il file restituito non contiene mai un identificatore di storage, un backend o un URL bearer.
Riferimento API
- La Persistent Files API descrive l’oggetto File e le operazioni di creazione, elenco, recupero, contenuto ed eliminazione.
- La Uploads API descrive l’oggetto Upload e le operazioni di creazione, aggiunta di parti, completamento e annullamento.
- La Batches API descrive la creazione, lo stato, l’elenco e l’annullamento dei Moderation Batch.
Esegui la Moderazione in un Batch
Crea un File di input JSONL con una richiesta di moderazione per riga. Ogni
riga utilizza la struttura Batch compatibile: custom_id, method, url impostato
su /v1/moderations e un body contenente il modello di moderazione e
l’input. Un File con purpose=batch può contenere fino a 50.000 richieste. La
funzionalità Batch accetta attualmente l’endpoint /v1/moderations con una
finestra di completamento 24h.
INPUT_FILE_ID=$(curl -sS https://runapi.ai/v1/files \
-H "Authorization: Bearer $RUNAPI_API_KEY" \
-F purpose=batch \
-F [email protected] | jq -r .id)
BATCH_ID=$(curl -sS https://runapi.ai/v1/batches \
-H "Authorization: Bearer $RUNAPI_API_KEY" \
-H "Content-Type: application/json" \
-d "$(jq -n --arg file "$INPUT_FILE_ID" '{input_file_id:$file,endpoint:"/v1/moderations",completion_window:"24h"}')" \
| jq -r .id)
curl -sS "https://runapi.ai/v1/batches/$BATCH_ID" \
-H "Authorization: Bearer $RUNAPI_API_KEY"
Usa GET /v1/batches per elencare i lavori, ripeti GET /v1/batches/{batch_id}
finché lo stato non è terminale, oppure chiama POST
/v1/batches/{batch_id}/cancel mentre è ancora in esecuzione. I JSONL di output
ed errore completati sono esposti come Files batch_output; recupera
i loro metadati con GET /v1/files/{file_id} e i byte esatti con GET
/v1/files/{file_id}/content.
Ciclo di vita del caricamento multiparte
Crea un Upload con il conteggio finale dei byte, il nome file, il tipo MIME e
purpose=user_data. Aggiungi una o più Parti, quindi passa i loro ID a
complete nell’ordine di composizione. Il completamento restituisce l’Upload con il
suo File terminato.
UPLOAD_ID=$(curl -sS https://runapi.ai/v1/uploads \
-H "Authorization: Bearer $RUNAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"bytes":1048576,"filename":"archive.bin","mime_type":"application/octet-stream","purpose":"user_data"}' \
| jq -r .id)
PART_ID=$(curl -sS "https://runapi.ai/v1/uploads/$UPLOAD_ID/parts" \
-H "Authorization: Bearer $RUNAPI_API_KEY" \
-F [email protected] | jq -r .id)
curl -sS "https://runapi.ai/v1/uploads/$UPLOAD_ID/complete" \
-H "Authorization: Bearer $RUNAPI_API_KEY" \
-H "Content-Type: application/json" \
-d "{\"part_ids\":[\"$PART_ID\"]}"
Annulla un Upload non completato con POST /v1/uploads/{upload_id}/cancel.
Ripetere lo stesso intento di completamento o annullamento è sicuro; un
completamento, annullamento o scadenza concorrente restituisce 409
upload_state_conflict quando un altro esito terminale ha già prevalso.
Risorse CLI e SDK
La CLI espone il ciclo di vita completo:
runapi files create-file knowledge.pdf
runapi files list --order desc
runapi files retrieve file_123
runapi files content file_123 --output knowledge-copy.pdf
runapi files delete file_123
runapi uploads create --bytes 1048576 --filename archive.bin --mime-type application/octet-stream
runapi uploads add-part upload_123 archive.part-01
runapi uploads complete upload_123 --part-id part_123
runapi uploads cancel upload_123
Ogni Provider Client espone files e uploads. JavaScript e PHP
usano createFile / deleteFile / addPart; Python e Ruby usano
create_file / delete_file / add_part; Go usa CreateFile /
DeleteFile / AddPart; Java usa createFile / deleteFile /
addPart. List, retrieve, content, create, complete e cancel seguono
la convenzione di denominazione normale di ciascun linguaggio. Consulta
SDKs per l’installazione dei pacchetti.
Comportamento del ciclo di vita
Il contenuto del File è immutabile. L’eliminazione di un File lo rimuove immediatamente dagli elenchi attivi e pianifica la pulizia dello storage. Il completamento dell’Upload compone le Parti solo nell’ordine fornito, e un completamento riuscito crea un File. Mantieni l’ordine originale degli ID delle Parti quando si ritenta una risposta di completamento incerta.