OpenAI Delphi Client Update

· Recursos

O sgcWebSockets 2026.4.0 introduz uma expansão significativa da integração com a API OpenAI, trazendo suporte completo para a nova Responses API (substituta oficial da deprecated Assistants API), Audio Speech texto-para-fala, gerenciamento de Fine-Tuning Jobs, a Batch API para processamento assíncrono em massa, a Uploads API para manipulação de arquivos grandes e Chat Completions modernizado com chamada de ferramentas e suporte a saída estruturada. Este artigo cobre todos os novos métodos, seus parâmetros e exemplos práticos em Delphi.

Sumário

  1. Responses API (substitui o Assistants)
  2. Audio Speech (texto-para-fala)
  3. Fine-Tuning Jobs
  4. Atualizações do Chat Completions
  5. Batch API
  6. Uploads API
Nota: A OpenAI Assistants API foi descontinuada e está programada para encerramento em 2026-08-26. A nova Responses API é sua substituta oficial. Se você estiver usando a Assistants API através do sgcWebSockets, deve começar a migrar seu código para a Responses API abordada neste artigo. A Responses API oferece uma interface mais simples e flexível com uso integrado de ferramentas, pesquisa de arquivos e capacidades de pesquisa na web.

1. Responses API (substitui o Assistants)

A Responses API é a adição mais significativa desta versão. Ela substitui a deprecated Assistants API por uma interface simplificada e sem estado exposta pelo endpoint /responses. Todos os métodos estão disponíveis no componente TsgcHTTP_API_OpenAI. Diferentemente do Assistants, cada chamada à Responses API é uma única ida e volta que pode incluir definições de ferramentas, pesquisa de arquivos, pesquisa na web e saída estruturada — tudo em uma única requisição.

Métodos

Método Descrição Endpoint
CreateResponse Cria uma nova resposta do modelo. Aceita um identificador de modelo e texto de entrada (ou array de entrada estruturado). Retorna a saída gerada pelo modelo, incluindo quaisquer chamadas de ferramentas. POST /responses
RetrieveResponse Recupera uma resposta criada anteriormente pelo seu ID único. Útil para polling ou auditoria de respostas concluídas. GET /responses/{response_id}
DeleteResponse Exclui permanentemente uma resposta armazenada. Aplicável somente quando store: true foi usado durante a criação. DELETE /responses/{response_id}
CancelResponse Cancela uma resposta em andamento. Aplicável a respostas criadas em modo background. POST /responses/{response_id}/cancel
ListInputItems Lista os itens de entrada associados a uma resposta. Útil para inspecionar o contexto de conversa enviado ao modelo. GET /responses/{response_id}/input_items

Delphi Example

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 (texto-para-fala)

A Audio Speech API fornece capacidades de texto-para-fala usando os modelos TTS da OpenAI. Suporta dois níveis de modelo: tts-1 para casos de uso de streaming com baixa latência e tts-1-hd para saída de maior qualidade. Seis vozes integradas estão disponíveis: alloy, echo, fable, onyx, nova e shimmer. A saída pode ser retornada nos formatos mp3, opus, aac, flac, wav ou pcm.

Métodos

Método Descrição Endpoint
CreateSpeech Gera áudio de fala a partir do texto de entrada fornecido usando o modelo e a voz especificados. Retorna o conteúdo de áudio como um stream binário. 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';
    // Generate speech usando o '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: O modelo tts-1 é otimizado para aplicações em tempo real com baixa latência, enquanto tts-1-hd oferece maior fidelidade de áudio ao custo de uma latência ligeiramente maior. Escolha de acordo com os requisitos da sua aplicação.

3. Fine-Tuning Jobs

A Fine-Tuning Jobs API substitui o endpoint deprecated /fine-tunes pelo novo endpoint /fine_tuning/jobs. Ela fornece gerenciamento completo do ciclo de vida de operações de fine-tuning: criação de jobs, listagem de jobs ativos e concluídos, recuperação de detalhes, cancelamento de jobs em andamento e streaming de eventos de treinamento. Esta API suporta fine-tuning de modelos como gpt-4o-mini-2024-07-18 usando seus próprios dados de treinamento.

Métodos

Método Descrição Endpoint
CreateFineTuningJob Cria um novo job de fine-tuning usando um modelo base especificado e um arquivo de treinamento previamente enviado. Retorna o objeto job com seu ID e status. POST /fine_tuning/jobs
ListFineTuningJobs Lista todos os jobs de fine-tuning da organização, com suporte a paginação. Retorna os jobs ordenados por data de criação. GET /fine_tuning/jobs
RetrieveFineTuningJob Recupera informações detalhadas sobre um job de fine-tuning específico, incluindo status, hiperparâmetros e arquivos de resultado. GET /fine_tuning/jobs/{job_id}
CancelFineTuningJob Cancela um job de fine-tuning em andamento. O status do job muda para "cancelled" e nenhum treinamento adicional ocorre. POST /fine_tuning/jobs/{job_id}/cancel
ListFineTuningJobEvents Lista eventos de status de um job de fine-tuning, incluindo perda de treinamento, métricas de validação e status de conclusão. Suporta paginação. 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';
    // 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. Atualizações do Chat Completions

A Chat Completions API no sgcWebSockets 2026.4.0 foi modernizada com várias novas propriedades de requisição e campos de resposta. Estas adições trazem suporte completo para chamada de ferramentas/funções, saída JSON estruturada, geração determinística via seeds e execução paralela de ferramentas.

Novas propriedades de requisição

Propriedade Descrição Endpoint
Tools Define uma lista de ferramentas (funções) que o modelo pode chamar. Cada ferramenta inclui um nome, descrição e JSON Schema para seus parâmetros. POST /chat/completions
ToolChoice Controla como o modelo seleciona ferramentas. Opções: auto, none, required ou um nome de função específico. POST /chat/completions
ResponseFormat Especifica o formato de saída. Use json_object para saída JSON garantida ou json_schema para saída estruturada em conformidade com um esquema fornecido. POST /chat/completions
Seed Um seed inteiro para amostragem determinística. Quando o mesmo seed e parâmetros são usados, o modelo tenta produzir a mesma saída. POST /chat/completions
MaxCompletionTokens Define um limite superior para o número de tokens que o modelo pode gerar na resposta. Substitui o parâmetro mais antigo max_tokens. POST /chat/completions
ParallelToolCalls Quando habilitado, o modelo pode emitir múltiplas chamadas de ferramentas em uma única resposta, permitindo execução paralela no lado do cliente. POST /chat/completions
StreamOptions Configuração para respostas em streaming. Inclui opções como include_usage para receber estatísticas de uso de tokens no último chunk transmitido. POST /chat/completions

Novos campos de resposta

Campo Descrição Endpoint
ToolCalls Array de objetos de chamada de ferramenta na mensagem do assistente. Cada um contém um ID, nome de função e argumentos para execução no lado do cliente. POST /chat/completions
Refusal Contém a mensagem de recusa do modelo quando ele se nega a atender a uma requisição devido a restrições de segurança ou políticas de conteúdo. POST /chat/completions
SystemFingerprint Uma impressão digital representando a configuração de backend usada para gerar a resposta. Útil para verificar saída determinística ao usar 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';
    // 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

A Batch API permite enviar grandes grupos de requisições de API para processamento assíncrono. É ideal para cargas de trabalho que não exigem respostas imediatas, como classificação em massa, geração de embeddings ou moderação de conteúdo em grande escala. As requisições em batch geralmente são concluídas em até 24 horas e oferecem uma redução de 50% nos custos em comparação com chamadas de API síncronas. Todos os métodos de batch estão disponíveis no componente TsgcHTTP_API_OpenAI pelo endpoint /batches.

Métodos

Método Descrição Endpoint
CreateBatch Cria um novo job em batch a partir de um arquivo JSONL previamente enviado contendo requisições de API. Requer o ID do arquivo de entrada e o endpoint de destino. POST /batches
RetrieveBatch Recupera o status atual e detalhes de um job em batch, incluindo contagens de progresso e referências a arquivos de saída. GET /batches/{batch_id}
ListBatches Lista todos os jobs em batch da organização. Suporta paginação pelos parâmetros after e limit. GET /batches
CancelBatch Cancela um job em batch em andamento. As requisições já concluídas dentro do batch não são afetadas. 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';
    // 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: O arquivo de entrada para CreateBatch deve ser um arquivo JSONL enviado pela Files API com a finalidade batch. Cada linha no arquivo representa uma única requisição de API com um ID personalizado, método, URL e corpo.

6. Uploads API

A Uploads API permite enviar arquivos grandes em múltiplas partes, o que é essencial ao trabalhar com arquivos que excedem o limite de envio de uma única requisição (normalmente 512 MB). O fluxo de trabalho envolve criar uma sessão de upload, adicionar partes sequencialmente e então concluir o upload para receber um objeto File que pode ser usado com outros endpoints da API. Todos os métodos estão disponíveis no componente TsgcHTTP_API_OpenAI pelo endpoint /uploads.

Métodos

Método Descrição Endpoint
CreateUpload Inicia uma nova sessão de upload multipart. Requer o nome do arquivo, finalidade, contagem total de bytes e tipo MIME. Retorna um objeto de upload com um ID único. POST /uploads
AddUploadPart Adiciona um fragmento de dados de arquivo a um upload em andamento. As partes devem ser adicionadas sequencialmente e cada parte retorna um ID de parte necessário para a conclusão. POST /uploads/{upload_id}/parts
CompleteUpload Conclui o upload multipart fornecendo a lista ordenada de IDs de partes. Retorna o objeto File final que pode ser usado com outras APIs. POST /uploads/{upload_id}/complete
CancelUpload Cancela uma sessão de upload em andamento. Quaisquer partes enviadas são descartadas e o ID de upload se torna inválido. 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';
    // 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: As sessões de upload expiram após uma hora de inatividade. Cada parte deve ter pelo menos 5 MB (exceto a última parte), e as partes devem ser adicionadas na ordem em que devem ser concatenadas. O tamanho máximo total do upload é 8 GB.