DataFlex
DataFlex
AI: Simple Stateless Streaming Response
See more AI Examples
Shows a simple stateless query and receives the response in streaming mode.Chilkat DataFlex Downloads
Use ChilkatAx-win32.pkg
Procedure Test
Boolean iSuccess
Handle hoAi
Variant vSbEventName
Handle hoSbEventName
Variant vSbDelta
Handle hoSbDelta
Handle hoSbFullResponse
Boolean iFinished
Boolean iAbortFlag
Integer iMaxWaitMs
Integer iResult
String sTemp1
Boolean bTemp1
Move False To iSuccess
// This example assumes the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
Get Create (RefClass(cComChilkatAi)) To hoAi
If (Not(IsComObjectCreated(hoAi))) Begin
Send CreateComObject of hoAi
End
// The provider can be "openai", "google", "claude", "deepseek", "xai", or "perplexity".
// Support for additional providers will be added in future versions of Chilkat.
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-4o"
// Indicate streaming mode is to be used.
Set ComStreaming Of hoAi To True
// Add a text input.
Get ComInputAddText Of hoAi "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." To iSuccess
// Ask the AI for text output.
Get ComAsk Of hoAi "text" To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoAi To sTemp1
Showln sTemp1
Procedure_Return
End
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
Move False To iFinished
Move False To iAbortFlag
Move 5000 To iMaxWaitMs
While (iFinished = False)
Get ComPollAi Of hoAi iAbortFlag To iResult
If (iResult = 1) Begin
// We have output waiting. It should be instantly available. The maxWaitMs is just-in-case.
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
// Some AI providers send many "empty" events. Just ignore them.
Get ComContentsEqual Of hoSbEventName "empty" True To bTemp1
If (bTemp1 = False) Begin
// Log the non-empty events.
Get ComGetAsString Of hoSbEventName To sTemp1
Showln sTemp1
// The delta contains the new output. This could be emitted to a display or the terminal
// as real-time output.
Get ComContentsEqual Of hoSbEventName "delta" True To bTemp1
If (bTemp1 = True) Begin
Get ComGetAsString Of hoSbDelta To sTemp1
Showln sTemp1
// Accumulate the delta's so we can show the full response later.
Get pvComObject of hoSbDelta to vSbDelta
Get ComAppendSb Of hoSbFullResponse vSbDelta To iSuccess
End
Else Begin
// A streaming AI response is always terminated by a single "null_terminator" event.
Get ComContentsEqual Of hoSbEventName "null_terminator" True To iFinished
End
End
End
Else Begin
If (iResult = 0) Begin
// Nothing is immediately available. Sleep for 1/10 of a second before polling again.
Send ComSleepMs To hoAi 100
End
Else Begin
// Something failed..
Get ComLastErrorText Of hoAi To sTemp1
Showln sTemp1
Move True To iFinished
End
End
Loop
// Show the accumulated (full) response.
Showln "----"
Get ComGetAsString Of hoSbFullResponse To sTemp1
Showln sTemp1
// -------------------------------------------------------------
// The response is in markdown format.
// Also see Markdown to HTML Conversion Examples.
// -------------------------------------------------------------
End_Procedure