[project] name = "exo" version = "0.3.0" 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>=0.33.4", "psutil>=7.0.0", "loguru>=0.7.3", "exo_pyo3_bindings", # rust bindings "anyio==4.11.0", "mlx==0.30.3; sys_platform == 'darwin'", "mlx[cpu]==0.30.3; sys_platform == 'linux'", "mlx-lm @ git+https://github.com/AlexCheema/mlx-lm.git@fix-transformers-5.0.0rc2", "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", "pillow>=11.0,<12.0", # compatibility with mflux "mflux>=0.12.1", ] [project.scripts] exo-master = "exo.master.main:main" exo-worker = "exo.worker.main:main" 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", ] # mlx[cuda] requires a newer version of mlx. the ideal on linux is: default to mlx[cpu] unless[cuda] specified. [project.optional-dependencies] # cuda = [ # "mlx[cuda]==0.26.3", # ] ### # workspace configuration ### [tool.uv.workspace] members = [ "rust/exo_pyo3_bindings", ] [tool.uv.sources] exo_pyo3_bindings = { workspace = true } # Uncomment to use local mlx/mlx-lm development versions: # mlx = { path = "/Users/Shared/mlx", editable=true } # mlx-lm = { path = "/Users/Shared/mlx-lm", editable=true } [build-system] requires = ["uv_build>=0.8.9,<0.9.0"] build-backend = "uv_build" ### # type-checker configuration ### [tool.basedpyright] include = [".venv/lib/mlx", ".venv/lib/mlx_lm", "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" ### # uv configuration ### # supported platforms for this project [tool.uv] prerelease = "allow" environments = [ "sys_platform == 'darwin'", "sys_platform == 'linux'", ] ### # ruff configuration ### [tool.ruff] extend-exclude = ["shared/protobufs/**", "*mlx_typings/**", "rust/exo_pyo3_bindings/**"] [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'" filterwarnings = [ "ignore:builtin type Swig:DeprecationWarning", ]