Skip to content

Python: fix: honor include_in_function_choices in Anthropic, Bedrock, Google AI, and Vertex AI tool formatters - #14625

Merged
Eduard van Valkenburg (eavanvalkenburg) merged 1 commit into
microsoft:mainfrom
wasim-builds:fix/formatters-include-in-function-choices
Oct 26, 2026
Merged

Eduard van Valkenburg (eavanvalkenburg) merged 1 commit into
microsoft:mainfrom
wasim-builds:fix/formatters-include-in-function-choices

Conversation

@wasim-builds

Copy link
Copy Markdown
Contributor

Summary

Fixes #14615

When defining a kernel function with parameters decorated with include_in_function_choices=False (e.g. internal tokens or caller-supplied arguments that should not be visible to the model), the OpenAI formatters respected this flag by excluding them from schema properties and required fields. However, Anthropic, Bedrock, Google AI, Vertex AI, and Bedrock Agent formatters were ignoring include_in_function_choices, causing these hidden parameters to be emitted into the model tool schema.

Changes

  1. Filtered parameters by p.include_in_function_choices for both properties and required fields in:
    • semantic_kernel/connectors/ai/anthropic/services/utils.py
    • semantic_kernel/connectors/ai/bedrock/services/model_provider/utils.py
    • semantic_kernel/connectors/ai/google/google_ai/services/utils.py
    • semantic_kernel/connectors/ai/google/vertex_ai/services/utils.py
    • semantic_kernel/agents/bedrock/action_group_utils.py
  2. Added unit tests for each provider verifying that parameters marked with include_in_function_choices=False are omitted from the generated tool definitions.

Verification

  • Tested with Anthropic, Bedrock, Google AI, Vertex AI, and Bedrock Agent unit test suites (all passed).

… Google AI, and Vertex AI tool formatters

Co-authored-by: VANDRANKI <[email protected]>
Copilot AI balanced review requested due to automatic review settings October 17, 2026 12:26

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@semantic-kernel-automation semantic-kernel-automation Bot added the python Pull requests for the Python Semantic Kernel label Oct 17, 2026
Merged via the queue into microsoft:main with commit 06368f4 Oct 26, 2026
37 checks passed
westey (westey-m) pushed a commit to westey-m/semantic-kernel-1 that referenced this pull request Nov 10, 2026
…ction_choices=False (microsoft#14774)

### 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.
-->

Parameters declared with `{"include_in_function_choices": False}` are
left out of the tool schema that is sent to the model, and the docs
describe them as values the host supplies through `KernelArguments`.
`Kernel.invoke_function_call` still accepted those names in a model tool
call, so a value from the model took precedence over the
invocation-level value.

This change makes argument handling match the schema: a tool call can
only set the parameters that were advertised to the model. It is the
counterpart of microsoft#14625, which stopped advertising these parameters in the
Anthropic, Bedrock, Google AI and Vertex AI tool formats. There is no
related open issue.

### Description

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

- `Kernel.invoke_function_call` builds the set of accepted argument
names from the parameters that have `include_in_function_choices=True`.
A tool call that includes a hidden parameter gets the existing "Received
unexpected argument(s)" result and the function is not invoked, so the
model can retry without it.
- Hidden parameters still get their value from the invocation-level
`KernelArguments` or from their default. The required-parameter check is
unchanged.
- The `kernel_function` docstring now states that a tool call from the
model cannot set such a parameter.
- Tests in `tests/unit/kernel/test_kernel.py` cover a hidden name in
dict and JSON-string arguments (the function must not run and the result
must be the unexpected-argument message) and a host-supplied hidden
value that still reaches the function. The two rejection tests fail
without the change.

Compatibility: Bedrock agents create their function schema server-side
when the action group is created, so action groups created before microsoft#14625
(released in python 1.46.0) still list hidden parameters. Calls from
such agents that include a hidden name now get the unexpected-argument
result until the action group is re-created.

Validation, run on Python 3.13 (macOS) in an environment built like the
unit-test workflow (`uv pip install --editable ".[<all extras>]" --group
dev`), from `python/` unless noted:

- `uv run --no-sync python -u -X faulthandler -m pytest -p
no:cacheprovider -n auto ./tests/unit
--ignore=tests/unit/processes/dapr_runtime`: 4983 passed, 1 skipped, 5
xfailed. The dapr suite was not run locally.
- `uv run --no-sync pytest -p no:cacheprovider
tests/unit/kernel/test_kernel.py -k hidden_parameter`: 3 passed.
- `uv run --no-sync pre-commit run --config
python/.pre-commit-config.yaml --files <the three changed files>` (from
the repo root): all hooks passed or had no files to check.
- `uv run --no-sync mypy -p semantic_kernel --config-file mypy.ini`: 42
errors in 7 files, none in the changed files. Unmodified `main` reports
the same total (42 errors in 7 files) in this environment.

### 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 😄

This branch was previously deployed

1 inactive deployment
github-app-auth — 44203850 Deployed Oct 17, 2026 by wasim-builds via team_check #644
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

python Pull requests for the Python Semantic Kernel

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Python: Bug: Anthropic, Bedrock, Google AI and Vertex AI tool formatters ignore include_in_function_choices=False

3 participants