mirror of
https://github.com/exo-explore/exo.git
synced 2026-05-19 12:15:07 -04:00
## Motivation This fixes a bunch of observed model quality issues introduced upstream in JACCL, as well as API issues and prefix cache calculation. ## Test Plan ### Manual Testing Tested a bunch ### Automated Testing Added a test, automated eval tool calls on Kimi K2.6, Minimax M2.7, GPT OSS and Qwen3.6 models. --------- Co-authored-by: Evan <evanev7@gmail.com>
222 lines
5.3 KiB
TOML
222 lines
5.3 KiB
TOML
[project]
|
|
name = "exo"
|
|
version = "0.3.70"
|
|
description = "Exo"
|
|
readme = "README.md"
|
|
requires-python = "==3.13.*"
|
|
dependencies = [
|
|
"aiofiles>=24.1.0",
|
|
"aiohttp>=3.12.14",
|
|
"types-aiofiles>=24.1.0.20250708",
|
|
"pydantic>=2.11.7",
|
|
"fastapi>=0.116.1",
|
|
"filelock>=3.18.0",
|
|
"rustworkx>=0.17.1",
|
|
"huggingface-hub>=1.8.0",
|
|
"psutil>=7.0.0",
|
|
"loguru>=0.7.3",
|
|
"exo-pyo3-bindings", # rust bindings
|
|
"anyio==4.11.0",
|
|
"mlx==0.31.2; sys_platform == 'darwin'",
|
|
"mlx-lm; sys_platform=='darwin'",
|
|
"tiktoken>=0.12.0", # required for kimi k2 tokenizer
|
|
"hypercorn>=0.18.0",
|
|
"openai-harmony>=0.0.8",
|
|
"httpx>=0.28.1",
|
|
"tomlkit>=0.14.0",
|
|
"mflux==0.17.2; sys_platform == 'darwin'",
|
|
"python-multipart>=0.0.21",
|
|
"msgspec>=0.19.0",
|
|
"zstandard>=0.23.0",
|
|
"mlx-vlm>=0.3.11",
|
|
"transformers>=5.0.0,<5.4.0",
|
|
]
|
|
|
|
[project.scripts]
|
|
exo = "exo.main:main"
|
|
|
|
# dependencies only required for development
|
|
[dependency-groups]
|
|
dev = [
|
|
"basedpyright>=1.29.0",
|
|
"pyinstaller>=6.17.0",
|
|
"pytest>=8.4.0",
|
|
"pytest-asyncio>=1.0.0",
|
|
"pytest-env",
|
|
"ruff>=0.11.13",
|
|
]
|
|
|
|
[project.optional-dependencies]
|
|
build = ["nanobind"]
|
|
cpu = [
|
|
"mlx==0.31.1; sys_platform == 'linux'",
|
|
"mlx-cpu==0.31.1; sys_platform == 'linux'",
|
|
"mlx-lm; sys_platform == 'linux'",
|
|
"torch>=2.10.0; sys_platform == 'linux'",
|
|
]
|
|
cuda12 = [
|
|
"mlx==0.31.1; sys_platform == 'linux'",
|
|
"mlx-cuda-12==0.31.1; sys_platform == 'linux'",
|
|
"mlx-lm; sys_platform == 'linux'",
|
|
"torch>=2.10.0; sys_platform == 'linux'",
|
|
]
|
|
cuda13 = [
|
|
"mlx==0.31.1; sys_platform == 'linux'",
|
|
"mlx-cuda-13==0.31.1; sys_platform == 'linux'",
|
|
"mlx-lm; sys_platform == 'linux'",
|
|
"torch>=2.10.0; sys_platform == 'linux'",
|
|
]
|
|
|
|
###
|
|
# workspace configuration
|
|
###
|
|
|
|
[tool.uv.workspace]
|
|
members = ["rust/exo_pyo3_bindings", "bench"]
|
|
|
|
[tool.uv.sources]
|
|
exo-pyo3-bindings = { workspace = true }
|
|
mlx = { git = "https://github.com/rltakashige/mlx-jaccl-fix-small-recv.git", branch = "address-rdma-gpu-locks", marker = "sys_platform == 'darwin'" }
|
|
mlx-lm = { git = "https://github.com/rltakashige/mlx-lm", branch = "leo/fix-arrayscache-leak" }
|
|
torch = [
|
|
{ index = "pytorch-cu130", marker = "sys_platform == 'linux' and extra == 'cuda13' and extra != 'cpu' and extra != 'cuda12'" },
|
|
{ index = "pytorch-cu120", marker = "sys_platform == 'linux' and extra == 'cuda12' and extra != 'cpu' and extra != 'cuda13'" },
|
|
{ index = "pytorch-cpu", marker = "(extra != 'cuda12' and extra != 'cuda13' and sys_platform == 'linux') or sys_platform == 'darwin'" },
|
|
]
|
|
vllm = { git = "https://github.com/hmellor/vllm.git", branch = "transformers-v5" }
|
|
|
|
[[tool.uv.index]]
|
|
name = "pytorch-cu130"
|
|
url = "https://download.pytorch.org/whl/cu130"
|
|
explicit = true
|
|
|
|
[[tool.uv.index]]
|
|
name = "pytorch-cu120"
|
|
url = "https://download.pytorch.org/whl/cu120"
|
|
explicit = true
|
|
|
|
[[tool.uv.index]]
|
|
name = "pytorch-cpu"
|
|
url = "https://download.pytorch.org/whl/cpu"
|
|
explicit = true
|
|
|
|
[build-system]
|
|
requires = ["uv_build>=0.8.9,<0.9.0"]
|
|
build-backend = "uv_build"
|
|
|
|
###
|
|
# type-checker configuration
|
|
###
|
|
|
|
[tool.basedpyright]
|
|
include = ["src", "bench"]
|
|
typeCheckingMode = "strict"
|
|
failOnWarnings = true
|
|
|
|
reportAny = "error"
|
|
reportUnknownVariableType = "error"
|
|
reportUnknownParameterType = "error"
|
|
reportMissingParameterType = "error"
|
|
reportMissingTypeStubs = "error"
|
|
reportInvalidCast = "error"
|
|
reportUnnecessaryCast = "error"
|
|
reportUnnecessaryTypeIgnoreComment = "error"
|
|
|
|
pythonVersion = "3.13"
|
|
pythonPlatform = "Darwin"
|
|
|
|
exclude = [
|
|
"**/.venv",
|
|
"**/venv",
|
|
"**/__pycache__",
|
|
"**/exo_scripts",
|
|
"**/.direnv",
|
|
"**/rust",
|
|
"**/.github",
|
|
]
|
|
stubPath = ".mlx_typings"
|
|
|
|
[[tool.basedpyright.executionEnvironments]]
|
|
root = "src/exo/worker/engines/image"
|
|
reportMissingModuleSource = false
|
|
|
|
[[tool.basedpyright.executionEnvironments]]
|
|
root = "src"
|
|
|
|
|
|
###
|
|
# uv configuration
|
|
###
|
|
|
|
# supported platforms for this project
|
|
[tool.uv]
|
|
required-version = ">=0.8.6"
|
|
prerelease = "allow"
|
|
environments = ["sys_platform == 'darwin'", "sys_platform == 'linux'"]
|
|
conflicts = [[{ extra = "cuda12" }, { extra = "cuda13" }, { extra = "cpu" }]]
|
|
constraint-dependencies = ["transformers>=5.0.0,<5.4.0"]
|
|
override-dependencies = [
|
|
"mlx==0.31.1; sys_platform=='linux'",
|
|
"mlx; sys_platform=='darwin'",
|
|
]
|
|
|
|
[tool.uv.extra-build-dependencies]
|
|
miniaudio = ["setuptools", "cffi", "pycparser"]
|
|
mlx = [
|
|
"setuptools",
|
|
"typing-extensions",
|
|
"nanobind",
|
|
"pybind11",
|
|
"wheel",
|
|
"cmake",
|
|
"ninja",
|
|
]
|
|
mlx-lm = ["setuptools"]
|
|
xgrammar = [
|
|
"nanobind",
|
|
"setuptools",
|
|
"scikit-build-core",
|
|
"packaging",
|
|
"pathspec",
|
|
]
|
|
rouge-score = ["setuptools"]
|
|
sacrebleu = ["setuptools"]
|
|
sqlitedict = ["setuptools"]
|
|
word2number = ["setuptools"]
|
|
vllm = [
|
|
"setuptools",
|
|
"setuptools-scm",
|
|
"scikit-build-core",
|
|
"jinja2",
|
|
"wheel",
|
|
"markupsafe",
|
|
"typing-extensions",
|
|
"torch",
|
|
]
|
|
fastsafetensors = ["setuptools", "pybind11"]
|
|
torch = ["typing-extensions"]
|
|
torchvision = ["torch"]
|
|
torchaudio = ["torch"]
|
|
|
|
###
|
|
# ruff configuration
|
|
###
|
|
|
|
[tool.ruff]
|
|
extend-exclude = [
|
|
"*mlx_typings/**",
|
|
"rust/exo_pyo3_bindings/**",
|
|
"bench/vendor/**",
|
|
]
|
|
|
|
[tool.ruff.lint]
|
|
extend-select = ["I", "N", "B", "A", "PIE", "SIM"]
|
|
|
|
[tool.pytest.ini_options]
|
|
pythonpath = "."
|
|
asyncio_mode = "auto"
|
|
markers = ["slow: marks tests as slow (deselected by default)"]
|
|
env = ["EXO_TESTS=1"]
|
|
addopts = "-m 'not slow' --ignore=tests/start_distributed_test.py"
|
|
filterwarnings = ["ignore:builtin type Swig:DeprecationWarning"]
|