Visual FoxPro
Visual FoxPro
AI: Simple Stateless Streaming Response
See more AI Examples
Shows a simple stateless query and receives the response in streaming mode.Chilkat Visual FoxPro Downloads
LOCAL lnSuccess
LOCAL loAi
LOCAL loSbEventName
LOCAL loSbDelta
LOCAL loSbFullResponse
LOCAL lnFinished
LOCAL lnAbortFlag
LOCAL lnMaxWaitMs
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 = "openai"
* Use your provider's API key.
loAi.ApiKey = "MY_API_KEY"
* Choose a model.
loAi.Model = "gpt-4o"
* Indicate streaming mode is to be used.
loAi.Streaming = 1
* 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 lnFinished = 0
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 (loSbEventName.ContentsEqual("empty",1) = 0) THEN
* Log the non-empty events.
? loSbEventName.GetAsString()
* 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) = 1) THEN
? 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
* Show the accumulated (full) response.
? "----"
? loSbFullResponse.GetAsString()
* -------------------------------------------------------------
* The response is in markdown format.
* Also see Markdown to HTML Conversion Examples.
* -------------------------------------------------------------
RELEASE loAi
RELEASE loSbEventName
RELEASE loSbDelta
RELEASE loSbFullResponse