[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", "typeguard>=4.4.4", "pydantic>=2.11.7", "base58>=2.1.1", "cryptography>=45.0.5", "fastapi>=0.116.1", "filelock>=3.18.0", "aiosqlite>=0.21.0", "networkx>=3.5", "protobuf>=6.32.0", "rich>=14.1.0", "rustworkx>=0.17.1", "sqlmodel>=0.0.24", "sqlalchemy[asyncio]>=2.0.43", "greenlet>=3.2.4", "huggingface-hub>=0.33.4", "psutil>=7.0.0", "loguru>=0.7.3", "textual>=5.3.0", "exo_pyo3_bindings", # rust bindings "anyio==4.11.0", "bidict>=0.23.1", "mlx>=0.29.3", "mlx-lm>=0.28.3", "tiktoken>=0.12.0", # required for kimi k2 tokenizer "hypercorn>=0.18.0", ] [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 = [ "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"] 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] 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'"