# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you 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. [project] name = "mlc_llm" # Note: Call version.py to update the version before building the wheel version = "0.20.0.dev0" description = "MLC LLM: an universal LLM deployment engine via ML compilation." authors = [{ name = "MLC LLM Contributors" }] readme = "README.md" license = { text = "Apache 2.0" } classifiers = [ "License :: OSI Approved :: Apache Software License", "Development Status :: 4 - Beta", "Intended Audience :: Developers", "Intended Audience :: Education", "Intended Audience :: Science/Research", ] keywords = ["machine learning"] requires-python = ">=3.9" dependencies = [ "apache-tvm-ffi", "datasets", "fastapi", "flashinfer-python; sys_platform == 'linux'", "ml_dtypes>=0.5.1", "openai", "pandas", "prompt_toolkit", "requests", "safetensors", "sentencepiece", "shortuuid", "tiktoken", "torch", "tqdm", "transformers", "uvicorn", ] [project.urls] Homepage = "https://llm.mlc.ai/" Documentation = "https://llm.mlc.ai/docs/" Repository = "https://github.com/mlc-ai/mlc-llm" "Bug Tracker" = "https://github.com/mlc-ai/mlc-llm/issues" [build-system] requires = ["scikit-build-core>=0.10.0"] build-backend = "scikit_build_core.build" [tool.scikit-build] # Point to the root CMakeLists.txt cmake.source-dir = "." cmake.build-type = "Release" # Configure the wheel to be Python version-agnostic wheel.py-api = "py3" # Build configuration build-dir = "build" # CMake configuration - ensure proper installation paths cmake.args = ["-DMLC_LLM_BUILD_PYTHON_MODULE=ON"] # Wheel configuration wheel.packages = ["python/mlc_llm"] wheel.install-dir = "mlc_llm" # Source distribution configuration sdist.include = [ # Build files "/CMakeLists.txt", "/pyproject.toml", "/cmake/**/*", "/3rdparty/**/*", # Source code "/src/**/*.cc", "/src/**/*.h", # Python source "/python/mlc_llm/**/*.py", # Documentation and metadata "/docs/**/*", "/LICENSE", "/README.md", "/NOTICE", # Tests "/tests/**/*", "/.pre-commit-config.yaml", ] sdist.exclude = [ "**/.git", "**/.github", "**/__pycache__", "**/*.pyc", "build", "dist", "3rdparty/tvm", "**/3rdparty/*/docs", "**/3rdparty/*/media", "**/3rdparty/*/examples", "**/3rdparty/*/test", ] # Logging logging.level = "INFO" [tool.ruff] include = [ "python/**/*.py", "tests/**/*.py", "examples/**/*.py", "docs/**/*.py", "cmake/**/*.py", "version.py", ] line-length = 100 indent-width = 4 target-version = "py39" exclude = ["3rdparty", "build", "dist", ".venv", ".ruff_cache"] [tool.ruff.lint] select = [ "E", # pycodestyle errors "F", # pyflakes "I", # isort "UP", # pyupgrade "RUF", # ruff-specific rules ] ignore = [ "UP028", # yield-in-for-loop "UP030", # format-literals "UP031", # printf-string-formatting "RUF010", # explicit-f-string-type-conversion — !s/!r/!a is obscure; prefer explicit str()/repr() "RUF043", # pytest-raises-ambiguous-pattern "RUF059", # unused-unpacked-variable ] fixable = ["ALL"] unfixable = [] [tool.ruff.lint.per-file-ignores] "__init__.py" = ["E402", "F401", "F403", "F405"] [tool.ruff.lint.isort] known-first-party = ["mlc_llm"] [tool.ruff.format] quote-style = "double" indent-style = "space" skip-magic-trailing-comma = false line-ending = "auto" [dependency-groups] lint = ["pre-commit"]