![]() |
Chilkat HOME Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi DLL Go Java JavaScript Node.js Objective-C PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(DataFlex) Streaming AI with Automatic JavaScript AI Tool Function CallingSee more AI ExamplesDemonstrates how to get AI responses in streaming mode, including possible tool function calling using Chilkat with embedded Chilkat.Js JavaScript. Automatic JavaScript tool calls are characterized by:
Note: This example requires Chilkat v11.4.0 or greater. For more information, see https://www.chilkatsoft.com/ai_javascript_tool_function_calling.asp
Use ChilkatAx-win32.pkg Procedure Test Boolean iSuccess Variant vSbJs Handle hoSbJs Handle hoAi Boolean iEvalOnly Boolean iAllowAllKeyword String sConversation_name String sSysMessage String sDevMessage Variant vSbEventName Handle hoSbEventName Variant vSbDelta Handle hoSbDelta Handle hoSbFullResponse Integer iMaxWaitMs Boolean iFinished Integer iNumAsks Boolean iMadeFunctionCalls Boolean iStreamingDone Integer iResult String sTemp1 Boolean bTemp1 Move False To iSuccess // ---------------------------------------------------------------------------------- // The Javascript file loaded here is shown at the bottom of this page. // ----------------------------------------------------------------------------------- Get Create (RefClass(cComChilkatStringBuilder)) To hoSbJs If (Not(IsComObjectCreated(hoSbJs))) Begin Send CreateComObject of hoSbJs End Get ComLoadFile Of hoSbJs "qa_data/js_tools/horoscope_tools.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 // Register the tools that will be made available to the AI. Move False To iEvalOnly Move True To iAllowAllKeyword 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_astrology" To sConversation_name Move "You are a helpful astrologer" To sSysMessage Move "Respond only with markdown." To sDevMessage Get ComNewConvo Of hoAi sConversation_name sSysMessage sDevMessage To iSuccess // Provide inputs Get ComInputAddText Of hoAi "What is my horoscope? I am an Aquarius." To iSuccess // Get the response in streaming mode. Set ComStreaming Of hoAi To True // In streaming mode, if we receive an AI event that is a request for tool use, // we'll need to make the call to the JavaScript and then continue with a followup Ask, // until the final response is received. Get Create (RefClass(cComChilkatStringBuilder)) To hoSbEventName If (Not(IsComObjectCreated(hoSbEventName))) Begin Send CreateComObject of hoSbEventName End Get Create (RefClass(cComChilkatStringBuilder)) To hoSbDelta If (Not(IsComObjectCreated(hoSbDelta))) Begin Send CreateComObject of hoSbDelta End Get Create (RefClass(cComChilkatStringBuilder)) To hoSbFullResponse If (Not(IsComObjectCreated(hoSbFullResponse))) Begin Send CreateComObject of hoSbFullResponse End // When PollAi returns with an event, it's highly unlikely the // call to NextAiEvent does not immediately return. Setting a max // timeout is just a precaution.. Move 5000 To iMaxWaitMs Move False To iFinished Move 0 To iNumAsks // Set a max # of followup Asks to prevent any unexpected infinite looping. While (Not iFinished And (iNumAsks < 10)) // Send the request to the AI model. Get ComAsk Of hoAi "text" To iSuccess If (iSuccess = False) Begin Get ComLastErrorText Of hoAi To sTemp1 Showln sTemp1 Procedure_Return End Move False To iMadeFunctionCalls Move False To iStreamingDone While (Not iStreamingDone) Get ComPollAi Of hoAi False To iResult If (iResult < 0) Begin Get ComLastErrorText Of hoAi To sTemp1 Showln sTemp1 Showln "Failed." Procedure_Return End If (iResult > 0) Begin // We have an event.. Get pvComObject of hoSbEventName to vSbEventName Get pvComObject of hoSbDelta to vSbDelta Get ComNextAiEvent Of hoAi iMaxWaitMs vSbEventName vSbDelta To iSuccess If (iSuccess = False) Begin Get ComLastErrorText Of hoAi To sTemp1 Showln sTemp1 Procedure_Return End // Is this an event where the AI is requesting a function call? Get ComContentsEqual Of hoSbEventName "js_function_call" True To bTemp1 If (bTemp1) Begin // Call the JavaScript function. // We don't need to find the exact function and make the call. // We can simply pass the sbDelta (which contains information about the function to be called and the args). // Chilkat will find the registered JavaScript function, call it, and add the results to the conversation. // We indicate that function calls were made, which results in a followup Ask (in the outer loop). Get pvComObject of hoSbDelta to vSbDelta Get ComStreamingJsToolCall Of hoAi vSbDelta To iSuccess If (iSuccess = False) Begin // The JS function call failed. Move True To iStreamingDone End Else Begin Move True To iMadeFunctionCalls End End Else Begin Get ComContentsEqual Of hoSbEventName "empty" True To bTemp1 If (Not bTemp1) Begin Get pvComObject of hoSbDelta to vSbDelta Get ComAppendSb Of hoSbFullResponse vSbDelta To iSuccess Get ComContentsEqual Of hoSbEventName "null_terminator" True To bTemp1 If (bTemp1) Begin Move True To iStreamingDone End End End End Else Begin // No event arrived, so wait a short time rather than spin in a loop.. Send ComSleepMs To hoAi 100 End Loop If (Not iMadeFunctionCalls) Begin Move True To iFinished End Move (iNumAsks + 1) To iNumAsks Loop Showln "Full Response:" Get ComGetAsString Of hoSbFullResponse To sTemp1 Showln sTemp1 End_Procedure
|
||||
© 2000-2026 Chilkat Software, Inc. All Rights Reserved.