Mise à jour du client OpenAI pour Delphi

· Fonctionnalités

sgcWebSockets 2026.4.0 introduit une expansion majeure de l'intégration de l'API OpenAI, avec une prise en charge complète de la nouvelle Responses API (le remplacement officiel de l'Assistants API dépréciée), Audio Speech text-to-speech, la gestion des Fine-Tuning Jobs, la Batch API pour le traitement en masse asynchrone, la Uploads API pour les fichiers volumineux, et des Chat Completions modernisées avec la prise en charge du tool calling et de la sortie structurée. Cet article couvre chaque nouvelle méthode, ses paramètres, et inclut des exemples de code Delphi pratiques.

Table des matières

  1. Responses API (remplace Assistants)
  2. Audio Speech (text-to-speech)
  3. Fine-Tuning Jobs
  4. Mises à jour de Chat Completions
  5. Batch API
  6. Uploads API
Note : l'API OpenAI Assistants est dépréciée et sa suppression est prévue pour le 2026-08-26. La nouvelle Responses API est son remplacement officiel. Si tu utilises actuellement l'API Assistants via sgcWebSockets, tu devrais commencer à migrer ton code vers la Responses API couverte dans cet article. La Responses API offre une interface plus simple et plus flexible avec des capacités intégrées d'usage d'outils, de recherche dans les fichiers et de recherche web.

1. Responses API (remplace Assistants)

La Responses API est l'ajout le plus important de cette version. Elle remplace l'Assistants API dépréciée par une interface simplifiée et sans état exposée via l'endpoint /responses. Toutes les méthodes sont disponibles sur le composant TsgcHTTP_API_OpenAI. Contrairement à Assistants, chaque appel à la Responses API est un aller-retour unique qui peut inclure des définitions d'outils, file search, web search et sortie structurée — le tout en une seule requête.

Méthodes

Méthode Description Endpoint
CreateResponse Crée une nouvelle réponse du modèle. Accepte un identifiant de modèle et un texte d'entrée (ou un tableau d'entrées structurées). Renvoie la sortie générée par le modèle, y compris les éventuels tool calls. POST /responses
RetrieveResponse Récupère une réponse créée précédemment par son ID unique. Utile pour le polling ou l'audit de réponses terminées. GET /responses/{response_id}
DeleteResponse Supprime définitivement une réponse stockée. Applicable uniquement lorsque store: true a été utilisé lors de la création. DELETE /responses/{response_id}
CancelResponse Annule une réponse en cours. Applicable aux réponses créées en mode background. POST /responses/{response_id}/cancel
ListInputItems Liste les éléments d'entrée associés à une réponse. Utile pour inspecter le contexte de conversation envoyé au modèle. GET /responses/{response_id}/input_items

Exemple Delphi

var
  OpenAI: TsgcHTTP_API_OpenAI;
  vResponse: String;
begin
  OpenAI := TsgcHTTP_API_OpenAI.Create(nil);
  Try
    OpenAI.OpenAIOptions.ApiKey := 'sk-your-api-key';
    // Créer une réponse simple
    vResponse := OpenAI._CreateResponse('gpt-4o', 'Explain quantum computing');
    ShowMessage(vResponse);
    // Récupérer une réponse précédemment créée
    vResponse := OpenAI._RetrieveResponse('resp_abc123');
    ShowMessage(vResponse);
    // Supprimer une réponse stockée
    OpenAI._DeleteResponse('resp_abc123');
  Finally
    OpenAI.Free;
  end;
end;

2. Audio Speech (text-to-speech)

L'API Audio Speech fournit des capacités de text-to-speech en utilisant les modèles TTS d'OpenAI. Elle prend en charge deux niveaux de modèles : tts-1 pour les cas d'usage de streaming à faible latence et tts-1-hd pour une sortie de meilleure qualité. Six voix intégrées sont disponibles : alloy, echo, fable, onyx, nova et shimmer. La sortie peut être renvoyée au format mp3, opus, aac, flac, wav ou pcm.

Methods

Method Description Endpoint
CreateSpeech Génère un audio de synthèse vocale à partir du texte d'entrée fourni en utilisant le modèle et la voix spécifiés. Renvoie le contenu audio sous forme de flux binaire. POST /audio/speech

Delphi Example

var
  OpenAI: TsgcHTTP_API_OpenAI;
  vAudioStream: TMemoryStream;
begin
  OpenAI := TsgcHTTP_API_OpenAI.Create(nil);
  Try
    OpenAI.OpenAIOptions.ApiKey := 'sk-your-api-key';
    // Générer la synthèse vocale avec la voix 'alloy'
    oStream := TFileStream.Create('stream.mpeg', fmCreate or fmOpenRead);
    Try
      OpenAI._CreateSpeech('tts-1', 'Hello world', 'alloy', oStream);
    Finally
      oStream.Free;
    End;
    // Générer la synthèse vocale haute définition avec la voix 'nova'
    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;
Note : le modèle tts-1 est optimisé pour les applications temps réel à faible latence, tandis que tts-1-hd offre une meilleure fidélité audio au prix d'une latence légèrement accrue. Choisis en fonction des besoins de ton application.

3. Fine-Tuning Jobs

L'API Fine-Tuning Jobs remplace l'ancien endpoint /fine-tunes par le nouvel endpoint /fine_tuning/jobs. Elle fournit une gestion complète du cycle de vie des opérations de fine-tuning : création de tâches, liste des tâches actives et terminées, récupération de détails, annulation de tâches en cours et streaming des événements d'entraînement. Cette API prend en charge le fine-tuning de modèles comme gpt-4o-mini-2024-07-18 avec tes propres données d'entraînement.

Methods

Method Description Endpoint
CreateFineTuningJob Crée une nouvelle tâche de fine-tuning en utilisant un modèle de base spécifié et un fichier d'entraînement précédemment téléversé. Renvoie l'objet job avec son ID et son statut. POST /fine_tuning/jobs
ListFineTuningJobs Liste toutes les tâches de fine-tuning de l'organisation, avec prise en charge de la pagination. Renvoie les jobs triés par date de création. GET /fine_tuning/jobs
RetrieveFineTuningJob Récupère des informations détaillées sur une tâche de fine-tuning spécifique, dont le statut, les hyperparamètres et les fichiers de résultat. GET /fine_tuning/jobs/{job_id}
CancelFineTuningJob Annule une tâche de fine-tuning en cours. Le statut de la tâche passe à « cancelled » et l'entraînement s'arrête. POST /fine_tuning/jobs/{job_id}/cancel
ListFineTuningJobEvents Liste les événements de statut d'une tâche de fine-tuning, dont la perte d'entraînement, les métriques de validation et le statut de fin. Prend en charge la pagination. GET /fine_tuning/jobs/{job_id}/events

Delphi Example

var
  OpenAI: TsgcHTTP_API_OpenAI;
  vResponse: String;
begin
  OpenAI := TsgcHTTP_API_OpenAI.Create(nil);
  Try
    OpenAI.OpenAIOptions.ApiKey := 'sk-your-api-key';
    // Créer une tâche de fine-tuning
    vResponse := OpenAI._CreateFineTuningJob('gpt-4o-mini-2024-07-18', 'file-abc123');
    ShowMessage(vResponse);
    // Lister toutes les tâches de fine-tuning
    vResponse := OpenAI._ListFineTuningJobs;
    ShowMessage(vResponse);
    // Récupérer une tâche spécifique
    vResponse := OpenAI._RetrieveFineTuningJob('ftjob-xyz789');
    ShowMessage(vResponse);
    // Lister les événements d'une tâche
    vResponse := OpenAI._ListFineTuningJobEvents('ftjob-xyz789');
    ShowMessage(vResponse);
    // Annuler une tâche en cours
    OpenAI._CancelFineTuningJob('ftjob-xyz789');
  Finally
    OpenAI.Free;
  end;
end;

4. Mises à jour de Chat Completions

L'API Chat Completions de sgcWebSockets 2026.4.0 a été modernisée avec plusieurs nouvelles propriétés de requête et champs de réponse. Ces ajouts apportent une prise en charge complète du tool/function calling, de la sortie JSON structurée, de la génération déterministe via des seeds et de l'exécution parallèle d'outils.

Nouvelles propriétés de requête

Propriété Description Endpoint
Tools Définit une liste d'outils (fonctions) que le modèle peut appeler. Chaque outil inclut un nom, une description et un JSON Schema pour ses paramètres. POST /chat/completions
ToolChoice Contrôle la façon dont le modèle sélectionne les outils. Options : auto, none, required ou un nom de fonction spécifique. POST /chat/completions
ResponseFormat Spécifie le format de sortie. Utilise json_object pour une sortie JSON garantie ou json_schema pour une sortie structurée conforme à un schéma fourni. POST /chat/completions
Seed Une seed entière pour un échantillonnage déterministe. Quand la même seed et les mêmes paramètres sont utilisés, le modèle tente de produire la même sortie. POST /chat/completions
MaxCompletionTokens Définit une limite supérieure sur le nombre de jetons que le modèle peut générer dans la réponse. Remplace l'ancien paramètre max_tokens. POST /chat/completions
ParallelToolCalls Lorsque cette option est activée, le modèle peut émettre plusieurs tool calls dans une seule réponse, ce qui permet une exécution parallèle côté client. POST /chat/completions
StreamOptions Configuration pour les réponses en streaming. Inclut des options comme include_usage pour recevoir les statistiques d'utilisation de jetons dans le dernier chunk diffusé. POST /chat/completions

Nouveaux champs de réponse

Champ Description Endpoint
ToolCalls Tableau d'objets tool call dans le message de l'assistant. Chacun contient un ID, un nom de fonction et des arguments pour l'exécution côté client. POST /chat/completions
Refusal Contient le message de refus du modèle lorsqu'il décline une requête en raison de contraintes de sécurité ou de politique de contenu. POST /chat/completions
SystemFingerprint Une empreinte représentant la configuration backend utilisée pour générer la réponse. Utile pour vérifier la sortie déterministe avec Seed. POST /chat/completions

Delphi Example

var
  OpenAI: TsgcHTTP_API_OpenAI;
  vResponse: String;
begin
  OpenAI := TsgcHTTP_API_OpenAI.Create(nil);
  Try
    OpenAI.OpenAIOptions.ApiKey := 'sk-your-api-key';
    // Configurer Chat Completions avec les nouvelles propriétés
    OpenAI.ChatCompletions.Model := 'gpt-4o';
    OpenAI.ChatCompletions.MaxCompletionTokens := 1024;
    OpenAI.ChatCompletions.Seed := 42;
    OpenAI.ChatCompletions.ParallelToolCalls := True;
    OpenAI.ChatCompletions.ResponseFormat := 'json_object';
    // Ajouter un message utilisateur et créer la 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

La Batch API te permet d'envoyer de grands groupes de requêtes API pour un traitement asynchrone. C'est idéal pour les charges de travail qui ne nécessitent pas de réponses immédiates, comme la classification en masse, la génération d'embeddings ou la modération de contenu à grande échelle. Les requêtes batch sont généralement terminées en moins de 24 heures et offrent une réduction de coût de 50 % par rapport aux appels API synchrones. Toutes les méthodes batch sont disponibles sur le composant TsgcHTTP_API_OpenAI via l'endpoint /batches.

Methods

Method Description Endpoint
CreateBatch Crée une nouvelle tâche batch à partir d'un fichier JSONL précédemment téléversé contenant des requêtes API. Nécessite l'ID du fichier d'entrée et l'endpoint cible. POST /batches
RetrieveBatch Récupère le statut actuel et les détails d'une tâche batch, dont les compteurs de progression et les références de fichiers de sortie. GET /batches/{batch_id}
ListBatches Liste toutes les tâches batch de l'organisation. Prend en charge la pagination via les paramètres after et limit. GET /batches
CancelBatch Annule une tâche batch en cours. Les requêtes déjà terminées dans le batch ne sont pas affectées. POST /batches/{batch_id}/cancel

Delphi Example

var
  OpenAI: TsgcHTTP_API_OpenAI;
  vResponse: String;
begin
  OpenAI := TsgcHTTP_API_OpenAI.Create(nil);
  Try
    OpenAI.OpenAIOptions.ApiKey := 'sk-your-api-key';
    // Créer une tâche batch ciblant chat completions
    vResponse := OpenAI._CreateBatch('file-abc123', '/v1/chat/completions');
    ShowMessage(vResponse);
    // Vérifier le statut du batch
    vResponse := OpenAI._RetrieveBatch('batch_xyz789');
    ShowMessage(vResponse);
    // Lister tous les batches
    vResponse := OpenAI._ListBatches;
    ShowMessage(vResponse);
    // Annuler un batch si nécessaire
    OpenAI._CancelBatch('batch_xyz789');
  Finally
    OpenAI.Free;
  end;
end;
Note : le fichier d'entrée pour CreateBatch doit être un fichier JSONL téléversé via la Files API avec le purpose batch. Chaque ligne du fichier représente une seule requête API avec un ID personnalisé, une méthode, une URL et un corps.

6. Uploads API

La Uploads API permet de téléverser des fichiers volumineux en plusieurs parties, ce qui est essentiel pour travailler avec des fichiers qui dépassent la limite d'un téléversement en une seule requête (typiquement 512 Mo). Le workflow consiste à créer une session de téléversement, à ajouter les parties séquentiellement, puis à compléter le téléversement pour recevoir un objet File utilisable avec les autres endpoints de l'API. Toutes les méthodes sont disponibles sur le composant TsgcHTTP_API_OpenAI via l'endpoint /uploads.

Methods

Method Description Endpoint
CreateUpload Initie une nouvelle session de téléversement multipartite. Nécessite le nom de fichier, le purpose, le nombre total d'octets et le type MIME. Renvoie un objet upload avec un ID unique. POST /uploads
AddUploadPart Ajoute un fragment de données de fichier à un téléversement en cours. Les parties doivent être ajoutées séquentiellement et chaque partie renvoie un ID de partie nécessaire à la finalisation. POST /uploads/{upload_id}/parts
CompleteUpload Complète le téléversement multipartite en fournissant la liste ordonnée d'IDs de parties. Renvoie l'objet final File utilisable avec les autres API. POST /uploads/{upload_id}/complete
CancelUpload Annule une session de téléversement en cours. Toutes les parties téléversées sont rejetées et l'ID d'upload devient invalide. POST /uploads/{upload_id}/cancel

Delphi Example

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';
    // Étape 1 : créer une session de téléversement
    vUploadResponse := OpenAI._CreateUpload(
      'training_data.jsonl', 'fine-tune', 104857600, 'application/jsonl');
    ShowMessage(vUploadResponse);
    // Étape 2 : ajouter les parties du fichier
    vPartResponse := OpenAI._AddUploadPart('upload_abc123', 'C:\data\part1.jsonl');
    ShowMessage(vPartResponse);
    vPartResponse := OpenAI._AddUploadPart('upload_abc123', 'C:\data\part2.jsonl');
    ShowMessage(vPartResponse);
    // Étape 3 : compléter le téléversement
    vCompleteResponse := OpenAI._CompleteUpload('upload_abc123',
      '["part_def456", "part_ghi789"]');
    ShowMessage(vCompleteResponse);
  Finally
    OpenAI.Free;
  end;
end;
Note : les sessions de téléversement expirent après une heure d'inactivité. Chaque partie doit faire au moins 5 Mo (sauf la dernière partie), et les parties doivent être ajoutées dans l'ordre dans lequel elles seront concaténées. La taille totale maximale du téléversement est de 8 Go.