Files
semantic-kernel/python/samples/learn_resources/plugin.py
T
Eduard van Valkenburg b1f4769ba5 Python: updated pydantic 2.10.3 works again (#9923)
### 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.
-->
Manual update to pydantic requirement, they fixed the incompatibility in
10.3 (10.<3 was broken).

We need one more fix in Pydantic 2.10, which should come in 2.10.4:
https://github.com/pydantic/pydantic/issues/10910
this is the issue: https://github.com/pydantic/pydantic/issues/11024
Comes into play with some of the vector stores.

So excluded 2.10 smaller then 2.10.4.

Closes #9788

### 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-12-12 21:08:46 +00:00

61 lines
1.5 KiB
Python

# Copyright (c) Microsoft. All rights reserved.
import asyncio
from typing import Annotated
from semantic_kernel import Kernel
from semantic_kernel.functions import kernel_function
# Let's define a light plugin
class LightPlugin:
is_on: bool = False
@kernel_function(
name="get_state",
description="Gets the state of the light.",
)
def get_state(
self,
) -> Annotated[str, "the output is a string"]:
"""Returns the state result of the light."""
return "On" if self.is_on else "Off"
@kernel_function(
name="change_state",
description="Changes the state of the light.",
)
def change_state(
self,
new_state: Annotated[bool, "the new state of the light"],
) -> Annotated[str, "the output is a string"]:
"""Changes the state of the light."""
self.is_on = new_state
state = self.get_state()
print(f"The light is now: {state}")
return state
async def main():
# Initialize the kernel
kernel = Kernel()
light_plugin = kernel.add_plugin(
LightPlugin(),
plugin_name="LightPlugin",
)
result = await kernel.invoke(light_plugin["get_state"])
print(f"The light is: {result}")
print("Changing the light's state...")
# Kernel Arguments are passed in as kwargs.
result = await kernel.invoke(light_plugin["change_state"], new_state=True)
print(f"The light is: {result}")
# Run the main function
if __name__ == "__main__":
asyncio.run(main())