# SPDX-FileCopyrightText: Copyright (c) 2024-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 [project] name = "ai-dynamo" version = "1.7.0" description = "Distributed Inference Framework" readme = "README.md" authors = [ { name = "NVIDIA Inc.", email = "sw-dl-dynamo@nvidia.com" }, ] license = { text = "Apache-2.0" } license-files = ["LICENSE"] requires-python = ">=3.11" dependencies = [ "ai-dynamo-runtime==1.7.0", "aisimulate==0.13.0.dev202610240000000082 ; python_version >= '3.11' and python_version < '3.14'", "aiohttp>=3.14.3,<4.0", # Set the CA bundle floor for transitive HTTP clients outside containers too. "certifi>=2026.10.23", "transformers>=4.56.0", "kubernetes>=32.0.1,<33.0.0", "prometheus_client>=0.23.1,<1.0", "msgspec>=0.19.0", "redis>=6.2.0,<9.0.0", "zstandard>=0.23.0,<1.0", "pyzmq>=26.0.0", "typing_extensions>=4.10.0", "tqdm>=4.0.0", ] classifiers = [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "Intended Audience :: Science/Research", "Intended Audience :: Information Technology", "License :: OSI Approved :: Apache Software License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Topic :: Scientific/Engineering", "Topic :: Scientific/Engineering :: Artificial Intelligence", "Operating System :: POSIX :: Linux", ] keywords = ["llm", "genai", "inference", "nvidia", "distributed", "dynamo"] [project.urls] Repository = "https://github.com/ai-dynamo/dynamo.git" [project.optional-dependencies] artifact-delivery = [ "opendal==0.47.10", ] trtllm =[ "uvloop", "tensorrt-llm==1.4.0rc0", # tensorrt-llm declares an uncapped `mpmath>=1.3.0`; under `--pre` the resolver # picks mpmath 1.5.0a0 (mpmath.libmp.bitcount removed) and backtracks sympy to # the uncapped 1.14.0rc1, which still imports bitcount -> torch._dynamo dies at # import (DYN-3348). Matches sympy 1.14's own cap; drop once TRT-LLM bounds mpmath. "mpmath<1.4", ] vllm = [ "uvloop", "nixl[cu13]==1.5.0", "vllm[flashinfer,runai,otel]==0.32.0", # vllm-omni is not part of ai-dynamo[vllm]: container builds inherit the # framework stack from vllm/vllm-openai, and pip/uv dependency resolution # for omni can override the vLLM torch stack. # "vllm-omni==...", "blake3>=1.0.0,<2.0.0", "soundfile>=0.13.1", "librosa>=0.10.0", "ray>=2.55.0", ] sglang = [ "uvloop", "sglang[diffusion]==0.5.22", # sglang[diffusion] dropped accelerate in 0.5.12; diffusers still needs it. "accelerate>=0.17.0", "blake3>=1.0.0,<2.0.0", "nixl[cu13]==1.5.0", "cupy-cuda13x>=13.6.0", ] [tool.uv] # Some backend extras have incompatible transitive dependency requirements. # Each conflict below identifies the dependency that prevents co-installation. conflicts = [ # vLLM and SGLang have incompatible NIXL requirements. [ { extra = "vllm" }, { extra = "sglang" }, ], # TensorRT-LLM and vLLM have incompatible flashinfer-python requirements. [ { extra = "trtllm" }, { extra = "vllm" }, ], # SGLang and TensorRT-LLM have incompatible XGrammar requirements. [ { extra = "sglang" }, { extra = "trtllm" }, ], ] [tool.uv.dependency-groups] docs = { requires-python = ">=3.11" } [project.entry-points."vllm.general_plugins"] dynamo_nixl_telemetry = "dynamo.vllm.nixl_telemetry:allow_nixl_telemetry_capture" [project.entry-points.pytest11] vllm_tests = "dynamo.vllm.tests.conftest" trtllm_tests = "dynamo.trtllm.tests.conftest" triton_tests = "dynamo.triton.tests.conftest" sglang_tests = "dynamo.sglang.tests.conftest" [project.entry-points."aisimulate.sweep_config_providers"] "dynamo.planner" = "dynamo.planner.simulation:create_provider" "dynamo.router" = "dynamo.router.simulation:create_provider" [project.entry-points."aisimulate.runner_factories"] dynamo = "dynamo.replay.simulation:DynamoReplayRunnerFactory" [project.entry-points."aisimulate.config_adapters"] "dynamo.planner" = "dynamo.planner.simulation:create_provider" "dynamo.router" = "dynamo.router.simulation:create_provider" [project.entry-points."aisimulate.output_adapters"] dgd = "dynamo.aisimulate.output.dgd:create_adapter" [dependency-groups] docs = [ # Core Sphinx "sphinx>=8.1", "nvidia-sphinx-theme>=0.0.8", # Sphinx extensions "ablog>=0.11", "sphinx-copybutton>=0.5", "sphinx-design>=0.6", "sphinx-prompt>=1.9", "sphinx-sitemap>=2.6", "sphinx-tabs>=3.4", "sphinx-book-theme>=1.1", "sphinxcontrib-mermaid>=1.0", "sphinxcontrib-bibtex>=2.6", "sphinx-reredirects>=1.0.0", # Markdown and notebook support "myst-parser>=4.0", "myst-nb>=1.2", "nbsphinx>=0.9", # Static Python API discovery for docs/fern/scripts/gen_python_api.py. # Griffe parses the source tree without importing Dynamo, so the Fern # docs build does not require the runtime, backends, or CUDA to be # installed. Pytest and PyYAML are used by the focused tests under # docs/fern/scripts/tests/ that exercise the generator and navigation. "griffe==2.1.0", "pytest>=8.0", "pyyaml>=6.0", ] [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [tool.hatch.build.hooks.custom] path = "hatch_build.py" [tool.hatch.build.targets.wheel] packages = [ "components/src/dynamo", ] [tool.hatch.metadata] allow-direct-references = true [tool.codespell] # note: pre-commit passes explicit lists of files here, which this skip file list doesn't override - # this is only to allow you to run codespell interactively # this also overrides the grpc_generated folder, since it is generated # Ignore data files and auto-generated files skip = "./.git,./.github,./lib/llm/tests/data,*.lock,*.sum" # ignore allowed words used in code ignore-words-list = "afterall,ser,ende" # use the 'clear' dictionary for unambiguous spelling mistakes builtin = "clear" # use custom dictionary in addition to the built-in one dictionary = "./codespell.txt" # disable warnings about binary files and wrong encoding quiet-level = 3 [tool.isort] profile = "black" use_parentheses = true multi_line_output = 3 include_trailing_comma = true force_grid_wrap = 0 ensure_newline_before_comments = true line_length = 88 balanced_wrapping = true indent = " " skip = ["build"] known_first_party = ["dynamo", "deploy"] # isort may confuse what is 1st or 3rd library. e.g. # when dynamo/vllm/omni/xx.py import vllm, local isort may treat this `vllm` as first # party heuristically. This causes local sort differs from GitHub sort and pre-commit # failure. To mitigate 1) one can install 3rd party lib so that isort is aware of it, # 2) hardcode 3rd party lib here, 3) add "# isort: skip_file" to problematic files # as the last resort. known_third_party = ["vllm", "tensorrt_llm", "sglang", "tokenspeed", "aisimulate", "aisimulate_core"] [tool.pytest.ini_options] minversion = "8.0" tmp_path_retention_policy = "failed" # NOTE # Keep these ignores in pytest collection to avoid duplicate-module collection # errors (for example, backend trees that include multiple model.py files). addopts = [ "-ra", "--showlocals", "--strict-markers", "--strict-config", "-p", "no:schemathesis", "--ignore-glob=*model.py", "--ignore-glob=*vllm_integration*", "--ignore-glob=*trtllm_integration*", "--ignore-glob=*kvbm/python/kvbm*", "--ignore-glob=*_inc.py", "--ignore-glob=*/llm/tensorrtllm*", "--ignore-glob=docs/fern/*", # Protocol compatibility tests have pinned tooling-only dependencies and run # in their path-triggered unittest workflow. Generic runtime images do not # install those dependencies, so do not collect this standalone suite there. "--ignore-glob=scripts/protocol_compatibility/tests/*", # power-agent ships a standalone suite run in-image (deploy/power-agent # Dockerfile `test` stage + its own pytest.ini); its tests/ package name # collides with the repo-root tests/ package during repo-wide collection. "--ignore-glob=deploy/power-agent/tests/*", "--ignore-glob=components/src/dynamo/sglang/request_handlers/*", "--ignore-glob=components/src/dynamo/sglang/multimodal_utils/*", "--ignore-glob=components/src/dynamo/vllm/multimodal_utils/*", "--ignore-glob=examples/backends/sglang/slurm_jobs/*", # FIXME: Get relative/generic blob paths to work here ] xfail_strict = true log_cli_level = "INFO" filterwarnings = [ "error", # kr8s 0.20.13 predates Kubernetes 1.36; keep its version warning visible # without aborting deploy tests. Remove when the pinned release supports 1.36. # Upstream coverage: https://github.com/kr8s-org/kr8s/pull/744 'default:^Kubernetes version v1\.36\.\d+ is not supported\. Supported versions for kr8s 0\.20\.13 are 1\.28 to 1\.34\.$:UserWarning:kr8s\._api$', # DGDR still uses AISimulate's supported legacy sweep API until its # migration to the new Sweeper API is implemented. 'ignore:`aisimulate\.sdk\.sweep\.sweep_(agg|disagg)\(\)` is a deprecated sweep API:DeprecationWarning', # chardet 6.x is pulled in transitively but requests 2.32.x only supports chardet <6; # charset_normalizer is used at runtime so the warning is benign. "ignore:.*doesn't match a supported version", # CUDA deprecation warnings from tensorrt_llm "ignore:.*cuda*:DeprecationWarning", # cuda.cudart/cuda.nvrtc deprecated in favor of cuda.bindings.* (cuda-python >=13) # Triggered by flashinfer 0.6.7+ during import of comm/mnnvl.py "ignore:The cuda\\..*module is deprecated:FutureWarning", # nvidia-cutlass-dsl 4.8.0.dev0 moved names out of cutlass.utils and cutlass.arch. # The TensorRT-LLM 1.3.0rc27 base image ships it where rc26 shipped 4.6.2, while # flashinfer 0.6.18 is the same in both images and still reads the old locations, # some of them in class-body annotations that run at import time. Those four # warnings are every one that `import tensorrt_llm._torch.models` gains between # the two images, and they fail the import under -W error. "ignore:cutlass\\.utils\\..* is deprecated:DeprecationWarning", "ignore:Arch from arch\\.py is deprecated:DeprecationWarning", # SGLang GGUF quantization emits UserWarning on non-CUDA platforms (arm64 CPU-only CI) "ignore:Only CUDA.*support GGUF quantization:UserWarning", # SGLang still subclasses its deprecated MultiPlatformOp internally. "ignore:MultiPlatformOp is deprecated; subclass sglang\\.kernels\\.fused_op\\.BaseFusedOp instead:DeprecationWarning", # protobuf C extension warning "ignore:.*PyType_Spec.*custom tp_new.*:DeprecationWarning", # unclosed socket/event loop warnings "ignore:.*unclosed.*socket.*:ResourceWarning", "ignore:.*unclosed event loop.*:ResourceWarning", # unraisable exception warnings "ignore:.*Exception ignored in.*:pytest.PytestUnraisableExceptionWarning", # pynvml deprecation, temporary until upstream migrates to nvidia-ml-py "ignore:The pynvml package is deprecated.*:FutureWarning", # Dynamo's own KV events deprecation warning "ignore:Automatic KV events configuration is deprecated.*:FutureWarning", # Python 3.12 SWIG extension warning from third-party tokenizer deps "ignore:builtin type (SwigPyPacked|SwigPyObject|swigvarlink) has no __module__ attribute:DeprecationWarning", # Pydantic V2 deprecation warnings from TRTLLM dependencies "ignore:Support for class-based `config`.*:pydantic.warnings.PydanticDeprecatedSince20", "ignore:Using extra keyword arguments on `Field`.*:pydantic.warnings.PydanticDeprecatedSince20", "ignore:The `schema` method is deprecated.*:pydantic.warnings.PydanticDeprecatedSince20", # Pydantic field shadowing in tensorrt_llm.serve.openai_protocol.ResponseFormat 'ignore:Field name "schema" in "ResponseFormat" shadows an attribute in parent:UserWarning', # pytest-benchmark automatically disables when xdist is active "ignore:.*Benchmarks are automatically disabled.*:pytest_benchmark.logger.PytestBenchmarkWarning", # torchao invalid escape sequences in docstrings at import time "ignore:.*invalid escape sequence.*:SyntaxWarning", # torchao import path changes (https://github.com/pytorch/ao/issues/2752) "ignore:Importing.*torchao\\.dtypes.*:DeprecationWarning", # Triton CPU fallback warning on CPU-only runners "ignore:Triton is not supported on current platform.*:UserWarning", # torch.jit.script_method deprecation from torch.utils.mkldnn "ignore:.*torch\\.jit\\.script_method.*is deprecated.*:DeprecationWarning", # torch.jit.script deprecation from modelopt.torch.quantization "ignore:`torch.jit.script` is deprecated:DeprecationWarning", # nvidia-cutlass-dsl, transitive from flashinfer "ignore:tcgen05\\..*is deprecated.*:DeprecationWarning", # nvidia-modelopt warning about transformers version (transitive dep from TRT-LLM) "ignore:transformers version .* is incompatible with nvidia-modelopt.*:UserWarning", # SGLang quantization warnings on CPU-only runners "ignore:Only CUDA, HIP and XPU support AWQ currently.*:UserWarning", "ignore:Only CUDA support GGUF quantization currently.*:UserWarning", # pandas 2.3 emits this from pd.concat on empty/all-NA frames; AISimulate hits it # during disagg pareto search and re-raises as RuntimeError, breaking planner tests. "ignore:The behavior of DataFrame concatenation with empty or all-NA entries is deprecated.*:FutureWarning", # pandas 2.3 emits this from AISimulate pareto filtering under filterwarnings=error. "ignore:Downcasting behavior in `replace` is deprecated.*:FutureWarning", # pandas 2.3 emits this from the bundled compatibility report path on fillna. "ignore:Downcasting object dtype arrays on .fillna.*:FutureWarning:aisimulate.legacy_cli.report_and_save", # pandas 3.1 deprecates DataFrame.drop(inplace=...) with Pandas4Warning, a DeprecationWarning # subclass; AISimulate still passes it in aisimulate.sdk.pareto_analysis, which picking calls. "ignore:The inplace keyword in DataFrame.drop is deprecated.*:DeprecationWarning:aisimulate", ] # NOTE: Can also manually mark tests with @pytest.mark.asyncio asyncio_mode = "auto" markers = [ "pre_merge: marks tests to run before merging", "post_merge: marks tests to run after merge", "parallel: marks tests that can run in parallel with pytest-xdist", "defaulted: applied automatically by the repository-root conftest.py to a test that declared no lifecycle or hardware marker. Do not hand-apply it. The CPU parallel job selects it so defaulted tests do not pile into the sequential job, which runs the fault-tolerance suite in one process", "nightly: marks tests to run nightly", "skip_in_nightly: excludes a test from the nightly pipeline only (still runs in pre_merge/post_merge). Used via `not skip_in_nightly` in nightly-ci.yml marker filters", "frontend_api_surface_compliance: marks tests that validate Dynamo's HTTP API surface (Responses/Anthropic wire shape, tool-call routing) against upstream compliance harnesses", "token_budget_parity: compares native backend and Dynamo prompt/output overflow behavior", "weekly: marks tests to run weekly", "release: marks tests to run on release pipelines", "gpu_0: marks tests that don't require GPU", "gpu_1: marks tests to run on GPU", "gpu_2: marks tests to run on 2GPUs", "gpu_4: marks tests to run on 4GPUs", "gpu_8: marks tests to run on 8GPUs", "xpu_1: marks tests to run on XPU", "xpu_2: marks tests to run on 2XPUs", # These 6 (profiled_vram_gib and requested_*) are used for parallel pytest executions: "profiled_vram_gib(N): actual peak VRAM observed by nvidia-smi during profiling. Used for --max-vram-gib filtering and scheduler budget tracking", "requested_vllm_kv_cache_bytes(N): exact KV cache bytes for vLLM (skips memory profiling). Sets _PROFILE_PYTEST_KV_CACHE_BYTES. Most deterministic method for parallel execution", "requested_sglang_kv_tokens(N): max KV cache tokens for SGLang parallel execution. Sets _OVERRIDE_SGLANG_MAX_TOTAL_TOKENS to cap --max-total-tokens and prevent over-allocation", "requested_sglang_vram_gib(N): max VRAM in GiB for SGLang parallel execution. Use for non-text workloads (video/image diffusion) where token-based control doesn't apply", "requested_trtllm_kv_tokens(N): max KV cache tokens for TensorRT-LLM parallel execution. Sets _PROFILE_OVERRIDE_TRTLLM_MAX_TOTAL_TOKENS to cap KvCacheConfig.max_tokens via --override-engine-args", "requested_trtllm_vram_gib(N): max VRAM in GiB for TensorRT-LLM parallel execution. Sets _PROFILE_OVERRIDE_TRTLLM_MAX_GPU_TOTAL_BYTES to cap KvCacheConfig.max_gpu_total_bytes via --override-engine-args. Use for non-text workloads (video/image diffusion)", "e2e: marks tests as end-to-end tests", "integration: marks tests as integration tests", "unit: marks tests as unit tests", "wheel_smoke: marks tests that validate wheels copied from runtime images", "installs_extra_dependencies: marks tests that pip-install a package the runtime image intentionally omits (via DYN_TEST_ONLY_PIP_INSTALL). The feature under test may not work in an unmodified shipped image", "stress: marks tests as stress tests", "performance: marks tests as performance tests", "benchmark: marks tests as benchmark tests", "none: marks tests that do not require a framework-specific runtime", "core: marks tests that exercise core/runtime functionality", "vllm: marks tests as requiring vllm", "trtllm: marks tests as requiring trtllm", "sglang: marks tests as requiring sglang", "triton: marks tests as requiring triton", "triton_qa: marks the Triton QA test suite", "lmcache: marks tests as requiring lmcache", "framework_agnostic: marks tests that inspect the container image itself; they carry framework markers for CI selection but need no framework module installed", "multimodal: marks tests as multimodal (image/video) tests", "slow: marks tests as known to be slow", "h100: marks tests to run on H100", "aiconfigurator: marks e2e tests that cover aiconfigurator functionality", "mocker: marks tests for the mocker component", "router: marks tests for router component", "planner: marks tests for planner component", "sidecar: marks tests that launch a Dynamo dynamo-*-sidecar binary against its native-gRPC engine via lib/sidecar/*/launch/*.sh", "engine_ports: dynamo_dynamic_ports also allocates per-worker engine HTTP/gRPC ports, exported as DYN_ENGINE_{HTTP,GRPC}_PORT{N}", "kvbm: marks tests for KV behavior and model determinism", "kvbm_consolidator: marks KVBM consolidator/router integration tests", "kvbm_determinism: marks KVBM model determinism tests", "kvbm_concurrency: marks concurrency stress tests for KVBM (runs separately)", "model: model id used by a test or parameter", "custom_build: marks tests that require custom builds or special setup (e.g., MoE models)", "k8s: marks tests as requiring Kubernetes", "fault_tolerance: marks tests as fault tolerance tests", "deploy: marks tests as deployment tests", "framework_only: marks standard framework deployment tests (vllm, sglang, trtllm, triton)", "framework_with_gaie: marks tests for GAIE (Gateway API Inference Extension) deployment", "framework_with_efa: marks deployment tests that require an EFA-capable cluster and an -efa image", "framework_with_kvcr: marks deployment tests that require a KVCR-capable image and multi-host RDMA", "snapshot_restore: marks standalone Snapshot checkpoint/restore deployment tests", "unified: marks common backend-interface e2e tests (BaseEngine + Worker)", # Built-in markers "skip: skip this test", "skipif: skip if condition is true", "xfail: expected failure", "usefixtures: use fixtures", "parametrize: parameterized test", "filterwarnings: filter warnings", "asyncio: asyncio test marker", # Third-party plugin markers "timeout: test timeout in seconds (pytest-timeout plugin)", "flaky: rerun a flaky test on failure (pytest-rerunfailures plugin)", ] # Linting/formatting [tool.ruff] # Same as Black. line-length = 88 indent-width = 4 [tool.ruff.lint.extend-per-file-ignores] "icp/tests/**/test_*.py" = ["F811", "F401"] "*_inc.py" = ["F821"] # This is IDE (e.g. Cursor's default Python language server) # Configure it so that developers can use "go-to-definition", "hover types" and other # features. [tool.basedpyright] extraPaths = ["components/src", "lib/bindings/python/src"] # This is for external dependencies. venvPath = "." venv = ".venv" [tool.mypy] # --disable-error-code: WAR large set of errors due to mypy not being run # previously. We can slowly enable sets of errors to fix over time. # disable_error_code = [] # --explicit-package-bases: WAR errors about duplicate module names used # throughout the llm examples. For example, the common module in # tensorrt_llm and vllm are both named common. explicit_package_bases = true check_untyped_defs = true [[tool.mypy.overrides]] # _version.py is generated at build time and does not exist in the source tree. module = ["dynamo.*._version"] ignore_missing_imports = true [[tool.mypy.overrides]] # Skip type checking for test files. module = ["dynamo.*.tests.*", "dynamo.*.tests"] ignore_errors = true [[tool.mypy.overrides]] # Manual planner helpers are operational scripts, not typed library surfaces. module = ["dynamo.planner.manual.*"] ignore_errors = true [[tool.mypy.overrides]] # AI Simulate is a separate, optional distribution. Load its types when it is # installed without reporting errors that originate inside that distribution. module = ["aisimulate", "aisimulate.*"] follow_imports = "silent" ignore_missing_imports = true [[tool.mypy.overrides]] # Skip mypy analysis on backend framework internals. # ignore_missing_imports silences import-not-found only when the backend # is not installed (e.g. sglang/trtllm missing in the vllm container). module = ["vllm", "vllm.*"] follow_imports = "skip" ignore_missing_imports = true [[tool.mypy.overrides]] module = ["sglang", "sglang.*"] follow_imports = "skip" ignore_missing_imports = true [[tool.mypy.overrides]] module = ["tensorrt_llm", "tensorrt_llm.*"] follow_imports = "skip" ignore_missing_imports = true [[tool.mypy.overrides]] # PyNvVideoCodec: GPU-only NVDEC codec (common/multimodal/nvdec_decoder.py). # Absent from the CPU lint env and ships no type stubs, so mypy would raise # import-not-found on the guarded `import PyNvVideoCodec`. module = ["PyNvVideoCodec", "PyNvVideoCodec.*"] follow_imports = "skip" ignore_missing_imports = true [[tool.mypy.overrides]] # OpenCV is optional and absent from the lint environment. module = ["cv2", "cv2.*"] follow_imports = "skip" ignore_missing_imports = true [[tool.mypy.overrides]] # WAR mypy 1.18.x crash with numpy 1.26.x stubs: # "Should never get here in normal mode, got TypeAlias:numpy.float64 instead of TypeInfo" module = ["numpy", "numpy.*"] follow_imports = "skip" ignore_missing_imports = true [[tool.mypy.overrides]] # NumPy 2.3+ leaves np.empty() untyped when NumPy imports are skipped. Keep the # existing realtime handler accepted without suppressing other error classes. module = ["dynamo.vllm.realtime.handler"] disable_error_code = ["var-annotated"] [[tool.mypy.overrides]] # Third-party libs without type stubs or optional internal deps # TODO: fix the ones that do have stub package module = [ "nvtx", "fsspec", "fsspec.*", "zstandard", "zstandard.*", "kubernetes", "kubernetes.*", "scipy", "scipy.*", "sklearn", "sklearn.*", "pmdarima", "pmdarima.*", "filterpy", "filterpy.*", "prophet", "prophet.*", "nixl", "nixl.*", "imageio", "imageio.*", "prometheus_api_client", "prometheus_api_client.*", "aiohttp", "aiohttp.*", "vllm_omni", "vllm_omni.*", "modelexpress", "modelexpress.*", "kvbm", "kvbm.*", "diffusers", "diffusers.*", "torch", "torch.*", "transformers", "transformers.*", "cupy", "cupy.*", "gpu_memory_service", "gpu_memory_service.*", "pydantic", "pydantic.*", "uvloop", "prometheus_client", "prometheus_client.*", "pybase64", "blake3", "cupy_backends", "cupy_backends.*", "huggingface_hub", "huggingface_hub.*", "httpx", "httpx.*", "zmq", "zmq.*", "safetensors", "safetensors.*", "kubernetes_asyncio", "kubernetes_asyncio.*", "ray", "ray.*", "pydantic_core", "aisimulate", "aisimulate.*", "aisimulate_core", "aisimulate_core.*", "soundfile", "soundfile.*", "librosa", "librosa.*", ] ignore_missing_imports = true [[tool.mypy.overrides]] # msgspec.Struct uses custom __init_subclass__ kwargs (frozen, gc) that mypy # cannot resolve without the msgspec package installed. module = ["msgspec", "msgspec.*"] follow_imports = "skip" ignore_missing_imports = true [[tool.mypy.overrides]] # grpc / google.protobuf ship without type stubs in the dynamo-runtime image # (grpc-stubs / types-protobuf are not pulled in by requirements.common.txt). # The planner plugin transport imports grpc.aio + google.protobuf.message at # module top — silence import-untyped errors there. module = ["grpc", "grpc.*", "google.protobuf", "google.protobuf.*"] follow_imports = "skip" ignore_missing_imports = true [[tool.mypy.overrides]] # Profiler module was never previously type-checked and has many # union-attr / attr-defined issues. Skip errors for now. module = ["dynamo.profiler.*"] ignore_errors = true [tool.sphinx] # extra-content-head extra_content_head = [ ''' ''', ] #extra-content-footer extra_content_footer = [ ''' ''', ]