2024-09-30 16:32:48 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								// Copyright (c) Microsoft Corporation. All rights reserved.  
						 
					
						
							
								
									
										
										
										
											2024-04-26 09:21:46 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								// SemanticKernelAgentTest.cs  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2024-05-09 15:36:20 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								using  AutoGen.Core ;  
						 
					
						
							
								
									
										
										
										
											2024-04-26 09:21:46 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								using  AutoGen.SemanticKernel.Extension ;  
						 
					
						
							
								
									
										
										
										
											2024-05-09 15:36:20 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								using  AutoGen.Tests ;  
						 
					
						
							
								
									
										
										
										
											2024-04-26 09:21:46 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								using  FluentAssertions ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								using  Microsoft.SemanticKernel ;  
						 
					
						
							
								
									
										
										
										
											2024-05-08 23:50:36 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								using  Microsoft.SemanticKernel.Agents ;  
						 
					
						
							
								
									
										
										
										
											2024-04-26 09:21:46 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								using  Microsoft.SemanticKernel.ChatCompletion ;  
						 
					
						
							
								
									
										
										
										
											2024-05-08 23:50:36 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								using  Microsoft.SemanticKernel.Connectors.OpenAI ;  
						 
					
						
							
								
									
										
										
										
											2024-04-26 09:21:46 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2024-05-09 15:36:20 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								namespace  AutoGen.SemanticKernel.Tests ;  
						 
					
						
							
								
									
										
										
										
											2024-04-26 09:21:46 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								public  partial  class  SemanticKernelAgentTest  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /// <summary> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /// Get the weather for a location. 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /// </summary> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /// <param name="location">location</param> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /// <returns></returns> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    [Function]  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    public  async  Task < string >  GetWeatherAsync ( string  location ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  $"The weather in {location} is sunny." ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2024-06-14 06:53:12 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    [ApiKeyFact("AZURE_OPENAI_API_KEY", "AZURE_OPENAI_ENDPOINT", "AZURE_OPENAI_DEPLOY_NAME")]  
						 
					
						
							
								
									
										
										
										
											2024-04-26 09:21:46 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    public  async  Task  BasicConversationTestAsync ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        var  endpoint  =  Environment . GetEnvironmentVariable ( "AZURE_OPENAI_ENDPOINT" )  ? ?  throw  new  Exception ( "Please set AZURE_OPENAI_ENDPOINT environment variable." ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        var  key  =  Environment . GetEnvironmentVariable ( "AZURE_OPENAI_API_KEY" )  ? ?  throw  new  Exception ( "Please set AZURE_OPENAI_API_KEY environment variable." ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-06-14 06:53:12 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        var  deploymentName  =  Environment . GetEnvironmentVariable ( "AZURE_OPENAI_DEPLOY_NAME" )  ? ?  throw  new  Exception ( "Please set AZURE_OPENAI_DEPLOY_NAME environment variable." ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-04-26 09:21:46 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        var  builder  =  Kernel . CreateBuilder ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2024-06-14 06:53:12 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            . AddAzureOpenAIChatCompletion ( deploymentName ,  endpoint ,  key ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-04-26 09:21:46 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        var  kernel  =  builder . Build ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2024-08-27 14:37:47 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        kernel . GetRequiredService < IChatCompletionService > ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2024-04-26 09:21:46 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        var  skAgent  =  new  SemanticKernelAgent ( kernel ,  "assistant" ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        var  chatMessageContent  =  MessageEnvelope . Create ( new  ChatMessageContent ( AuthorRole . Assistant ,  "Hello" ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        var  reply  =  await  skAgent . SendAsync ( chatMessageContent ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        reply . Should ( ) . BeOfType < MessageEnvelope < ChatMessageContent > > ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        reply . As < MessageEnvelope < ChatMessageContent > > ( ) . From . Should ( ) . Be ( "assistant" ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // test streaming 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-05 07:51:00 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        var  streamingReply  =  skAgent . GenerateStreamingReplyAsync ( new [ ]  {  chatMessageContent  } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-04-26 09:21:46 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        await  foreach  ( var  streamingMessage  in  streamingReply ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            streamingMessage . Should ( ) . BeOfType < MessageEnvelope < StreamingChatMessageContent > > ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            streamingMessage . As < MessageEnvelope < StreamingChatMessageContent > > ( ) . From . Should ( ) . Be ( "assistant" ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2024-06-14 06:53:12 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    [ApiKeyFact("AZURE_OPENAI_API_KEY", "AZURE_OPENAI_ENDPOINT", "AZURE_OPENAI_DEPLOY_NAME")]  
						 
					
						
							
								
									
										
										
										
											2024-04-26 09:21:46 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    public  async  Task  SemanticKernelChatMessageContentConnectorTestAsync ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        var  endpoint  =  Environment . GetEnvironmentVariable ( "AZURE_OPENAI_ENDPOINT" )  ? ?  throw  new  Exception ( "Please set AZURE_OPENAI_ENDPOINT environment variable." ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        var  key  =  Environment . GetEnvironmentVariable ( "AZURE_OPENAI_API_KEY" )  ? ?  throw  new  Exception ( "Please set AZURE_OPENAI_API_KEY environment variable." ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-06-14 06:53:12 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        var  deploymentName  =  Environment . GetEnvironmentVariable ( "AZURE_OPENAI_DEPLOY_NAME" )  ? ?  throw  new  Exception ( "Please set AZURE_OPENAI_DEPLOY_NAME environment variable." ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-04-26 09:21:46 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        var  builder  =  Kernel . CreateBuilder ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2024-06-14 06:53:12 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            . AddAzureOpenAIChatCompletion ( deploymentName ,  endpoint ,  key ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-04-26 09:21:46 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        var  kernel  =  builder . Build ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        var  skAgent  =  new  SemanticKernelAgent ( kernel ,  "assistant" ) 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-05 07:51:00 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            . RegisterMessageConnector ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-04-26 09:21:46 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        var  messages  =  new  IMessage [ ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            MessageEnvelope . Create ( new  ChatMessageContent ( AuthorRole . Assistant ,  "Hello" ) ) , 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-08 23:50:36 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            new  TextMessage ( Role . Assistant ,  "Hello" ,  from :  "user" ) ,  new  MultiModalMessage ( Role . Assistant , 
							 
						 
					
						
							
								
									
										
										
										
											2024-04-26 09:21:46 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								                [ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    new  TextMessage ( Role . Assistant ,  "Hello" ,  from :  "user" ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                from :  "user" ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        foreach  ( var  message  in  messages ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            var  reply  =  await  skAgent . SendAsync ( message ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            reply . Should ( ) . BeOfType < TextMessage > ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            reply . As < TextMessage > ( ) . From . Should ( ) . Be ( "assistant" ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // test streaming 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        foreach  ( var  message  in  messages ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        { 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-05 07:51:00 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            var  reply  =  skAgent . GenerateStreamingReplyAsync ( [ message ] ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-04-26 09:21:46 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            await  foreach  ( var  streamingMessage  in  reply ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                streamingMessage . Should ( ) . BeOfType < TextMessageUpdate > ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                streamingMessage . As < TextMessageUpdate > ( ) . From . Should ( ) . Be ( "assistant" ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2024-06-14 06:53:12 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    [ApiKeyFact("AZURE_OPENAI_API_KEY", "AZURE_OPENAI_ENDPOINT", "AZURE_OPENAI_DEPLOY_NAME")]  
						 
					
						
							
								
									
										
										
										
											2024-04-26 09:21:46 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    public  async  Task  SemanticKernelPluginTestAsync ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        var  endpoint  =  Environment . GetEnvironmentVariable ( "AZURE_OPENAI_ENDPOINT" )  ? ?  throw  new  Exception ( "Please set AZURE_OPENAI_ENDPOINT environment variable." ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        var  key  =  Environment . GetEnvironmentVariable ( "AZURE_OPENAI_API_KEY" )  ? ?  throw  new  Exception ( "Please set AZURE_OPENAI_API_KEY environment variable." ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-06-14 06:53:12 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        var  deploymentName  =  Environment . GetEnvironmentVariable ( "AZURE_OPENAI_DEPLOY_NAME" )  ? ?  throw  new  Exception ( "Please set AZURE_OPENAI_DEPLOY_NAME environment variable." ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-04-26 09:21:46 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        var  builder  =  Kernel . CreateBuilder ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2024-06-14 06:53:12 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            . AddAzureOpenAIChatCompletion ( deploymentName ,  endpoint ,  key ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-04-26 09:21:46 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        var  parameters  =  this . GetWeatherAsyncFunctionContract . Parameters ! . Select ( p  = >  new  KernelParameterMetadata ( p . Name ! ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            Description  =  p . Description , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            DefaultValue  =  p . DefaultValue , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            IsRequired  =  p . IsRequired , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ParameterType  =  p . ParameterType , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        var  function  =  KernelFunctionFactory . CreateFromMethod ( this . GetWeatherAsync ,  this . GetWeatherAsyncFunctionContract . Name ,  this . GetWeatherAsyncFunctionContract . Description ,  parameters ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        builder . Plugins . AddFromFunctions ( "plugins" ,  [ function ] ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        var  kernel  =  builder . Build ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        var  skAgent  =  new  SemanticKernelAgent ( kernel ,  "assistant" ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            . RegisterMessageConnector ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        skAgent . StreamingMiddlewares . Count ( ) . Should ( ) . Be ( 1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        var  question  =  "What is the weather in Seattle?" ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        var  reply  =  await  skAgent . SendAsync ( question ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        reply . GetContent ( ) ! . ToLower ( ) . Should ( ) . Contain ( "seattle" ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        reply . GetContent ( ) ! . ToLower ( ) . Should ( ) . Contain ( "sunny" ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-08 23:50:36 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2024-06-14 06:53:12 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    [ApiKeyFact("AZURE_OPENAI_API_KEY", "AZURE_OPENAI_ENDPOINT", "AZURE_OPENAI_DEPLOY_NAME")]  
						 
					
						
							
								
									
										
										
										
											2024-05-08 23:50:36 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  async  Task  BasicSkChatCompletionAgentConversationTestAsync ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        var  endpoint  =  Environment . GetEnvironmentVariable ( "AZURE_OPENAI_ENDPOINT" )  ? ?  throw  new  Exception ( "Please set AZURE_OPENAI_ENDPOINT environment variable." ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        var  key  =  Environment . GetEnvironmentVariable ( "AZURE_OPENAI_API_KEY" )  ? ?  throw  new  Exception ( "Please set AZURE_OPENAI_API_KEY environment variable." ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-06-14 06:53:12 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        var  deploymentName  =  Environment . GetEnvironmentVariable ( "AZURE_OPENAI_DEPLOY_NAME" )  ? ?  throw  new  Exception ( "Please set AZURE_OPENAI_DEPLOY_NAME environment variable." ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-08 23:50:36 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        var  builder  =  Kernel . CreateBuilder ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2024-06-14 06:53:12 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            . AddAzureOpenAIChatCompletion ( deploymentName ,  endpoint ,  key ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-08 23:50:36 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        var  kernel  =  builder . Build ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        var  agent  =  new  ChatCompletionAgent ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            Kernel  =  kernel , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            Name  =  "assistant" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            Instructions  =  "You are a helpful AI assistant" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        var  skAgent  =  new  SemanticKernelChatCompletionAgent ( agent ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        var  chatMessageContent  =  MessageEnvelope . Create ( new  ChatMessageContent ( AuthorRole . Assistant ,  "Hello" ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        var  reply  =  await  skAgent . SendAsync ( chatMessageContent ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        reply . Should ( ) . BeOfType < MessageEnvelope < ChatMessageContent > > ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        reply . As < MessageEnvelope < ChatMessageContent > > ( ) . From . Should ( ) . Be ( "assistant" ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2024-06-14 06:53:12 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    [ApiKeyFact("AZURE_OPENAI_API_KEY", "AZURE_OPENAI_ENDPOINT", "AZURE_OPENAI_DEPLOY_NAME")]  
						 
					
						
							
								
									
										
										
										
											2024-05-08 23:50:36 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  async  Task  SkChatCompletionAgentChatMessageContentConnectorTestAsync ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        var  endpoint  =  Environment . GetEnvironmentVariable ( "AZURE_OPENAI_ENDPOINT" )  ? ?  throw  new  Exception ( "Please set AZURE_OPENAI_ENDPOINT environment variable." ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        var  key  =  Environment . GetEnvironmentVariable ( "AZURE_OPENAI_API_KEY" )  ? ?  throw  new  Exception ( "Please set AZURE_OPENAI_API_KEY environment variable." ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-06-14 06:53:12 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        var  deploymentName  =  Environment . GetEnvironmentVariable ( "AZURE_OPENAI_DEPLOY_NAME" )  ? ?  throw  new  Exception ( "Please set AZURE_OPENAI_DEPLOY_NAME environment variable." ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-08 23:50:36 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        var  builder  =  Kernel . CreateBuilder ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2024-06-14 06:53:12 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            . AddAzureOpenAIChatCompletion ( deploymentName ,  endpoint ,  key ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-08 23:50:36 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        var  kernel  =  builder . Build ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        var  connector  =  new  SemanticKernelChatMessageContentConnector ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        var  agent  =  new  ChatCompletionAgent ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            Kernel  =  kernel , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            Name  =  "assistant" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            Instructions  =  "You are a helpful AI assistant" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        var  skAgent  =  new  SemanticKernelChatCompletionAgent ( agent ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            . RegisterMiddleware ( connector ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        var  messages  =  new  IMessage [ ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            MessageEnvelope . Create ( new  ChatMessageContent ( AuthorRole . Assistant ,  "Hello" ) ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            new  TextMessage ( Role . Assistant ,  "Hello" ,  from :  "user" ) ,  new  MultiModalMessage ( Role . Assistant , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                [ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    new  TextMessage ( Role . Assistant ,  "Hello" ,  from :  "user" ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                from :  "user" ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        foreach  ( var  message  in  messages ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            var  reply  =  await  skAgent . SendAsync ( message ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            reply . Should ( ) . BeOfType < TextMessage > ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            reply . As < TextMessage > ( ) . From . Should ( ) . Be ( "assistant" ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2024-06-14 06:53:12 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    [ApiKeyFact("AZURE_OPENAI_API_KEY", "AZURE_OPENAI_ENDPOINT", "AZURE_OPENAI_DEPLOY_NAME")]  
						 
					
						
							
								
									
										
										
										
											2024-05-08 23:50:36 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  async  Task  SkChatCompletionAgentPluginTestAsync ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        var  endpoint  =  Environment . GetEnvironmentVariable ( "AZURE_OPENAI_ENDPOINT" )  ? ?  throw  new  Exception ( "Please set AZURE_OPENAI_ENDPOINT environment variable." ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        var  key  =  Environment . GetEnvironmentVariable ( "AZURE_OPENAI_API_KEY" )  ? ?  throw  new  Exception ( "Please set AZURE_OPENAI_API_KEY environment variable." ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-06-14 06:53:12 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        var  deploymentName  =  Environment . GetEnvironmentVariable ( "AZURE_OPENAI_DEPLOY_NAME" )  ? ?  throw  new  Exception ( "Please set AZURE_OPENAI_DEPLOY_NAME environment variable." ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-08 23:50:36 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        var  builder  =  Kernel . CreateBuilder ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2024-06-14 06:53:12 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            . AddAzureOpenAIChatCompletion ( deploymentName ,  endpoint ,  key ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-08 23:50:36 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        var  parameters  =  this . GetWeatherAsyncFunctionContract . Parameters ! . Select ( p  = >  new  KernelParameterMetadata ( p . Name ! ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            Description  =  p . Description , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            DefaultValue  =  p . DefaultValue , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            IsRequired  =  p . IsRequired , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ParameterType  =  p . ParameterType , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        var  function  =  KernelFunctionFactory . CreateFromMethod ( this . GetWeatherAsync ,  this . GetWeatherAsyncFunctionContract . Name ,  this . GetWeatherAsyncFunctionContract . Description ,  parameters ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        builder . Plugins . AddFromFunctions ( "plugins" ,  [ function ] ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        var  kernel  =  builder . Build ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        var  agent  =  new  ChatCompletionAgent ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            Kernel  =  kernel , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            Name  =  "assistant" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            Instructions  =  "You are a helpful AI assistant" , 
							 
						 
					
						
							
								
									
										
										
										
											2024-08-27 14:37:47 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            Arguments  =  new  KernelArguments ( new  OpenAIPromptExecutionSettings ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                ToolCallBehavior  =  ToolCallBehavior . AutoInvokeKernelFunctions 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } ) 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-08 23:50:36 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        var  skAgent  = 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            new  SemanticKernelChatCompletionAgent ( agent ) . RegisterMiddleware ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                new  SemanticKernelChatMessageContentConnector ( ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        var  question  =  "What is the weather in Seattle?" ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        var  reply  =  await  skAgent . SendAsync ( question ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        reply . GetContent ( ) ! . ToLower ( ) . Should ( ) . Contain ( "seattle" ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        reply . GetContent ( ) ! . ToLower ( ) . Should ( ) . Contain ( "sunny" ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2024-04-26 09:21:46 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}