[build-system]
requires = ["setuptools>=61.0", "setuptools-scm>=8.0", "wheel"]
build-backend = "setuptools.build_meta"

[project]
name = "sglang"
dynamic = ["version"]
description = "SGLang is a fast serving framework for large language models and vision language models."
readme = "README.md"
requires-python = ">=3.10"
license = { file = "LICENSE" }
classifiers = [
  "Programming Language :: Python :: 3",
  "License :: OSI Approved :: Apache Software License",
]

dependencies = [
  "IPython",
  "aiohttp",
  "apache-tvm-ffi>=0.1.5,<0.2",
  "anthropic>=0.20.0",
  "blobfile==3.0.0",
  "build",
  "compressed-tensors",
  "cuda-python==12.9",
  "decord2 ; sys_platform == 'linux' and (platform_machine == 'aarch64' or platform_machine == 'arm64' or platform_machine == 'armv7l')",
  "datasets",
  "einops",
  "fastapi",
  "flashinfer_python==0.6.7.post2", # keep it aligned with jit-cache version in Dockerfile
  "flashinfer_cubin==0.6.7.post2",
  "gguf",
  "interegular",
  "llguidance>=0.7.11,<0.8.0",
  "modelscope",
  "msgspec",
  "ninja",
  "numpy",
  "nvidia-cutlass-dsl>=4.4.1",
  "nvidia-ml-py",
  "openai-harmony==0.0.4",
  "openai==2.6.1",
  "orjson",
  "outlines==0.1.11",
  "packaging",
  "partial_json_parser",
  "pillow",
  "prometheus-client>=0.20.0",
  "psutil",
  "py-spy",
  "pybase64",
  "pydantic",
  "python-multipart",
  "pyzmq>=25.1.2",
  "quack-kernels>=0.3.0",
  "requests",
  "scipy",
  "sentencepiece",
  "setproctitle",
  "flash-attn-4>=4.0.0b4",
  "sglang-kernel==0.4.1",
  "soundfile==0.13.1",
  "tiktoken",
  "timm==1.0.16",
  "torch_memory_saver==0.0.9",
  "torch==2.9.1",
  "torchao==0.9.0",
  "torchaudio==2.9.1",
  "torchcodec==0.9.1 ; sys_platform != 'linux' or (sys_platform == 'linux' and platform_machine != 'aarch64' and platform_machine != 'arm64' and platform_machine != 'armv7l')", # torchcodec 0.9.1 for torch 2.9.x. Not available on Linux ARM.
  "av ; sys_platform == 'linux' and (platform_machine == 'aarch64' or platform_machine == 'arm64' or platform_machine == 'armv7l')",
  "torchvision",
  "tqdm",
  "mistral_common>=1.9.0",
  "transformers==5.3.0",
  "uvicorn",
  "uvloop",
  "watchfiles",
  "xgrammar==0.1.32",
  "smg-grpc-servicer>=0.5.0",
]

[[tool.uv.index]]
name = "pypi"
url = "https://pypi.org/simple"
default = true

[[tool.uv.index]]
name = "torch-cu129"
url = "https://download.pytorch.org/whl/cu129"
explicit = true

[tool.uv.sources]
torch = [
  { index = "pypi", marker = "platform_machine == 'x86_64'"},
  { index = "torch-cu129", marker = "platform_machine == 'aarch64'"},
]

[project.optional-dependencies]
checkpoint-engine = ["checkpoint-engine==0.1.2"]
runai = ["runai-model-streamer[s3,gcs,azure]>=0.15.7"]
diffusion = [
  "PyYAML==6.0.1",
  "cloudpickle==3.1.2",
  "diffusers==0.37.0",
  "imageio==2.36.0",
  "imageio-ffmpeg==0.5.1",
  "moviepy>=2.0.0",
  "opencv-python-headless==4.10.0.84",
  "remote-pdb==2.1.0",
  "st_attn==0.0.7 ; platform_machine != 'aarch64' and platform_machine != 'arm64'",
  "vsa==0.0.4 ; platform_machine != 'aarch64' and platform_machine != 'arm64'",
  "runai_model_streamer>=0.15.7",
  "cache-dit==1.3.0",
  "addict==2.4.0",
  "av==16.1.0",
  "scikit-image==0.25.2",
  "trimesh>=4.0.0",
  "xatlas",
]

ray = [
  "ray[default]>=2.54.0",
]

tracing = [
  "opentelemetry-api",
  "opentelemetry-exporter-otlp",
  "opentelemetry-exporter-otlp-proto-grpc",
  "opentelemetry-sdk",
]

test = [
  "accelerate",
  "addict",
  "bitsandbytes",
  "expecttest",
  "jsonlines",
  "lm-eval[api]>=0.4.9.2",
  "matplotlib",
  "pandas",
  "parameterized",
  "peft>=0.18.0",
  "polars",
  "pytest",
  "pytest-cov",
  "diff-cover",
  "sentence_transformers",
  "tabulate",
]

dev = ["sglang[test]"]

all = [
  "sglang[diffusion]",
  "sglang[tracing]",
]

[tool.uv.extra-build-dependencies]
st-attn = ["torch", "setuptools"]
vsa = ["torch", "setuptools"]

[project.urls]
"Homepage" = "https://github.com/sgl-project/sglang"
"Bug Tracker" = "https://github.com/sgl-project/sglang/issues"

[project.scripts]
sglang = "sglang.cli.main:main"
killall_sglang = "sglang.cli.killall:main"

[tool.setuptools.package-data]
"sglang" = [
  "srt/**/*",
  "jit_kernel/**/*"
]

[tool.setuptools.packages.find]
exclude = [
  "assets*",
  "benchmark*",
  "docs*",
  "dist*",
  "playground*",
  "scripts*",
  "tests*",
]

[tool.wheel]
exclude = [
  "assets*",
  "benchmark*",
  "docs*",
  "dist*",
  "playground*",
  "scripts*",
  "tests*",
]

[tool.setuptools_scm]
root = ".."
version_file = "sglang/_version.py"
git_describe_command = ["bash", "-c", "git tag --list --sort=-version:refname 'v*.*.*' | head -1 | xargs git describe --tags --long"]
# Allow editable installs even when .git metadata is not available.
fallback_version = "0.0.0.dev0"
