[build-system] requires = ["setuptools>=48", "setuptools_scm[toml]>=6.3.1"] build-backend = "setuptools.build_meta" [project] name = "any-agent" readme = "README.md" license = {text = "Apache-2.0"} requires-python = ">=3.11,<3.14" dynamic = ["version"] dependencies = [ "any-llm-sdk>=1.0,<2", "mcp>=1.5.0", "opentelemetry-sdk", "pydantic", "requests", "rich", "tavily-python", ] [project.optional-dependencies] agno = [ "agno>=1.7.0,<2", ] google = [ "google-adk>=1.14.0" ] langchain = [ "langchain", "langchain-mcp-adapters>=0.0.3", "langgraph", ] llama_index = [ "llama-index>=0.12.52, <1", "llama-index-tools-mcp>=0.2.5", "platformdirs>=4.3.7", ] openai = [ "openai-agents>=0.3.0, <1", ] smolagents = [ "smolagents[mcp]>=1.20.0", ] a2a = [ "a2a-sdk>=0.3.0", "httpx", ] composio = [ "composio>=0.8.14" ] all = [ "any-agent[agno,google,langchain,llama_index,openai,smolagents]", ] [project.urls] Documentation = "https://mozilla-ai.github.io/any-agent/" Issues = "https://github.com/mozilla-ai/any-agent/issues" Source = "https://github.com/mozilla-ai/any-agent" [project.scripts] any-agent-evaluate = "any_agent.evaluation.cli:main" [tool.setuptools.package-data] "*" = ["py.typed"] [tool.setuptools.packages.find] exclude = ["tests", "tests.*"] where = ["src"] namespaces = false [tool.setuptools_scm] [tool.pylint.messages_control] disable = [ "import-outside-toplevel", ] [tool.ruff.lint] ignore = [ "TD", "FIX", "D100", # We don't use module docstrings "D104", # We don't use package docstrings "D203", # <- disable to resolve conflict with D211 "D213", # <- disable to resolve conflict with D212 "FBT", "COM", "ANN", "ARG", "S101", "E501", "INP001", "PERF", "PLR", "SIM", "PTH", "DTZ005", "BLE001", "TRY004", "S113", "PLW2901", "C901", "ERA001", "SLF001", "PLC0415", # We use lazy imports in several places "PLR0912", "PLR0913", "N999", "B024", ] extend-select = ["ALL"] [tool.ruff.lint.per-file-ignores] "src/any_agent/config.py" = ["D101", "D102"] "src/any_agent/evaluation/*" = ["D101", "D103", "D107"] # TODO: Revisit when working on evaluation "src/any_agent/callbacks/*" = ["D102"] "docs/cookbook/*" = ["D"] "src/any_agent/evaluation/evaluators/*" = ["D103", "D107"] "src/any_agent/frameworks/*" = ["D107", "D102"] "src/any_agent/serving/a2a/agent_executor.py" = ["E402", "D102"] # Due to Python 3.11 compatibility "src/any_agent/tools/mcp/*" = ["D101"] "src/any_agent/tools/a2a.py" = ["UP045"] # Use `X | Y` for type unions - disabled for Google ADK compatibility "tests/**" = ["D", "F401", "I001"] "*.ipynb" = ["T201"] "scripts/**" = ["D", "T201"] [tool.mypy] strict = true disallow_untyped_calls = true disallow_untyped_defs = true follow_untyped_imports = true [[tool.mypy.overrides]] module = "tests.*" disallow_untyped_decorators = false # mypy gets confused by pytest decorators [[tool.mypy.overrides]] module = ["pytest", "mktestdocs", "pytest_lazy_fixtures", "syrupy.assertion"] ignore_missing_imports = true # pytest related modules are not found [tool.pytest.ini_options] asyncio_mode = "auto" asyncio_default_fixture_loop_scope = "session" timeout = 180 [tool.coverage.run] branch = true omit = [ "src/any_agent/vendor/*", "tests/" ] [dependency-groups] dev = [ { include-group = "docs" }, { include-group = "lint" }, { include-group = "tests" }, ] docs = [ "mkdocs", "mkdocs-material", "mkdocstrings-python", "mkdocs-include-markdown-plugin>=7.1.5", "mkdocs-jupyter>=0.25.1", ] lint = [ "pre-commit==4.4.0", "pre-commit-uv==4.2.0", ] tests = [ "pytest>=8,<10", "pytest-cov>=6.2.1,<7", "pytest-sugar>=0.9.6", "pytest-asyncio>=0.26.0", "pytest-lazy-fixtures>=1.1.2", "pytest-timeout>=2.4.0", "pytest-xdist>=3.6.1", "debugpy>=1.8.13", "mktestdocs>=0.2.4", "syrupy>=4.9.1", "any-llm-sdk[anthropic,gemini,huggingface,mistral,xai]>=1.0,<2", "opentelemetry-exporter-otlp-proto-http", ] # For completeness, but 'uv sync --group dev' currently installs the others too. all = [ { include-group = "dev" }, { include-group = "docs" }, { include-group = "lint" }, { include-group = "tests" }, ]