Actualización del cliente OpenAI en Delphi

· Características

sgcWebSockets 2026.4.0 introduce una expansión importante de la integración con la API de OpenAI, ofreciendo soporte completo para la nueva Responses API (el reemplazo oficial de la Assistants API obsoleta), Audio Speech text-to-speech, gestión de Fine-Tuning Jobs, la Batch API para procesamiento masivo asíncrono, la Uploads API para gestionar archivos grandes, y unas Chat Completions modernizadas con soporte para tool calling y structured output. Este artículo cubre cada nuevo método, sus parámetros y ejemplos prácticos de código Delphi.

Tabla de contenidos

  1. Responses API (reemplaza a Assistants)
  2. Audio Speech (text-to-speech)
  3. Fine-Tuning Jobs
  4. Novedades de Chat Completions
  5. Batch API
  6. Uploads API
Nota: la OpenAI Assistants API se ha marcado como obsoleta y su retirada está prevista para el 2026-08-26. La nueva Responses API es su reemplazo oficial. Si actualmente usas la Assistants API a través de sgcWebSockets, deberías empezar a migrar tu código a la Responses API que se cubre en este artículo. La Responses API ofrece una interfaz más sencilla y flexible con capacidades integradas de tool use, file search y web search.

1. Responses API (reemplaza a Assistants)

La Responses API es la incorporación más importante de esta versión. Sustituye a la Assistants API obsoleta por una interfaz simplificada y sin estado expuesta a través del endpoint /responses. Todos los métodos están disponibles en el componente TsgcHTTP_API_OpenAI. A diferencia de Assistants, cada llamada a la Responses API es un único round-trip que puede incluir definiciones de tools, file search, web search y structured output, todo en una sola petición.

Métodos

Método Descripción Endpoint
CreateResponse Crea una nueva respuesta del modelo. Acepta un identificador de modelo y texto de entrada (o un array de entrada estructurada). Devuelve la salida generada por el modelo, incluidas las posibles tool calls. POST /responses
RetrieveResponse Recupera una respuesta creada previamente a partir de su ID único. Útil para hacer polling o auditar respuestas completadas. GET /responses/{response_id}
DeleteResponse Elimina permanentemente una respuesta almacenada. Solo aplicable cuando se usó store: true al crearla. DELETE /responses/{response_id}
CancelResponse Cancela una respuesta en curso. Aplicable a respuestas creadas en modo background. POST /responses/{response_id}/cancel
ListInputItems Lista los input items asociados a una respuesta. Útil para inspeccionar el contexto de la conversación que se envió al modelo. GET /responses/{response_id}/input_items

Ejemplo en 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)

La Audio Speech API ofrece capacidades de text-to-speech usando los modelos TTS de OpenAI. Admite dos niveles de modelo: tts-1 para casos de uso de streaming de baja latencia y tts-1-hd para una salida de mayor calidad. Hay seis voces integradas disponibles: alloy, echo, fable, onyx, nova y shimmer. La salida se puede devolver en formato mp3, opus, aac, flac, wav o pcm.

Métodos

Método Descripción Endpoint
CreateSpeech Genera audio de voz a partir del texto de entrada utilizando el modelo y la voz especificados. Devuelve el contenido de audio como un stream binario. POST /audio/speech

Ejemplo en 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: el modelo tts-1 está optimizado para aplicaciones en tiempo real y de baja latencia, mientras que tts-1-hd ofrece mayor fidelidad de audio a costa de un leve aumento de latencia. Elige en función de los requisitos de tu aplicación.

3. Fine-Tuning Jobs

La Fine-Tuning Jobs API sustituye el endpoint obsoleto /fine-tunes por el nuevo endpoint /fine_tuning/jobs. Ofrece una gestión completa del ciclo de vida de las operaciones de fine-tuning: crear trabajos, listar trabajos activos y completados, recuperar detalles, cancelar trabajos en curso y recibir eventos de entrenamiento en streaming. Esta API admite fine-tuning de modelos como gpt-4o-mini-2024-07-18 usando tus propios datos de entrenamiento.

Métodos

Método Descripción Endpoint
CreateFineTuningJob Crea un nuevo trabajo de fine-tuning usando el modelo base especificado y un archivo de entrenamiento subido previamente. Devuelve el objeto job con su ID y estado. POST /fine_tuning/jobs
ListFineTuningJobs Lista todos los trabajos de fine-tuning de la organización, con soporte de paginación. Devuelve los trabajos ordenados por fecha de creación. GET /fine_tuning/jobs
RetrieveFineTuningJob Recupera información detallada sobre un trabajo de fine-tuning concreto, incluyendo estado, hiperparámetros y archivos de resultados. GET /fine_tuning/jobs/{job_id}
CancelFineTuningJob Cancela un trabajo de fine-tuning en curso. El estado del trabajo cambia a "cancelled" y no se realiza más entrenamiento. POST /fine_tuning/jobs/{job_id}/cancel
ListFineTuningJobEvents Lista los eventos de estado de un trabajo de fine-tuning, incluyendo training loss, métricas de validación y estado de finalización. Admite paginación. GET /fine_tuning/jobs/{job_id}/events

Ejemplo en 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. Novedades de Chat Completions

La API de Chat Completions en sgcWebSockets 2026.4.0 se ha modernizado con varias nuevas propiedades de petición y campos de respuesta. Estas incorporaciones aportan soporte completo para tool/function calling, salida JSON estructurada, generación determinista mediante seeds y ejecución de tools en paralelo.

Nuevas propiedades de la petición

Propiedad Descripción Endpoint
Tools Define una lista de tools (funciones) que el modelo puede invocar. Cada tool incluye un nombre, una descripción y el JSON Schema de sus parámetros. POST /chat/completions
ToolChoice Controla cómo selecciona el modelo las tools. Opciones: auto, none, required o el nombre de una función concreta. POST /chat/completions
ResponseFormat Especifica el formato de salida. Usa json_object para garantizar una salida JSON o json_schema para una salida estructurada conforme a un schema proporcionado. POST /chat/completions
Seed Semilla entera para un muestreo determinista. Cuando se usan la misma semilla y los mismos parámetros, el modelo intenta producir la misma salida. POST /chat/completions
MaxCompletionTokens Establece un límite superior al número de tokens que el modelo puede generar en la respuesta. Sustituye al antiguo parámetro max_tokens. POST /chat/completions
ParallelToolCalls Cuando está activado, el modelo puede emitir varias tool calls en una sola respuesta, permitiendo ejecución en paralelo en el lado del cliente. POST /chat/completions
StreamOptions Configuración para respuestas en streaming. Incluye opciones como include_usage para recibir estadísticas de uso de tokens en el último chunk del stream. POST /chat/completions

Nuevos campos de la respuesta

Campo Descripción Endpoint
ToolCalls Array de objetos tool call en el mensaje del assistant. Cada uno contiene un ID, el nombre de la función y los argumentos para ejecutarla en el cliente. POST /chat/completions
Refusal Contiene el mensaje de rechazo del modelo cuando declina cumplir una petición por motivos de seguridad o de política de contenido. POST /chat/completions
SystemFingerprint Una huella digital que representa la configuración del backend usada para generar la respuesta. Útil para verificar la salida determinista al usar Seed. POST /chat/completions

Ejemplo en 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

La Batch API te permite enviar grandes grupos de peticiones a la API para procesamiento asíncrono. Es ideal para cargas de trabajo que no requieren respuestas inmediatas, como clasificación masiva, generación de embeddings o moderación de contenido a gran escala. Las peticiones batch suelen completarse en 24 horas y ofrecen un 50 % de reducción de coste frente a las llamadas síncronas a la API. Todos los métodos batch están disponibles en el componente TsgcHTTP_API_OpenAI a través del endpoint /batches.

Métodos

Método Descripción Endpoint
CreateBatch Crea un nuevo trabajo batch a partir de un archivo JSONL subido previamente que contiene peticiones a la API. Requiere el ID del archivo de entrada y el endpoint destino. POST /batches
RetrieveBatch Recupera el estado actual y los detalles de un trabajo batch, incluyendo recuentos de progreso y referencias a los archivos de salida. GET /batches/{batch_id}
ListBatches Lista todos los trabajos batch de la organización. Admite paginación mediante los parámetros after y limit. GET /batches
CancelBatch Cancela un trabajo batch en curso. Las peticiones del batch que ya se hayan completado no se ven afectadas. POST /batches/{batch_id}/cancel

Ejemplo en 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: el archivo de entrada para CreateBatch debe ser un archivo JSONL subido a través de la Files API con propósito batch. Cada línea del archivo representa una petición individual a la API con un ID personalizado, método, URL y body.

6. Uploads API

La Uploads API permite subir archivos grandes en varias partes, lo que es imprescindible cuando trabajas con archivos que superan el límite de subida en una sola petición (normalmente 512 MB). El flujo consiste en crear una sesión de subida, añadir partes de forma secuencial y, después, completar la subida para recibir un objeto File que puede usarse con otros endpoints de la API. Todos los métodos están disponibles en el componente TsgcHTTP_API_OpenAI a través del endpoint /uploads.

Métodos

Método Descripción Endpoint
CreateUpload Inicia una nueva sesión de subida multipart. Requiere el nombre de archivo, el propósito, el número total de bytes y el tipo MIME. Devuelve un objeto upload con un ID único. POST /uploads
AddUploadPart Añade un trozo de datos a una subida en curso. Las partes deben añadirse de forma secuencial y cada parte devuelve un part ID necesario para la finalización. POST /uploads/{upload_id}/parts
CompleteUpload Completa la subida multipart proporcionando la lista ordenada de part IDs. Devuelve el objeto File final, que se puede usar con otras APIs. POST /uploads/{upload_id}/complete
CancelUpload Cancela una sesión de subida en curso. Las partes ya subidas se descartan y el upload ID queda invalidado. POST /uploads/{upload_id}/cancel

Ejemplo en 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: las sesiones de subida expiran tras una hora de inactividad. Cada parte debería tener al menos 5 MB (excepto la última), y las partes deben añadirse en el orden en el que se deban concatenar. El tamaño total máximo de subida es de 8 GB.