# Copyright (c) Microsoft. All rights reserved. import asyncio import os import sys from datetime import datetime from azure.identity import AzureCliCredential from semantic_kernel.agents import ChatCompletionAgent, ChatHistoryAgentThread from semantic_kernel.connectors.ai import FunctionChoiceBehavior from semantic_kernel.connectors.ai.open_ai import AzureChatCompletion from semantic_kernel.functions import KernelArguments from semantic_kernel.kernel import Kernel # Adjust the sys.path so we can use the GitHubPlugin and GitHubSettings classes # This is so we can run the code from the samples/learn_resources/agent_docs directory # If you are running code from your own project, you may not need need to do this. sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))) from plugins.GithubPlugin.github import GitHubPlugin, GitHubSettings # noqa: E402 """ The following sample demonstrates how to create a simple, ChatCompletionAgent to use a GitHub plugin to interact with the GitHub API. This is the full code sample for the Semantic Kernel Learn Site: How-To: Chat Completion Agent https://learn.microsoft.com/semantic-kernel/frameworks/agent/examples/example-chat-agent?pivots=programming-language-python """ async def main(): kernel = Kernel() # Add the AzureChatCompletion AI Service to the Kernel service_id = "agent" kernel.add_service(AzureChatCompletion(service_id=service_id, credential=AzureCliCredential())) settings = kernel.get_prompt_execution_settings_from_service_id(service_id=service_id) # Configure the function choice behavior to auto invoke kernel functions settings.function_choice_behavior = FunctionChoiceBehavior.Auto() # Set your GitHub Personal Access Token (PAT) value here gh_settings = GitHubSettings(token="") # nosec kernel.add_plugin(plugin=GitHubPlugin(gh_settings), plugin_name="GithubPlugin") current_time = datetime.now().isoformat() # Create the agent agent = ChatCompletionAgent( kernel=kernel, name="SampleAssistantAgent", instructions=f""" You are an agent designed to query and retrieve information from a single GitHub repository in a read-only manner. You are also able to access the profile of the active user. Use the current date and time to provide up-to-date details or time-sensitive responses. The repository you are querying is a public repository with the following name: microsoft/semantic-kernel The current date and time is: {current_time}. """, arguments=KernelArguments(settings=settings), ) thread: ChatHistoryAgentThread = None is_complete: bool = False while not is_complete: user_input = input("User:> ") if not user_input: continue if user_input.lower() == "exit": is_complete = True break arguments = KernelArguments(now=datetime.now().strftime("%Y-%m-%d %H:%M")) async for response in agent.invoke(messages=user_input, thread=thread, arguments=arguments): print(f"{response.content}") thread = response.thread if __name__ == "__main__": asyncio.run(main())