[build-system] requires = ["setuptools>=70", "wheel", "pybind11>=2.12"] build-backend = "setuptools.build_meta" [tool.setuptools] include-package-data = false [tool.setuptools.packages.find] where = ["."] include = ["dimos*"] exclude = ["dimos.web.websocket_vis.node_modules*"] [tool.setuptools.package-data] "dimos" = ["*.html", "*.css", "*.js", "*.json", "*.txt", "*.yaml", "*.yml"] "dimos.utils.cli" = ["*.tcss"] "dimos.robot.unitree.go2" = ["*.urdf"] "dimos.robot.unitree_webrtc.params" = ["*.yaml", "*.yml"] "dimos.web.templates" = ["*"] "dimos.rxpy_backpressure" = ["*.txt"] [project] name = "dimos" authors = [ {name = "Dimensional Team", email = "build@dimensionalOS.com"}, ] version = "0.0.11" description = "Powering agentive generalist robotics" requires-python = ">=3.10" readme = {file = "README.md", content-type = "text/markdown"} license = {text = "Apache-2.0"} keywords = ["robotics", "ros", "agents", "dimos", "dimensional", "openclaw", "roboclaw", "humanoid", "unitree"] classifiers = [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "Intended Audience :: Science/Research", "License :: OSI Approved :: Apache Software License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Topic :: Scientific/Engineering :: Artificial Intelligence", "Topic :: Software Development :: Libraries :: Application Frameworks", "Topic :: Scientific/Engineering :: Image Processing", "Topic :: Scientific/Engineering :: Visualization", "Operating System :: POSIX :: Linux", "Operating System :: MacOS", ] dependencies = [ # Transport Protocols "dimos-lcm", "PyTurboJPEG==1.8.2", # Core "numpy>=1.26.4", "scipy>=1.15.1", "pin>=3.3.0", # Pinocchio IK library "reactivex", "sortedcontainers==2.4.0", "pydantic", "python-dotenv", "annotation-protocol>=1.4.0", "lazy_loader", "plum-dispatch==2.5.7", # Logging "structlog>=25.5.0,<26", "colorlog==6.9.0", # Core Msgs "opencv-python", "open3d-unofficial-arm; platform_system == 'Linux' and platform_machine == 'aarch64'", "open3d>=0.18.0; platform_system != 'Linux' or platform_machine != 'aarch64'", # CLI "pydantic-settings>=2.11.0,<3", "textual==3.7.1", "terminaltexteffects==0.12.2", "typer>=0.19.2,<1", "plotext==5.3.2", # Used for calculating the occupancy map. "numba>=0.60.0", # First version supporting Python 3.12 "llvmlite>=0.42.0", # Required by numba 0.60+ # TODO: rerun shouldn't be required but rn its in core (there is NO WAY to use dimos without rerun rn) # remove this once rerun is optional in core "rerun-sdk>=0.20.0", "dimos-viewer>=0.30.0a2", "toolz>=1.1.0", "protobuf>=6.33.5,<7", "psutil>=7.0.0", ] [project.scripts] lcmspy = "dimos.utils.cli.lcmspy.run_lcmspy:main" foxglove-bridge = "dimos.utils.cli.foxglove_bridge.run_foxglove_bridge:main" agentspy = "dimos.utils.cli.agentspy.agentspy:main" humancli = "dimos.utils.cli.human.humanclianim:main" dimos = "dimos.robot.cli.dimos:main" rerun-bridge = "dimos.visualization.rerun.bridge:app" doclinks = "dimos.utils.docs.doclinks:main" dtop = "dimos.utils.cli.dtop:main" [project.urls] Homepage = "https://dimensionalos.com" Repository = "https://github.com/dimensionalOS/dimos" Issues = "https://github.com/dimensionalOS/dimos/issues" Changelog = "https://github.com/dimensionalOS/dimos/releases" [project.optional-dependencies] misc = [ # Core requirements "cerebras-cloud-sdk", "yapf==0.40.2", "typeguard", "empy==3.3.4", "catkin_pkg", "lark", "tiktoken>=0.8.0", "python-multipart==0.0.20", "tensorzero==2025.7.5", # Developer Specific "ipykernel", # Vector Embedding "sentence_transformers", # Perception Dependencies "scikit-learn", "timm>=1.0.15", "edgetam-dimos", "opencv-contrib-python==4.10.0.84", # embedding models "open_clip_torch==3.2.0", "torchreid==0.2.5", "gdown==5.2.0", "tensorboard==2.20.0", # Mapping "googlemaps>=4.10.0", # Inference "onnx", "einops==0.8.1", # Hardware SDKs "xarm-python-sdk>=1.17.0", "portal", ] visualization = [ "rerun-sdk>=0.20.0", "dimos-viewer>=0.30.0a4", ] agents = [ "langchain==1.2.3", "langchain-chroma>=1,<2", "langchain-core==1.2.3", "langchain-openai>=1,<2", "langchain-text-splitters>=1,<2", "langchain-huggingface>=1,<2", "langchain-ollama>=1,<2", "bitsandbytes>=0.48.2,<1.0; sys_platform == 'linux'", "ollama>=0.6.0", "anthropic>=0.19.0", # Audio "openai", "openai-whisper", "sounddevice", ] web = [ "fastapi>=0.115.6", "sse-starlette>=2.2.1", "uvicorn>=0.34.0", "ffmpeg-python", "soundfile", ] perception = [ "ultralytics>=8.3.70", "filterpy>=1.4.5", "Pillow", "lap>=0.5.12", "transformers[torch]==4.49.0", "moondream", "omegaconf>=2.3.0", "hydra-core>=1.3.0", ] unitree = [ "dimos[base]", "unitree-webrtc-connect-leshy>=2.0.7" ] manipulation = [ # Planning (Drake) "drake==1.45.0; sys_platform == 'darwin' and platform_machine != 'aarch64'", "drake>=1.40.0; sys_platform != 'darwin' and platform_machine != 'aarch64'", # Hardware SDKs "piper-sdk", "pyrealsense2", "xarm-python-sdk>=1.17.0", # Visualization (Optional) "kaleido>=0.2.1", "plotly>=5.9.0", "xacro", # Other "matplotlib>=3.7.1", "pyyaml>=6.0", ] cpu = [ # CPU inference backends "onnxruntime", "ctransformers==0.2.27", ] cuda = [ "cupy-cuda12x==13.6.0; platform_machine == 'x86_64'", "nvidia-nvimgcodec-cu12[all]; platform_machine == 'x86_64'", "onnxruntime-gpu>=1.17.1; platform_machine == 'x86_64'", # Only versions supporting both cuda11 and cuda12 "ctransformers[cuda]==0.2.27", "xformers>=0.0.20; platform_machine == 'x86_64'", ] dev = [ "ruff==0.14.3", "mypy==1.19.0", "pre_commit==4.2.0", "pytest==8.3.5", "pytest-asyncio==0.26.0", "pytest-mock==3.15.0", "pytest-env==1.1.5", "pytest-timeout==2.4.0", "coverage>=7.0", "requests-mock==1.12.1", "terminaltexteffects==0.12.2", "watchdog>=3.0.0", # docs "md-babel-py==1.1.1", # LSP "python-lsp-server[all]==1.14.0", "python-lsp-ruff==2.3.0", # Types "lxml-stubs>=0.5.1,<1", "pandas-stubs>=2.3.2.250926,<3", "types-PySocks>=1.7.1.20251001,<2", "types-PyYAML>=6.0.12.20250915,<7", "types-colorama>=0.4.15.20250801,<1", "types-defusedxml>=0.7.0.20250822,<1", "types-gevent>=25.4.0.20250915,<26", "types-greenlet>=3.2.0.20250915,<4", "types-jmespath>=1.0.2.20250809,<2", "types-jsonschema>=4.25.1.20251009,<5", "types-networkx>=3.5.0.20251001,<4", "types-protobuf>=6.32.1.20250918,<7", "types-psutil>=7.0.0.20251001,<8", "types-pytz>=2025.2.0.20250809,<2026", "types-simplejson>=3.20.0.20250822,<4", "types-tabulate>=0.9.0.20241207,<1", "types-tensorflow>=2.18.0.20251008,<3", "types-tqdm>=4.67.0.20250809,<5", "types-psycopg2>=2.9.21.20251012", "types-psutil>=7.2.2.20260130,<8", # Tools "py-spy", ] psql = [ "psycopg2-binary>=2.9.11" ] sim = [ # Simulation "mujoco>=3.3.4", "playground>=0.0.5", "pygame>=2.6.1", ] # NOTE: jetson-jp6-cuda126 extra is disabled due to 404 errors from wheel URLs # The pypi.jetson-ai-lab.io URLs are currently unavailable. Update with working URLs when available. # jetson-jp6-cuda126 = [ # # Jetson Jetpack 6.2 with CUDA 12.6 specific wheels (aarch64 Linux only) # "torch @ https://pypi.jetson-ai-lab.io/jp6/cu126/+f/.../torch-2.8.0-cp310-cp310-linux_aarch64.whl ; platform_machine == 'aarch64' and sys_platform == 'linux'", # "torchvision @ https://pypi.jetson-ai-lab.io/jp6/cu126/+f/.../torchvision-0.23.0-cp310-cp310-linux_aarch64.whl ; platform_machine == 'aarch64' and sys_platform == 'linux'", # "onnxruntime-gpu @ https://pypi.jetson-ai-lab.io/jp6/cu126/+f/.../onnxruntime_gpu-1.23.0-cp310-cp310-linux_aarch64.whl ; platform_machine == 'aarch64' and sys_platform == 'linux'", # "xformers @ https://pypi.jetson-ai-lab.io/jp6/cu126/+f/.../xformers-0.0.33-cp39-abi3-linux_aarch64.whl ; platform_machine == 'aarch64' and sys_platform == 'linux'", # ] drone = [ "pymavlink" ] dds = [ "dimos[dev]", "cyclonedds>=0.10.5", ] # Minimal dependencies for Docker modules that communicate with the DimOS host docker = [ "dimos-lcm", "numpy>=1.26.4", "scipy>=1.15.1", "reactivex", "plum-dispatch==2.5.7", "structlog>=25.5.0,<26", "pydantic", "pydantic-settings>=2.11.0,<3", "typer>=0.19.2,<1", "requests>=2.28", "opencv-python-headless", "lcm", "sortedcontainers", "PyTurboJPEG", "rerun-sdk", "open3d-unofficial-arm; platform_system == 'Linux' and platform_machine == 'aarch64'", "open3d>=0.18.0; platform_system != 'Linux' or platform_machine != 'aarch64'", ] base = [ "dimos[agents,web,perception,visualization,sim]", ] [tool.ruff] line-length = 100 exclude = [ ".git", ".pytest_cache", ".ruff_cache", ".venv", ".vscode", "__pypackages__", "_build", "build", "dist", "node_modules", "site-packages", "venv", "libs", "external", "src" ] [tool.ruff.lint] extend-select = ["E", "W", "F", "B", "UP", "N", "I", "C90", "A", "RUF", "TCH"] # TODO: All of these should be fixed, but it's easier commit autofixes first ignore = ["A001", "A002", "B008", "B017", "B019", "B024", "B026", "B904", "C901", "E402", "E501", "E721", "E722", "E741", "F811", "F821", "F821", "F821", "N801", "N802", "N803", "N806", "N817", "N999", "RUF003", "RUF009", "RUF012", "RUF034", "RUF043", "RUF059", "UP007"] [tool.ruff.lint.per-file-ignores] "dimos/models/Detic/*" = ["ALL"] [tool.ruff.lint.isort] known-first-party = ["dimos"] combine-as-imports = true force-sort-within-sections = true [tool.ruff.lint.flake8-type-checking] runtime-evaluated-base-classes = ["dimos.core.module.Module"] [tool.mypy] python_version = "3.12" incremental = true strict = true warn_unused_ignores = false exclude = "^dimos/models/Detic(/|$)|^dimos/rxpy_backpressure(/|$)|.*/test_.|.*/conftest.py*" [[tool.mypy.overrides]] module = [ "annotation_protocol", "cyclonedds", "cyclonedds.*", "dimos_lcm.*", "etils", "geometry_msgs.*", "lazy_loader", "mujoco", "mujoco_playground.*", "nav_msgs.*", "open_clip", "pinocchio", "piper_sdk.*", "plotext", "plum.*", "portal", "pycuda", "pycuda.*", "pydrake", "pydrake.*", "pyzed", "pyzed.*", "rclpy.*", "sam2.*", "sensor_msgs.*", "std_msgs.*", "tf2_msgs.*", "torchreid", "ultralytics.*", "unitree_webrtc_connect.*", "xarm.*", ] ignore_missing_imports = true [[tool.mypy.overrides]] module = ["dimos.rxpy_backpressure", "dimos.rxpy_backpressure.*"] follow_imports = "skip" [[tool.mypy.overrides]] module = ["pydrake", "pydrake.*"] follow_imports = "skip" [tool.pytest.ini_options] testpaths = ["dimos"] env = [ "GOOGLE_MAPS_API_KEY=AIzafake_google_key", "PYTHONWARNINGS=ignore:cupyx.jit.rawkernel is experimental:FutureWarning", ] addopts = "-v -r a -p no:warnings --color=yes -m 'not (tool or slow or mujoco)'" asyncio_mode = "auto" asyncio_default_fixture_loop_scope = "function" [tool.coverage.run] source = ["dimos"] parallel = true sigterm = true concurrency = ["multiprocessing", "thread"] [tool.coverage.report] show_missing = true skip_empty = true [tool.largefiles] max_size_kb = 50 ignore = [ "uv.lock", "*/package-lock.json", "dimos/dashboard/dimos.rbl", "dimos/web/dimos_interface/themes.json", "dimos/manipulation/manipulation_module.py", ]