Een native Delphi-client voor de OpenAI REST- en Realtime-API’s. Chat completions met token-streaming, function calling en gestructureerde outputs; embeddings; Whisper speech-to-text; TTS; DALL-E-beeldgeneratie; Assistants v2 met file search; en de GPT-4o Realtime-audio-API over WebSocket — allemaal vanuit een enkele Pascal-component.
De ChatGPT-API vanuit Delphi aanroepen betekende vroeger handmatig HTTP-requests in elkaar zetten, JSON-serializers, multipart-uploaders en SSE-stream-parsers schrijven. Plaats in plaats daarvan een component.
Een Delphi OpenAI-client is de brug tussen je VCL- / FMX-applicatie en het OpenAI-platform: ChatGPT voor natural-language-redenering, embeddings voor semantic search en RAG, Whisper voor transcriptie, TTS voor gesproken output, DALL-E voor beeldgeneratie en de Realtime-API voor low-latency voice-agents. sgcWebSockets levert TsgcHTTP_API_OpenAI, een enkel niet-visueel component dat elke publieke endpoint omhult met Pascal-idiomatische properties, methodes en events.
Omdat de component op dezelfde HTTP/2-stack is gebouwd als de rest van de bibliotheek, krijg je token-streaming via Server-Sent Events, volledige function calling (nu “tools”) met automatische JSON-schema-marshalling, parallelle tool calls, gestructureerde outputs (JSON-schema-beperkte responses), de Assistants v2 thread/run/message-lifecycle, vector stores voor file search, en de GPT-4o Realtime-API over WebSocket met bidirectionele audio-streaming. Hetzelfde component praat met Azure OpenAI, de OpenAI-compatibele endpoints van Anthropic, Groq, Together, Mistral en DeepSeek, en lokale OpenAI-compatibele servers (Ollama, LM Studio, vLLM).
Een methode per endpoint, sterk getypeerde parameters, async events voor streaming-responses.
Chat completions
ChatCompletions() met volledige message-array-ondersteuning, system- / user- / assistant- / tool-rollen, vision (image_url-content), reasoning-modellen (o1, o3) en JSON-schema gestructureerde outputs.
Streaming
StreamChatCompletions() vuurt OnChatCompletionStreamChunk per delta-token af — typemachine-UX in je VCL-grid of FMX-text-view met nul SSE-parser-code.
Function calling / tools
Registreer een lijst tools met JSON-schema-parameters; wanneer het model er een aanroept, ontvang je OnChatCompletionToolCall met de geparste argumenten. Push het resultaat terug en hervat.
Embeddings
Embeddings() met text-embedding-3-small / -large — het fundament voor semantic search, clustering en RAG over je Pascal-data.
Whisper (STT)
AudioTranscription() en AudioTranslation() — upload een WAV/MP3/M4A, krijg een transcript of Engelse vertaling, met timestamps en word-level confidence.
TTS
AudioSpeech() geeft gesynthetiseerde spraak terug in MP3, Opus, AAC of FLAC — kies een stem, stream-play het resultaat.
DALL-E
ImageGeneration(), ImageEdit(), ImageVariation() met DALL-E 2 / 3 en gpt-image-1. Geeft URL’s of base64-gecodeerde PNG terug.
Assistants v2
Threads, runs, messages, files, vector stores en code interpreter — met de run-streaming-events zodat je niet hoeft te pollen.
Realtime API
Bidirectionele WebSocket met input/output audio-buffers, voice activity detection, function calling en GPT-4o-latentie — bouw voice-agents die natuurlijk onderbreken.
Snelstart
Streaming chat met een functie-tool
Een ChatGPT-aanroep die tokens streamt en midden in het gesprek een Delphi-functie kan aanroepen.
uses
sgcHTTP_API_OpenAI, sgcHTTP_API_OpenAI_Types;
var
OpenAI: TsgcHTTP_API_OpenAI;
oChat: TsgcHTTPOpenAIChatCompletionRequest;
oTool: TsgcHTTPOpenAITool;
begin
OpenAI := TsgcHTTP_API_OpenAI.Create(nil);
OpenAI.ApiKey := 'sk-...';
OpenAI.OnChatCompletionStreamChunk := DoChunk;
OpenAI.OnChatCompletionToolCall := DoToolCall;
oChat := TsgcHTTPOpenAIChatCompletionRequest.Create;
try
oChat.Model := 'gpt-4o';
oChat.Messages.AddSystem('You are a Delphi assistant.');
oChat.Messages.AddUser('What is the weather in Madrid?');
oTool := oChat.Tools.AddFunction('get_weather',
'Return current weather for a city.');
oTool.Parameters
.AddString('city', 'City name', True);
OpenAI.StreamChatCompletions(oChat);
finally
oChat.Free;
end;
end;
procedure TForm1.DoChunk(Sender: TObject;
const aChunk: TsgcHTTPOpenAIChatCompletionStreamChunk);
begin
Memo1.Text := Memo1.Text + aChunk.Content;
end;
procedure TForm1.DoToolCall(Sender: TObject;
const aToolCall: TsgcHTTPOpenAIChatCompletionToolCall);
var
vCity, vJSON: string;
beginif aToolCall.FunctionName = 'get_weather'thenbegin
vCity := aToolCall.Arguments.S['city'];
vJSON := MyWeatherLookup(vCity); // your own Delphi code
OpenAI.SubmitToolOutput(aToolCall.Id, vJSON);
end;
end;
Realtime API
GPT-4o voice-agents over WebSocket
De OpenAI Realtime API is een WebSocket-endpoint dat een stroom input-audio-frames accepteert en een stroom output-audio-frames emit — met sub-seconde-latentie, native barge-in (het model stopt met praten wanneer de gebruiker begint), server-side voice activity detection en hetzelfde tool-calling-oppervlak als de REST-API. sgcWebSockets wrapt het met TsgcHTTP_API_OpenAI_Realtime, dat je typed events geeft voor elk server-bericht (OnSessionUpdated, OnConversationItemCreated, OnInputAudioBufferSpeechStarted, OnResponseAudioDelta, etc.) zodat je het direct kunt aansluiten op TBass, TMediaPlayer of elke audio-wachtrij.
Compatibiliteit
Zelfde component, meerdere backends
Azure OpenAI
Zet Endpoint op je Azure-resource-URL en ApiKey op de resource-key — deployment-id’s vervangen modelnamen.
Ollama / LM Studio
Wijs Endpoint naar http://localhost:11434/v1 — hetzelfde component stuurt lokale Llama-, Mistral-, Qwen- en Phi-modellen aan.
DeepSeek, Groq, Together, Mistral
Allemaal stellen OpenAI-compatibele endpoints bloot; alleen de base-URL en API-key veranderen.
vLLM, SGLang, llama.cpp-server
Self-hosted inference-servers met OpenAI-compatibele REST — het streaming-SSE-pad is byte-identiek.