Skip to content

Python: Bump package versions for 1.18.0 release - #8222

Merged
Evan Mattson (moonbox3) merged 2 commits into
microsoft:mainfrom
moonbox3:bump-py-version-20260910
Sep 10, 2026
Merged

Evan Mattson (moonbox3) merged 2 commits into
microsoft:mainfrom
moonbox3:bump-py-version-20260910

Conversation

@moonbox3

@moonbox3 Evan Mattson (moonbox3) commented Sep 10, 2026

Copy link
Copy Markdown
Contributor

Motivation & Context

Prepare the next Python package release from the changes merged since python-1.17.0. This publishes new vector-store capabilities, workflow and tool-loop enhancements, FIDES security improvements, provider updates, and accumulated fixes across the independently versioned Python distributions.

Description & Review Guide

  • What are the major changes? Adds the 1.18.0 CHANGELOG section covering 75 Python PRs; bumps 25 changed distributions according to their lifecycle stages; updates the root package's exact Core pin; raises the Core dependency floor for AG-UI and the Azure AI Search, PostgreSQL, Qdrant, and Redis vector connectors; and refreshes the root and Lab lockfile package versions.
  • What is the impact of these changes? Core and the root package move to 1.18.0; AG-UI moves to 1.3.0; Foundry moves to 1.13.0; GitHub Copilot moves to 2.0.0 for its stable breaking default change; Declarative and OpenAI receive patch releases; and changed alpha/beta packages receive the 260910 Pacific date stamp.
  • What do you want reviewers to focus on? Confirm the CHANGELOG categorization and package coverage, the released-package semver decisions, the intentionally selective prerelease bumps, and the five Core floor updates.

Related Issue

N/A - scheduled Python release preparation.

Contribution Checklist

  • The code builds clean without any errors or warnings
  • All unit tests pass, and I have added new tests where possible
  • The PR follows the Contribution Guidelines
  • This PR is linked to an issue and there is no other open PR for this issue (see Related Issue above).
  • This is not a breaking change. If it is a breaking change, add the breaking change label (or add "[BREAKING]" to the title prefix, before or after any language prefix) - a workflow keeps the label and title prefix in sync automatically.

Bump agent-framework-core for two patch-level fixes and bump the root agent-framework package to keep its exact core pin aligned. No beta cohort bump was applied, and no non-core dependency floors required updates.

Copilot-Session: 97b63d4b-c53a-4754-9ebc-020d9018cbce
Rebuild the release from the full python-1.17.0..upstream/main range after the original tag selector matched prerelease tags and left the compare base empty. Record all 75 Python PR commits, bump only packages with shipping changes, use minor or patch semver according to their public changes, stamp changed prerelease packages 260910 without a beta cohort bump, and raise core floors only for AG-UI and the vector connectors that require new 1.18.0 APIs.

Copilot-Session: 97b63d4b-c53a-4754-9ebc-020d9018cbce
Copilot AI balanced review requested due to automatic review settings September 10, 2026 09:06
@agent-framework-automation agent-framework-automation Bot added documentation Usage: [Issues, PRs], Target: documentation in the code base and learn docs python Usage: [Issues, PRs], Target: Python lab Usage: [Issues, PRs], Target: lab packages breaking change Usage: [PRs], Target: all PRs that introduce changes that are not backward compatible labels Sep 10, 2026
@moonbox3
Evan Mattson (moonbox3) marked this pull request as ready for review September 10, 2026 09:09

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.

🟡 Changes recommended

Breaking changelog scopes conflict with the SemVer bumps selected for several released packages.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Pull request overview

Prepares the Python 1.18.0 release across independently versioned distributions.

Changes:

  • Adds the 1.18.0 changelog and comparison links.
  • Bumps 25 distributions and five Core dependency floors.
  • Synchronizes root and Lab lockfiles.
File summaries
File Description
python/CHANGELOG.md Adds 1.18.0 release notes.
python/pyproject.toml Bumps root and Core pin.
python/uv.lock Synchronizes workspace versions.
python/packages/a2a/pyproject.toml Bumps beta version.
python/packages/ag-ui/pyproject.toml Bumps minor version and Core floor.
python/packages/anthropic/pyproject.toml Bumps beta version.
python/packages/azure-ai-search/pyproject.toml Bumps beta version and Core floor.
python/packages/azure-cosmos/pyproject.toml Bumps beta version.
python/packages/bedrock/pyproject.toml Bumps beta version.
python/packages/chatkit/pyproject.toml Bumps beta version.
python/packages/claude/pyproject.toml Bumps beta version.
python/packages/copilotstudio/pyproject.toml Bumps beta version.
python/packages/core/pyproject.toml Bumps Core to 1.18.0.
python/packages/declarative/pyproject.toml Applies patch bump.
python/packages/devui/pyproject.toml Bumps beta version.
python/packages/foundry/pyproject.toml Applies minor bump.
python/packages/foundry_hosting/pyproject.toml Bumps beta version.
python/packages/gemini/pyproject.toml Bumps beta version.
python/packages/github_copilot/pyproject.toml Applies breaking major bump.
python/packages/hyperlight/pyproject.toml Bumps beta version.
python/packages/lab/pyproject.toml Bumps beta version.
python/packages/lab/uv.lock Synchronizes Lab version.
python/packages/mem0/pyproject.toml Bumps beta version.
python/packages/openai/pyproject.toml Applies patch bump.
python/packages/postgres/pyproject.toml Bumps alpha version and Core floor.
python/packages/purview/pyproject.toml Bumps beta version.
python/packages/qdrant/pyproject.toml Bumps alpha version and Core floor.
python/packages/redis/pyproject.toml Bumps beta version and Core floor.
Review details
  • Files reviewed: 26/28 changed files
  • Comments generated: 1
  • Review effort level: Balanced

💡 Add a code-review agent skill for context-aware, tailored reviews. Learn more in the docs.

Comment thread python/CHANGELOG.md
@moonbox3 Evan Mattson (moonbox3) changed the title [BREAKING] Python: Bump package versions for 1.18.0 release Python: Bump package versions for 1.18.0 release Sep 10, 2026

@github-actions github-actions Bot 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.

MAF Automated Review — Iteration 1

Result: No findings
Scope: full PR (2 commit(s)): 53d7f403b99c, 953ff357924e
Model: gpt-5.6-sol-fast

Overview

This release preparation coherently updates the selected package versions, root/Core coupling, dependency floors for packages that consume new Core APIs, and both lockfiles. The root lock validates, package coverage matches the new changelog section, and no runtime or shared-resource behavior changes in this PR. The remaining candidates were either compatible with the documented strict floor policy or pre-existing outside the authoritative review range, so no publishable defect was established.

Reviewed the supplied pull-request change set across correctness, security/reliability, architecture, and failure behavior.
No publishable findings remained after source verification for this scope.

@moonbox3
Evan Mattson (moonbox3) added this pull request to the merge queue Sep 10, 2026
Merged via the queue into microsoft:main with commit 3ad2b07 Sep 10, 2026
69 of 70 checks passed
Manjunath Janardhan (manjunathshiva) added a commit to manjunathshiva/agent-framework that referenced this pull request Sep 15, 2026
…ride signature and rich content

Addresses all four open review threads on microsoft#8078.

**Back-compat (`_chat_client.py:1`).** `seen_function_call_output_ids` is off
`_parse_chunk_from_openai` entirely and travels in the parse `options` mapping
under a private key, so the signature is byte-identical to the one released
`agent-framework-foundry` wheels override. All four Foundry changes this PR made
to accommodate the parameter are reverted.

Re-derived the analysis as asked, because the dependency state moved: Foundry's
floor rose from `agent-framework-openai>=1.10.0,<2` to `>=1.14.2,<2` in microsoft#8222.
That does not close the break -- `agent-framework-foundry` 1.13.0 still overrides
the method with the old signature, and `>=1.14.2,<2` still admits a later 1.14.x
carrying this change -- so the signature still cannot grow. Two tests pin it: one
structural on the parameter list, one behavioural through a subclass that forwards
only the four arguments it knows about.

**Rich content (`_chat_client.py:2715`).** List-shaped `output` now maps to
canonical `Content` items instead of being flattened: text parts to text, image
and file URLs to `from_uri` with the media type inferred, `file_id` to
`from_hosted_file`, inline base64 to `from_data`. A hosted reference is kept
addressable rather than stringified, since only the issuing provider can resolve
it and text would destroy that. Parts are read field-by-field because transports
and test doubles deliver mappings as well as SDK models, which the previous
behaviour handled.

**Duplicate serialization (`_chat_client.py:365`).** `_plain_function_call_output`
is deleted rather than relocated. The degrade path reuses the existing
`_serialize_provider_payload` and `_stringify_mcp_output`, and the mapper now
lives beside them in the class instead of being a fourth mechanism.

**`Any` (`_chat_client.py:369`).** Concrete SDK types throughout, including a named
`ResponseFunctionCallOutputPart` union. Typing them is what surfaced the
`Package Checks` CI failure: `call_id` became `Optional[str]` in the SDK bump, so
the validated id is threaded from `_pairable_function_call_output_call_id` rather
than re-derived where it cannot be narrowed.

One behaviour change to weigh: for an output with no text parts, the flat
`result` is now empty because `from_function_result` derives it from text items.
A consumer reading only `result` and not `items` previously saw JSON there.

Each part mapping is wrapped so a content factory rejecting provider data degrades
that part to JSON instead of raising out of a streaming parse and failing the
request; the old flattening path could not realistically raise.
Anish Mehta (anishmehta24) pushed a commit to anishmehta24/agent-framework that referenced this pull request Sep 16, 2026
…sults reach transports (microsoft#8078)

* Python: parse Responses function_call_output so hosted tool results reach transports

A hosted tool that executes server-side -- for example a Foundry Toolbox
dispatching through its generic `call_tool` wrapper -- returns its result as a
standalone `function_call_output` Responses item rather than on the originating
call item. None of the three parse dispatch sites handled that item type, so it
fell through to the `Unparsed ...` debug log and was discarded. No
`Content.from_function_result` was produced, and AG-UI consequently emitted
TOOL_CALL_END with no matching TOOL_CALL_RESULT, falling back to treating the
call as declaration-only. The model still received the real output, so only the
client lost the structured result.

Add a `function_call_output` branch to all three sites -- the non-streaming
`_parse_response_from_openai` and both streaming `response.output_item.added` /
`.done` handlers -- sharing one `_parse_function_call_output_content` helper so
the lists cannot drift again. `output` is a string or a list of input-content
parts, so it is normalized through the existing `_stringify_mcp_output` rather
than JSON-encoding provider models.

The streaming handlers emit from whichever event first carries a populated
`output` and record the item id in a per-request set, so the other event cannot
produce a second result. Keyed on the item id rather than `call_id`, which the
function-calling loop contract says must not be assumed unique forever.

Reviewed against docs/specs/004-python-function-calling-loop.md, which covers
provider serialization of function calls and results: no result is orphaned or
duplicated, and the streaming and non-streaming paths agree.

Fixes microsoft#8068

* Python: forward the function_call_output seen-id set through Foundry parse overrides

`RawFoundryChatClient` and `RawFoundryAgentChatClient` override
`_parse_chunk_from_openai` to intercept oauth_consent items and then delegate to
`RawOpenAIChatClient`. Both had the pre-change signature, so once the base
started passing `seen_function_call_output_ids` every Foundry streaming call
raised `TypeError: _parse_chunk_from_openai() got an unexpected keyword
argument`.

Accept and forward the new parameter in both overrides, and update the two
delegation assertions that pin the forwarded argument list.

Caught against a live Foundry Responses endpoint; `poe test -P foundry` also
reproduces it, but that package is not in the validation command list in
docs/specs/004-python-function-calling-loop.md even though it subclasses the
OpenAI Responses client.

* Python: do not emit an unpairable function_call_output result

Review follow-up. `Content.from_function_result` does not validate `call_id`, so a
`function_call_output` item carrying a blank one produced an orphaned result:
transports drop it (`_emit_tool_result` returns early on a falsy `call_id`) and
the outbound serializer would re-send it as an unpairable
`function_call_output` input item on the next turn. These items are synthesized
by the hosting layer, so a blank `call_id` is a realistic host-side defect
rather than a theoretical one, and the function-calling loop contract requires
that no result becomes orphaned.

Extract the emission gate into `_function_call_output_has_result` so the
populated-output and pairable-call_id checks are shared by all three dispatch
sites instead of being repeated at each one.

* Python: keep function_call_output parsing safe on the declared openai SDK floor

Address review on two counts.

`name` is not on `ResponseFunctionToolCallOutputItem` in openai 2.25.0, the
declared floor -- that version ships only call_id/id/output/status/type. Reading
it as an attribute raised `AttributeError` out of the shared parse helper, which
all three dispatch sites call, so on any supported SDK below the release that
added the field the whole response parse failed rather than merely dropping the
result. Read it with `getattr`. The other attributes touched here
(type/status/id/call_id/output) are all present on the floor, and the two module
helpers already used `getattr`.

`output` may also be a list of input-content parts. Passing those provider
models straight to `_stringify_mcp_output` fell through to
`json.dumps(..., default=str)` and embedded a Python repr in the result text sent
back to the model -- e.g. `"ResponseInputImage(detail='auto', ...)"`. Dump each
part first so text extraction still works and non-text parts serialize as
readable JSON.

Both paths are now regression-tested, including a stub item shaped like the
2.25.0 field set.

* Python: rework function_call_output parsing to keep the released override signature and rich content

Addresses all four open review threads on microsoft#8078.

**Back-compat (`_chat_client.py:1`).** `seen_function_call_output_ids` is off
`_parse_chunk_from_openai` entirely and travels in the parse `options` mapping
under a private key, so the signature is byte-identical to the one released
`agent-framework-foundry` wheels override. All four Foundry changes this PR made
to accommodate the parameter are reverted.

Re-derived the analysis as asked, because the dependency state moved: Foundry's
floor rose from `agent-framework-openai>=1.10.0,<2` to `>=1.14.2,<2` in microsoft#8222.
That does not close the break -- `agent-framework-foundry` 1.13.0 still overrides
the method with the old signature, and `>=1.14.2,<2` still admits a later 1.14.x
carrying this change -- so the signature still cannot grow. Two tests pin it: one
structural on the parameter list, one behavioural through a subclass that forwards
only the four arguments it knows about.

**Rich content (`_chat_client.py:2715`).** List-shaped `output` now maps to
canonical `Content` items instead of being flattened: text parts to text, image
and file URLs to `from_uri` with the media type inferred, `file_id` to
`from_hosted_file`, inline base64 to `from_data`. A hosted reference is kept
addressable rather than stringified, since only the issuing provider can resolve
it and text would destroy that. Parts are read field-by-field because transports
and test doubles deliver mappings as well as SDK models, which the previous
behaviour handled.

**Duplicate serialization (`_chat_client.py:365`).** `_plain_function_call_output`
is deleted rather than relocated. The degrade path reuses the existing
`_serialize_provider_payload` and `_stringify_mcp_output`, and the mapper now
lives beside them in the class instead of being a fourth mechanism.

**`Any` (`_chat_client.py:369`).** Concrete SDK types throughout, including a named
`ResponseFunctionCallOutputPart` union. Typing them is what surfaced the
`Package Checks` CI failure: `call_id` became `Optional[str]` in the SDK bump, so
the validated id is threaded from `_pairable_function_call_output_call_id` rather
than re-derived where it cannot be narrowed.

One behaviour change to weigh: for an output with no text parts, the flat
`result` is now empty because `from_function_result` derives it from text items.
A consumer reading only `result` and not `items` previously saw JSON there.

Each part mapping is wrapped so a content factory rejecting provider data degrades
that part to JSON instead of raising out of a streaming parse and failing the
request; the old flattening path could not realistically raise.

* Python: defer in-progress hosted function results

Keep streaming placeholders from consuming the final output's deduplication ID. Cover completed empty results and the parser-to-AG-UI text-only boundary, and clarify that frontend attachment display is outside the parser's scope.

---------

Co-authored-by: Eduard van Valkenburg <eavanvalkenburg@users.noreply.github.com>
Co-authored-by: eavanvalkenburg <github@vanvalkenburg.eu>

This branch was previously deployed

1 inactive deployment
github-app-auth 953ff357 Deployed Sep 10, 2026 by moonbox3 via add_label #22398
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

breaking change Usage: [PRs], Target: all PRs that introduce changes that are not backward compatible documentation Usage: [Issues, PRs], Target: documentation in the code base and learn docs lab Usage: [Issues, PRs], Target: lab packages python Usage: [Issues, PRs], Target: Python

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants