Skip to content

Python: Drop 3.10 support and expand CI coverage through 3.14 - #14708

Open
Eduard van Valkenburg (eavanvalkenburg) wants to merge 10 commits into
microsoft:mainfrom
eavanvalkenburg:python-drop-310-support
Open

Eduard van Valkenburg (eavanvalkenburg) wants to merge 10 commits into
microsoft:mainfrom
eavanvalkenburg:python-drop-310-support

Conversation

@eavanvalkenburg

@eavanvalkenburg Eduard van Valkenburg (eavanvalkenburg) commented Nov 2, 2026 •

Copy link
Copy Markdown
Member

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

  • Require Python 3.11+, update package classifiers through Python 3.14, and remove Python 3.10-specific ONNX pins and lockfile branches while preserving upstream dependency updates and registry URLs.
  • Replace obsolete Self and NotRequired backports with standard-library imports. Remove the Python 3.10 AnyType shim, obsolete test skips, and the event-loop workaround. Apply Python 3.11 syntax upgrades, including built-in TimeoutError and datetime.UTC. Keep import guards still needed by Python 3.11.
  • Run Python 3.11–3.14 as required unit-test jobs across the existing OS/test-suite matrix: 22 jobs, preserving the Python 3.11/macOS exclusion. Move all six integration-test matrices to Python 3.14 and explicitly provision interpreters before uv.
  • Use uv 0.13 and per-environment uv pip install resolution in unit-test jobs, including the development dependency group. Run pytest with uv run --no-sync so the shared universal lock does not reintroduce excluded extras' constraints.
  • Omit legacy AutoGen and its tests from Python 3.14 jobs and Windows/Python 3.13. Its NumPy <2 constraint forces old scientific and gRPC packages; NumPy 1.26.4 crashes during import on Windows/Python 3.13. Keep AutoGen coverage on Python 3.11–3.12 and Linux/macOS Python 3.13 without changing its dependency bound.
  • Keep all other extras and connector tests enabled across the supported matrix. Remove the abandoned newer-version exclusions, ODBC source-build setup, and setuptools build constraint. Keep the separate Dapr suite and its dependencies, resolving them together with the SDK and pandas extra.
  • Disable matrix fail-fast so one failure does not cancel the remaining required jobs. Run pytest through Python with unbuffered output and faulthandler for native-crash diagnostics.
  • Fix typing reflection: do not recurse into Union origin classes when parsing function annotations, and read model annotations from the class when building schemas from instances. Add regression cases for optional dictionary annotations and inherited/optional model fields.
  • Default local development to Python 3.14. Update the Makefile interpreter installation list, VS Code choices, setup instructions, READMEs, and sample requirements. Document the CI dependency policy.
  • Add regression coverage for Any return 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, with BUILD_OUTPUT set to the session-only artifact directory; built the source distribution and wheel. uv reports the existing if-necessary-or-explicit deprecation 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

Copilot AI balanced review requested due to automatic review settings November 2, 2026 18:35
@semantic-kernel-automation semantic-kernel-automation Bot added python Pull requests for the Python Semantic Kernel documentation labels Nov 2, 2026

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

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 Any handler 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

Comment thread .github/workflows/python-unit-tests.yml Resolved
Preserve upstream dependency updates while regenerating locks without Python 3.10 support. Exclude the new Chroma-dependent filter tests only on Python 3.15.
@eavanvalkenburg Eduard van Valkenburg (eavanvalkenburg) changed the title Python: Drop 3.10 support and expand CI coverage through 3.15 Python: Drop 3.10 support and expand CI coverage through 3.14 Nov 3, 2026

This branch was successfully deployed

1 active deployment
github-app-auth — 4c16a534 Deployed Nov 3, 2026 by eavanvalkenburg via add_label #29578
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation python Pull requests for the Python Semantic Kernel

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants