# Copyright (c) Microsoft. All rights reserved. import asyncio import datetime import locale from typing import Annotated from semantic_kernel.functions.kernel_arguments import KernelArguments from semantic_kernel.functions.kernel_function_decorator import kernel_function from semantic_kernel.kernel import Kernel # This example shows how to use kernel arguments when invoking functions. class StaticTextPlugin: """A plugin for generating static text.""" @kernel_function(name="uppercase", description="Convert text to uppercase") def uppercase( self, text: Annotated[str, "The input text"] ) -> Annotated[str, "The output is the text in uppercase"]: """Convert text to uppercase. Args: text (str): The text to convert to uppercase. Returns: str: The text in uppercase. """ return text.upper() @kernel_function(name="append_day", description="Append the day variable") def append_day( self, input: Annotated[str, "The input text"], day: Annotated[str, "The day to append"] ) -> Annotated[str, "The output is the text with the day appended"]: """Append the day variable. Args: input (str): The input text to append the day to. day (str): The day to append. Returns: str: The text with the day appended. """ return f"{input} {day}" def get_day_of_week_for_locale(): """Get the day of the week for the current locale.""" locale.setlocale(locale.LC_TIME, "") return datetime.datetime.now().strftime("%A") async def main(): kernel = Kernel() text_plugin = kernel.add_plugin(StaticTextPlugin(), "TextPlugin") arguments = KernelArguments(input="Today is:", day=get_day_of_week_for_locale()) result = await kernel.invoke(text_plugin["append_day"], arguments) # The result returned is of type FunctionResult. Printing the result calls the __str__ method. print(result) # Note: if you need access to the result metadata, you can do the following # metadata = result.metadata if __name__ == "__main__": asyncio.run(main())