Aggiornamento client OpenAI per Delphi

· Funzionalità

sgcWebSockets 2026.4.0 introduce una grande estensione dell'integrazione con l'API OpenAI, portando il supporto completo per la nuova Responses API (sostituto ufficiale dell'API Assistants deprecata), Audio Speech text-to-speech, la gestione dei Fine-Tuning Jobs, la Batch API per l'elaborazione bulk asincrona, la Uploads API per la gestione di file di grandi dimensioni e Chat Completions modernizzate con supporto al tool calling e all'output strutturato. Questo articolo copre ogni nuovo metodo, i suoi parametri ed esempi pratici di codice Delphi.

Indice

  1. Responses API (sostituisce Assistants)
  2. Audio Speech (text-to-speech)
  3. Fine-Tuning Jobs
  4. Aggiornamenti Chat Completions
  5. Batch API
  6. Uploads API
Nota: L'API OpenAI Assistants e' stata deprecata ed e' programmata per il sunset il 2026-08-26. La nuova Responses API e' il suo sostituto ufficiale. Se stai attualmente usando l'API Assistants tramite sgcWebSockets, dovresti iniziare a migrare il tuo codice verso la Responses API trattata in questo articolo. La Responses API offre un'interfaccia piu' semplice e flessibile con capability integrate di tool use, file search e web search.

1. Responses API (sostituisce Assistants)

La Responses API e' l'aggiunta piu' significativa di questa release. Sostituisce la deprecata API Assistants con un' interfaccia stateless snella esposta tramite l'endpoint /responses. Tutti i metodi sono disponibili sul componente TsgcHTTP_API_OpenAI. A differenza di Assistants, ogni chiamata alla Responses API e' un singolo round-trip che puo' includere definizioni di tool, file search, web search e output strutturato — tutto in un'unica richiesta.

Metodi

Metodo Descrizione Endpoint
CreateResponse Crea una nuova response del modello. Accetta un model identifier e un input testuale (o un array di input strutturato). Restituisce l'output generato dal modello, incluse eventuali tool call. POST /responses
RetrieveResponse Recupera una response creata in precedenza tramite il suo ID univoco. Utile per polling o auditing delle response completate. GET /responses/{response_id}
DeleteResponse Elimina definitivamente una response memorizzata. Applicabile solo se in fase di creazione e' stato usato store: true. DELETE /responses/{response_id}
CancelResponse Annulla una response in corso. Applicabile alle response create in modalita' background. POST /responses/{response_id}/cancel
ListInputItems Elenca gli input item associati a una response. Utile per ispezionare il contesto della conversazione inviato al modello. GET /responses/{response_id}/input_items

Esempio Delphi

var
  OpenAI: TsgcHTTP_API_OpenAI;
  vResponse: String;
begin
  OpenAI := TsgcHTTP_API_OpenAI.Create(nil);
  Try
    OpenAI.OpenAIOptions.ApiKey := 'sk-your-api-key';
    // Create a simple response
    vResponse := OpenAI._CreateResponse('gpt-4o', 'Explain quantum computing');
    ShowMessage(vResponse);
    // Retrieve a previously created response
    vResponse := OpenAI._RetrieveResponse('resp_abc123');
    ShowMessage(vResponse);
    // Delete a stored response
    OpenAI._DeleteResponse('resp_abc123');
  Finally
    OpenAI.Free;
  end;
end;

2. Audio Speech (text-to-speech)

L'API Audio Speech fornisce capability di text-to-speech utilizzando i modelli TTS di OpenAI. Supporta due tier di modello: tts-1 per casi d'uso streaming a bassa latenza e tts-1-hd per output di qualita' superiore. Sono disponibili sei voci integrate: alloy, echo, fable, onyx, nova e shimmer. L'output puo' essere restituito nei formati mp3, opus, aac, flac, wav o pcm.

Metodi

Metodo Descrizione Endpoint
CreateSpeech Genera audio speech a partire dal testo di input usando il modello e la voce specificati. Restituisce il contenuto audio come stream binario. POST /audio/speech

Esempio Delphi

var
  OpenAI: TsgcHTTP_API_OpenAI;
  vAudioStream: TMemoryStream;
begin
  OpenAI := TsgcHTTP_API_OpenAI.Create(nil);
  Try
    OpenAI.OpenAIOptions.ApiKey := 'sk-your-api-key';
    // Generate speech using the 'alloy' voice
    oStream := TFileStream.Create('stream.mpeg', fmCreate or fmOpenRead);
    Try
      OpenAI._CreateSpeech('tts-1', 'Hello world', 'alloy', oStream);
    Finally
      oStream.Free;
    End;
    // Generate high-definition speech with 'nova' voice
    oStream := TFileStream.Create('stream.mpeg', fmCreate or fmOpenRead);
    Try
      OpenAI._CreateSpeech('tts-1-hd', 'Welcome to sgcWebSockets.', 'nova', oStream);
    Finally
      oStream.Free;
    End;
  Finally
    OpenAI.Free;
  end;
end;
Nota: Il modello tts-1 e' ottimizzato per applicazioni in tempo reale a bassa latenza, mentre tts-1-hd offre maggiore fedelta' audio al costo di una latenza leggermente maggiore. Scegli in base ai requisiti della tua applicazione.

3. Fine-Tuning Jobs

L'API Fine-Tuning Jobs sostituisce il deprecato /fine-tunes con il nuovo endpoint /fine_tuning/jobs. Fornisce gestione completa del ciclo di vita delle operazioni di fine-tuning: creazione di job, elenco dei job attivi e completati, recupero dei dettagli, annullamento di job in corso e streaming degli eventi di training. Quest'API supporta il fine-tuning di modelli come gpt-4o-mini-2024-07-18 usando i tuoi dati di training.

Metodi

Metodo Descrizione Endpoint
CreateFineTuningJob Crea un nuovo job di fine-tuning usando un base model specificato e un file di training caricato in precedenza. Restituisce l'oggetto job con il suo ID e stato. POST /fine_tuning/jobs
ListFineTuningJobs Elenca tutti i job di fine-tuning dell'organizzazione, con supporto alla paginazione. Restituisce i job ordinati per data di creazione. GET /fine_tuning/jobs
RetrieveFineTuningJob Recupera informazioni dettagliate su uno specifico job di fine-tuning, inclusi stato, iperparametri e file di risultato. GET /fine_tuning/jobs/{job_id}
CancelFineTuningJob Annulla un job di fine-tuning in corso. Lo stato del job diventa "cancelled" e non viene eseguito ulteriore training. POST /fine_tuning/jobs/{job_id}/cancel
ListFineTuningJobEvents Elenca gli eventi di stato di un job di fine-tuning, inclusi training loss, metriche di validazione e stato di completamento. Supporta la paginazione. GET /fine_tuning/jobs/{job_id}/events

Esempio Delphi

var
  OpenAI: TsgcHTTP_API_OpenAI;
  vResponse: String;
begin
  OpenAI := TsgcHTTP_API_OpenAI.Create(nil);
  Try
    OpenAI.OpenAIOptions.ApiKey := 'sk-your-api-key';
    // Create a fine-tuning job
    vResponse := OpenAI._CreateFineTuningJob('gpt-4o-mini-2024-07-18', 'file-abc123');
    ShowMessage(vResponse);
    // List all fine-tuning jobs
    vResponse := OpenAI._ListFineTuningJobs;
    ShowMessage(vResponse);
    // Retrieve a specific job
    vResponse := OpenAI._RetrieveFineTuningJob('ftjob-xyz789');
    ShowMessage(vResponse);
    // List events for a job
    vResponse := OpenAI._ListFineTuningJobEvents('ftjob-xyz789');
    ShowMessage(vResponse);
    // Cancel an in-progress job
    OpenAI._CancelFineTuningJob('ftjob-xyz789');
  Finally
    OpenAI.Free;
  end;
end;

4. Aggiornamenti Chat Completions

L'API Chat Completions in sgcWebSockets 2026.4.0 e' stata modernizzata con diverse nuove proprieta' di richiesta e campi di risposta. Queste aggiunte portano supporto completo a tool/function calling, output JSON strutturato, generazione deterministica tramite seed ed esecuzione parallela di tool.

Nuove proprieta' di richiesta

Proprietà Descrizione Endpoint
Tools Definisce un elenco di tool (funzioni) che il modello puo' chiamare. Ogni tool include nome, descrizione e JSON Schema dei parametri. POST /chat/completions
ToolChoice Controlla come il modello seleziona i tool. Opzioni: auto, none, required o uno specifico nome di funzione. POST /chat/completions
ResponseFormat Specifica il formato dell'output. Usa json_object per garantire output JSON o json_schema per output strutturato conforme a uno schema fornito. POST /chat/completions
Seed Un seed intero per il sampling deterministico. Usando lo stesso seed e gli stessi parametri, il modello tenta di produrre lo stesso output. POST /chat/completions
MaxCompletionTokens Imposta un limite superiore al numero di token che il modello puo' generare nella response. Sostituisce il vecchio parametro max_tokens. POST /chat/completions
ParallelToolCalls Quando abilitato, il modello puo' emettere piu' tool call in una singola response, permettendo l'esecuzione parallela lato client. POST /chat/completions
StreamOptions Configurazione per le response in streaming. Include opzioni come include_usage per ricevere le statistiche di token usage nell'ultimo chunk streamato. POST /chat/completions

Nuovi campi di risposta

Campo Descrizione Endpoint
ToolCalls Array di oggetti tool call nel messaggio assistant. Ognuno contiene ID, nome della funzione e argomenti per l'esecuzione lato client. POST /chat/completions
Refusal Contiene il messaggio di rifiuto del modello quando si rifiuta di soddisfare una richiesta per vincoli di sicurezza o di content policy. POST /chat/completions
SystemFingerprint Un fingerprint che rappresenta la configurazione di backend usata per generare la response. Utile per verificare l'output deterministico quando usi Seed. POST /chat/completions

Esempio Delphi

var
  OpenAI: TsgcHTTP_API_OpenAI;
  vResponse: String;
begin
  OpenAI := TsgcHTTP_API_OpenAI.Create(nil);
  Try
    OpenAI.OpenAIOptions.ApiKey := 'sk-your-api-key';
    // Configure Chat Completions with new properties
    OpenAI.ChatCompletions.Model := 'gpt-4o';
    OpenAI.ChatCompletions.MaxCompletionTokens := 1024;
    OpenAI.ChatCompletions.Seed := 42;
    OpenAI.ChatCompletions.ParallelToolCalls := True;
    OpenAI.ChatCompletions.ResponseFormat := 'json_object';
    // Add a user message and create the completion
    OpenAI.ChatCompletions.AddMessage('user', 'List 3 benefits of Delphi in JSON format.');
    vResponse := OpenAI._CreateChatCompletion;
    ShowMessage(vResponse);
  Finally
    OpenAI.Free;
  end;
end;

5. Batch API

L'API Batch permette di inviare grandi gruppi di richieste API per elaborazione asincrona. E' ideale per carichi di lavoro che non richiedono risposte immediate, come classificazione bulk, generazione di embedding o content moderation su larga scala. Le richieste batch si completano in genere entro 24 ore e offrono uno sconto del 50% rispetto alle chiamate API sincrone. Tutti i metodi batch sono disponibili sul componente TsgcHTTP_API_OpenAI tramite l' endpoint /batches.

Metodi

Metodo Descrizione Endpoint
CreateBatch Crea un nuovo job batch a partire da un file JSONL caricato in precedenza contenente richieste API. Richiede l'ID del file di input e l'endpoint target. POST /batches
RetrieveBatch Recupera lo stato corrente e i dettagli di un job batch, inclusi i conteggi di avanzamento e i riferimenti ai file di output. GET /batches/{batch_id}
ListBatches Elenca tutti i job batch dell'organizzazione. Supporta la paginazione tramite i parametri after e limit. GET /batches
CancelBatch Annulla un job batch in corso. Le richieste gia' completate all'interno del batch non vengono influenzate. POST /batches/{batch_id}/cancel

Esempio Delphi

var
  OpenAI: TsgcHTTP_API_OpenAI;
  vResponse: String;
begin
  OpenAI := TsgcHTTP_API_OpenAI.Create(nil);
  Try
    OpenAI.OpenAIOptions.ApiKey := 'sk-your-api-key';
    // Create a batch job targeting chat completions
    vResponse := OpenAI._CreateBatch('file-abc123', '/v1/chat/completions');
    ShowMessage(vResponse);
    // Check batch status
    vResponse := OpenAI._RetrieveBatch('batch_xyz789');
    ShowMessage(vResponse);
    // List all batches
    vResponse := OpenAI._ListBatches;
    ShowMessage(vResponse);
    // Cancel a batch if needed
    OpenAI._CancelBatch('batch_xyz789');
  Finally
    OpenAI.Free;
  end;
end;
Nota: Il file di input per CreateBatch deve essere un file JSONL caricato tramite la Files API con purpose batch. Ogni riga del file rappresenta una singola richiesta API con ID custom, metodo, URL e body.

6. Uploads API

L'API Uploads abilita il caricamento di file di grandi dimensioni in piu' parti, fondamentale quando lavori con file che superano il limite di upload in singola richiesta (in genere 512 MB). Il workflow prevede la creazione di una sessione di upload, l'aggiunta delle parti in sequenza e infine il completamento dell'upload per ottenere un oggetto File utilizzabile con altri endpoint API. Tutti i metodi sono disponibili sul componente TsgcHTTP_API_OpenAI tramite l' endpoint /uploads.

Metodi

Metodo Descrizione Endpoint
CreateUpload Avvia una nuova sessione di upload multipart. Richiede nome del file, purpose, conteggio totale dei byte e tipo MIME. Restituisce un oggetto upload con ID univoco. POST /uploads
AddUploadPart Aggiunge un chunk di dati a un upload in corso. Le parti devono essere aggiunte in sequenza e ogni parte restituisce un part ID necessario per il completamento. POST /uploads/{upload_id}/parts
CompleteUpload Completa l'upload multipart fornendo l'elenco ordinato dei part ID. Restituisce l'oggetto File finale utilizzabile con altre API. POST /uploads/{upload_id}/complete
CancelUpload Annulla una sessione di upload in corso. Tutte le parti gia' caricate vengono scartate e l'upload ID diventa non valido. POST /uploads/{upload_id}/cancel

Esempio Delphi

var
  OpenAI: TsgcHTTP_API_OpenAI;
  vUploadResponse: String;
  vPartResponse: String;
  vCompleteResponse: String;
begin
  OpenAI := TsgcHTTP_API_OpenAI.Create(nil);
  Try
    OpenAI.OpenAIOptions.ApiKey := 'sk-your-api-key';
    // Step 1: Create an upload session
    vUploadResponse := OpenAI._CreateUpload(
      'training_data.jsonl', 'fine-tune', 104857600, 'application/jsonl');
    ShowMessage(vUploadResponse);
    // Step 2: Add file parts
    vPartResponse := OpenAI._AddUploadPart('upload_abc123', 'C:\data\part1.jsonl');
    ShowMessage(vPartResponse);
    vPartResponse := OpenAI._AddUploadPart('upload_abc123', 'C:\data\part2.jsonl');
    ShowMessage(vPartResponse);
    // Step 3: Complete the upload
    vCompleteResponse := OpenAI._CompleteUpload('upload_abc123',
      '["part_def456", "part_ghi789"]');
    ShowMessage(vCompleteResponse);
  Finally
    OpenAI.Free;
  end;
end;
Nota: Le sessioni di upload scadono dopo un'ora di inattivita'. Ogni parte deve essere di almeno 5 MB (eccetto l' ultima parte) e le parti devono essere aggiunte nell'ordine in cui devono essere concatenate. La dimensione massima totale dell'upload e' 8 GB.