From 5085169b4f3e55f69a341e842992fc5a63559b70 Mon Sep 17 00:00:00 2001 From: Ivan Nikolic Date: Sun, 28 Dec 2025 19:00:34 +0800 Subject: [PATCH 1/9] splitting deps checkpoint --- dimos/agents/skills/navigation.py | 153 +++++++++++++++--------------- pyproject.toml | 113 ++++++++++++---------- 2 files changed, 140 insertions(+), 126 deletions(-) diff --git a/dimos/agents/skills/navigation.py b/dimos/agents/skills/navigation.py index 9886395aac..2027619402 100644 --- a/dimos/agents/skills/navigation.py +++ b/dimos/agents/skills/navigation.py @@ -18,7 +18,6 @@ from dimos.core.core import rpc from dimos.core.skill_module import SkillModule from dimos.core.stream import In -from dimos.models.qwen.video_query import BBox from dimos.models.vl.qwen import QwenVlModel from dimos.msgs.geometry_msgs import PoseStamped, Quaternion, Vector3 from dimos.msgs.geometry_msgs.Vector3 import make_vector3 @@ -134,15 +133,15 @@ def navigate_with_text(self, query: str) -> str: logger.info(f"No tagged location found for {query}") - success_msg = self._navigate_to_object(query) - if success_msg: - return success_msg + # success_msg = self._navigate_to_object(query) + # if success_msg: + # return success_msg - logger.info(f"No object in view found for {query}") + # logger.info(f"No object in view found for {query}") - success_msg = self._navigate_using_semantic_map(query) - if success_msg: - return success_msg + # success_msg = self._navigate_using_semantic_map(query) + # if success_msg: + # return success_msg return f"No tagged location called '{query}'. No object in view matching '{query}'. No matching location found in semantic map for '{query}'." @@ -201,75 +200,75 @@ def _navigate_to(self, pose: PoseStamped) -> bool: logger.info("Navigation goal reached") return True - def _navigate_to_object(self, query: str) -> str | None: - try: - bbox = self._get_bbox_for_current_frame(query) - except Exception: - logger.error(f"Failed to get bbox for {query}", exc_info=True) - return None - - if bbox is None: - return None - - try: - track_rpc, stop_track_rpc, is_tracking_rpc = self.get_rpc_calls( - "ObjectTracking.track", "ObjectTracking.stop_track", "ObjectTracking.is_tracking" - ) - except Exception: - logger.error("ObjectTracking module not connected properly") - return None - - try: - get_state_rpc, is_goal_reached_rpc = self.get_rpc_calls( - "NavigationInterface.get_state", "NavigationInterface.is_goal_reached" - ) - except Exception: - logger.error("Navigation module not connected properly") - return None - - logger.info(f"Found {query} at {bbox}") - - # Start tracking - BBoxNavigationModule automatically generates goals - track_rpc(bbox) - - start_time = time.time() - timeout = 30.0 - goal_set = False - - while time.time() - start_time < timeout: - # Check if navigator finished - if get_state_rpc() == NavigationState.IDLE and goal_set: - logger.info("Waiting for goal result") - time.sleep(1.0) - if not is_goal_reached_rpc(): - logger.info(f"Goal cancelled, tracking '{query}' failed") - stop_track_rpc() - return None - else: - logger.info(f"Reached '{query}'") - stop_track_rpc() - return f"Successfully arrived at '{query}'" - - # If goal set and tracking lost, just continue (tracker will resume or timeout) - if goal_set and not is_tracking_rpc(): - continue - - # BBoxNavigationModule automatically sends goals when tracker publishes - # Just check if we have any detections to mark goal_set - if is_tracking_rpc(): - goal_set = True - - time.sleep(0.25) - - logger.warning(f"Navigation to '{query}' timed out after {timeout}s") - stop_track_rpc() - return None - - def _get_bbox_for_current_frame(self, query: str) -> BBox | None: - if self._latest_image is None: - return None - - return get_object_bbox_from_image(self._vl_model, self._latest_image, query) + # def _navigate_to_object(self, query: str) -> str | None: + # try: + # bbox = self._get_bbox_for_current_frame(query) + # except Exception: + # logger.error(f"Failed to get bbox for {query}", exc_info=True) + # return None + + # if bbox is None: + # return None + + # try: + # track_rpc, stop_track_rpc, is_tracking_rpc = self.get_rpc_calls( + # "ObjectTracking.track", "ObjectTracking.stop_track", "ObjectTracking.is_tracking" + # ) + # except Exception: + # logger.error("ObjectTracking module not connected properly") + # return None + + # try: + # get_state_rpc, is_goal_reached_rpc = self.get_rpc_calls( + # "NavigationInterface.get_state", "NavigationInterface.is_goal_reached" + # ) + # except Exception: + # logger.error("Navigation module not connected properly") + # return None + + # logger.info(f"Found {query} at {bbox}") + + # # Start tracking - BBoxNavigationModule automatically generates goals + # track_rpc(bbox) + + # start_time = time.time() + # timeout = 30.0 + # goal_set = False + + # while time.time() - start_time < timeout: + # # Check if navigator finished + # if get_state_rpc() == NavigationState.IDLE and goal_set: + # logger.info("Waiting for goal result") + # time.sleep(1.0) + # if not is_goal_reached_rpc(): + # logger.info(f"Goal cancelled, tracking '{query}' failed") + # stop_track_rpc() + # return None + # else: + # logger.info(f"Reached '{query}'") + # stop_track_rpc() + # return f"Successfully arrived at '{query}'" + + # # If goal set and tracking lost, just continue (tracker will resume or timeout) + # if goal_set and not is_tracking_rpc(): + # continue + + # # BBoxNavigationModule automatically sends goals when tracker publishes + # # Just check if we have any detections to mark goal_set + # if is_tracking_rpc(): + # goal_set = True + + # time.sleep(0.25) + + # logger.warning(f"Navigation to '{query}' timed out after {timeout}s") + # stop_track_rpc() + # return None + + # def _get_bbox_for_current_frame(self, query: str) -> BBox | None: + # if self._latest_image is None: + # return None + + # return get_object_bbox_from_image(self._vl_model, self._latest_image, query) def _navigate_using_semantic_map(self, query: str) -> str: try: diff --git a/pyproject.toml b/pyproject.toml index ec11ff74e4..4557c6ee15 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -22,8 +22,45 @@ description = "Powering agentive generalist robotics" requires-python = ">=3.10" dependencies = [ - # Core requirements + # Transport Protocols + "dimos-lcm", + "PyTurboJPEG==1.8.2", + + # Core + "scipy>=1.15.1", + "reactivex", + "rxpy-backpressure", + "asyncio==3.4.3", + "sortedcontainers==2.4.0", + "pydantic", + + # Multiprocess + "dask[complete]==2025.5.1", + "plum-dispatch==2.5.7", + + # Logging + "structlog>=25.5.0,<26", + + # Core Msgs "opencv-python", + "open3d", + + # CLI + "pydantic-settings>=2.11.0,<3", +] + + +[project.scripts] +lcmspy = "dimos.utils.cli.lcmspy.run_lcmspy:main" +foxglove-bridge = "dimos.utils.cli.foxglove_bridge.run_foxglove_bridge:main" +skillspy = "dimos.utils.cli.skillspy.skillspy:main" +agentspy = "dimos.utils.cli.agentspy.agentspy:main" +humancli = "dimos.utils.cli.human.humanclianim:main" +dimos = "dimos.robot.cli.dimos:main" + +[project.optional-dependencies] +core = [ + # Core requirements "python-dotenv", "openai", "anthropic>=0.19.0", @@ -36,36 +73,11 @@ dependencies = [ "empy==3.3.4", "catkin_pkg", "lark", - "plum-dispatch==2.5.7", - "ffmpeg-python", "tiktoken>=0.8.0", "Flask>=2.2", "python-multipart==0.0.20", - "reactivex", - "rxpy-backpressure", - "asyncio==3.4.3", "unitree-webrtc-connect", "tensorzero==2025.7.5", - "structlog>=25.5.0,<26", - - # Web Extensions - "fastapi>=0.115.6", - "sse-starlette>=2.2.1", - "uvicorn>=0.34.0", - - # Agents - "langchain>=1,<2", - "langchain-chroma>=1,<2", - "langchain-core>=1,<2", - "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", - - # Class Extraction - "pydantic", # Developer Specific "ipykernel", @@ -78,13 +90,6 @@ dependencies = [ "requests", "wasmtime", - # Image - "PyTurboJPEG==1.8.2", - - # Audio - "openai-whisper", - "soundfile", - # Hugging Face "transformers[torch]==4.49.0", @@ -94,7 +99,6 @@ dependencies = [ # Perception Dependencies "ultralytics>=8.3.70", "filterpy>=1.4.5", - "scipy>=1.15.1", "scikit-learn", "Pillow", "clip", @@ -109,20 +113,13 @@ dependencies = [ "tensorboard==2.20.0", # Mapping - "open3d", "googlemaps>=4.10.0", # Inference "onnx", "einops==0.8.1", - # Multiprocess - "dask[complete]==2025.5.1", - - # LCM / DimOS utilities - "dimos-lcm", # CLI - "pydantic-settings>=2.11.0,<3", "typer>=0.19.2,<1", "plotext==5.3.2", @@ -133,15 +130,33 @@ dependencies = [ "llvmlite>=0.42.0", # Required by numba 0.59+ ] -[project.scripts] -lcmspy = "dimos.utils.cli.lcmspy.run_lcmspy:main" -foxglove-bridge = "dimos.utils.cli.foxglove_bridge.run_foxglove_bridge:main" -skillspy = "dimos.utils.cli.skillspy.skillspy:main" -agentspy = "dimos.utils.cli.agentspy.agentspy:main" -humancli = "dimos.utils.cli.human.humanclianim:main" -dimos = "dimos.robot.cli.dimos:main" +agents = [ + "langchain>=1,<2", + "langchain-chroma>=1,<2", + "langchain-core>=1,<2", + "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", + + # Audio + "openai-whisper", +] + +web = [ + "fastapi>=0.115.6", + "sse-starlette>=2.2.1", + "uvicorn>=0.34.0", + "ffmpeg-python", + "soundfile", +] + +unitree = [ + "dimos[agents,web]", +] -[project.optional-dependencies] manipulation = [ # Contact Graspnet Dependencies "h5py>=3.7.0", From b909b55cff94c21f058c6469ed4caf788ef86faf Mon Sep 17 00:00:00 2001 From: Ivan Nikolic Date: Sun, 28 Dec 2025 19:23:56 +0800 Subject: [PATCH 2/9] further splitting, removed zmq --- dimos/stream/video_operators.py | 22 -------------- pyproject.toml | 54 ++++++++++++++++----------------- 2 files changed, 26 insertions(+), 50 deletions(-) diff --git a/dimos/stream/video_operators.py b/dimos/stream/video_operators.py index 769993bf9e..c390b37db0 100644 --- a/dimos/stream/video_operators.py +++ b/dimos/stream/video_operators.py @@ -21,7 +21,6 @@ import cv2 import numpy as np from reactivex import Observable, Observer, create, operators as ops -import zmq if TYPE_CHECKING: from dimos.stream.frame_processor import FrameProcessor @@ -215,27 +214,6 @@ def with_optical_flow( ops.map(frame_processor.visualize_flow), ) - @staticmethod - def with_zmq_socket( - socket: zmq.Socket, # type: ignore[type-arg] - scheduler: Any | None = None, - ) -> Callable[[Observable], Observable]: # type: ignore[type-arg] - def send_frame(frame, socket) -> None: # type: ignore[no-untyped-def] - _, img_encoded = cv2.imencode(".jpg", frame) - socket.send(img_encoded.tobytes()) - # print(f"Frame received: {frame.shape}") - - # Use a default scheduler if none is provided - if scheduler is None: - from reactivex.scheduler import ThreadPoolScheduler - - scheduler = ThreadPoolScheduler(1) # Single-threaded pool for isolation - - return lambda source: source.pipe( - ops.observe_on(scheduler), # Ensure this part runs on its own thread - ops.do_action(lambda frame: send_frame(frame, socket)), - ) - @staticmethod def encode_image() -> Callable[[Observable], Observable]: # type: ignore[type-arg] """ diff --git a/pyproject.toml b/pyproject.toml index 4557c6ee15..e5b2178bce 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -27,12 +27,14 @@ dependencies = [ "PyTurboJPEG==1.8.2", # Core + "numpy>=1.26.4", "scipy>=1.15.1", "reactivex", "rxpy-backpressure", "asyncio==3.4.3", "sortedcontainers==2.4.0", "pydantic", + "python-dotenv", # Multiprocess "dask[complete]==2025.5.1", @@ -40,6 +42,7 @@ dependencies = [ # Logging "structlog>=25.5.0,<26", + "colorlog==6.9.0", # Core Msgs "opencv-python", @@ -47,6 +50,10 @@ dependencies = [ # CLI "pydantic-settings>=2.11.0,<3", + "textual==3.7.1", + "terminaltexteffects==0.12.2", + "typer>=0.19.2,<1", + "plotext==5.3.2", ] @@ -59,15 +66,11 @@ humancli = "dimos.utils.cli.human.humanclianim:main" dimos = "dimos.robot.cli.dimos:main" [project.optional-dependencies] -core = [ +misc = [ # Core requirements - "python-dotenv", "openai", "anthropic>=0.19.0", "cerebras-cloud-sdk", - "moondream", - "numpy>=1.26.4", - "colorlog==6.9.0", "yapf==0.40.2", "typeguard", "empy==3.3.4", @@ -76,34 +79,18 @@ core = [ "tiktoken>=0.8.0", "Flask>=2.2", "python-multipart==0.0.20", - "unitree-webrtc-connect", "tensorzero==2025.7.5", # Developer Specific "ipykernel", - # Unitree webrtc streaming - "aiortc==1.9.0", - "pycryptodome", - "sounddevice", - "pyaudio", - "requests", - "wasmtime", - - # Hugging Face - "transformers[torch]==4.49.0", - # Vector Embedding "sentence_transformers", # Perception Dependencies - "ultralytics>=8.3.70", - "filterpy>=1.4.5", "scikit-learn", - "Pillow", "clip", "timm>=1.0.15", - "lap>=0.5.12", "opencv-contrib-python==4.10.0.84", # embedding models @@ -119,10 +106,6 @@ core = [ "onnx", "einops==0.8.1", - # CLI - "typer>=0.19.2,<1", - "plotext==5.3.2", - # Teleop "pygame>=2.6.1", @@ -143,6 +126,7 @@ agents = [ # Audio "openai-whisper", + "sounddevice", ] web = [ @@ -153,8 +137,24 @@ web = [ "soundfile", ] +perception = [ + "ultralytics>=8.3.70", + "filterpy>=1.4.5", + "Pillow", + "lap>=0.5.12", + "transformers[torch]==4.49.0", + "moondream", +] + unitree = [ - "dimos[agents,web]", + "dimos[agents,web,perception]", + # WebRTC streaming + "aiortc==1.9.0", + "unitree-webrtc-connect", + "pycryptodome", + "pyaudio", + "requests", + "wasmtime", ] manipulation = [ @@ -217,9 +217,7 @@ dev = [ "pytest-env==1.1.5", "pytest-timeout==2.4.0", "coverage>=7.0", # Required for numba compatibility (coverage.types) - "textual==3.7.1", "requests-mock==1.12.1", - "terminaltexteffects==0.12.2", # Types "lxml-stubs>=0.5.1,<1", From 227575080469667f5ba12ff55c510394f8030d07 Mon Sep 17 00:00:00 2001 From: Ivan Nikolic Date: Mon, 29 Dec 2025 22:09:11 +0800 Subject: [PATCH 3/9] pip install granular --- docker/python/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/python/Dockerfile b/docker/python/Dockerfile index 50f021a9a1..ff4877233e 100644 --- a/docker/python/Dockerfile +++ b/docker/python/Dockerfile @@ -49,4 +49,4 @@ COPY . /app/ # Install dependencies with UV (10-100x faster than pip) RUN uv pip install --upgrade 'pip>=24' 'setuptools>=70' 'wheel' 'packaging>=24' && \ - uv pip install '.[cpu,sim,drone]' + uv pip install '.[misc,cpu,sim,drone,unitree,web,perception]' From a08d04a5d0da6e6f7670411b3fadf5701eea0d22 Mon Sep 17 00:00:00 2001 From: Ivan Nikolic Date: Tue, 30 Dec 2025 09:37:53 +0800 Subject: [PATCH 4/9] uv lock update, addressed pr comments --- pyproject.toml | 7 -- uv.lock | 259 +++++++++++++++++++++++++++---------------------- 2 files changed, 141 insertions(+), 125 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index e5b2178bce..87ac6a627a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -77,7 +77,6 @@ misc = [ "catkin_pkg", "lark", "tiktoken>=0.8.0", - "Flask>=2.2", "python-multipart==0.0.20", "tensorzero==2025.7.5", @@ -148,13 +147,7 @@ perception = [ unitree = [ "dimos[agents,web,perception]", - # WebRTC streaming - "aiortc==1.9.0", "unitree-webrtc-connect", - "pycryptodome", - "pyaudio", - "requests", - "wasmtime", ] manipulation = [ diff --git a/uv.lock b/uv.lock index 0bf380ba7d..461a610af0 100644 --- a/uv.lock +++ b/uv.lock @@ -1445,85 +1445,44 @@ name = "dimos" version = "0.0.4" source = { editable = "." } dependencies = [ - { name = "aiortc" }, - { name = "anthropic" }, { name = "asyncio" }, - { name = "bitsandbytes", marker = "sys_platform == 'linux'" }, - { name = "catkin-pkg" }, - { name = "cerebras-cloud-sdk" }, - { name = "clip" }, { name = "colorlog" }, { name = "dask", extra = ["complete"] }, { name = "dimos-lcm" }, - { name = "einops" }, - { name = "empy" }, - { name = "fastapi" }, - { name = "ffmpeg-python" }, - { name = "filterpy" }, - { name = "flask" }, - { name = "gdown" }, - { name = "googlemaps" }, - { name = "ipykernel" }, - { name = "langchain" }, - { name = "langchain-chroma" }, - { name = "langchain-core" }, - { name = "langchain-huggingface" }, - { name = "langchain-ollama" }, - { name = "langchain-openai" }, - { name = "langchain-text-splitters" }, - { name = "lap" }, - { name = "lark" }, - { name = "llvmlite" }, - { name = "moondream" }, - { name = "numba" }, { name = "numpy" }, - { name = "ollama" }, - { name = "onnx" }, - { name = "open-clip-torch" }, { name = "open3d" }, - { name = "openai" }, - { name = "openai-whisper" }, - { name = "opencv-contrib-python" }, { name = "opencv-python" }, - { name = "pillow" }, { name = "plotext" }, { name = "plum-dispatch" }, - { name = "pyaudio" }, - { name = "pycryptodome" }, { name = "pydantic" }, { name = "pydantic-settings" }, - { name = "pygame" }, { name = "python-dotenv" }, - { name = "python-multipart" }, { name = "pyturbojpeg" }, { name = "reactivex" }, - { name = "requests" }, { name = "rxpy-backpressure" }, - { name = "scikit-learn", version = "1.7.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "scikit-learn", version = "1.8.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "scipy", version = "1.16.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "sentence-transformers" }, - { name = "sounddevice" }, - { name = "soundfile" }, - { name = "sse-starlette" }, + { name = "sortedcontainers" }, { name = "structlog" }, - { name = "tensorboard" }, - { name = "tensorzero" }, - { name = "tiktoken" }, - { name = "timm" }, - { name = "torchreid" }, - { name = "transformers", extra = ["torch"] }, - { name = "typeguard" }, + { name = "terminaltexteffects" }, + { name = "textual" }, { name = "typer" }, - { name = "ultralytics" }, - { name = "unitree-webrtc-connect" }, - { name = "uvicorn" }, - { name = "wasmtime" }, - { name = "yapf" }, ] [package.optional-dependencies] +agents = [ + { name = "bitsandbytes", marker = "sys_platform == 'linux'" }, + { name = "langchain" }, + { name = "langchain-chroma" }, + { name = "langchain-core" }, + { name = "langchain-huggingface" }, + { name = "langchain-ollama" }, + { name = "langchain-openai" }, + { name = "langchain-text-splitters" }, + { name = "ollama" }, + { name = "openai-whisper" }, + { name = "sounddevice" }, +] cpu = [ { name = "ctransformers" }, { name = "onnxruntime" }, @@ -1559,8 +1518,6 @@ dev = [ { name = "pytest-timeout" }, { name = "requests-mock" }, { name = "ruff" }, - { name = "terminaltexteffects" }, - { name = "textual" }, { name = "types-colorama" }, { name = "types-defusedxml" }, { name = "types-gevent" }, @@ -1597,21 +1554,90 @@ manipulation = [ { name = "tqdm" }, { name = "trimesh" }, ] +misc = [ + { name = "anthropic" }, + { name = "catkin-pkg" }, + { name = "cerebras-cloud-sdk" }, + { name = "clip" }, + { name = "einops" }, + { name = "empy" }, + { name = "gdown" }, + { name = "googlemaps" }, + { name = "ipykernel" }, + { name = "lark" }, + { name = "llvmlite" }, + { name = "numba" }, + { name = "onnx" }, + { name = "open-clip-torch" }, + { name = "openai" }, + { name = "opencv-contrib-python" }, + { name = "pygame" }, + { name = "python-multipart" }, + { name = "scikit-learn", version = "1.7.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "scikit-learn", version = "1.8.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "sentence-transformers" }, + { name = "tensorboard" }, + { name = "tensorzero" }, + { name = "tiktoken" }, + { name = "timm" }, + { name = "torchreid" }, + { name = "typeguard" }, + { name = "yapf" }, +] +perception = [ + { name = "filterpy" }, + { name = "lap" }, + { name = "moondream" }, + { name = "pillow" }, + { name = "transformers", extra = ["torch"] }, + { name = "ultralytics" }, +] sim = [ { name = "mujoco" }, { name = "playground" }, ] +unitree = [ + { name = "bitsandbytes", marker = "sys_platform == 'linux'" }, + { name = "fastapi" }, + { name = "ffmpeg-python" }, + { name = "filterpy" }, + { name = "langchain" }, + { name = "langchain-chroma" }, + { name = "langchain-core" }, + { name = "langchain-huggingface" }, + { name = "langchain-ollama" }, + { name = "langchain-openai" }, + { name = "langchain-text-splitters" }, + { name = "lap" }, + { name = "moondream" }, + { name = "ollama" }, + { name = "openai-whisper" }, + { name = "pillow" }, + { name = "sounddevice" }, + { name = "soundfile" }, + { name = "sse-starlette" }, + { name = "transformers", extra = ["torch"] }, + { name = "ultralytics" }, + { name = "unitree-webrtc-connect" }, + { name = "uvicorn" }, +] +web = [ + { name = "fastapi" }, + { name = "ffmpeg-python" }, + { name = "soundfile" }, + { name = "sse-starlette" }, + { name = "uvicorn" }, +] [package.metadata] requires-dist = [ - { name = "aiortc", specifier = "==1.9.0" }, - { name = "anthropic", specifier = ">=0.19.0" }, + { name = "anthropic", marker = "extra == 'misc'", specifier = ">=0.19.0" }, { name = "asyncio", specifier = "==3.4.3" }, - { name = "bitsandbytes", marker = "sys_platform == 'linux'", specifier = ">=0.48.2,<1.0" }, - { name = "catkin-pkg" }, - { name = "cerebras-cloud-sdk" }, - { name = "clip", git = "https://github.com/openai/CLIP.git" }, + { name = "bitsandbytes", marker = "sys_platform == 'linux' and extra == 'agents'", specifier = ">=0.48.2,<1.0" }, + { name = "catkin-pkg", marker = "extra == 'misc'" }, + { name = "cerebras-cloud-sdk", marker = "extra == 'misc'" }, { name = "clip", marker = "extra == 'cuda'", git = "https://github.com/openai/CLIP.git" }, + { name = "clip", marker = "extra == 'misc'", git = "https://github.com/openai/CLIP.git" }, { name = "colorlog", specifier = "==6.9.0" }, { name = "contact-graspnet-pytorch", marker = "extra == 'manipulation'", git = "https://github.com/dimensionalOS/contact_graspnet_pytorch.git" }, { name = "coverage", marker = "extra == 'dev'", specifier = ">=7.0" }, @@ -1621,67 +1647,65 @@ requires-dist = [ { name = "dask", extras = ["complete"], specifier = "==2025.5.1" }, { name = "dataclasses", marker = "extra == 'cuda'" }, { name = "detectron2", marker = "extra == 'cuda'", git = "https://github.com/facebookresearch/detectron2.git?tag=v0.6" }, + { name = "dimos", extras = ["agents", "web", "perception"], marker = "extra == 'unitree'" }, { name = "dimos-lcm", git = "https://github.com/dimensionalOS/dimos-lcm.git?rev=3aeb724863144a8ba6cf72c9f42761d1007deda4" }, - { name = "einops", specifier = "==0.8.1" }, - { name = "empy", specifier = "==3.3.4" }, - { name = "fastapi", specifier = ">=0.115.6" }, + { name = "einops", marker = "extra == 'misc'", specifier = "==0.8.1" }, + { name = "empy", marker = "extra == 'misc'", specifier = "==3.3.4" }, + { name = "fastapi", marker = "extra == 'web'", specifier = ">=0.115.6" }, { name = "fasttext", marker = "extra == 'cuda'" }, - { name = "ffmpeg-python" }, - { name = "filterpy", specifier = ">=1.4.5" }, - { name = "flask", specifier = ">=2.2" }, + { name = "ffmpeg-python", marker = "extra == 'web'" }, + { name = "filterpy", marker = "extra == 'perception'", specifier = ">=1.4.5" }, { name = "ftfy", marker = "extra == 'cuda'" }, - { name = "gdown", specifier = "==5.2.0" }, - { name = "googlemaps", specifier = ">=4.10.0" }, + { name = "gdown", marker = "extra == 'misc'", specifier = "==5.2.0" }, + { name = "googlemaps", marker = "extra == 'misc'", specifier = ">=4.10.0" }, { name = "h5py", marker = "extra == 'manipulation'", specifier = ">=3.7.0" }, - { name = "ipykernel" }, + { name = "ipykernel", marker = "extra == 'misc'" }, { name = "kaleido", marker = "extra == 'manipulation'", specifier = ">=0.2.1" }, - { name = "langchain", specifier = ">=1,<2" }, - { name = "langchain-chroma", specifier = ">=1,<2" }, - { name = "langchain-core", specifier = ">=1,<2" }, - { name = "langchain-huggingface", specifier = ">=1,<2" }, - { name = "langchain-ollama", specifier = ">=1,<2" }, - { name = "langchain-openai", specifier = ">=1,<2" }, - { name = "langchain-text-splitters", specifier = ">=1,<2" }, - { name = "lap", specifier = ">=0.5.12" }, - { name = "lark" }, - { name = "llvmlite", specifier = ">=0.42.0" }, + { name = "langchain", marker = "extra == 'agents'", specifier = ">=1,<2" }, + { name = "langchain-chroma", marker = "extra == 'agents'", specifier = ">=1,<2" }, + { name = "langchain-core", marker = "extra == 'agents'", specifier = ">=1,<2" }, + { name = "langchain-huggingface", marker = "extra == 'agents'", specifier = ">=1,<2" }, + { name = "langchain-ollama", marker = "extra == 'agents'", specifier = ">=1,<2" }, + { name = "langchain-openai", marker = "extra == 'agents'", specifier = ">=1,<2" }, + { name = "langchain-text-splitters", marker = "extra == 'agents'", specifier = ">=1,<2" }, + { name = "lap", marker = "extra == 'perception'", specifier = ">=0.5.12" }, + { name = "lark", marker = "extra == 'misc'" }, + { name = "llvmlite", marker = "extra == 'misc'", specifier = ">=0.42.0" }, { name = "lvis", marker = "extra == 'cuda'" }, { name = "lxml-stubs", marker = "extra == 'dev'", specifier = ">=0.5.1,<1" }, { name = "matplotlib", marker = "extra == 'manipulation'", specifier = ">=3.7.1" }, { name = "mmcv", marker = "extra == 'cuda'", specifier = ">=2.1.0" }, { name = "mmengine", marker = "extra == 'cuda'", specifier = ">=0.10.3" }, - { name = "moondream" }, + { name = "moondream", marker = "extra == 'perception'" }, { name = "mss", marker = "extra == 'cuda'" }, { name = "mujoco", marker = "extra == 'sim'", specifier = ">=3.3.4" }, { name = "mypy", marker = "extra == 'dev'", specifier = "==1.19.0" }, { name = "nltk", marker = "extra == 'cuda'" }, - { name = "numba", specifier = ">=0.60.0" }, + { name = "numba", marker = "extra == 'misc'", specifier = ">=0.60.0" }, { name = "numpy", specifier = ">=1.26.4" }, { name = "nvidia-nvimgcodec-cu12", extras = ["all"], marker = "extra == 'cuda'" }, - { name = "ollama", specifier = ">=0.6.0" }, - { name = "onnx" }, + { name = "ollama", marker = "extra == 'agents'", specifier = ">=0.6.0" }, + { name = "onnx", marker = "extra == 'misc'" }, { name = "onnxruntime", marker = "extra == 'cpu'" }, { name = "onnxruntime-gpu", marker = "extra == 'cuda'", specifier = ">=1.17.1" }, - { name = "open-clip-torch", specifier = "==3.2.0" }, + { name = "open-clip-torch", marker = "extra == 'misc'", specifier = "==3.2.0" }, { name = "open3d" }, - { name = "openai" }, - { name = "openai-whisper" }, - { name = "opencv-contrib-python", specifier = "==4.10.0.84" }, + { name = "openai", marker = "extra == 'misc'" }, + { name = "openai-whisper", marker = "extra == 'agents'" }, + { name = "opencv-contrib-python", marker = "extra == 'misc'", specifier = "==4.10.0.84" }, { name = "opencv-python" }, { name = "pandas", marker = "extra == 'manipulation'", specifier = ">=1.5.2" }, { name = "pandas-stubs", marker = "extra == 'dev'", specifier = ">=2.3.2.250926,<3" }, - { name = "pillow" }, + { name = "pillow", marker = "extra == 'perception'" }, { name = "piper-sdk", marker = "extra == 'manipulation'" }, { name = "playground", marker = "extra == 'sim'", specifier = ">=0.0.5" }, { name = "plotext", specifier = "==5.3.2" }, { name = "plotly", marker = "extra == 'manipulation'", specifier = ">=5.9.0" }, { name = "plum-dispatch", specifier = "==2.5.7" }, { name = "pre-commit", marker = "extra == 'dev'", specifier = "==4.2.0" }, - { name = "pyaudio" }, - { name = "pycryptodome" }, { name = "pydantic" }, { name = "pydantic-settings", specifier = ">=2.11.0,<3" }, - { name = "pygame", specifier = ">=2.6.1" }, + { name = "pygame", marker = "extra == 'misc'", specifier = ">=2.6.1" }, { name = "pymavlink", marker = "extra == 'drone'" }, { name = "pyquaternion", marker = "extra == 'manipulation'", specifier = ">=0.9.9" }, { name = "pyrender", marker = "extra == 'manipulation'", specifier = ">=0.1.45" }, @@ -1692,34 +1716,34 @@ requires-dist = [ { name = "pytest-timeout", marker = "extra == 'dev'", specifier = "==2.4.0" }, { name = "python-dotenv" }, { name = "python-fcl", marker = "extra == 'manipulation'", specifier = ">=0.7.0.4" }, - { name = "python-multipart", specifier = "==0.0.20" }, + { name = "python-multipart", marker = "extra == 'misc'", specifier = "==0.0.20" }, { name = "pyturbojpeg", specifier = "==1.8.2" }, { name = "pyyaml", marker = "extra == 'manipulation'", specifier = ">=6.0" }, { name = "reactivex" }, { name = "regex", marker = "extra == 'cuda'" }, - { name = "requests" }, { name = "requests-mock", marker = "extra == 'dev'", specifier = "==1.12.1" }, { name = "rtree", marker = "extra == 'manipulation'" }, { name = "ruff", marker = "extra == 'dev'", specifier = "==0.14.3" }, { name = "rxpy-backpressure", git = "https://github.com/dimensionalOS/rxpy-backpressure.git" }, - { name = "scikit-learn" }, + { name = "scikit-learn", marker = "extra == 'misc'" }, { name = "scipy", specifier = ">=1.15.1" }, - { name = "sentence-transformers" }, - { name = "sounddevice" }, - { name = "soundfile" }, - { name = "sse-starlette", specifier = ">=2.2.1" }, + { name = "sentence-transformers", marker = "extra == 'misc'" }, + { name = "sortedcontainers", specifier = "==2.4.0" }, + { name = "sounddevice", marker = "extra == 'agents'" }, + { name = "soundfile", marker = "extra == 'web'" }, + { name = "sse-starlette", marker = "extra == 'web'", specifier = ">=2.2.1" }, { name = "structlog", specifier = ">=25.5.0,<26" }, - { name = "tensorboard", specifier = "==2.20.0" }, - { name = "tensorzero", specifier = "==2025.7.5" }, - { name = "terminaltexteffects", marker = "extra == 'dev'", specifier = "==0.12.2" }, - { name = "textual", marker = "extra == 'dev'", specifier = "==3.7.1" }, - { name = "tiktoken", specifier = ">=0.8.0" }, - { name = "timm", specifier = ">=1.0.15" }, - { name = "torchreid", specifier = "==0.2.5" }, + { name = "tensorboard", marker = "extra == 'misc'", specifier = "==2.20.0" }, + { name = "tensorzero", marker = "extra == 'misc'", specifier = "==2025.7.5" }, + { name = "terminaltexteffects", specifier = "==0.12.2" }, + { name = "textual", specifier = "==3.7.1" }, + { name = "tiktoken", marker = "extra == 'misc'", specifier = ">=0.8.0" }, + { name = "timm", marker = "extra == 'misc'", specifier = ">=1.0.15" }, + { name = "torchreid", marker = "extra == 'misc'", specifier = "==0.2.5" }, { name = "tqdm", marker = "extra == 'manipulation'", specifier = ">=4.65.0" }, - { name = "transformers", extras = ["torch"], specifier = "==4.49.0" }, + { name = "transformers", extras = ["torch"], marker = "extra == 'perception'", specifier = "==4.49.0" }, { name = "trimesh", marker = "extra == 'manipulation'", specifier = ">=3.22.0" }, - { name = "typeguard" }, + { name = "typeguard", marker = "extra == 'misc'" }, { name = "typer", specifier = ">=0.19.2,<1" }, { name = "types-colorama", marker = "extra == 'dev'", specifier = ">=0.4.15.20250801,<1" }, { name = "types-defusedxml", marker = "extra == 'dev'", specifier = ">=0.7.0.20250822,<1" }, @@ -1737,14 +1761,13 @@ requires-dist = [ { name = "types-tabulate", marker = "extra == 'dev'", specifier = ">=0.9.0.20241207,<1" }, { name = "types-tensorflow", marker = "extra == 'dev'", specifier = ">=2.18.0.20251008,<3" }, { name = "types-tqdm", marker = "extra == 'dev'", specifier = ">=4.67.0.20250809,<5" }, - { name = "ultralytics", specifier = ">=8.3.70" }, - { name = "unitree-webrtc-connect", git = "https://github.com/leshy/unitree_webrtc_connect.git?rev=2cbb6ce657383c788f4a48d9d87ecf4b9b7dba1d" }, - { name = "uvicorn", specifier = ">=0.34.0" }, - { name = "wasmtime" }, + { name = "ultralytics", marker = "extra == 'perception'", specifier = ">=8.3.70" }, + { name = "unitree-webrtc-connect", marker = "extra == 'unitree'", git = "https://github.com/leshy/unitree_webrtc_connect.git?rev=2cbb6ce657383c788f4a48d9d87ecf4b9b7dba1d" }, + { name = "uvicorn", marker = "extra == 'web'", specifier = ">=0.34.0" }, { name = "xformers", marker = "extra == 'cuda'", specifier = ">=0.0.20" }, - { name = "yapf", specifier = "==0.40.2" }, + { name = "yapf", marker = "extra == 'misc'", specifier = "==0.40.2" }, ] -provides-extras = ["manipulation", "cpu", "cuda", "dev", "sim", "drone"] +provides-extras = ["misc", "agents", "web", "perception", "unitree", "manipulation", "cpu", "cuda", "dev", "sim", "drone"] [[package]] name = "dimos-lcm" From c35b8409fa0c11cf56840c71d82da99eba279513 Mon Sep 17 00:00:00 2001 From: Ivan Nikolic Date: Tue, 30 Dec 2025 13:10:30 +0800 Subject: [PATCH 5/9] version pin for unitree-leshy --- pyproject.toml | 2 +- uv.lock | 24 ++++++++++++------------ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index cd606a6695..1fe74997ac 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -152,7 +152,7 @@ perception = [ unitree = [ "dimos[agents,web,perception]", - "unitree-webrtc-connect-leshy", + "unitree-webrtc-connect-leshy>=2.0.4" ] manipulation = [ diff --git a/uv.lock b/uv.lock index 94382929c4..0ca0e0d0b3 100644 --- a/uv.lock +++ b/uv.lock @@ -371,10 +371,10 @@ name = "bitsandbytes" version = "0.49.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "packaging" }, - { name = "torch" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform != 'darwin' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform != 'darwin' and sys_platform != 'win32'" }, + { name = "packaging", marker = "sys_platform != 'darwin' and sys_platform != 'win32'" }, + { name = "torch", marker = "sys_platform != 'darwin' and sys_platform != 'win32'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/d1/4f/9f6d161e9ea68cdd6b85585dee9b383748ca07431e31c4c134111f87489e/bitsandbytes-0.49.0-py3-none-manylinux_2_24_aarch64.whl", hash = "sha256:7e69951b4d207a676986fce967544d9599f23518d0f09d478295996aeff377c2", size = 31065242, upload-time = "2025-12-11T20:50:41.903Z" }, @@ -1781,7 +1781,7 @@ requires-dist = [ { name = "types-tensorflow", marker = "extra == 'dev'", specifier = ">=2.18.0.20251008,<3" }, { name = "types-tqdm", marker = "extra == 'dev'", specifier = ">=4.67.0.20250809,<5" }, { name = "ultralytics", marker = "extra == 'perception'", specifier = ">=8.3.70" }, - { name = "unitree-webrtc-connect-leshy", marker = "extra == 'unitree'" }, + { name = "unitree-webrtc-connect-leshy", marker = "extra == 'unitree'", specifier = ">=2.0.4" }, { name = "uvicorn", marker = "extra == 'web'", specifier = ">=0.34.0" }, { name = "xarm-python-sdk", marker = "extra == 'misc'", specifier = ">=1.17.0" }, { name = "xformers", marker = "extra == 'cuda'", specifier = ">=0.0.20" }, @@ -1920,7 +1920,7 @@ name = "exceptiongroup" version = "1.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions", marker = "python_full_version < '3.13'" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371, upload-time = "2025-11-21T23:01:54.787Z" } wheels = [ @@ -5108,7 +5108,7 @@ name = "nvidia-cudnn-cu12" version = "9.10.2.21" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-cublas-cu12", version = "12.8.4.1", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux')" }, + { name = "nvidia-cublas-cu12", version = "12.8.4.1", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux' and sys_platform != 'win32')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/ba/51/e123d997aa098c61d029f76663dedbfb9bc8dcf8c60cbd6adbe42f76d049/nvidia_cudnn_cu12-9.10.2.21-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:949452be657fa16687d0930933f032835951ef0892b37d2d53824d1a84dc97a8", size = 706758467, upload-time = "2025-06-06T21:54:08.597Z" }, @@ -5119,7 +5119,7 @@ name = "nvidia-cufft-cu12" version = "11.3.3.83" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-nvjitlink-cu12", marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux')" }, + { name = "nvidia-nvjitlink-cu12", marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux' and sys_platform != 'win32')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/1f/13/ee4e00f30e676b66ae65b4f08cb5bcbb8392c03f54f2d5413ea99a5d1c80/nvidia_cufft_cu12-11.3.3.83-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4d2dd21ec0b88cf61b62e6b43564355e5222e4a3fb394cac0db101f2dd0d4f74", size = 193118695, upload-time = "2025-03-07T01:45:27.821Z" }, @@ -5146,9 +5146,9 @@ name = "nvidia-cusolver-cu12" version = "11.7.3.90" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-cublas-cu12", version = "12.8.4.1", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux')" }, - { name = "nvidia-cusparse-cu12", marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux')" }, - { name = "nvidia-nvjitlink-cu12", marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux')" }, + { name = "nvidia-cublas-cu12", version = "12.8.4.1", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux' and sys_platform != 'win32')" }, + { name = "nvidia-cusparse-cu12", marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux' and sys_platform != 'win32')" }, + { name = "nvidia-nvjitlink-cu12", marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux' and sys_platform != 'win32')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/85/48/9a13d2975803e8cf2777d5ed57b87a0b6ca2cc795f9a4f59796a910bfb80/nvidia_cusolver_cu12-11.7.3.90-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:4376c11ad263152bd50ea295c05370360776f8c3427b30991df774f9fb26c450", size = 267506905, upload-time = "2025-03-07T01:47:16.273Z" }, @@ -5159,7 +5159,7 @@ name = "nvidia-cusparse-cu12" version = "12.5.8.93" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-nvjitlink-cu12", marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux')" }, + { name = "nvidia-nvjitlink-cu12", marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux' and sys_platform != 'win32')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/c2/f5/e1854cb2f2bcd4280c44736c93550cc300ff4b8c95ebe370d0aa7d2b473d/nvidia_cusparse_cu12-12.5.8.93-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1ec05d76bbbd8b61b06a80e1eaf8cf4959c3d4ce8e711b65ebd0443bb0ebb13b", size = 288216466, upload-time = "2025-03-07T01:48:13.779Z" }, From d7c458d39b424430f541ddd261f1373840f3e9e5 Mon Sep 17 00:00:00 2001 From: Paul Nechifor Date: Wed, 7 Jan 2026 08:41:09 +0200 Subject: [PATCH 6/9] restore deleted code --- dimos/agents/skills/navigation.py | 155 +++++++++++++++--------------- 1 file changed, 78 insertions(+), 77 deletions(-) diff --git a/dimos/agents/skills/navigation.py b/dimos/agents/skills/navigation.py index 2027619402..054246d6ee 100644 --- a/dimos/agents/skills/navigation.py +++ b/dimos/agents/skills/navigation.py @@ -1,4 +1,4 @@ -# Copyright 2025 Dimensional Inc. +# Copyright 2025-2026 Dimensional Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -18,6 +18,7 @@ from dimos.core.core import rpc from dimos.core.skill_module import SkillModule from dimos.core.stream import In +from dimos.models.qwen.video_query import BBox from dimos.models.vl.qwen import QwenVlModel from dimos.msgs.geometry_msgs import PoseStamped, Quaternion, Vector3 from dimos.msgs.geometry_msgs.Vector3 import make_vector3 @@ -133,15 +134,15 @@ def navigate_with_text(self, query: str) -> str: logger.info(f"No tagged location found for {query}") - # success_msg = self._navigate_to_object(query) - # if success_msg: - # return success_msg + success_msg = self._navigate_to_object(query) + if success_msg: + return success_msg - # logger.info(f"No object in view found for {query}") + logger.info(f"No object in view found for {query}") - # success_msg = self._navigate_using_semantic_map(query) - # if success_msg: - # return success_msg + success_msg = self._navigate_using_semantic_map(query) + if success_msg: + return success_msg return f"No tagged location called '{query}'. No object in view matching '{query}'. No matching location found in semantic map for '{query}'." @@ -200,75 +201,75 @@ def _navigate_to(self, pose: PoseStamped) -> bool: logger.info("Navigation goal reached") return True - # def _navigate_to_object(self, query: str) -> str | None: - # try: - # bbox = self._get_bbox_for_current_frame(query) - # except Exception: - # logger.error(f"Failed to get bbox for {query}", exc_info=True) - # return None - - # if bbox is None: - # return None - - # try: - # track_rpc, stop_track_rpc, is_tracking_rpc = self.get_rpc_calls( - # "ObjectTracking.track", "ObjectTracking.stop_track", "ObjectTracking.is_tracking" - # ) - # except Exception: - # logger.error("ObjectTracking module not connected properly") - # return None - - # try: - # get_state_rpc, is_goal_reached_rpc = self.get_rpc_calls( - # "NavigationInterface.get_state", "NavigationInterface.is_goal_reached" - # ) - # except Exception: - # logger.error("Navigation module not connected properly") - # return None - - # logger.info(f"Found {query} at {bbox}") - - # # Start tracking - BBoxNavigationModule automatically generates goals - # track_rpc(bbox) - - # start_time = time.time() - # timeout = 30.0 - # goal_set = False - - # while time.time() - start_time < timeout: - # # Check if navigator finished - # if get_state_rpc() == NavigationState.IDLE and goal_set: - # logger.info("Waiting for goal result") - # time.sleep(1.0) - # if not is_goal_reached_rpc(): - # logger.info(f"Goal cancelled, tracking '{query}' failed") - # stop_track_rpc() - # return None - # else: - # logger.info(f"Reached '{query}'") - # stop_track_rpc() - # return f"Successfully arrived at '{query}'" - - # # If goal set and tracking lost, just continue (tracker will resume or timeout) - # if goal_set and not is_tracking_rpc(): - # continue - - # # BBoxNavigationModule automatically sends goals when tracker publishes - # # Just check if we have any detections to mark goal_set - # if is_tracking_rpc(): - # goal_set = True - - # time.sleep(0.25) - - # logger.warning(f"Navigation to '{query}' timed out after {timeout}s") - # stop_track_rpc() - # return None - - # def _get_bbox_for_current_frame(self, query: str) -> BBox | None: - # if self._latest_image is None: - # return None - - # return get_object_bbox_from_image(self._vl_model, self._latest_image, query) + def _navigate_to_object(self, query: str) -> str | None: + try: + bbox = self._get_bbox_for_current_frame(query) + except Exception: + logger.error(f"Failed to get bbox for {query}", exc_info=True) + return None + + if bbox is None: + return None + + try: + track_rpc, stop_track_rpc, is_tracking_rpc = self.get_rpc_calls( + "ObjectTracking.track", "ObjectTracking.stop_track", "ObjectTracking.is_tracking" + ) + except Exception: + logger.error("ObjectTracking module not connected properly") + return None + + try: + get_state_rpc, is_goal_reached_rpc = self.get_rpc_calls( + "NavigationInterface.get_state", "NavigationInterface.is_goal_reached" + ) + except Exception: + logger.error("Navigation module not connected properly") + return None + + logger.info(f"Found {query} at {bbox}") + + # Start tracking - BBoxNavigationModule automatically generates goals + track_rpc(bbox) + + start_time = time.time() + timeout = 30.0 + goal_set = False + + while time.time() - start_time < timeout: + # Check if navigator finished + if get_state_rpc() == NavigationState.IDLE and goal_set: + logger.info("Waiting for goal result") + time.sleep(1.0) + if not is_goal_reached_rpc(): + logger.info(f"Goal cancelled, tracking '{query}' failed") + stop_track_rpc() + return None + else: + logger.info(f"Reached '{query}'") + stop_track_rpc() + return f"Successfully arrived at '{query}'" + + # If goal set and tracking lost, just continue (tracker will resume or timeout) + if goal_set and not is_tracking_rpc(): + continue + + # BBoxNavigationModule automatically sends goals when tracker publishes + # Just check if we have any detections to mark goal_set + if is_tracking_rpc(): + goal_set = True + + time.sleep(0.25) + + logger.warning(f"Navigation to '{query}' timed out after {timeout}s") + stop_track_rpc() + return None + + def _get_bbox_for_current_frame(self, query: str) -> BBox | None: + if self._latest_image is None: + return None + + return get_object_bbox_from_image(self._vl_model, self._latest_image, query) def _navigate_using_semantic_map(self, query: str) -> str: try: From e3ec2eec8428cd0867d338c52886703bc2f40568 Mon Sep 17 00:00:00 2001 From: Paul Nechifor Date: Wed, 7 Jan 2026 09:30:59 +0200 Subject: [PATCH 7/9] fix duplicates --- pyproject.toml | 69 ++++++-------------------------------- uv.lock | 91 ++++++++------------------------------------------ 2 files changed, 24 insertions(+), 136 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 10daaa22f3..48cc17f0ae 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -33,63 +33,6 @@ dependencies = [ "dimos-lcm", "PyTurboJPEG==1.8.2", - # Core requirements - "numba>=0.60.0", # Python 3.12 support - "llvmlite>=0.42.0", # Required by numba 0.60+ - "python-dotenv", - "openai", - "anthropic>=0.19.0", - "cerebras-cloud-sdk", - "moondream", - "numpy>=1.26.4", - "rerun-sdk>=0.20.0", - "yapf==0.40.2", - "typeguard", - "empy==3.3.4", - "catkin_pkg", - "lark", - "plum-dispatch==2.5.7", - "ffmpeg-python", - "tiktoken>=0.8.0", - "Flask>=2.2", - "python-multipart==0.0.20", - "reactivex", - "asyncio==3.4.3", - "unitree-webrtc-connect-leshy>=2.0.7", - "tensorzero==2025.7.5", - - # Web Extensions - "fastapi>=0.115.6", - "sse-starlette>=2.2.1", - "uvicorn>=0.34.0", - - # MCP Server - "mcp>=1.0.0", - - # Agents - "langchain>=1,<2", - "langchain-chroma>=1,<2", - "langchain-core>=1,<2", - "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", - - # Class Extraction - "pydantic", - - # Developer Specific - "ipykernel", - - # Unitree webrtc streaming - "pycryptodome", - "sounddevice", - "pyaudio", - "requests", - "wasmtime", - # Core "numpy>=1.26.4", "scipy>=1.15.1", @@ -177,6 +120,10 @@ misc = [ "llvmlite>=0.42.0", # Required by numba 0.59+ ] +visualization = [ + "rerun-sdk>=0.20.0", +] + agents = [ "langchain>=1,<2", "langchain-chroma>=1,<2", @@ -187,10 +134,14 @@ agents = [ "langchain-ollama>=1,<2", "bitsandbytes>=0.48.2,<1.0; sys_platform == 'linux'", "ollama>=0.6.0", + "anthropic>=0.19.0", # Audio "openai-whisper", "sounddevice", + + # MCP Server + "mcp>=1.0.0", ] web = [ @@ -211,8 +162,8 @@ perception = [ ] unitree = [ - "dimos[agents,web,perception]", - "unitree-webrtc-connect-leshy>=2.0.4" + "dimos[agents,web,perception,visualization]", + "unitree-webrtc-connect-leshy>=2.0.7" ] manipulation = [ diff --git a/uv.lock b/uv.lock index 60b60e2ecc..fe1b1557df 100644 --- a/uv.lock +++ b/uv.lock @@ -1455,69 +1455,33 @@ name = "dimos" version = "0.0.4" source = { editable = "." } dependencies = [ - { name = "anthropic" }, { name = "asyncio" }, - { name = "bitsandbytes", marker = "sys_platform == 'linux'" }, - { name = "catkin-pkg" }, - { name = "cerebras-cloud-sdk" }, { name = "colorlog" }, { name = "dask", extra = ["complete"] }, { name = "dimos-lcm" }, - { name = "empy" }, - { name = "fastapi" }, - { name = "ffmpeg-python" }, - { name = "flask" }, - { name = "ipykernel" }, - { name = "langchain" }, - { name = "langchain-chroma" }, - { name = "langchain-core" }, - { name = "langchain-huggingface" }, - { name = "langchain-ollama" }, - { name = "langchain-openai" }, - { name = "langchain-text-splitters" }, - { name = "lark" }, - { name = "llvmlite" }, - { name = "mcp" }, - { name = "moondream" }, - { name = "numba" }, { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "ollama" }, { name = "open3d" }, - { name = "openai" }, { name = "opencv-python" }, { name = "plotext" }, { name = "plum-dispatch" }, - { name = "pyaudio" }, - { name = "pycryptodome" }, { name = "pydantic" }, { name = "pydantic-settings" }, { name = "python-dotenv" }, - { name = "python-multipart" }, { name = "pyturbojpeg" }, { name = "reactivex" }, - { name = "requests" }, - { name = "rerun-sdk" }, { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "scipy", version = "1.16.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "sortedcontainers" }, - { name = "sounddevice" }, - { name = "sse-starlette" }, { name = "structlog" }, - { name = "tensorzero" }, { name = "terminaltexteffects" }, { name = "textual" }, - { name = "tiktoken" }, - { name = "typeguard" }, { name = "typer" }, - { name = "unitree-webrtc-connect-leshy" }, - { name = "uvicorn" }, - { name = "wasmtime" }, - { name = "yapf" }, ] [package.optional-dependencies] agents = [ + { name = "anthropic" }, { name = "bitsandbytes", marker = "sys_platform == 'linux'" }, { name = "langchain" }, { name = "langchain-chroma" }, @@ -1526,6 +1490,7 @@ agents = [ { name = "langchain-ollama" }, { name = "langchain-openai" }, { name = "langchain-text-splitters" }, + { name = "mcp" }, { name = "ollama" }, { name = "openai-whisper" }, { name = "sounddevice" }, @@ -1647,6 +1612,7 @@ sim = [ { name = "playground" }, ] unitree = [ + { name = "anthropic" }, { name = "bitsandbytes", marker = "sys_platform == 'linux'" }, { name = "fastapi" }, { name = "ffmpeg-python" }, @@ -1659,10 +1625,12 @@ unitree = [ { name = "langchain-openai" }, { name = "langchain-text-splitters" }, { name = "lap" }, + { name = "mcp" }, { name = "moondream" }, { name = "ollama" }, { name = "openai-whisper" }, { name = "pillow" }, + { name = "rerun-sdk" }, { name = "sounddevice" }, { name = "soundfile" }, { name = "sse-starlette" }, @@ -1671,6 +1639,9 @@ unitree = [ { name = "unitree-webrtc-connect-leshy" }, { name = "uvicorn" }, ] +visualization = [ + { name = "rerun-sdk" }, +] web = [ { name = "fastapi" }, { name = "ffmpeg-python" }, @@ -1681,14 +1652,11 @@ web = [ [package.metadata] requires-dist = [ - { name = "anthropic", specifier = ">=0.19.0" }, + { name = "anthropic", marker = "extra == 'agents'", specifier = ">=0.19.0" }, { name = "anthropic", marker = "extra == 'misc'", specifier = ">=0.19.0" }, { name = "asyncio", specifier = "==3.4.3" }, - { name = "bitsandbytes", marker = "sys_platform == 'linux'", specifier = ">=0.48.2,<1.0" }, { name = "bitsandbytes", marker = "sys_platform == 'linux' and extra == 'agents'", specifier = ">=0.48.2,<1.0" }, - { name = "catkin-pkg" }, { name = "catkin-pkg", marker = "extra == 'misc'" }, - { name = "cerebras-cloud-sdk" }, { name = "cerebras-cloud-sdk", marker = "extra == 'misc'" }, { name = "clip", marker = "extra == 'cuda'", git = "https://github.com/openai/CLIP.git" }, { name = "clip", marker = "extra == 'misc'", git = "https://github.com/openai/CLIP.git" }, @@ -1701,68 +1669,50 @@ requires-dist = [ { name = "dask", extras = ["complete"], specifier = "==2025.5.1" }, { name = "dataclasses", marker = "extra == 'cuda'" }, { name = "detectron2", marker = "extra == 'cuda'", git = "https://github.com/facebookresearch/detectron2.git?tag=v0.6" }, - { name = "dimos", extras = ["agents", "web", "perception"], marker = "extra == 'unitree'" }, + { name = "dimos", extras = ["agents", "web", "perception", "visualization"], marker = "extra == 'unitree'" }, { name = "dimos-lcm" }, { name = "einops", marker = "extra == 'misc'", specifier = "==0.8.1" }, - { name = "empy", specifier = "==3.3.4" }, { name = "empy", marker = "extra == 'misc'", specifier = "==3.3.4" }, - { name = "fastapi", specifier = ">=0.115.6" }, { name = "fastapi", marker = "extra == 'web'", specifier = ">=0.115.6" }, { name = "fasttext", marker = "extra == 'cuda'" }, - { name = "ffmpeg-python" }, { name = "ffmpeg-python", marker = "extra == 'web'" }, { name = "filterpy", marker = "extra == 'perception'", specifier = ">=1.4.5" }, - { name = "flask", specifier = ">=2.2" }, { name = "ftfy", marker = "extra == 'cuda'" }, { name = "gdown", marker = "extra == 'misc'", specifier = "==5.2.0" }, { name = "googlemaps", marker = "extra == 'misc'", specifier = ">=4.10.0" }, { name = "h5py", marker = "extra == 'manipulation'", specifier = ">=3.7.0" }, - { name = "ipykernel" }, { name = "ipykernel", marker = "extra == 'misc'" }, { name = "kaleido", marker = "extra == 'manipulation'", specifier = ">=0.2.1" }, - { name = "langchain", specifier = ">=1,<2" }, { name = "langchain", marker = "extra == 'agents'", specifier = ">=1,<2" }, - { name = "langchain-chroma", specifier = ">=1,<2" }, { name = "langchain-chroma", marker = "extra == 'agents'", specifier = ">=1,<2" }, - { name = "langchain-core", specifier = ">=1,<2" }, { name = "langchain-core", marker = "extra == 'agents'", specifier = ">=1,<2" }, - { name = "langchain-huggingface", specifier = ">=1,<2" }, { name = "langchain-huggingface", marker = "extra == 'agents'", specifier = ">=1,<2" }, - { name = "langchain-ollama", specifier = ">=1,<2" }, { name = "langchain-ollama", marker = "extra == 'agents'", specifier = ">=1,<2" }, - { name = "langchain-openai", specifier = ">=1,<2" }, { name = "langchain-openai", marker = "extra == 'agents'", specifier = ">=1,<2" }, - { name = "langchain-text-splitters", specifier = ">=1,<2" }, { name = "langchain-text-splitters", marker = "extra == 'agents'", specifier = ">=1,<2" }, { name = "lap", marker = "extra == 'perception'", specifier = ">=0.5.12" }, - { name = "lark" }, { name = "lark", marker = "extra == 'misc'" }, - { name = "llvmlite", specifier = ">=0.42.0" }, { name = "llvmlite", marker = "extra == 'misc'", specifier = ">=0.42.0" }, { name = "lvis", marker = "extra == 'cuda'" }, { name = "lxml-stubs", marker = "extra == 'dev'", specifier = ">=0.5.1,<1" }, { name = "matplotlib", marker = "extra == 'manipulation'", specifier = ">=3.7.1" }, - { name = "mcp", specifier = ">=1.0.0" }, + { name = "mcp", marker = "extra == 'agents'", specifier = ">=1.0.0" }, { name = "mmcv", marker = "extra == 'cuda'", specifier = ">=2.1.0" }, { name = "mmengine", marker = "extra == 'cuda'", specifier = ">=0.10.3" }, - { name = "moondream" }, { name = "moondream", marker = "extra == 'perception'" }, { name = "mss", marker = "extra == 'cuda'" }, { name = "mujoco", marker = "extra == 'sim'", specifier = ">=3.3.4" }, { name = "mypy", marker = "extra == 'dev'", specifier = "==1.19.0" }, { name = "nltk", marker = "extra == 'cuda'" }, - { name = "numba", specifier = ">=0.60.0" }, { name = "numba", marker = "extra == 'misc'", specifier = ">=0.60.0" }, { name = "numpy", specifier = ">=1.26.4" }, { name = "nvidia-nvimgcodec-cu12", extras = ["all"], marker = "extra == 'cuda'" }, - { name = "ollama", specifier = ">=0.6.0" }, { name = "ollama", marker = "extra == 'agents'", specifier = ">=0.6.0" }, { name = "onnx", marker = "extra == 'misc'" }, { name = "onnxruntime", marker = "extra == 'cpu'" }, { name = "onnxruntime-gpu", marker = "extra == 'cuda'", specifier = ">=1.17.1" }, { name = "open-clip-torch", marker = "extra == 'misc'", specifier = "==3.2.0" }, { name = "open3d" }, - { name = "openai" }, { name = "openai", marker = "extra == 'misc'" }, { name = "openai-whisper", marker = "extra == 'agents'" }, { name = "opencv-contrib-python", marker = "extra == 'misc'", specifier = "==4.10.0.84" }, @@ -1776,8 +1726,6 @@ requires-dist = [ { name = "plotly", marker = "extra == 'manipulation'", specifier = ">=5.9.0" }, { name = "plum-dispatch", specifier = "==2.5.7" }, { name = "pre-commit", marker = "extra == 'dev'", specifier = "==4.2.0" }, - { name = "pyaudio" }, - { name = "pycryptodome" }, { name = "pydantic" }, { name = "pydantic-settings", specifier = ">=2.11.0,<3" }, { name = "pygame", marker = "extra == 'misc'", specifier = ">=2.6.1" }, @@ -1791,41 +1739,34 @@ requires-dist = [ { name = "pytest-timeout", marker = "extra == 'dev'", specifier = "==2.4.0" }, { name = "python-dotenv" }, { name = "python-fcl", marker = "extra == 'manipulation'", specifier = ">=0.7.0.4" }, - { name = "python-multipart", specifier = "==0.0.20" }, { name = "python-multipart", marker = "extra == 'misc'", specifier = "==0.0.20" }, { name = "pyturbojpeg", specifier = "==1.8.2" }, { name = "pyyaml", marker = "extra == 'manipulation'", specifier = ">=6.0" }, { name = "reactivex" }, { name = "regex", marker = "extra == 'cuda'" }, - { name = "requests" }, { name = "requests-mock", marker = "extra == 'dev'", specifier = "==1.12.1" }, - { name = "rerun-sdk", specifier = ">=0.20.0" }, + { name = "rerun-sdk", marker = "extra == 'visualization'", specifier = ">=0.20.0" }, { name = "rtree", marker = "extra == 'manipulation'" }, { name = "ruff", marker = "extra == 'dev'", specifier = "==0.14.3" }, { name = "scikit-learn", marker = "extra == 'misc'" }, { name = "scipy", specifier = ">=1.15.1" }, { name = "sentence-transformers", marker = "extra == 'misc'" }, { name = "sortedcontainers", specifier = "==2.4.0" }, - { name = "sounddevice" }, { name = "sounddevice", marker = "extra == 'agents'" }, { name = "soundfile", marker = "extra == 'web'" }, - { name = "sse-starlette", specifier = ">=2.2.1" }, { name = "sse-starlette", marker = "extra == 'web'", specifier = ">=2.2.1" }, { name = "structlog", specifier = ">=25.5.0,<26" }, { name = "tensorboard", marker = "extra == 'misc'", specifier = "==2.20.0" }, - { name = "tensorzero", specifier = "==2025.7.5" }, { name = "tensorzero", marker = "extra == 'misc'", specifier = "==2025.7.5" }, { name = "terminaltexteffects", specifier = "==0.12.2" }, { name = "terminaltexteffects", marker = "extra == 'dev'", specifier = "==0.12.2" }, { name = "textual", specifier = "==3.7.1" }, - { name = "tiktoken", specifier = ">=0.8.0" }, { name = "tiktoken", marker = "extra == 'misc'", specifier = ">=0.8.0" }, { name = "timm", marker = "extra == 'misc'", specifier = ">=1.0.15" }, { name = "torchreid", marker = "extra == 'misc'", specifier = "==0.2.5" }, { name = "tqdm", marker = "extra == 'manipulation'", specifier = ">=4.65.0" }, { name = "transformers", extras = ["torch"], marker = "extra == 'perception'", specifier = "==4.49.0" }, { name = "trimesh", marker = "extra == 'manipulation'", specifier = ">=3.22.0" }, - { name = "typeguard" }, { name = "typeguard", marker = "extra == 'misc'" }, { name = "typer", specifier = ">=0.19.2,<1" }, { name = "types-colorama", marker = "extra == 'dev'", specifier = ">=0.4.15.20250801,<1" }, @@ -1845,18 +1786,14 @@ requires-dist = [ { name = "types-tensorflow", marker = "extra == 'dev'", specifier = ">=2.18.0.20251008,<3" }, { name = "types-tqdm", marker = "extra == 'dev'", specifier = ">=4.67.0.20250809,<5" }, { name = "ultralytics", marker = "extra == 'perception'", specifier = ">=8.3.70" }, - { name = "unitree-webrtc-connect-leshy", specifier = ">=2.0.7" }, - { name = "unitree-webrtc-connect-leshy", marker = "extra == 'unitree'", specifier = ">=2.0.4" }, - { name = "uvicorn", specifier = ">=0.34.0" }, + { name = "unitree-webrtc-connect-leshy", marker = "extra == 'unitree'", specifier = ">=2.0.7" }, { name = "uvicorn", marker = "extra == 'web'", specifier = ">=0.34.0" }, - { name = "wasmtime" }, { name = "watchdog", marker = "extra == 'dev'", specifier = ">=3.0.0" }, { name = "xarm-python-sdk", marker = "extra == 'misc'", specifier = ">=1.17.0" }, { name = "xformers", marker = "extra == 'cuda'", specifier = ">=0.0.20" }, - { name = "yapf", specifier = "==0.40.2" }, { name = "yapf", marker = "extra == 'misc'", specifier = "==0.40.2" }, ] -provides-extras = ["misc", "agents", "web", "perception", "unitree", "manipulation", "cpu", "cuda", "dev", "sim", "drone"] +provides-extras = ["misc", "visualization", "agents", "web", "perception", "unitree", "manipulation", "cpu", "cuda", "dev", "sim", "drone"] [[package]] name = "dimos-lcm" From 64c29800383481b5d0d56a6f9034b5cbe6ebed51 Mon Sep 17 00:00:00 2001 From: Paul Nechifor Date: Wed, 7 Jan 2026 14:11:40 +0200 Subject: [PATCH 8/9] move numba into dependencies --- docker/python/Dockerfile | 2 +- pyproject.toml | 7 ++++--- uv.lock | 30 +++++++++++++++--------------- 3 files changed, 20 insertions(+), 19 deletions(-) diff --git a/docker/python/Dockerfile b/docker/python/Dockerfile index ff4877233e..b85404f51a 100644 --- a/docker/python/Dockerfile +++ b/docker/python/Dockerfile @@ -49,4 +49,4 @@ COPY . /app/ # Install dependencies with UV (10-100x faster than pip) RUN uv pip install --upgrade 'pip>=24' 'setuptools>=70' 'wheel' 'packaging>=24' && \ - uv pip install '.[misc,cpu,sim,drone,unitree,web,perception]' + uv pip install '.[misc,cpu,sim,drone,unitree,web,perception,visualization]' diff --git a/pyproject.toml b/pyproject.toml index 48cc17f0ae..46fc2ee029 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -60,6 +60,10 @@ dependencies = [ "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+ ] @@ -115,9 +119,6 @@ misc = [ "pygame>=2.6.1", # Hardware SDKs "xarm-python-sdk>=1.17.0", - - "numba>=0.60.0", # First version supporting Python 3.12 - "llvmlite>=0.42.0", # Required by numba 0.59+ ] visualization = [ diff --git a/uv.lock b/uv.lock index fe1b1557df..0fd94fac8f 100644 --- a/uv.lock +++ b/uv.lock @@ -371,10 +371,10 @@ name = "bitsandbytes" version = "0.49.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "packaging" }, - { name = "torch" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform != 'darwin' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform != 'darwin' and sys_platform != 'win32'" }, + { name = "packaging", marker = "sys_platform != 'darwin' and sys_platform != 'win32'" }, + { name = "torch", marker = "sys_platform != 'darwin' and sys_platform != 'win32'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/d1/4f/9f6d161e9ea68cdd6b85585dee9b383748ca07431e31c4c134111f87489e/bitsandbytes-0.49.0-py3-none-manylinux_2_24_aarch64.whl", hash = "sha256:7e69951b4d207a676986fce967544d9599f23518d0f09d478295996aeff377c2", size = 31065242, upload-time = "2025-12-11T20:50:41.903Z" }, @@ -1459,6 +1459,8 @@ dependencies = [ { name = "colorlog" }, { name = "dask", extra = ["complete"] }, { name = "dimos-lcm" }, + { name = "llvmlite" }, + { name = "numba" }, { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "open3d" }, @@ -1579,8 +1581,6 @@ misc = [ { name = "googlemaps" }, { name = "ipykernel" }, { name = "lark" }, - { name = "llvmlite" }, - { name = "numba" }, { name = "onnx" }, { name = "open-clip-torch" }, { name = "openai" }, @@ -1692,7 +1692,7 @@ requires-dist = [ { name = "langchain-text-splitters", marker = "extra == 'agents'", specifier = ">=1,<2" }, { name = "lap", marker = "extra == 'perception'", specifier = ">=0.5.12" }, { name = "lark", marker = "extra == 'misc'" }, - { name = "llvmlite", marker = "extra == 'misc'", specifier = ">=0.42.0" }, + { name = "llvmlite", specifier = ">=0.42.0" }, { name = "lvis", marker = "extra == 'cuda'" }, { name = "lxml-stubs", marker = "extra == 'dev'", specifier = ">=0.5.1,<1" }, { name = "matplotlib", marker = "extra == 'manipulation'", specifier = ">=3.7.1" }, @@ -1704,7 +1704,7 @@ requires-dist = [ { name = "mujoco", marker = "extra == 'sim'", specifier = ">=3.3.4" }, { name = "mypy", marker = "extra == 'dev'", specifier = "==1.19.0" }, { name = "nltk", marker = "extra == 'cuda'" }, - { name = "numba", marker = "extra == 'misc'", specifier = ">=0.60.0" }, + { name = "numba", specifier = ">=0.60.0" }, { name = "numpy", specifier = ">=1.26.4" }, { name = "nvidia-nvimgcodec-cu12", extras = ["all"], marker = "extra == 'cuda'" }, { name = "ollama", marker = "extra == 'agents'", specifier = ">=0.6.0" }, @@ -1930,7 +1930,7 @@ name = "exceptiongroup" version = "1.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions", marker = "python_full_version < '3.13'" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371, upload-time = "2025-11-21T23:01:54.787Z" } wheels = [ @@ -5177,7 +5177,7 @@ name = "nvidia-cudnn-cu12" version = "9.10.2.21" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-cublas-cu12", version = "12.8.4.1", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux')" }, + { name = "nvidia-cublas-cu12", version = "12.8.4.1", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux' and sys_platform != 'win32')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/ba/51/e123d997aa098c61d029f76663dedbfb9bc8dcf8c60cbd6adbe42f76d049/nvidia_cudnn_cu12-9.10.2.21-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:949452be657fa16687d0930933f032835951ef0892b37d2d53824d1a84dc97a8", size = 706758467, upload-time = "2025-06-06T21:54:08.597Z" }, @@ -5188,7 +5188,7 @@ name = "nvidia-cufft-cu12" version = "11.3.3.83" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-nvjitlink-cu12", marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux')" }, + { name = "nvidia-nvjitlink-cu12", marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux' and sys_platform != 'win32')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/1f/13/ee4e00f30e676b66ae65b4f08cb5bcbb8392c03f54f2d5413ea99a5d1c80/nvidia_cufft_cu12-11.3.3.83-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4d2dd21ec0b88cf61b62e6b43564355e5222e4a3fb394cac0db101f2dd0d4f74", size = 193118695, upload-time = "2025-03-07T01:45:27.821Z" }, @@ -5215,9 +5215,9 @@ name = "nvidia-cusolver-cu12" version = "11.7.3.90" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-cublas-cu12", version = "12.8.4.1", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux')" }, - { name = "nvidia-cusparse-cu12", marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux')" }, - { name = "nvidia-nvjitlink-cu12", marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux')" }, + { name = "nvidia-cublas-cu12", version = "12.8.4.1", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux' and sys_platform != 'win32')" }, + { name = "nvidia-cusparse-cu12", marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux' and sys_platform != 'win32')" }, + { name = "nvidia-nvjitlink-cu12", marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux' and sys_platform != 'win32')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/85/48/9a13d2975803e8cf2777d5ed57b87a0b6ca2cc795f9a4f59796a910bfb80/nvidia_cusolver_cu12-11.7.3.90-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:4376c11ad263152bd50ea295c05370360776f8c3427b30991df774f9fb26c450", size = 267506905, upload-time = "2025-03-07T01:47:16.273Z" }, @@ -5228,7 +5228,7 @@ name = "nvidia-cusparse-cu12" version = "12.5.8.93" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-nvjitlink-cu12", marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux')" }, + { name = "nvidia-nvjitlink-cu12", marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux' and sys_platform != 'win32')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/c2/f5/e1854cb2f2bcd4280c44736c93550cc300ff4b8c95ebe370d0aa7d2b473d/nvidia_cusparse_cu12-12.5.8.93-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1ec05d76bbbd8b61b06a80e1eaf8cf4959c3d4ce8e711b65ebd0443bb0ebb13b", size = 288216466, upload-time = "2025-03-07T01:48:13.779Z" }, From 03ec8288af08bce0e0a027c94fb531e3a5900063 Mon Sep 17 00:00:00 2001 From: Paul Nechifor Date: Wed, 7 Jan 2026 14:19:20 +0200 Subject: [PATCH 9/9] move openai --- pyproject.toml | 3 +-- uv.lock | 7 +++---- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 46fc2ee029..b0a1e61415 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -78,8 +78,6 @@ dimos = "dimos.robot.cli.dimos:main" [project.optional-dependencies] misc = [ # Core requirements - "openai", - "anthropic>=0.19.0", "cerebras-cloud-sdk", "yapf==0.40.2", "typeguard", @@ -138,6 +136,7 @@ agents = [ "anthropic>=0.19.0", # Audio + "openai", "openai-whisper", "sounddevice", diff --git a/uv.lock b/uv.lock index 0fd94fac8f..de203d7e4a 100644 --- a/uv.lock +++ b/uv.lock @@ -1494,6 +1494,7 @@ agents = [ { name = "langchain-text-splitters" }, { name = "mcp" }, { name = "ollama" }, + { name = "openai" }, { name = "openai-whisper" }, { name = "sounddevice" }, ] @@ -1571,7 +1572,6 @@ manipulation = [ { name = "trimesh" }, ] misc = [ - { name = "anthropic" }, { name = "catkin-pkg" }, { name = "cerebras-cloud-sdk" }, { name = "clip" }, @@ -1583,7 +1583,6 @@ misc = [ { name = "lark" }, { name = "onnx" }, { name = "open-clip-torch" }, - { name = "openai" }, { name = "opencv-contrib-python" }, { name = "pygame" }, { name = "python-multipart" }, @@ -1628,6 +1627,7 @@ unitree = [ { name = "mcp" }, { name = "moondream" }, { name = "ollama" }, + { name = "openai" }, { name = "openai-whisper" }, { name = "pillow" }, { name = "rerun-sdk" }, @@ -1653,7 +1653,6 @@ web = [ [package.metadata] requires-dist = [ { name = "anthropic", marker = "extra == 'agents'", specifier = ">=0.19.0" }, - { name = "anthropic", marker = "extra == 'misc'", specifier = ">=0.19.0" }, { name = "asyncio", specifier = "==3.4.3" }, { name = "bitsandbytes", marker = "sys_platform == 'linux' and extra == 'agents'", specifier = ">=0.48.2,<1.0" }, { name = "catkin-pkg", marker = "extra == 'misc'" }, @@ -1713,7 +1712,7 @@ requires-dist = [ { name = "onnxruntime-gpu", marker = "extra == 'cuda'", specifier = ">=1.17.1" }, { name = "open-clip-torch", marker = "extra == 'misc'", specifier = "==3.2.0" }, { name = "open3d" }, - { name = "openai", marker = "extra == 'misc'" }, + { name = "openai", marker = "extra == 'agents'" }, { name = "openai-whisper", marker = "extra == 'agents'" }, { name = "opencv-contrib-python", marker = "extra == 'misc'", specifier = "==4.10.0.84" }, { name = "opencv-python" },