Repository navigation
Python: Drop 3.10 support and expand CI coverage through 3.14 - #14708
Open
Eduard van Valkenburg (eavanvalkenburg) wants to merge 10 commits into
Open
Eduard van Valkenburg (eavanvalkenburg) wants to merge 10 commits into
Eduard van Valkenburg (eavanvalkenburg) wants to merge 10 commits into
Conversation
Eduard van Valkenburg (eavanvalkenburg)
requested a review
from a team
as a code owner
November 2, 2026 18:35
Eduard van Valkenburg (eavanvalkenburg)
deployed
to
github-app-auth
November 2, 2026 18:35 — with
GitHub Actions
Active
Copilot started reviewing on behalf of
Eduard van Valkenburg (eavanvalkenburg)
November 2, 2026 18:35
Contributor
There was a problem hiding this comment.
🟡 Changes recommended
The required Python 3.15 all-extras jobs fail before pytest because the exact onnxruntime-genai and torch pins have no compatible artifacts in the lockfile.
1 open issue
What changed in this PR
This PR raises the Python SDK minimum to 3.11, removes Python 3.10 compatibility code, and aligns CI and developer tooling with the updated version policy.
Changes:
- Expands required unit-test coverage to Python 3.11–3.15 and moves integration tests and local defaults to Python 3.14.
- Replaces obsolete typing backports, removes compatibility workarounds, and adds regression tests for
Anyhandler return annotations. - Updates package requirements, sample metadata, documentation, and development tools.
| File | Description |
|---|---|
| README.md | Updates supported Python versions. |
| python/tests/unit/kernel/test_kernel.py | Removes an outdated compatibility docstring. |
| python/tests/unit/data/conftest.py | Removes the Python 3.10 event-loop workaround. |
| python/tests/unit/agents/runtime/test_runtime.py | Tests Any returns for message and RPC handlers. |
| python/tests/unit/agents/orchestration/test_sequential.py | Removes Python 3.10-specific skips. |
| python/tests/unit/agents/orchestration/test_magentic.py | Removes Python 3.10-specific skips. |
| python/tests/unit/agents/orchestration/test_handoff.py | Removes Python 3.10-specific skips. |
| python/tests/unit/agents/orchestration/test_group_chat.py | Removes Python 3.10-specific skips. |
| python/tests/unit/agents/orchestration/test_concurrent.py | Removes Python 3.10-specific skips. |
| python/semantic_kernel/schema/kernel_json_schema_builder.py | Removes an obsolete comment; behavior is unchanged. |
| python/semantic_kernel/data/vector.py | Uses standard-library Self. |
| python/semantic_kernel/contents/streaming_content_mixin.py | Uses standard-library Self. |
| python/semantic_kernel/contents/history_reducer/chat_history_truncation_reducer.py | Removes the Self backport guard. |
| python/semantic_kernel/contents/history_reducer/chat_history_summarization_reducer.py | Removes the Self backport guard. |
| python/semantic_kernel/contents/history_reducer/chat_history_reducer.py | Uses standard-library Self. |
| python/semantic_kernel/connectors/weaviate.py | Uses standard-library Self. |
| python/semantic_kernel/connectors/sql_server.py | Uses standard-library Self. |
| python/semantic_kernel/connectors/mongodb.py | Uses standard-library Self. |
| python/semantic_kernel/connectors/mcp.py | Uses standard-library Self. |
| python/semantic_kernel/connectors/ai/realtime_client_base.py | Uses standard-library Self. |
| python/semantic_kernel/agents/runtime/core/type_helpers.py | Removes the AnyType compatibility shim. |
| python/semantic_kernel/agents/runtime/core/topic.py | Uses standard-library Self. |
| python/semantic_kernel/agents/runtime/core/telemetry/tracing_config.py | Uses standard-library NotRequired. |
| python/semantic_kernel/agents/runtime/core/routed_agent.py | Checks handler return types against Any directly. |
| python/semantic_kernel/agents/runtime/core/base_agent.py | Uses standard-library Self. |
| python/semantic_kernel/agents/runtime/core/agent_id.py | Removes the Self backport guard. |
| python/semantic_kernel/agents/orchestration/handoffs.py | Uses standard-library Self. |
| python/semantic_kernel/agents/open_ai/azure_responses_agent.py | Removes the Self backport guard. |
| python/semantic_kernel/agents/open_ai/azure_assistant_agent.py | Removes the Self backport guard. |
| python/samples/learn_resources/README.md | Raises the documented Python minimum. |
| python/samples/getting_started_with_agents/copilot_studio/README.md | Raises the documented Python minimum. |
| python/samples/demos/mcp_with_oauth/server/uv.lock | Removes Python 3.10-only dependencies and artifacts. |
| python/samples/demos/mcp_with_oauth/server/pyproject.toml | Requires Python 3.11+. |
| python/samples/demos/mcp_with_oauth/pyproject.toml | Raises the minimum and Ruff target to 3.11. |
| python/samples/demos/guided_conversations/pyproject.toml | Raises the minimum while retaining the upper bound. |
| python/samples/demos/booking_restaurant/README.md | Updates documented Python versions. |
| python/README.md | Updates supported Python versions. |
| python/pyproject.toml | Raises the minimum, updates classifiers, and simplifies ONNX pins. |
| python/Makefile | Defaults to 3.14 and installs Python 3.11–3.15. |
| python/DEV_SETUP.md | Aligns setup instructions with the new defaults. |
| python/.vscode/tasks.json | Updates interpreter choices and the default. |
| python/.pre-commit-config.yaml | Targets Python 3.11+ for pyupgrade. |
| .github/workflows/python-unit-tests.yml | Expands required version coverage and provisions interpreters. |
| .github/workflows/python-test-coverage.yml | Moves coverage to Python 3.11. |
| .github/workflows/python-lint.yml | Moves linting to Python 3.11. |
| .github/workflows/python-integration-tests.yml | Uses Python 3.14 with explicit interpreter setup. |
| .github/workflows/python-build.yml | Moves builds to Python 3.11. |
Review effort: Balanced
Eduard van Valkenburg (eavanvalkenburg)
deployed
to
github-app-auth
November 3, 2026 08:43 — with
GitHub Actions
Active
Preserve upstream dependency updates while regenerating locks without Python 3.10 support. Exclude the new Chroma-dependent filter tests only on Python 3.15.
Eduard van Valkenburg (eavanvalkenburg)
deployed
to
github-app-auth
November 3, 2026 10:49 — with
GitHub Actions
Active
Eduard van Valkenburg (eavanvalkenburg)
deployed
to
github-app-auth
November 3, 2026 10:58 — with
GitHub Actions
Active
Eduard van Valkenburg (eavanvalkenburg)
deployed
to
github-app-auth
November 3, 2026 11:08 — with
GitHub Actions
Active
Eduard van Valkenburg (eavanvalkenburg)
deployed
to
github-app-auth
November 3, 2026 11:25 — with
GitHub Actions
Active
Eduard van Valkenburg (eavanvalkenburg)
deployed
to
github-app-auth
November 3, 2026 11:32 — with
GitHub Actions
Active
Eduard van Valkenburg (eavanvalkenburg)
deployed
to
github-app-auth
November 3, 2026 11:50 — with
GitHub Actions
Active
Eduard van Valkenburg (eavanvalkenburg)
deployed
to
github-app-auth
November 3, 2026 12:01 — with
GitHub Actions
Active
Eduard van Valkenburg (eavanvalkenburg)
deployed
to
github-app-auth
November 3, 2026 12:06 — with
GitHub Actions
Active
Eduard van Valkenburg (eavanvalkenburg)
enabled auto-merge
November 3, 2026 16:11
Darren Cohen (dargilco)
approved these changes
Nov 3, 2026
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Motivation and Context
Retire Python 3.10 support and its compatibility code. Align the SDK's supported versions, CI coverage, and developer setup with Python 3.11 through 3.14. Use Python 3.14 as the local development and integration-test default.
This intentionally raises the minimum supported Python version from 3.10 to 3.11. Python 3.14 is the highest supported and tested version. Keep the existing minimum-only
requires-python = ">=3.11"policy; do not add an installation upper bound.Description
SelfandNotRequiredbackports with standard-library imports. Remove the Python 3.10AnyTypeshim, obsolete test skips, and the event-loop workaround. Apply Python 3.11 syntax upgrades, including built-inTimeoutErroranddatetime.UTC. Keep import guards still needed by Python 3.11.uv pip installresolution in unit-test jobs, including the development dependency group. Run pytest withuv run --no-syncso the shared universal lock does not reintroduce excluded extras' constraints.Anyreturn annotations in message and RPC handlers.Validation
From the repository root unless noted:
python/.venv/bin/pre-commit run --all-files --config python/.pre-commit-config.yaml— passed after the final support-range changes, including pyupgrade, Ruff, formatting, lockfile consistency, and Bandit.cd python && .venv/bin/pytest tests/unit/functions/test_kernel_function_decorators.py tests/unit/core_plugins/test_http_plugin.py tests/unit/schema --disable-warnings -q— passed on Python 3.11: 327 tests.uv build --project python --out-dir "$BUILD_OUTPUT"— passed after the final metadata changes, withBUILD_OUTPUTset to the session-only artifact directory; built the source distribution and wheel. uv reports the existingif-necessary-or-explicitdeprecation warning.git diff --check— passed.Additional assertions passed for the exact 22-job matrix, package classifiers for Python 3.11–3.14, the Python 3.14 development default, and the actual workflow's extras selection for all 12 OS/Python combinations. Inspected the newly built wheel: it advertises only Python 3.11–3.14 and retains
Requires-Python: >=3.11.Previously validated all three lockfiles, preservation of upstream dependency versions and registry URLs, and rejection of Python 3.10 during wheel installation. The Windows/Python 3.13 non-Dapr job passed after the narrowly scoped AutoGen exception. Fresh CI must establish the final commit's complete matrix results. Live integration tests were not run locally.
Contribution Checklist