![]()  | 
  
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
 
      (PureBasic) Prove Stateful Multi-Turn ConversationSee more AI ExamplesThis example is to prove that the 2nd request in a conversation is part of a stateful multi-turn conversation. The 2nd request asks for information provided in the 1st request.Note: This example requires Chilkat v11.2.0 or greater. 
 IncludeFile "CkStringBuilder.pb" IncludeFile "CkAi.pb" IncludeFile "CkJsonObject.pb" Procedure ChilkatExample() success.i = 0 ; This example assumes the Chilkat API to have been previously unlocked. ; See Global Unlock Sample for sample code. ai.i = CkAi::ckCreate() If ai.i = 0 Debug "Failed to create object." ProcedureReturn EndIf ; The provider can be "openai", "google", "claude", "deepseek", "xai", or "perplexity". ; Support for additional providers will be added in future versions of Chilkat. CkAi::setCkProvider(ai, "google") ; Use your provider's API key. CkAi::setCkApiKey(ai, "MY_API_KEY") ; Choose a model. CkAi::setCkModel(ai, "gemini-2.5-flash") ; Create a new conversation to be maintained locally in memory. ; If the conversation is the first to be created, it is also automatically selected. systemMsg.s = "You are a helpful assistant" developerMsg.s = "" conversationName.s = "test_conversation" CkAi::ckNewConvo(ai,conversationName,systemMsg,developerMsg) ; ------------------------------------------------------------------------------------------- ; Our first request will establish a secret that we'll ask for in the 2nd request. ; Add a text input. CkAi::ckInputAddText(ai,"Please remember this: The word I'll ask for later is BlubberFish. What's the word?") ; Ask the AI for text output. success = CkAi::ckAsk(ai,"text") If success = 0 Debug CkAi::ckLastErrorText(ai) CkAi::ckDispose(ai) ProcedureReturn EndIf ; Note: The inputs accumulated through one or more calls to Input* methods are cleared when the Ask method returns with success. ; Get the text response. sbResponse.i = CkStringBuilder::ckCreate() If sbResponse.i = 0 Debug "Failed to create object." ProcedureReturn EndIf CkAi::ckGetOutputTextSb(ai,sbResponse) Debug CkStringBuilder::ckGetAsString(sbResponse) Debug "----" ; Sample output: ; The word is **BlubberFish**. ; ------------------------------------------------------------------------------------------- ; Let's ask for the word. If this is a stateful conversation, the AI should respond correctly. CkAi::ckInputAddText(ai,"OK, I'm going to ask you again, what's the word?") success = CkAi::ckAsk(ai,"text") If success = 0 Debug CkAi::ckLastErrorText(ai) CkAi::ckDispose(ai) CkStringBuilder::ckDispose(sbResponse) ProcedureReturn EndIf ; Get the text response. CkStringBuilder::ckClear(sbResponse) CkAi::ckGetOutputTextSb(ai,sbResponse) Debug CkStringBuilder::ckGetAsString(sbResponse) ; Sample output: ; The word is **BlubberFish**. ; ------------------------------------------------------------------------------------------- ; Look at the conversation so far... ; json.i = CkJsonObject::ckCreate() If json.i = 0 Debug "Failed to create object." ProcedureReturn EndIf CkAi::ckExportConvo(ai,conversationName,json) CkJsonObject::setCkEmitCompact(json, 0) Debug CkJsonObject::ckEmit(json) ; Note: The conversation transcript format exported and imported by Chilkat is always the OpenAI format, ; regardless of the AI provider. (Chilkat translates the format from OpenAI to whatever is needed by the actual AI provider being used.) ; { ; "input": [ ; { ; "role": "system", ; "content": [ ; { ; "type": "input_text", ; "text": "You are a helpful assistant" ; } ; ] ; }, ; { ; "role": "user", ; "content": [ ; { ; "type": "input_text", ; "text": "Please remember this: The word I'll ask for later is BlubberFish. What's the word?" ; } ; ] ; }, ; { ; "role": "assistant", ; "content": [ ; { ; "type": "output_text", ; "text": "The word is **BlubberFish**." ; } ; ] ; }, ; { ; "role": "user", ; "content": [ ; { ; "type": "input_text", ; "text": "OK, I'm going to ask you again, what's the word?" ; } ; ] ; }, ; { ; "role": "assistant", ; "content": [ ; { ; "type": "output_text", ; "text": "The word is **BlubberFish**." ; } ; ] ; } ; ] ; } ; ------------------------------------------------------------------------------------------- ; If we unselect the conversation, so that no conversation is selected, ; then the same query results in the AI not knowing the word. CkAi::setCkSelectedConvo(ai, "") CkAi::ckInputAddText(ai,"OK, I'm going to ask you again, what's the word?") success = CkAi::ckAsk(ai,"text") If success = 0 Debug CkAi::ckLastErrorText(ai) CkAi::ckDispose(ai) CkStringBuilder::ckDispose(sbResponse) CkJsonObject::ckDispose(json) ProcedureReturn EndIf ; Get the text response. CkStringBuilder::ckClear(sbResponse) CkAi::ckGetOutputTextSb(ai,sbResponse) Debug CkStringBuilder::ckGetAsString(sbResponse) ; Sample output: ; I apologize, but I don't have the context of our previous interaction or what "the word" you're referring to might be. ; Could you please remind me or provide the clue again? I'm ready to help you figure it out! CkAi::ckDispose(ai) CkStringBuilder::ckDispose(sbResponse) CkJsonObject::ckDispose(json) ProcedureReturn EndProcedure  | 
  ||||
© 2000-2025 Chilkat Software, Inc. All Rights Reserved.