![]()  | 
  
Chilkat  HOME  Android™  AutoIt  C  C#  C++  Chilkat2-Python  CkPython  Classic ASP  DataFlex  Delphi DLL  Go  Java  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
 
      (Visual FoxPro) Conversation with Streaming ResponsesSee more AI ExamplesDemonstrates an AI conversation with receiving streaming responses.Note: This example requires Chilkat v11.2.0 or greater. 
 LOCAL lnSuccess LOCAL loAi LOCAL lcSystemMsg LOCAL lcDeveloperMsg LOCAL lcConversationName LOCAL loSbEventName LOCAL loSbDelta LOCAL loSbFullResponse LOCAL lnFinished LOCAL lnAbortFlag LOCAL lnMaxWaitMs LOCAL lnResult LOCAL lnResult lnSuccess = 0 * This example assumes the Chilkat API to have been previously unlocked. * See Global Unlock Sample for sample code. loAi = CreateObject('Chilkat.Ai') * The provider can be "openai", "google", "claude", "deepseek", "xai", or "perplexity". * Support for additional providers will be added in future versions of Chilkat. loAi.Provider = "google" * Use your provider's API key. loAi.ApiKey = "MY_API_KEY" * Choose a model. loAi.Model = "gemini-2.5-flash" * Indicate streaming mode is to be used. loAi.Streaming = 1 * Create a new conversation to be maintained locally in memory. * If the conversation is the first to be created, it is also automatically selected. lcSystemMsg = "You are a creative storyteller" lcDeveloperMsg = "" lcConversationName = "test_conversation" loAi.NewConvo(lcConversationName,lcSystemMsg,lcDeveloperMsg) * Add a text input. loAi.InputAddText("Write a detailed story about a turtle who decides to run a bakery. Describe the setting, the kinds of pastries, how the turtle feels, and include at least three paragraphs.") * Ask the AI for text output. lnSuccess = loAi.Ask("text") IF (lnSuccess = 0) THEN ? loAi.LastErrorText RELEASE loAi CANCEL ENDIF loSbEventName = CreateObject('Chilkat.StringBuilder') loSbDelta = CreateObject('Chilkat.StringBuilder') loSbFullResponse = CreateObject('Chilkat.StringBuilder') lnFinished = 0 lnAbortFlag = 0 lnMaxWaitMs = 5000 DO WHILE NOT lnFinished lnResult = loAi.PollAi(lnAbortFlag) IF (lnResult = 1) THEN * We have output waiting. It should be instantly available. The maxWaitMs is just-in-case. lnSuccess = loAi.NextAiEvent(lnMaxWaitMs,loSbEventName,loSbDelta) IF (lnSuccess = 0) THEN ? loAi.LastErrorText RELEASE loAi RELEASE loSbEventName RELEASE loSbDelta RELEASE loSbFullResponse CANCEL ENDIF * Some AI providers send many "empty" events. Just ignore them. IF (NOT loSbEventName.ContentsEqual("empty",1)) THEN * The delta contains the new output. This could be emitted to a display or the terminal * as real-time output. IF (loSbEventName.ContentsEqual("delta",1)) THEN * This example will emit each delta to its own line. ? loSbDelta.GetAsString() * Accumulate the delta's so we can show the full response later. loSbFullResponse.AppendSb(loSbDelta) ELSE * A streaming AI response is always terminated by a single "null_terminator" event. lnFinished = loSbEventName.ContentsEqual("null_terminator",1) ENDIF ENDIF ELSE IF (lnResult = 0) THEN * Nothing is immediately available. Sleep for 1/10 of a second before polling again. loAi.SleepMs(100) ELSE * Something failed.. ? loAi.LastErrorText lnFinished = 1 ENDIF ENDIF ENDDO * ------------------------------------------------------------- * The response is in markdown format. * Also see Markdown to HTML Conversion Examples. * ------------------------------------------------------------- * Show the accumulated (full) response. ? "----" ? loSbFullResponse.GetAsString() ? "----" * ---------------------------------------------------------------------------------------------------------- * For the 2nd request in this conversation, ask for a shorter version of the story. loAi.InputAddText("Rewrite the story, but this time make it shorter, about one third as long.") lnSuccess = loAi.Ask("text") IF (lnSuccess = 0) THEN ? loAi.LastErrorText RELEASE loAi RELEASE loSbEventName RELEASE loSbDelta RELEASE loSbFullResponse CANCEL ENDIF loSbFullResponse.Clear() lnFinished = 0 DO WHILE NOT lnFinished lnResult = loAi.PollAi(lnAbortFlag) IF (lnResult = 1) THEN * We have output waiting. It should be instantly available. The maxWaitMs is just-in-case. lnSuccess = loAi.NextAiEvent(lnMaxWaitMs,loSbEventName,loSbDelta) IF (lnSuccess = 0) THEN ? loAi.LastErrorText RELEASE loAi RELEASE loSbEventName RELEASE loSbDelta RELEASE loSbFullResponse CANCEL ENDIF * Some AI providers send many "empty" events. Just ignore them. IF (NOT loSbEventName.ContentsEqual("empty",1)) THEN * The delta contains the new output. This could be emitted to a display or the terminal * as real-time output. IF (loSbEventName.ContentsEqual("delta",1)) THEN * This example will emit each delta to its own line. ? loSbDelta.GetAsString() * Accumulate the delta's so we can show the full response later. loSbFullResponse.AppendSb(loSbDelta) ELSE * A streaming AI response is always terminated by a single "null_terminator" event. lnFinished = loSbEventName.ContentsEqual("null_terminator",1) ENDIF ENDIF ELSE IF (lnResult = 0) THEN * Nothing is immediately available. Sleep for 1/10 of a second before polling again. loAi.SleepMs(100) ELSE * Something failed.. ? loAi.LastErrorText lnFinished = 1 ENDIF ENDIF ENDDO ? "----" ? loSbFullResponse.GetAsString() RELEASE loAi RELEASE loSbEventName RELEASE loSbDelta RELEASE loSbFullResponse  | 
  ||||
© 2000-2025 Chilkat Software, Inc. All Rights Reserved.