# Copyright (c) Microsoft. All rights reserved. import asyncio from samples.sk_service_configurator import add_service from semantic_kernel.connectors.ai import PromptExecutionSettings from semantic_kernel.contents import ChatHistory from semantic_kernel.core_plugins import ConversationSummaryPlugin from semantic_kernel.kernel import Kernel from semantic_kernel.prompt_template import InputVariable, PromptTemplateConfig # Initialize the kernel kernel = Kernel() # Add the service to the kernel # use_chat: True to use chat completion, False to use text completion kernel = add_service(kernel=kernel, use_chat=True) service_id = "default" # The following execution settings are used for the ConversationSummaryPlugin execution_settings = PromptExecutionSettings( service_id=service_id, max_tokens=ConversationSummaryPlugin._max_tokens, temperature=0.1, top_p=0.5 ) prompt_template_config = PromptTemplateConfig( template=ConversationSummaryPlugin._summarize_conversation_prompt_template, description="Given a section of a conversation transcript, summarize the part of the conversation.", execution_settings=execution_settings, ) # Import the ConversationSummaryPlugin kernel.add_plugin( ConversationSummaryPlugin(kernel=kernel, prompt_template_config=prompt_template_config), plugin_name="ConversationSummaryPlugin", ) # <FunctionFromPrompt> # Create the function with the prompt kernel.add_function( prompt_template_config=PromptTemplateConfig( template="""{{ConversationSummaryPlugin.SummarizeConversation $history}} User: {{$request}} Assistant: """, description="Chat with the assistant", execution_settings=[ PromptExecutionSettings(service_id="default", temperature=0.0, max_tokens=1000), PromptExecutionSettings(service_id="gpt-3.5-turbo", temperature=0.2, max_tokens=4000), PromptExecutionSettings(service_id="gpt-4", temperature=0.3, max_tokens=8000), ], input_variables=[ InputVariable(name="request", description="The user input", is_required=True), InputVariable( name="history", description="The history of the conversation", is_required=True, allow_dangerously_set_content=True, ), ], ), plugin_name="Summarize_Conversation", function_name="Chat", description="Chat with the assistant", ) # </FunctionFromPrompt> # Create the history history = ChatHistory() async def main(): while True: try: request = input("User:> ") except (KeyboardInterrupt, EOFError): break if request == "exit": break result = await kernel.invoke( plugin_name="Summarize_Conversation", function_name="Chat", request=request, history=history, ) # Add the request to the history history.add_user_message(request) history.add_assistant_message(str(result)) print(f"Assistant:> {result}") print("\n\nExiting chat...") # Run the main function if __name__ == "__main__": asyncio.run(main())