Sample code for 30+ languages & platforms
Delphi ActiveX

AI Ask with Multiple Tool Function Callbacks

See more AI Examples

This example demonstrates asking a two-part question that should cause the AI to respond with two tool call requests.

Chilkat Delphi ActiveX Downloads

Delphi ActiveX
uses
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
    Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Chilkat_TLB;

...

procedure TForm1.Button1Click(Sender: TObject);
var
success: Integer;
sbJs: TChilkatStringBuilder;
ai: TChilkatAi;
evalOnly: Integer;
allowAllKeyword: Integer;
conversation_name: WideString;
sysMessage: WideString;
devMessage: WideString;
sbResponse: TChilkatStringBuilder;

begin
success := 0;

// ----------------------------------------------------------------------------------
// The Javascript file loaded here is shown at the bottom of this page.
// -----------------------------------------------------------------------------------

// Load JavaScript containing the tool functions.
sbJs := TChilkatStringBuilder.Create(Self);
success := sbJs.LoadFile('qa_data/js_tools/toolset_6.js','utf-8');
if (success = 0) then
  begin
    Memo1.Lines.Add(sbJs.LastErrorText);
    Exit;
  end;

ai := TChilkatAi.Create(Self);

// Register the tools that will be made available to the AI.
evalOnly := 0;
allowAllKeyword := 1;
ai.RegisterJsTools(sbJs.ControlInterface,evalOnly,allowAllKeyword);

// The provider can be "openai", "google", "claude", "grok", "mistral", "custom", etc.
ai.Provider := 'openai';
// Use your provider's API key.
ai.ApiKey := 'MY_API_KEY';
// Choose a model.
ai.Model := 'gpt-5-mini';

// Tool function calling must always occur within a conversation.
conversation_name := 'example_convo';
sysMessage := 'You are a helpful assistant';
devMessage := 'Respond with markdown';
ai.NewConvo(conversation_name,sysMessage,devMessage);

// Provide inputs
ai.InputAddText('What is my horoscope? I am an Aquarius.  Also, what''s the weather in Chicago?');

// Send inputs, tool functions, etc. and ask for a "text" response.
// If the AI responds with tool calls, Chilkat automatically handles them by calling your JavaScript
// tool functions as directed by the AI, and sending results back to the AI until the final
// response is received.
success := ai.Ask('text');
if (success = 0) then
  begin
    Memo1.Lines.Add(ai.LastErrorText);
    Exit;
  end;

// Get the AI response.
sbResponse := TChilkatStringBuilder.Create(Self);
ai.GetOutputTextSb(sbResponse.ControlInterface);
Memo1.Lines.Add(sbResponse.GetAsString());
end;