Sample code for 30+ languages & platforms
Visual FoxPro

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 Visual FoxPro Downloads

Visual FoxPro
LOCAL lnSuccess
LOCAL loSbJs
LOCAL loAi
LOCAL lnEvalOnly
LOCAL lnAllowAllKeyword
LOCAL lcConversation_name
LOCAL lcSysMessage
LOCAL lcDevMessage
LOCAL loSbResponse

lnSuccess = 0

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

*  Load JavaScript containing the tool functions.
loSbJs = CreateObject('Chilkat.StringBuilder')
lnSuccess = loSbJs.LoadFile("qa_data/js_tools/toolset_6.js","utf-8")
IF (lnSuccess = 0) THEN
    ? loSbJs.LastErrorText
    RELEASE loSbJs
    CANCEL
ENDIF

loAi = CreateObject('Chilkat.Ai')

*  Register the tools that will be made available to the AI.
lnEvalOnly = 0
lnAllowAllKeyword = 1
loAi.RegisterJsTools(loSbJs,lnEvalOnly,lnAllowAllKeyword)

*  The provider can be "openai", "google", "claude", "grok", "mistral", "custom", etc.
loAi.Provider = "openai"
*  Use your provider's API key.
loAi.ApiKey = "MY_API_KEY"
*  Choose a model.
loAi.Model = "gpt-5.6-luna"

*  Tool function calling must always occur within a conversation.
lcConversation_name = "example_convo"
lcSysMessage = "You are a helpful assistant"
lcDevMessage = "Respond with markdown"
loAi.NewConvo(lcConversation_name,lcSysMessage,lcDevMessage)

*  Provide inputs
loAi.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.
lnSuccess = loAi.Ask("text")
IF (lnSuccess = 0) THEN
    ? loAi.LastErrorText
    RELEASE loSbJs
    RELEASE loAi
    CANCEL
ENDIF

*  Get the AI response.
loSbResponse = CreateObject('Chilkat.StringBuilder')
loAi.GetOutputTextSb(loSbResponse)
? loSbResponse.GetAsString()

RELEASE loSbJs
RELEASE loAi
RELEASE loSbResponse

JavaScript
// The namespace for the AI tool functions in this JavaScript source file.
Example = {};

// Tool functions must have only one argument, which should be an object.

// The function name used here must match the "name" in the toolRegistry below.
Example.get_weather = function(arg) {
  return {
	  "temperature": 45,
	  "unit": "F",
	  "conditions": "Cloudy"
	};
}

Example.get_horoscope = function(arg) {
  return  `${arg.sign} : Next Tuesday you will befriend a baby otter.`;
}



// The inputSchema.type must ALWAYS be "object".
Example.toolRegistry = [
  {
    name: "get_horoscope",
    description: "Get today's horoscope for an astrological sign.",
    parameters: {
      properties: {
        sign: { type: "string", description: "An astrological sign like Taurus or Aquarius" }
      }
    }
  },
  {
    name: "get_weather",
    description: "Gets the weather at a location.",
    parameters: {
      properties: {
        location: { type: "string", description: "Location such as a city name." },
      }
    }
  }
];


Example.toolPermissions = [
	  {
	    name: "all",
	    perm: "sandbox",
	  }
	  		
	];
	
	
// Return the name of this toolset
// This tells Chilkat the namespace of this toolset.
"Example";