Sample code for 30+ languages & platforms
Visual Basic 6.0

Conversation with Streaming Responses

See more AI Examples

Demonstrates an AI conversation with receiving streaming responses.

Chilkat Visual Basic 6.0 Downloads

Visual Basic 6.0
Dim success As Long
success = 0

' This example assumes the Chilkat API to have been previously unlocked.
' See Global Unlock Sample for sample code.

Dim ai As New ChilkatAi

' The provider can be "openai", "google", "claude", "deepseek", "xai", or "perplexity".
' Support for additional providers will be added in future versions of Chilkat.
ai.Provider = "google"

' Use your provider's API key.
ai.ApiKey = "MY_API_KEY"

' Choose a model.
ai.Model = "gemini-2.5-flash"

' Indicate streaming mode is to be used.
ai.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.
Dim systemMsg As String
systemMsg = "You are a creative storyteller"
Dim developerMsg As String
developerMsg = ""
Dim conversationName As String
conversationName = "test_conversation"
success = ai.NewConvo(conversationName,systemMsg,developerMsg)

' Add a text input.
success = ai.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.
success = ai.Ask("text")
If (success = 0) Then
    Debug.Print ai.LastErrorText
    Exit Sub
End If

Dim sbEventName As New ChilkatStringBuilder
Dim sbDelta As New ChilkatStringBuilder
Dim sbFullResponse As New ChilkatStringBuilder
Dim finished As Long
finished = 0
Dim abortFlag As Long
abortFlag = 0
Dim maxWaitMs As Long
maxWaitMs = 5000

Do While Not finished

    Dim result As Long
    result = ai.PollAi(abortFlag)
    If (result = 1) Then
        ' We have output waiting.  It should be instantly available.  The maxWaitMs is just-in-case.
        success = ai.NextAiEvent(maxWaitMs,sbEventName,sbDelta)
        If (success = 0) Then
            Debug.Print ai.LastErrorText
            Exit Sub
        End If

        ' Some AI providers send many "empty" events.  Just ignore them.
        If (Not sbEventName.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 (sbEventName.ContentsEqual("delta",1)) Then
                ' This example will emit each delta to its own line.
                Debug.Print sbDelta.GetAsString()

                ' Accumulate the delta's so we can show the full response later.
                success = sbFullResponse.AppendSb(sbDelta)
            Else
                ' A streaming AI response is always terminated by a single "null_terminator" event.
                finished = sbEventName.ContentsEqual("null_terminator",1)
            End If

        End If

    Else
        If (result = 0) Then
            ' Nothing is immediately available. Sleep for 1/10 of a second before polling again.
            ai.SleepMs 100
        Else
            ' Something failed..
            Debug.Print ai.LastErrorText
            finished = 1
        End If

    End If

Loop

' -------------------------------------------------------------
' The response is in markdown format.
' Also see Markdown to HTML Conversion Examples.
' -------------------------------------------------------------

' Show the accumulated (full) response.
Debug.Print "----"
Debug.Print sbFullResponse.GetAsString()
Debug.Print "----"

' ----------------------------------------------------------------------------------------------------------
' For the 2nd request in this conversation, ask for a shorter version of the story.
success = ai.InputAddText("Rewrite the story, but this time make it shorter, about one third as long.")
success = ai.Ask("text")
If (success = 0) Then
    Debug.Print ai.LastErrorText
    Exit Sub
End If

sbFullResponse.Clear 
finished = 0

Do While Not finished

    Dim result As Long
    result = ai.PollAi(abortFlag)
    If (result = 1) Then
        ' We have output waiting.  It should be instantly available.  The maxWaitMs is just-in-case.
        success = ai.NextAiEvent(maxWaitMs,sbEventName,sbDelta)
        If (success = 0) Then
            Debug.Print ai.LastErrorText
            Exit Sub
        End If

        ' Some AI providers send many "empty" events.  Just ignore them.
        If (Not sbEventName.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 (sbEventName.ContentsEqual("delta",1)) Then
                ' This example will emit each delta to its own line.
                Debug.Print sbDelta.GetAsString()

                ' Accumulate the delta's so we can show the full response later.
                success = sbFullResponse.AppendSb(sbDelta)
            Else
                ' A streaming AI response is always terminated by a single "null_terminator" event.
                finished = sbEventName.ContentsEqual("null_terminator",1)
            End If

        End If

    Else
        If (result = 0) Then
            ' Nothing is immediately available. Sleep for 1/10 of a second before polling again.
            ai.SleepMs 100
        Else
            ' Something failed..
            Debug.Print ai.LastErrorText
            finished = 1
        End If

    End If

Loop

Debug.Print "----"
Debug.Print sbFullResponse.GetAsString()