Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We鈥檒l occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rewrite how native skill functions are invoked #1133

Merged
merged 2 commits into from May 24, 2023

Conversation

stephentoub
Copy link
Member

Motivation and Context

Simplify native function invocation and prepare for additional functionality.

Description

The current approach involves exactly matching the target method against a fixed set of known signatures. I've revised it to instead be a little more dynamic, such that it instead just looks for valid parameters (e.g. currently up to one string and up to one SKContext) and valid return types (e.g. void, string, context, and tasks of each of those), and any combination of those is valid. This not only allows the implementation to be simplified and supports combinations that someone could reasonably expect to be valid (e.g. Func(context, string) rather than just Func(string, context)), but it also sets it up to easily allow for additional features to be added, e.g. parameters that match by name against context variables such that any number of parameters could be supported, non-string arguments once those are allowed in context variables, etc.

Contribution Checklist

cc: @dluc, @shawncal

@github-actions github-actions bot added .NET Issue or Pull requests regarding .NET code kernel Issues or pull requests impacting the core kernel kernel.core labels May 21, 2023
The current approach involves exactly matching the target method against a fixed set of known signatures.  I've revised it to instead be a little more dynamic, such that it instead just looks for valid parameters (e.g. currently up to one string and up to one SKContext) and valid return types (e.g. void, string, context, and tasks of each of those), and any combination of those is valid.  This not only allows the implementation to be simplified and supports combinations that someone could reasonably expect to be valid (e.g. Func(context, string) rather than just Func(string, context)), but it also sets it up to easily allow for additional features to be added, e.g. parameters that match by name against context variables such that any number of parameters could be supported, non-string arguments once those are allowed in context variables, etc.
@shawncal
Copy link
Member

Great stuff! I cloned, played with this, ran all unit tests, integration tests. All looks good.

@shawncal shawncal merged commit fb0d1b8 into microsoft:main May 24, 2023
18 checks passed
@stephentoub stephentoub deleted the funcinvoke branch May 27, 2023 20:42
@microsoft microsoft deleted a comment May 27, 2023
shawncal pushed a commit to shawncal/semantic-kernel that referenced this pull request Jul 6, 2023
### Motivation and Context

Simplify native function invocation and prepare for additional
functionality.

### Description

The current approach involves exactly matching the target method against
a fixed set of known signatures. I've revised it to instead be a little
more dynamic, such that it instead just looks for valid parameters (e.g.
currently up to one string and up to one SKContext) and valid return
types (e.g. void, string, context, and tasks of each of those), and any
combination of those is valid. This not only allows the implementation
to be simplified and supports combinations that someone could reasonably
expect to be valid (e.g. Func(context, string) rather than just
Func(string, context)), but it also sets it up to easily allow for
additional features to be added, e.g. parameters that match by name
against context variables such that any number of parameters could be
supported, non-string arguments once those are allowed in context
variables, etc.

### Contribution Checklist
<!-- Before submitting this PR, please make sure: -->
- [x] The code builds clean without any errors or warnings
- [x] The PR follows SK Contribution Guidelines
(https://github.com/microsoft/semantic-kernel/blob/main/CONTRIBUTING.md)
- [x] The code follows the .NET coding conventions
(https://learn.microsoft.com/dotnet/csharp/fundamentals/coding-style/coding-conventions)
verified with `dotnet format`
- [x] All unit tests pass, and I have added new tests where possible
- [x] I didn't break anyone 馃槃

cc: @dluc, @shawncal
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
kernel Issues or pull requests impacting the core kernel .NET Issue or Pull requests regarding .NET code
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

7 participants