[project]
# Project metadata. Available keys are documented at:
# https://packaging.python.org/en/latest/specifications/declaring-project-metadata

name = "google-adk"
description = "Agent Development Kit"
readme = "README.md"
requires-python = ">=3.10"
license = { file = "LICENSE" }
authors = [{ name = "Google LLC", email = "googleapis-packages@google.com" }]
classifiers = [ # List of https://pypi.org/classifiers/
  "Typing :: Typed",
  "Intended Audience :: Developers",
  "Intended Audience :: Science/Research",
  "Programming Language :: Python",
  "Programming Language :: Python :: 3",
  "Programming Language :: Python :: 3.10",
  "Programming Language :: Python :: 3.11",
  "Programming Language :: Python :: 3.12",
  "Programming Language :: Python :: 3.13",
  "Programming Language :: Python :: 3.14",
  "Operating System :: OS Independent",
  "Topic :: Software Development :: Libraries :: Python Modules",
  "License :: OSI Approved :: Apache Software License",
]
dependencies = [
  # go/keep-sorted start
  "PyYAML>=6.0.2, <7.0.0",                                   # For APIHubToolset.
  "aiosqlite>=0.21.0",                                       # For SQLite database
  "anyio>=4.9.0, <5.0.0",                                    # For MCP Session Manager
  "authlib>=1.5.1, <2.0.0",                                  # For RestAPI Tool
  "click>=8.1.8, <9.0.0",                                    # For CLI tools
  "fastapi>=0.115.0, <0.124.0",                              # FastAPI framework
  "google-api-python-client>=2.157.0, <3.0.0",               # Google API client discovery
  "google-auth>=2.47.0",                                     # Google Auth library
  "google-cloud-aiplatform[agent_engines]>=1.132.0, <2.0.0", # For VertexAI integrations, e.g. example store.
  "google-cloud-bigquery-storage>=2.0.0",
  "google-cloud-bigquery>=2.2.0",
  "google-cloud-bigtable>=2.32.0",                           # For Bigtable database
  "google-cloud-discoveryengine>=0.13.12, <0.14.0",          # For Discovery Engine Search Tool
  "google-cloud-pubsub>=2.0.0, <3.0.0",                      # For Pub/Sub Tool
  "google-cloud-secret-manager>=2.22.0, <3.0.0",             # Fetching secrets in RestAPI Tool
  "google-cloud-spanner>=3.56.0, <4.0.0",                    # For Spanner database
  "google-cloud-speech>=2.30.0, <3.0.0",                     # For Audio Transcription
  "google-cloud-storage>=2.18.0, <4.0.0",                    # For GCS Artifact service
  "google-genai>=1.56.0, <2.0.0",                            # Google GenAI SDK
  "graphviz>=0.20.2, <1.0.0",                                # Graphviz for graph rendering
  "jsonschema>=4.23.0, <5.0.0",                              # Agent Builder config validation
  "mcp>=1.10.0, <2.0.0",                                     # For MCP Toolset
  "opentelemetry-api>=1.37.0, <=1.37.0",                     # OpenTelemetry - limit upper version for sdk and api to not risk breaking changes from unstable _logs package.
  "opentelemetry-exporter-gcp-logging>=1.9.0a0, <2.0.0",
  "opentelemetry-exporter-gcp-monitoring>=1.9.0a0, <2.0.0",
  "opentelemetry-exporter-gcp-trace>=1.9.0, <2.0.0",
  "opentelemetry-exporter-otlp-proto-http>=1.36.0",
  "opentelemetry-resourcedetector-gcp>=1.9.0a0, <2.0.0",
  "opentelemetry-sdk>=1.37.0, <=1.37.0",
  "pyarrow>=14.0.0",
  "pydantic>=2.0, <3.0.0",                                   # For data validation/models
  "python-dateutil>=2.9.0.post0, <3.0.0",                    # For Vertext AI Session Service
  "python-dotenv>=1.0.0, <2.0.0",                            # To manage environment variables
  "requests>=2.32.4, <3.0.0",
  "sqlalchemy-spanner>=1.14.0",                              # Spanner database session service
  "sqlalchemy>=2.0, <3.0.0",                                 # SQL database ORM
  "starlette>=0.49.1, <1.0.0",                               # For FastAPI CLI
  "tenacity>=9.0.0, <10.0.0",                                # For Retry management
  "typing-extensions>=4.5, <5",
  "tzlocal>=5.3, <6.0",                                      # Time zone utilities
  "uvicorn>=0.34.0, <1.0.0",                                 # ASGI server for FastAPI
  "watchdog>=6.0.0, <7.0.0",                                 # For file change detection and hot reload
  "websockets>=15.0.1, <16.0.0",                             # For BaseLlmFlow
  # go/keep-sorted end
]
dynamic = ["version"]

[project.urls]
homepage = "https://google.github.io/adk-docs/"
repository = "https://github.com/google/adk-python"
changelog = "https://github.com/google/adk-python/blob/main/CHANGELOG.md"
documentation = "https://google.github.io/adk-docs/"

[project.scripts]
adk = "google.adk.cli:main"

[project.optional-dependencies]

dev = [
  # go/keep-sorted start
  "flit>=3.10.0",
  "isort>=6.0.0",
  "mypy>=1.15.0",
  "pyink>=24.10.0",
  "pylint>=2.6.0",
  # go/keep-sorted end
]

a2a = [
  # go/keep-sorted start
  "a2a-sdk>=0.3.4,<0.4.0",
  # go/keep-sorted end
]

community = [
  # go/keep-sorted start
  "google-adk-community",
  # go/keep-sorted end
]

eval = [
  # go/keep-sorted start
  "google-cloud-aiplatform[evaluation]>=1.100.0",
  "pandas>=2.2.3",
  "rouge-score>=0.1.2",
  "scipy<1.16; python_version<'3.11'",
  "tabulate>=0.9.0",
  # go/keep-sorted end
]

test = [
  # go/keep-sorted start
  "a2a-sdk>=0.3.0,<0.4.0",
  "anthropic>=0.43.0",                            # For anthropic model tests
  "crewai[tools];python_version>='3.11' and python_version<'3.12'",         # For CrewaiTool tests; chromadb/pypika fail on 3.12+
  "kubernetes>=29.0.0",                           # For GkeCodeExecutor
  "langchain-community>=0.3.17",
  "langgraph>=0.2.60, <0.4.8",                    # For LangGraphAgent
  "litellm>=1.75.5, <2.0.0",                      # For LiteLLM tests
  "llama-index-readers-file>=0.4.0",              # For retrieval tests
  "openai>=1.100.2",                              # For LiteLLM
  "pytest-asyncio>=0.25.0",
  "pytest-mock>=3.14.0",
  "pytest-xdist>=3.6.1",
  "pytest>=9.0.0,<10.0.0",
  "python-multipart>=0.0.9",
  "rouge-score>=0.1.2",
  "tabulate>=0.9.0",
  # go/keep-sorted end
]

docs = [
  "autodoc_pydantic",
  "furo",
  "myst-parser",
  "sphinx",
  "sphinx-autodoc-typehints",
  "sphinx-rtd-theme",
]

# Optional extensions
extensions = [
  "anthropic>=0.43.0",                          # For anthropic model support
  "beautifulsoup4>=3.2.2",                      # For load_web_page tool.
  "crewai[tools];python_version>='3.11' and python_version<'3.12'",       # For CrewaiTool; chromadb/pypika fail on 3.12+
  "docker>=7.0.0",                              # For ContainerCodeExecutor
  "kubernetes>=29.0.0",                         # For GkeCodeExecutor
  "langgraph>=0.2.60, <0.4.8",                  # For LangGraphAgent
  "litellm>=1.75.5",                            # For LiteLlm class. Currently has OpenAI limitations. TODO: once LiteLlm fix it
  "llama-index-readers-file>=0.4.0",            # For retrieval using LlamaIndex.
  "llama-index-embeddings-google-genai>=0.3.0", # For files retrieval using LlamaIndex.
  "lxml>=5.3.0",                                # For load_web_page tool.
  "toolbox-adk>=0.1.0",                         # For tools.toolbox_toolset.ToolboxToolset
]

otel-gcp = ["opentelemetry-instrumentation-google-genai>=0.3b0, <1.0.0"]


[tool.pyink]
# Format py files following Google style-guide
line-length = 80
unstable = true
pyink-indentation = 2
pyink-use-majority-quotes = true
pyink-annotation-pragmas = [
  "noqa",
  "pylint:",
  "type: ignore",
  "pytype:",
  "mypy:",
  "pyright:",
  "pyre-",
]


[build-system]
# Build system specify which backend is used to build/install the project (flit,
# poetry, setuptools,...). All backends are supported by `pip install`
requires = ["flit_core >=3.8,<4"]
build-backend = "flit_core.buildapi"


[tool.flit.sdist]
include = ['src/**/*', 'README.md', 'pyproject.toml', 'LICENSE']
exclude = ['src/**/*.sh']


[tool.flit.module]
name = "google.adk"
include = ["py.typed"]


[tool.isort]
profile = "google"
single_line_exclusions = []
line_length = 200                  # Prevent line wrap flickering.
known_third_party = ["google.adk"]


[tool.pytest.ini_options]
testpaths = ["tests"]
asyncio_default_fixture_loop_scope = "function"
asyncio_mode = "auto"


[tool.mypy]
python_version = "3.10"
exclude = "tests/"
plugins = ["pydantic.mypy"]
# Start with non-strict mode, and swtich to strict mode later.
# strict = true
disable_error_code = ["import-not-found", "import-untyped", "unused-ignore"]
follow_imports = "skip"
