Files
semantic-kernel/python/samples/concepts/functions/kernel_arguments.py
T
Eduard van Valkenburg 81cdde24fc Python: upgraded all files to 310 plus format and removed from future (#6353)
### Motivation and Context

<!-- Thank you for your contribution to the semantic-kernel repo!
Please help reviewers and future users, providing the following
information:
  1. Why is this change required?
  2. What problem does it solve?
  3. What scenario does it contribute to?
  4. If it fixes an open issue, please link to the issue here.
-->
Now that we only support 310 and up, we could unify all files, to use
the new style typing and annotations.

### Description

<!-- Describe your changes, the overall approach, the underlying design.
These notes will help understanding how your code works. Thanks! -->

### Contribution Checklist

<!-- Before submitting this PR, please make sure: -->

- [x] The code builds clean without any errors or warnings
- [x] The PR follows the [SK Contribution
Guidelines](https://github.com/microsoft/semantic-kernel/blob/main/CONTRIBUTING.md)
and the [pre-submission formatting
script](https://github.com/microsoft/semantic-kernel/blob/main/CONTRIBUTING.md#development-scripts)
raises no violations
- [x] All unit tests pass, and I have added new tests where possible
- [x] I didn't break anyone 😄
2024-05-21 16:33:08 +00:00

72 lines
2.1 KiB
Python

# 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())