pyproject.toml 6.53 KB
Newer Older
Neelay Shah's avatar
Neelay Shah committed
1
# SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

Neelay Shah's avatar
Neelay Shah committed
16
[project]
17
name = "ai-dynamo"
18
version = "0.2.1"
Neelay Shah's avatar
Neelay Shah committed
19
20
21
description = "Distributed Inference Framework"
readme = "README.md"
authors = [
Neelay Shah's avatar
Neelay Shah committed
22
    { name = "NVIDIA Inc.", email = "sw-dl-dynamo@nvidia.com" },
Neelay Shah's avatar
Neelay Shah committed
23
]
24
25
license = { text = "Apache-2.0" }
license-files = ["LICENSE"]
Neelay Shah's avatar
Neelay Shah committed
26
27
28
requires-python = ">=3.10"
dependencies = [
    "pytest>=8.3.4",
29
    "bentoml==1.4.8",
30
    "types-psutil==7.0.0.20250218",
31
    "kubernetes==32.0.1",
32
    "ai-dynamo-runtime==0.2.1",
33
    "fastapi==0.115.6",
34
    "distro",
35
    "typer",
36
    "circus>=0.17.0",
37
    "click<8.2.0",
Neelay Shah's avatar
Neelay Shah committed
38
]
39

40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
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.10",
    "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"]
Neelay Shah's avatar
Neelay Shah committed
55

56
57
58
[project.urls]
Repository = "https://github.com/ai-dynamo/dynamo.git"

59
[project.optional-dependencies]
60
all = [
61
    "ai-dynamo-vllm~=0.8.4",
62
63
64
    "nixl",
]

65
vllm = [
66
    "ai-dynamo-vllm~=0.8.4"
67
68
]

69
70
71
72
sglang = [
    "sglang[all]@git+https://github.com/sgl-project/sglang@4d643f6c7a291c86de64a9e52eca526b2d99775d#subdirectory=python"
]

73
74
75
76
77
78
[project.scripts]
dynamo = "dynamo.sdk.cli.cli:cli"
dynamo-run = "dynamo.sdk.cli.run_executable:dynamo_run"
llmctl = "dynamo.sdk.cli.run_executable:llmctl"
http = "dynamo.sdk.cli.run_executable:http"
metrics = "dynamo.sdk.cli.run_executable:metrics"
79
mock_worker = "dynamo.sdk.cli.run_executable:mock_worker"
80
81

[build-system]
82
83
84
85
requires = ["hatchling"]
build-backend = "hatchling.build"

[tool.hatch.build.targets.wheel]
86
packages = ["deploy/sdk/src/dynamo", "components/planner/src/dynamo"]
87
88
89

# This section is for including the binaries in the wheel package
# but doesn't make them executable scripts in the venv bin directory
90
91
92

[tool.hatch.build.hooks.custom]
path = "hatch_build.py"
93

94
95
96
[tool.hatch.metadata]
allow-direct-references = true

97
98
99
100
101
[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

102
103
# Ignore data files and auto-generated files
skip = "./.git,./.github,./lib/llm/tests/data,*.lock,*.sum"
104

105
106
# ignore allowed words used in code
ignore-words-list = "afterall,ser,ende"
107
108
# use the 'clear' dictionary for unambiguous spelling mistakes
builtin = "clear"
109
110
# use custom dictionary in addition to the built-in one
dictionary = "./codespell.txt"
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# 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"]
Neelay Shah's avatar
Neelay Shah committed
125
known_first_party = ["dynamo"]
126
127
128

[tool.pytest.ini_options]
minversion = "8.0"
129
tmp_path_retention_policy = "failed"
Neelay Shah's avatar
Neelay Shah committed
130
131
132
133

# NOTE
# We ignore model.py explcitly here to avoid mypy errors with duplicate modules
# pytest overrides the default mypy exclude configuration and so we exclude here as well
134
# Ignore mypy check for api-store component from Dynamo Deploy. Mypy analysis will fail since this package (and its dependencies) are not installed.
135
136
137
138
139
140
141
addopts = [
    "-ra",
    "--showlocals",
    "--strict-markers",
    "--strict-config",
    "--mypy",
    "--ignore-glob=*model.py",
142
    "--ignore-glob=*_inc.py",
143
    "--ignore-glob=deploy/cloud/api-store/*",
144
145
    # FIXME: Get relative/generic blob paths to work here
]
146
147
148
xfail_strict = true
log_cli_level = "INFO"
filterwarnings = [
149
150
151
    "error",
    "ignore:.*cuda*:DeprecationWarning", # Need this to avoid deprecation warnings from CUDA in tensorrt_llm.
    "ignore:.*pkg_resources.*:DeprecationWarning",
152
153
    "ignore:.*pkg_resources.*:UserWarning",
    "ignore:.*multipart.*:PendingDeprecationWarning",
154
]
155
156


157
158
# NOTE: Can also manually mark tests with @pytest.mark.asyncio
asyncio_mode = "auto"
Neelay Shah's avatar
Neelay Shah committed
159
markers = [
160
161
162
163
    "pre_merge: marks tests to run before merging",
    "nightly: marks tests to run nightly",
    "weekly: marks tests to run weekly",
    "gpu: marks tests to run on GPU"
Neelay Shah's avatar
Neelay Shah committed
164
]
165
166
167
168
169
170
171

# Linting/formatting
[tool.ruff]
# Same as Black.
line-length = 88
indent-width = 4

Blazej's avatar
Blazej committed
172
173
[tool.ruff.lint.extend-per-file-ignores]
"icp/tests/**/test_*.py" = ["F811", "F401"]
174
"*_inc.py" = ["F821"]
Blazej's avatar
Blazej committed
175

176
[tool.mypy]
Neelay Shah's avatar
Neelay Shah committed
177

178
179
# --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.
Neelay Shah's avatar
Neelay Shah committed
180
181
# disable_error_code = []

182
# --explicit-package-bases: WAR errors about duplicate module names used
183
184
185
#   throughout the llm examples. For example, the common module in
#   tensorrt_llm and vllm are both named common.
explicit_package_bases = true
Neelay Shah's avatar
Neelay Shah committed
186

187
188
189
190
# --ignore-missing-imports: WAR too many errors when developing outside
#   of container environment with PYTHONPATH set and packages installed.
#   NOTE: Can possibly move mypy from pre-commit to a github action run only in
#   a container with the expected environment and PYTHONPATH setup.
Neelay Shah's avatar
Neelay Shah committed
191
192
ignore_missing_imports = true

193
194
195
196
check_untyped_defs = true

[[tool.mypy.overrides]]
# Skip mypy analysis on internal dependencies of vllm
197
module = ["vllm.*", "bentoml.*", "fs.*", "_bentoml_sdk.*"]
198
follow_imports = "skip"
199
ignore_missing_imports = true
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214

# extra-content-head
#extra_content_head = [
#    '''
#    <script src="https://assets.adobedtm.com/5d4962a43b79/c1061d2c5e7b/launch-191c2462b890.min.js" ></script>
#    ''',
#]

#[tool.sphinx]

# extra-content-footer
#extra_content_footer = [
#    '''
#    <script type="text/javascript">if (typeof _satellite !== "undefined") {_satellite.pageBottom();}</script>
#    ''',
215
#]