Files
semantic-kernel/python/pyproject.toml
T
Eduard van Valkenburg 625640b1a4 Python: Consolidate Dependabot dependency updates (#14552)
### 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.
-->

Consolidates the currently open Python Dependabot updates into one
reviewable pull request while preserving the compatibility fixes already
applied to those PRs.

Supersedes #14463, #14462, #14456, #14393, #14392, #14391, #14336, and
#14256.

### Description

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

- Updates the root Python dependency ranges for `google-genai` and
`websockets`.
- Keeps `mistralai` on its compatible 1.x API and retains the existing
`mcp<2.0` bound because both 2.x updates break current connectors.
- Updates `onnxruntime-genai` to 0.15.2 for Python 3.11+ while retaining
0.9.0 for Python 3.10.
- Updates the root lockfile to `anyio` 4.14.2, `soupsieve` 2.9,
`google-genai` 1.75.0, `websockets` 16.1.1, and the compatible ONNX
GenAI pins.
- Updates the OAuth server lockfile to `anyio` 4.14.2 and removes its
obsolete `sniffio` dependency.
- Regenerates and validates the lockfiles with the CI-pinned `uv`
0.5.31.

Validation:
- `uvx --from 'uv==0.5.31' uv lock --check` passed for both lockfiles.
- `uvx --from 'uv==0.5.31' uv sync --all-extras --dev --frozen --quiet`
passed.
- `uvx --from 'uv==0.5.31' uv run --frozen pytest ./tests/unit
--ignore=tests/unit/processes/dapr_runtime` passed.
- The OAuth server dependency environment resolves with `uv sync
--frozen --no-install-project`; its editable package build remains
blocked by the sample's pre-existing missing `README.md`.

### Contribution Checklist

<!-- Before submitting this PR, please make sure: -->

- [ ] The code builds clean without any errors or warnings
- [ ] 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
- [ ] All unit tests pass, and I have added new tests where possible
- [x] I didn't break anyone 😄
2026-10-06 12:11:25 +00:00

260 lines
6.5 KiB
TOML

[project]
name = "semantic-kernel"
description = "Semantic Kernel Python SDK"
authors = [{ name = "Microsoft", email = "[email protected]"}]
readme = "README.md"
# Version read from __version__ field in __init__.py by Flit
dynamic = ["version"]
requires-python = ">=3.10"
license = {file = "LICENSE"}
urls.homepage = "https://learn.microsoft.com/en-us/semantic-kernel/overview/"
urls.source = "https://github.com/microsoft/semantic-kernel/tree/main/python"
urls.release_notes = "https://github.com/microsoft/semantic-kernel/releases?q=tag%3Apython-1&expanded=true"
urls.issues = "https://github.com/microsoft/semantic-kernel/issues"
classifiers = [
"License :: OSI Approved :: MIT License",
"Development Status :: 5 - Production/Stable",
"Intended Audience :: Developers",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Framework :: Pydantic :: 2",
"Typing :: Typed",
]
dependencies = [
# azure agents
"azure-ai-projects >= 1.0,< 2.5",
"azure-ai-agents >= 1.2.0b3",
"aiohttp ~= 3.8",
"cloudevents >=1,<3",
"pydantic >=2.0,!=2.10.0,!=2.10.1,!=2.10.2,!=2.10.3,<2.14",
"pydantic-settings ~= 2.0",
"defusedxml ~= 0.7",
# azure identity
"azure-identity >= 1.13",
# embeddings
"numpy >= 1.25.0; python_version < '3.12'",
"numpy >= 1.26.0; python_version >= '3.12'",
# openai connector
"openai >= 2.0.0",
# openapi and swagger
"openapi_core >= 0.18,<0.20",
"websockets >= 13, < 17",
"aiortc>=1.9.0",
# OpenTelemetry
"opentelemetry-api ~= 1.24",
"opentelemetry-sdk ~= 1.24",
"prance >= 23.6.21,< 26.7.20",
# templating
"pybars4 ~= 0.9",
"jinja2 ~= 3.1",
"nest-asyncio ~= 1.6",
"scipy>=1.15.1",
"websockets >= 13, < 17",
"aiortc>=1.9.0",
# Protobuf
# explicit typing extensions
"typing-extensions>=4.13",
"mcp>=1.26.0,<2.0",
]
### Optional dependencies
[project.optional-dependencies]
anthropic = [
"anthropic ~= 0.32"
]
autogen = [
"autogen-agentchat >= 0.2, <0.4"
]
aws = [
"boto3>=1.36.4,<1.43.0",
]
azure = [
"azure-ai-inference >= 1.0.0b6",
"azure-core-tracing-opentelemetry >= 1.0.0b11",
"azure-search-documents >= 11.6.0b4, < 13.0.0",
"azure-cosmos ~= 4.7"
]
chroma = [
"chromadb >= 0.5,< 1.6"
]
copilotstudio = [
"microsoft-agents-copilotstudio-client >= 0.3.1",
"microsoft-agents-activity >= 0.3.1"
]
faiss = [
"faiss-cpu>=1.10.0"
]
google = [
"google-cloud-aiplatform>=1.114,<1.134",
"google-genai >= 1.51,< 2.23"
]
hugging_face = [
"transformers[torch] >= 5.5.0,< 6.0",
"sentence-transformers >= 2.2,< 6.0",
"torch==2.13.0"
]
mcp = [
"mcp>=1.8,<2.0",
]
milvus = [
"pymilvus >= 2.3,< 2.7",
"milvus >= 2.3,<2.3.8; platform_system != 'Windows'"
]
mistralai = [
"mistralai >= 1.2,< 2.0"
]
mongo = [
"pymongo >= 4.8.0, < 4.17",
"motor >= 3.3.2,< 3.8.0"
]
notebooks = [
"ipykernel >= 6.29,< 8.0"
]
ollama = [
"ollama ~= 0.4"
]
onnx = [
# onnxruntime>=1.24.0 dropped Python 3.10 support; retain the last compatible runtime/genai pair for 3.10.
"onnxruntime==1.22.1; python_version == '3.10'",
"onnxruntime>=1.26.0; python_version > '3.10'",
"onnxruntime-genai==0.9.0; python_version == '3.10'",
"onnxruntime-genai==0.15.2; python_version > '3.10'"
]
oracledb = [
"oracledb >= 3.4.1"
]
pandas = [
"pandas ~= 2.2"
]
pinecone = [
"pinecone[asyncio, grpc] ~= 7.0; sys_platform == 'darwin' or sys_platform == 'linux'",
"pinecone[asyncio, grpc] ~= 7.3; sys_platform == 'win32'"
]
postgres = [
"psycopg[binary,pool] ~= 3.2"
]
qdrant = [
"qdrant-client ~= 1.9"
]
redis = [
"redis[hiredis] >= 6,< 8",
"types-redis ~= 4.6.0.20240425",
"redisvl ~= 0.4"
]
realtime = [
"websockets >= 13, < 17",
"aiortc>=1.9.0",
]
sql = [
"pyodbc >= 5.2"
]
usearch = [
"usearch >= 2.16,< 2.25",
"pyarrow>=12.0,<26.0"
]
weaviate = [
"weaviate-client>=4.17.0,<5.0",
]
[dependency-groups]
dev = [
"pre-commit >= 3.7,< 5.0",
"ipykernel >= 6.29,< 8.0",
"nbconvert ~= 7.16",
"pytest >= 8.2,< 10.0",
"pytest-xdist[psutil] ~= 3.6",
"pytest-cov >= 5.0",
"pytest-asyncio ~= 1.0",
"pytest-timeout>=2.3.1",
"snoop ~= 0.4",
"mypy >= 1.10",
"types-PyYAML ~= 6.0.12.20240311",
"ruff ~= 0.9"
]
[tool.uv]
prerelease = "if-necessary-or-explicit"
environments = [
"sys_platform == 'darwin'",
"sys_platform == 'linux'",
"sys_platform == 'win32'"
]
[tool.pytest.ini_options]
testpaths = 'tests'
addopts = "-ra -q -r fEX"
asyncio_mode = "auto"
asyncio_default_fixture_loop_scope = "function"
filterwarnings = [
'ignore:.*FunctionChoiceBehavior.*:DeprecationWarning'
]
timeout = 120
markers = [
"ollama: mark a test as requiring the Ollama service (use \"not ollama\" to skip those tests)",
"onnx: mark a test as requiring the Onnx service (use \"not onnx\" to skip those tests)"
]
[tool.ruff]
line-length = 120
target-version = "py310"
include = ["*.py", "*.pyi", "**/pyproject.toml", "*.ipynb"]
preview = true
[tool.ruff.lint]
fixable = ["ALL"]
unfixable = []
select = [
"D", #pydocstyle checks
"E", #error checks
"F", #pyflakes checks
"I", #isort
"CPY", #copyright
"ISC", #implicit string concat
"INP", #implicit namespace package
"RSE", #raise exception parantheses check
"RET", #flake8-return check
"SIM", #flake8-simplify check
"TD", #todos
"FIX", #fixme checks
"ERA", #remove connected out code
"RUF" #RUF specific rules
]
ignore = [
"D100", #allow missing docstring in public module
"D104", #allow missing docstring in public package
"D418", #allow docstring on overloaded function
"TD003", #allow missing link to todo issue
"FIX002" #allow todo
]
[tool.ruff.format]
docstring-code-format = true
[tool.ruff.lint.pydocstyle]
convention = "google"
[tool.ruff.lint.per-file-ignores]
# Ignore all directories named `tests` and `samples`.
"tests/**" = ["D", "INP", "TD", "ERA001", "RUF"]
"samples/**" = ["D", "INP", "ERA001", "RUF"]
# Ignore all files that end in `_test.py`.
"*_test.py" = ["D"]
"*.ipynb" = ["CPY", "E501"]
[tool.ruff.lint.flake8-copyright]
notice-rgx = "^# Copyright \\(c\\) Microsoft\\. All rights reserved\\."
min-file-size = 1
[tool.bandit]
targets = ["semantic_kernel"]
exclude_dirs = ["tests", "samples/demos/mcp_with_oauth"]
[tool.flit.module]
name = "semantic_kernel"
[build-system]
requires = ["flit-core >= 3.9,<4.0"]
build-backend = "flit_core.buildapi"