![]()  | 
  
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
 
      (SQL Server) AI: Simple Stateless Streaming ResponseSee more AI ExamplesShows a simple stateless query and receives the response in streaming mode.Note: This example requires Chilkat v11.2.0 or greater. 
 -- Important: See this note about string length limitations for strings returned by sp_OAMethod calls. -- CREATE PROCEDURE ChilkatSample AS BEGIN DECLARE @hr int DECLARE @iTmp0 int -- Important: Do not use nvarchar(max). See the warning about using nvarchar(max). DECLARE @sTmp0 nvarchar(4000) DECLARE @success int SELECT @success = 0 -- This example assumes the Chilkat API to have been previously unlocked. -- See Global Unlock Sample for sample code. DECLARE @ai int EXEC @hr = sp_OACreate 'Chilkat.Ai', @ai OUT IF @hr <> 0 BEGIN PRINT 'Failed to create ActiveX component' RETURN END -- The provider can be "openai", "google", "claude", "deepseek", "xai", or "perplexity". -- Support for additional providers will be added in future versions of Chilkat. EXEC sp_OASetProperty @ai, 'Provider', 'openai' -- Use your provider's API key. EXEC sp_OASetProperty @ai, 'ApiKey', 'MY_API_KEY' -- Choose a model. EXEC sp_OASetProperty @ai, 'Model', 'gpt-4o' -- Indicate streaming mode is to be used. EXEC sp_OASetProperty @ai, 'Streaming', 1 -- Add a text input. EXEC sp_OAMethod @ai, 'InputAddText', @success OUT, '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. EXEC sp_OAMethod @ai, 'Ask', @success OUT, 'text' IF @success = 0 BEGIN EXEC sp_OAGetProperty @ai, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @ai RETURN END DECLARE @sbEventName int EXEC @hr = sp_OACreate 'Chilkat.StringBuilder', @sbEventName OUT DECLARE @sbDelta int EXEC @hr = sp_OACreate 'Chilkat.StringBuilder', @sbDelta OUT DECLARE @sbFullResponse int EXEC @hr = sp_OACreate 'Chilkat.StringBuilder', @sbFullResponse OUT DECLARE @finished int SELECT @finished = 0 DECLARE @abortFlag int SELECT @abortFlag = 0 DECLARE @maxWaitMs int SELECT @maxWaitMs = 5000 WHILE Not @finished BEGIN DECLARE @result int EXEC sp_OAMethod @ai, 'PollAi', @result OUT, @abortFlag IF @result = 1 BEGIN -- We have output waiting. It should be instantly available. The maxWaitMs is just-in-case. EXEC sp_OAMethod @ai, 'NextAiEvent', @success OUT, @maxWaitMs, @sbEventName, @sbDelta IF @success = 0 BEGIN EXEC sp_OAGetProperty @ai, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @ai EXEC @hr = sp_OADestroy @sbEventName EXEC @hr = sp_OADestroy @sbDelta EXEC @hr = sp_OADestroy @sbFullResponse RETURN END -- Some AI providers send many "empty" events. Just ignore them. EXEC sp_OAMethod @sbEventName, 'ContentsEqual', @iTmp0 OUT, 'empty', 1 IF Not @iTmp0 BEGIN -- Log the non-empty events. EXEC sp_OAMethod @sbEventName, 'GetAsString', @sTmp0 OUT PRINT @sTmp0 -- The delta contains the new output. This could be emitted to a display or the terminal -- as real-time output. EXEC sp_OAMethod @sbEventName, 'ContentsEqual', @iTmp0 OUT, 'delta', 1 IF @iTmp0 BEGIN EXEC sp_OAMethod @sbDelta, 'GetAsString', @sTmp0 OUT PRINT @sTmp0 -- Accumulate the delta's so we can show the full response later. EXEC sp_OAMethod @sbFullResponse, 'AppendSb', @success OUT, @sbDelta END ELSE BEGIN -- A streaming AI response is always terminated by a single "null_terminator" event. EXEC sp_OAMethod @sbEventName, 'ContentsEqual', @finished OUT, 'null_terminator', 1 END END END ELSE BEGIN IF @result = 0 BEGIN -- Nothing is immediately available. Sleep for 1/10 of a second before polling again. EXEC sp_OAMethod @ai, 'SleepMs', NULL, 100 END ELSE BEGIN -- Something failed.. EXEC sp_OAGetProperty @ai, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 SELECT @finished = 1 END END END -- Show the accumulated (full) response. PRINT '----' EXEC sp_OAMethod @sbFullResponse, 'GetAsString', @sTmp0 OUT PRINT @sTmp0 -- ------------------------------------------------------------- -- The response is in markdown format. -- Also see Markdown to HTML Conversion Examples. -- ------------------------------------------------------------- EXEC @hr = sp_OADestroy @ai EXEC @hr = sp_OADestroy @sbEventName EXEC @hr = sp_OADestroy @sbDelta EXEC @hr = sp_OADestroy @sbFullResponse END GO  | 
  ||||
© 2000-2025 Chilkat Software, Inc. All Rights Reserved.