[project] name = "agent-framework" description = "Microsoft Agent Framework for building AI Agents with Python." authors = [{ name = "Microsoft", email = "SK-Support@microsoft.com"}] readme = "README.md" requires-python = ">=3.10" version = "0.1.0b1" license = {file = "LICENSE"} urls.homepage = "https://learn.microsoft.com/en-us/semantic-kernel/overview/" urls.source = "https://github.com/microsoft/agent-framework/tree/main/python" urls.release_notes = "https://github.com/microsoft/agent-framework/releases?q=tag%3Apython-1&expanded=true" urls.issues = "https://github.com/microsoft/agent-framework/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", "Programming Language :: Python :: 3.13", "Framework :: Pydantic :: 2", "Typing :: Typed", ] dependencies = [ "azure", "openai", "pydantic>=2.11.7", ] [dependency-groups] dev = [ "pre-commit >= 3.7", "pyright>=1.1.400", "mypy>=1.15.0", "ruff>=0.11.8", "poethepoet>=0.36.0", "pytest>=8.4.1", "pytest-asyncio>=1.0.0", "pytest-cov>=6.2.1", "pytest-xdist>=3.8.0", ] [build-system] requires = ["hatchling", "uv-dynamic-versioning"] build-backend = "hatchling.build" [tool.uv.workspace] members = ["extensions/*"] [tool.uv.sources] openai = { workspace = true } azure = { workspace = true } [tool.uv-dynamic-versioning] fallback-version = "0.0.0" [tool.ruff] line-length = 120 target-version = "py310" fix = true include = ["*.py", "*.pyi", "**/pyproject.toml", "*.ipynb"] preview = true [tool.ruff.lint] fixable = ["ALL"] unfixable = [] select = [ "ASYNC", # async checks "B", # bugbear checks "CPY", # copyright "D", # pydocstyle checks "E", # pycodestyle error checks "ERA", # remove connected out code "F", # pyflakes checks "FIX", # fixme checks "I", # isort "INP", # implicit namespace package "ISC", # implicit string concat "Q", # flake8-quotes checks "RET", # flake8-return check "RSE", # raise exception parantheses check "RUF", # RUF specific rules "SIM", # flake8-simplify check "T20", # typing checks "TD", # todos "W", # pycodestyle warning checks "T100", # Debugger, "S", # Bandit checks ] ignore = [ "D100", # allow missing docstring in public module "D104", # allow missing docstring in public package "TD003", # allow missing link to todo issue "FIX002" # allow todo ] [tool.ruff.lint.per-file-ignores] # Ignore all directories named `tests` and `samples`. "tests/**" = ["D", "INP", "TD", "ERA001", "RUF", "S"] "samples/**" = ["D", "INP", "ERA001", "RUF", "S"] "*.ipynb" = ["CPY", "E501"] [tool.ruff.format] docstring-code-format = true [tool.ruff.lint.pydocstyle] convention = "google" [tool.ruff.lint.flake8-copyright] notice-rgx = "^# Copyright \\(c\\) Microsoft\\. All rights reserved\\." min-file-size = 1 [tool.pyright] include = ["agent_framework", "tests", "samples"] typeCheckingMode = "strict" reportUnnecessaryIsInstance = false reportMissingTypeStubs = false venvPath = "." venv = ".venv" [tool.mypy] strict = true python_version = "3.10" ignore_missing_imports = true disallow_untyped_defs = true no_implicit_optional = true check_untyped_defs = true warn_return_any = true show_error_codes = true warn_unused_ignores = false disallow_incomplete_defs = true disallow_untyped_decorators = true disallow_any_unimported = true [tool.bandit] targets = ["agent_framework"] exclude_dirs = ["tests"]