DataFlex
DataFlex
Automatic JS AI Tool Calling with Supporting JS Sources
See more AI Examples
Demonstrates an automatic JavaScript tool function calling where JavaScript code can be loaded from additional scripts that don't include a tool registry.Chilkat DataFlex Downloads
Use ChilkatAx-win32.pkg
Procedure Test
Boolean iSuccess
Variant vSbJs
Handle hoSbJs
Handle hoAi
Variant vSbExtraJs
Handle hoSbExtraJs
Boolean iEvalOnly
Boolean iAllowAllKeyword
String sConversation_name
String sSysMessage
String sDevMessage
Variant vSbResponse
Handle hoSbResponse
String sTemp1
Move False To iSuccess
// ----------------------------------------------------------------------------------
// The Javascript file loaded here is shown at the bottom of this page.
// -----------------------------------------------------------------------------------
// In this example, we'll load the Javascript tool functions and registry from a file.
Get Create (RefClass(cComChilkatStringBuilder)) To hoSbJs
If (Not(IsComObjectCreated(hoSbJs))) Begin
Send CreateComObject of hoSbJs
End
Get ComLoadFile Of hoSbJs "qa_data/js_tools/toolset_5.js" "utf-8" To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoSbJs To sTemp1
Showln sTemp1
Procedure_Return
End
Get Create (RefClass(cComChilkatAi)) To hoAi
If (Not(IsComObjectCreated(hoAi))) Begin
Send CreateComObject of hoAi
End
// Additional JavaScript code can be loaded into the AI object's internal JS engine
// by calling RegisterJsTools with evalOnly = True.
Get Create (RefClass(cComChilkatStringBuilder)) To hoSbExtraJs
If (Not(IsComObjectCreated(hoSbExtraJs))) Begin
Send CreateComObject of hoSbExtraJs
End
Get ComAppend Of hoSbExtraJs "function getOrderTotal({ order_id }) { return 149.95; }" To iSuccess
// When evalOnly equals True, it tells Chilkat that no toolRegistry will be present.
// The purpose for doing the eval is to add function definitions to the global namespace.
// The value passed for allowAllKeyword is meaningless (not used) when evalOnly = True.
Move True To iEvalOnly
Move True To iAllowAllKeyword
Get pvComObject of hoSbExtraJs to vSbExtraJs
Get ComRegisterJsTools Of hoAi vSbExtraJs iEvalOnly iAllowAllKeyword To iSuccess
// Register the tools that will be made available to the AI.
Move False To iEvalOnly
Get pvComObject of hoSbJs to vSbJs
Get ComRegisterJsTools Of hoAi vSbJs iEvalOnly iAllowAllKeyword To iSuccess
// The provider can be "openai", "google", "claude", "grok", "mistral", "custom", etc.
Set ComProvider Of hoAi To "openai"
// Use your provider's API key.
Set ComApiKey Of hoAi To "MY_API_KEY"
// Choose a model.
Set ComModel Of hoAi To "gpt-5-mini"
// Tool function calling must always occur within a conversation.
Move "convo_4" To sConversation_name
Move "You are a helpful business assistant" To sSysMessage
Move "Respond only with a information generated by a tool." To sDevMessage
Get ComNewConvo Of hoAi sConversation_name sSysMessage sDevMessage To iSuccess
// Provide inputs
Get ComInputAddText Of hoAi "What is the total for order A123?" To iSuccess
// 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.
Get ComAsk Of hoAi "text" To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoAi To sTemp1
Showln sTemp1
Procedure_Return
End
// Get the AI response.
Get Create (RefClass(cComChilkatStringBuilder)) To hoSbResponse
If (Not(IsComObjectCreated(hoSbResponse))) Begin
Send CreateComObject of hoSbResponse
End
Get pvComObject of hoSbResponse to vSbResponse
Get ComGetOutputTextSb Of hoAi vSbResponse To iSuccess
Get ComGetAsString Of hoSbResponse To sTemp1
Showln sTemp1
End_Procedure