[build-system] # Should be mirrored in requirements/build.txt requires = [ "cmake>=3.26.1", "ninja", "packaging>=24.2", "setuptools>=77.0.3,<80.0.0", "setuptools-scm>=8.0", "torch == 2.8.0", "wheel", "jinja2", ] build-backend = "setuptools.build_meta" [project] name = "vllm" authors = [{name = "vLLM Team"}] license = "Apache-2.0" license-files = ["LICENSE"] readme = "README.md" description = "A high-throughput and memory-efficient inference and serving engine for LLMs" classifiers = [ "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Intended Audience :: Developers", "Intended Audience :: Information Technology", "Intended Audience :: Science/Research", "Topic :: Scientific/Engineering :: Artificial Intelligence", "Topic :: Scientific/Engineering :: Information Analysis", ] requires-python = ">=3.9,<3.14" dynamic = [ "version", "dependencies", "optional-dependencies"] [project.urls] Homepage="https://github.com/vllm-project/vllm" Documentation="https://docs.vllm.ai/en/latest/" Slack="https://slack.vllm.ai/" [project.scripts] vllm = "vllm.entrypoints.cli.main:main" [project.entry-points."vllm.general_plugins"] lora_filesystem_resolver = "vllm.plugins.lora_resolvers.filesystem_resolver:register_filesystem_resolver" [tool.setuptools_scm] # no extra settings needed, presence enables setuptools-scm [tool.setuptools.packages.find] where = ["."] include = ["vllm*"] [tool.yapfignore] ignore_patterns = [ ".buildkite/**", "benchmarks/**", "build/**", "examples/**", ] [tool.ruff] # Allow lines to be as long as 80. line-length = 80 [tool.ruff.lint.per-file-ignores] "vllm/third_party/**" = ["ALL"] "vllm/version.py" = ["F401"] "vllm/_version.py" = ["ALL"] # Python 3.8 typing - skip V0 code "vllm/attention/**/*.py" = ["UP006", "UP035"] "vllm/core/**/*.py" = ["UP006", "UP035"] "vllm/engine/**/*.py" = ["UP006", "UP035"] "vllm/executor/**/*.py" = ["UP006", "UP035"] "vllm/worker/**/*.py" = ["UP006", "UP035"] [tool.ruff.lint] select = [ # pycodestyle "E", # Pyflakes "F", # pyupgrade "UP", # flake8-bugbear "B", # flake8-simplify "SIM", # isort # "I", # flake8-logging-format "G", ] ignore = [ # star imports "F405", "F403", # lambda expression assignment "E731", # Loop control variable not used within loop body "B007", # f-string format "UP032", # Can remove once 3.10+ is the minimum Python version "UP007", ] [tool.mypy] plugins = ['pydantic.mypy'] ignore_missing_imports = true check_untyped_defs = true follow_imports = "silent" # After fixing type errors resulting from follow_imports: "skip" -> "silent", # move the directory here and remove it from tools/mypy.sh files = [ "vllm/*.py", "vllm/adapter_commons", "vllm/assets", "vllm/entrypoints", "vllm/core", "vllm/inputs", "vllm/logging_utils", "vllm/multimodal", "vllm/platforms", "vllm/transformers_utils", "vllm/triton_utils", "vllm/usage", ] # TODO(woosuk): Include the code from Megatron and HuggingFace. exclude = [ "vllm/model_executor/parallel_utils/|vllm/model_executor/models/", # Ignore triton kernels in ops. 'vllm/attention/ops/.*\.py$' ] [tool.isort] skip_glob = [ ".buildkite/*", "benchmarks/*", "examples/*", ] use_parentheses = true skip_gitignore = true [tool.pytest.ini_options] markers = [ "skip_global_cleanup", "core_model: enable this model test in each PR instead of only nightly", "hybrid_model: models that contain mamba layers (including pure SSM and hybrid architectures)", "cpu_model: enable this model test in CPU tests", "split: run this test as part of a split", "distributed: run this test only in distributed GPU tests", "skip_v1: do not run this test with v1", "optional: optional tests that are automatically skipped, include --optional to run them", ] [tool.ty.src] root = "./vllm" respect-ignore-files = true [tool.ty.environment] python = "./.venv" [tool.typos.files] # these files may be written in non english words extend-exclude = ["tests/models/fixtures/*", "tests/prompts/*", "benchmarks/sonnet.txt", "tests/lora/data/*", "build/*", "vllm/third_party/*"] ignore-hidden = true ignore-files = true ignore-dot = true ignore-vcs = true ignore-global = true ignore-parent = true [tool.typos.default] binary = false check-filename = false check-file = true unicode = true ignore-hex = true identifier-leading-digits = false locale = "en" extend-ignore-identifiers-re = ["NVML_*", ".*Unc.*", ".*_thw", ".*UE8M0.*", ".*[UE4M3|ue4m3].*", ".*eles.*", ".*[Tt]h[rR].*"] extend-ignore-words-re = [] extend-ignore-re = [] [tool.typos.default.extend-identifiers] bbc5b7ede = "bbc5b7ede" womens_doubles = "womens_doubles" v_2nd = "v_2nd" # splitted_input = "splitted_input" NOOPs = "NOOPs" typ = "typ" nin_shortcut = "nin_shortcut" UperNetDecoder = "UperNetDecoder" subtile = "subtile" cudaDevAttrMaxSharedMemoryPerBlockOptin = "cudaDevAttrMaxSharedMemoryPerBlockOptin" SFOuput = "SFOuput" # huggingface transformers repo uses these words depthwise_seperable_out_channel = "depthwise_seperable_out_channel" DepthWiseSeperableConv1d = "DepthWiseSeperableConv1d" depthwise_seperable_CNN = "depthwise_seperable_CNN" [tool.typos.default.extend-words] iy = "iy" tendencias = "tendencias" # intel cpu features tme = "tme" dout = "dout" Pn = "Pn" arange = "arange" [tool.typos.type.py] extend-glob = [] extend-ignore-identifiers-re = [] extend-ignore-words-re = [] extend-ignore-re = [] [tool.typos.type.py.extend-identifiers] arange = "arange" NDArray = "NDArray" EOFError = "EOFError" fo = "fo" ba = "ba" [tool.typos.type.py.extend-words] [tool.typos.type.cpp] extend-glob = ["*.cu"] extend-ignore-identifiers-re = [] extend-ignore-words-re = [] extend-ignore-re = [] [tool.typos.type.cpp.extend-identifiers] countr_one = "countr_one" k_ot = "k_ot" ot = "ot" [tool.typos.type.cpp.extend-words] [tool.typos.type.rust] extend-glob = [] extend-ignore-identifiers-re = [] extend-ignore-words-re = [] extend-ignore-re = [] [tool.typos.type.rust.extend-identifiers] flate2 = "flate2" [tool.typos.type.rust.extend-words] ser = "ser" [tool.typos.type.lock] extend-glob = [] check-file = false extend-ignore-identifiers-re = [] extend-ignore-words-re = [] extend-ignore-re = [] [tool.typos.type.lock.extend-identifiers] [tool.typos.type.lock.extend-words] [tool.typos.type.jl] extend-glob = [] extend-ignore-identifiers-re = [] extend-ignore-words-re = [] extend-ignore-re = [] [tool.typos.type.jl.extend-identifiers] [tool.typos.type.jl.extend-words] modul = "modul" egals = "egals" usig = "usig" egal = "egal" [tool.typos.type.go] extend-glob = [] extend-ignore-identifiers-re = [] extend-ignore-words-re = [] extend-ignore-re = [] [tool.typos.type.go.extend-identifiers] flate = "flate" [tool.typos.type.go.extend-words] [tool.typos.type.css] extend-glob = [] extend-ignore-identifiers-re = [] extend-ignore-words-re = [] extend-ignore-re = [] [tool.typos.type.css.extend-identifiers] nd = "nd" [tool.typos.type.css.extend-words] [tool.typos.type.man] extend-glob = [] extend-ignore-identifiers-re = [] extend-ignore-words-re = [] extend-ignore-re = [] [tool.typos.type.man.extend-identifiers] Nd = "Nd" [tool.typos.type.man.extend-words] [tool.typos.type.cert] extend-glob = [] check-file = false extend-ignore-identifiers-re = [] extend-ignore-words-re = [] extend-ignore-re = [] [tool.typos.type.cert.extend-identifiers] [tool.typos.type.cert.extend-words] [tool.typos.type.sh] extend-glob = [] extend-ignore-identifiers-re = [] extend-ignore-words-re = [] extend-ignore-re = [] [tool.typos.type.sh.extend-identifiers] ot = "ot" [tool.typos.type.sh.extend-words] [tool.typos.type.vimscript] extend-glob = [] extend-ignore-identifiers-re = [] extend-ignore-words-re = [] extend-ignore-re = [] [tool.typos.type.vimscript.extend-identifiers] windo = "windo" [tool.typos.type.vimscript.extend-words]