[project] name = "agent-framework-project" description = "Microsoft Agent Framework for building AI Agents with Python." version = "0.0.0" requires-python = ">=3.10" dependencies = [ "agent-framework", "agent-framework-azure", "agent-framework-foundry", "agent-framework-mem0", "agent-framework-workflow", ] [dependency-groups] dev = [ "uv>=0.8.2,<0.9.0", "pre-commit >= 3.7", "ruff>=0.11.8", "pytest>=8.4.1", "pytest-asyncio>=1.0.0", "pytest-cov>=6.2.1", "pytest-xdist[psutil]>=3.8.0", "pytest-timeout>=2.3.1", "mypy>=1.16.1", "pyright>=1.1.402", #tasks "poethepoet>=0.36.0", "rich", "tomli", "tomli-w", "markdownify", # Documentation "myst-nb==1.1.2", "pydata-sphinx-theme==0.16.0", "sphinx-copybutton", "sphinx-design", "sphinx", "autodoc_pydantic>=2", "pygments", "sphinxext-rediraffe", "opentelemetry-instrumentation-openai", "markdown-it-py[linkify]", # Documentation tooling "diskcache", "redis", "sphinx-autobuild", "aiofiles>=24.1.0", ] [tool.uv] package = false prerelease = "if-necessary-or-explicit" environments = [ "sys_platform == 'darwin'", "sys_platform == 'linux'", "sys_platform == 'win32'" ] [tool.uv.workspace] members = [ "packages/*" ] exclude = [ "packages/agent_framework_project.egg-info" ] [tool.uv.sources] agent-framework = { workspace = true } agent-framework-azure = { workspace = true } agent-framework-foundry = { workspace = true } agent-framework-mem0 = { workspace = true } agent-framework-runtime = { workspace = true } agent-framework-workflow = { workspace = true } [tool.ruff] line-length = 120 target-version = "py310" fix = true include = ["*.py", "*.pyi", "**/pyproject.toml", "*.ipynb"] exclude = ["docs/*", "run_tasks_in_packages_if_exists.py", "check_md_code_blocks.py"] 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 "D418", # allow overload to have a docstring "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", "T201"] "*.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.pytest.ini_options] testpaths = '**/tests' addopts = "-ra -q -r fEX" asyncio_mode = "auto" asyncio_default_fixture_loop_scope = "function" filterwarnings = [] timeout = 120 markers = [ "azure: marks tests as Azure provider specific", "foundry: marks tests as Foundry provider specific", "openai: marks tests as OpenAI provider specific", ] [tool.coverage.run] omit = [ "**/__init__.py" ] [tool.pyright] include = ["agent_framework", "samples"] exclude = ["**/tests/**", "docs", "**/.venv/**"] typeCheckingMode = "strict" reportUnnecessaryIsInstance = false reportMissingTypeStubs = false [tool.mypy] plugins = ['pydantic.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", "./run_tasks_in_packages_if_exists.py", "./check_md_code_blocks.py", "docs", "samples"] [tool.poe] executor.type = "uv" [tool.poe.tasks] markdown-code-lint = """python check_md_code_blocks.py ./docs/agent-framework/**/*.md README.md""" samples-code-check = """pyright ./samples""" docs-clean = "rm -rf docs/build" docs-build = "sphinx-build docs/agent-framework docs/build" docs-serve = "sphinx-autobuild --watch docs/agent-framework docs/build --port 8000 --jobs auto" docs-check = "sphinx-build --fail-on-warning docs/agent-framework docs/build" docs-check-examples = "sphinx-build -b code_lint docs/agent-framework docs/build" pre-commit-install = "uv run pre-commit install --install-hooks --overwrite" install = "uv sync --all-packages --all-extras --dev -U --prerelease=if-necessary-or-explicit" test = "python run_tasks_in_packages_if_exists.py test" fmt = "python run_tasks_in_packages_if_exists.py fmt" format.ref = "fmt" lint = "python run_tasks_in_packages_if_exists.py lint" pyright = "python run_tasks_in_packages_if_exists.py pyright" mypy = "python run_tasks_in_packages_if_exists.py mypy" build = "python run_tasks_in_packages_if_exists.py build" # combined checks check = ["fmt", "lint", "pyright", "mypy", "test", "markdown-code-lint", "samples-code-check"] pre-commit-check = ["fmt", "lint", "pyright", "markdown-code-lint", "samples-code-check"] all-tests = "pytest --import-mode=importlib --cov=agent_framework --cov=agent_framework_azure --cov=agent_framework_foundry --cov=agent_framework_mem0 --cov=agent_framework_workflow --cov-report=term-missing:skip-covered packages/azure/tests packages/foundry/tests packages/main/tests packages/mem0/tests packages/workflow/tests" [tool.poe.tasks.venv] cmd = "uv venv --clear --python $python" args = [{ name = "python", default = "3.13", options = ['-p', '--python'] }] [tool.poe.tasks.setup] sequence = [ { ref = "venv --python $python"}, { ref = "install" }, { ref = "pre-commit-install" } ] args = [{ name = "python", default = "3.13", options = ['-p', '--python'] }] [tool.setuptools.packages.find] where = ["packages"] include = ["agent_framework**"] namespaces = true