content: [dependency-groups]
  dev = [
      "pyright==1.1.389",
      "mypy==1.13.0",
      "ruff==0.4.8",
      "pytest",
      "pytest-asyncio",
      "pytest-cov",
      "pytest-xdist",
      "typer",
      "rich",
      "polars",
      "pytest_mock",
      "poethepoet",
      "packaging",
      "grpcio-tools~=1.70.0",
      "mypy-protobuf",
      "cookiecutter",
      "tomli",
      "tomli-w",
      "chainlit",
      "streamlit",
      
      # Documentation
      "myst-nb==1.1.2",
      "pydata-sphinx-theme==0.16.0",
      "sphinx-copybutton",
      "sphinx-design",
      "sphinx",
      "sphinxcontrib-apidoc",
      "autodoc_pydantic~=2.2",
      "pygments",
      "sphinxext-rediraffe",
      "opentelemetry-instrumentation-openai",
      "diskcache",
      "redis",
      "sphinx-autobuild",
  ]
  
  [tool.uv]
  override-dependencies = [
      "tenacity>=9.0.0",
      "aiofiles>=24.1.0",
      "chainlit>=2.0.1",
      "httpx>=0.27.0",
  ]
  [tool.uv.workspace]
  members = ["packages/*"]
  exclude = ["packages/autogen-magentic-one"]
  
  [tool.uv.sources]
  agbench = { workspace = true }
  autogen-agentchat = { workspace = true }
  autogen-core = { workspace = true }
  autogen-ext = { workspace = true }
  autogen-test-utils = { workspace = true }
  autogenstudio = { workspace = true }
  component-schema-gen = { workspace = true }
  magentic-one-cli = { workspace = true }
  
  [tool.ruff]
  line-length = 120
  fix = true
  
  target-version = "py310"
  
  [tool.ruff.format]
  docstring-code-format = true
  
  [tool.ruff.lint]
  select = ["E", "F", "W", "B", "Q", "I", "ASYNC", "T20"]
  ignore = ["F401", "E501"]
  
  [tool.ruff.lint.per-file-ignores]
  "docs/**.ipynb" = ["T20"]
  
  [tool.ruff.lint.flake8-tidy-imports]
  [tool.ruff.lint.flake8-tidy-imports.banned-api]
  "unittest".msg = "Use `pytest` instead."
  
  [tool.mypy]
  strict = true
  python_version = "3.10"
  ignore_missing_imports = true
  
  # from https://blog.wolt.com/engineering/2021/09/30/professional-grade-mypy-configuration/
  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.pyright]
  include = ["src", "tests", "samples"]
  exclude = ["samples/core_xlang_hello_python_agent/protos"]
  typeCheckingMode = "strict"
  reportUnnecessaryIsInstance = false
  reportMissingTypeStubs = false
  
  [tool.nbqa.addopts]
  mypy = [
      "--disable-error-code=top-level-await"
  ]
  
  [tool.poe.tasks]
  fmt = "python run_task_in_pkgs_if_exist.py fmt"
  format.ref = "fmt"
  lint = "python run_task_in_pkgs_if_exist.py lint"
  pyright = "python run_task_in_pkgs_if_exist.py pyright"
  mypy = "python run_task_in_pkgs_if_exist.py mypy"
  test = "python run_task_in_pkgs_if_exist.py test"
  markdown-code-lint = """python check_md_code_blocks.py ../README.md ./docs/src/**/*.md ./packages/autogen-magentic-one/README.md"""
  samples-code-check = """pyright ./samples"""
  
  check = ["fmt", "lint", "pyright", "mypy", "docs-mypy", "test", "markdown-code-lint", "samples-code-check"]
  
  # Docs
  docs-mypy = "nbqa mypy docs/src --config-file ./pyproject.toml"
  docs-clean = "rm -rf docs/build docs/src/reference"
  docs-build = "sphinx-build docs/src docs/build"
  docs-serve = "sphinx-autobuild docs/src docs/build --watch packages/ --port 8000 --jobs auto"
  docs-check = "sphinx-build --fail-on-warning docs/src docs/build"
  docs-check-examples = "sphinx-build -b code_lint docs/src docs/build"
  
  gen-proto = [
      { cmd = "python -m grpc_tools.protoc --python_out=./packages/autogen-ext/src/autogen_ext/runtimes/grpc/protos --grpc_python_out=./packages/autogen-ext/src/autogen_ext/runtimes/grpc/protos --mypy_out=./packages/autogen-ext/src/autogen_ext/runtimes/grpc/protos --mypy_grpc_out=./packages/autogen-ext/src/autogen_ext/runtimes/grpc/protos --proto_path ../protos/ agent_worker.proto --proto_path ../protos/ cloudevent.proto" },
      { script = "fixup_generated_files:main" }
  ]
  
  
  gen-proto-samples = "python -m grpc_tools.protoc --python_out=./samples/core_xlang_hello_python_agent/protos --grpc_python_out=./samples/core_xlang_hello_python_agent/protos --mypy_out=./samples/core_xlang_hello_python_agent/protos --mypy_grpc_out=./samples/core_xlang_hello_python_agent/protos --proto_path ../dotnet/src/Microsoft.AutoGen/Agents/protos/ agent_events.proto"
  
  [[tool.poe.tasks.gen-test-proto.sequence]]
  cmd = "python -m grpc_tools.protoc --python_out=./packages/autogen-core/tests/protos --grpc_python_out=./packages/autogen-core/tests/protos --mypy_out=./packages/autogen-core/tests/protos --mypy_grpc_out=./packages/autogen-core/tests/protos --proto_path ./packages/autogen-core/tests/protos serialization_test.proto"
  
  [[tool.poe.tasks.gen-test-proto.sequence]]
  cmd = "python -m grpc_tools.protoc --python_out=./packages/autogen-ext/tests/protos --grpc_python_out=./packages/autogen-ext/tests/protos --mypy_out=./packages/autogen-ext/tests/protos --mypy_grpc_out=./packages/autogen-ext/tests/protos --proto_path ./packages/autogen-core/tests/protos serialization_test.proto"
  
  [tool.pytest.ini_options]
  markers = [
      "grpc: tests invoking gRPC functionality",
  ]
  