From 72a87bd7213b9592f4d45ed4ca331c845fc3cc6b Mon Sep 17 00:00:00 2001 From: Krishna_Hundekari Date: Mon, 1 Jun 2026 11:24:25 -0700 Subject: [PATCH 1/3] docs(install): fix required system libs, replay size, and library-install noise (#2119) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ubuntu.md: add libgl1/libegl1 — OpenGL runtime for the always-installed open3d + rerun-sdk core deps (matches scripts/install.sh); without them the visualizer fails at runtime with "libGL.so.1: cannot open shared object file" on minimal/headless/Docker installs. Drop pre-commit (a dev dependency-group tool, irrelevant to library users). - osx.md: drop pre-commit. - ubuntu.md/osx.md: note the inline `export PATH` is session-only (uv persists via the shell profile; open a new terminal). - go2/index.md: correct replay first-run download to ~85 MB LFS / ~220 MB SQLite DB (was "~2.4 GB of LiDAR/video"), resolving the README vs go2 inconsistency. Validated by hand on Ubuntu 24.04 per #2119. --- docs/installation/osx.md | 4 +++- docs/installation/ubuntu.md | 8 +++++++- docs/platforms/quadruped/go2/index.md | 2 +- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/docs/installation/osx.md b/docs/installation/osx.md index 8f190c1c5e..33e418be93 100644 --- a/docs/installation/osx.md +++ b/docs/installation/osx.md @@ -4,10 +4,12 @@ # install homebrew /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" # install dependencies -brew install gnu-sed gcc portaudio git-lfs libjpeg-turbo python pre-commit +brew install gnu-sed gcc portaudio git-lfs libjpeg-turbo python # install uv curl -LsSf https://astral.sh/uv/install.sh | sh && export PATH="$HOME/.local/bin:$PATH" +# NOTE: the `export` above only affects the current shell. Open a new terminal so `uv` is on +# PATH in later sessions — the installer adds it to your shell profile (e.g. ~/.zprofile). ``` ## Using DimOS as a library diff --git a/docs/installation/ubuntu.md b/docs/installation/ubuntu.md index 60c5b986fe..a715beeb07 100644 --- a/docs/installation/ubuntu.md +++ b/docs/installation/ubuntu.md @@ -2,10 +2,16 @@ ```sh skip sudo apt-get update -sudo apt-get install -y curl g++ portaudio19-dev git-lfs libturbojpeg python3-dev pre-commit +# Required system libraries. libturbojpeg + portaudio19-dev cover image/audio; libgl1 + +# libegl1 are the OpenGL runtime for open3d and rerun-sdk (both always-installed core deps). +# Without libgl1/libegl1 the visualizer fails at runtime with +# "libGL.so.1: cannot open shared object file" (e.g. on minimal/headless/Docker installs). +sudo apt-get install -y curl g++ portaudio19-dev git-lfs libturbojpeg libgl1 libegl1 python3-dev # install uv curl -LsSf https://astral.sh/uv/install.sh | sh && export PATH="$HOME/.local/bin:$PATH" +# NOTE: the `export` above only affects the current shell. Open a new terminal (or run +# `source ~/.bashrc`) so `uv` is on PATH in later sessions — the installer also adds it there. ``` ## Using DimOS as a library diff --git a/docs/platforms/quadruped/go2/index.md b/docs/platforms/quadruped/go2/index.md index 4e392f06ca..83f7925be1 100644 --- a/docs/platforms/quadruped/go2/index.md +++ b/docs/platforms/quadruped/go2/index.md @@ -27,7 +27,7 @@ uv pip install 'dimos[base,unitree]' ```bash # Replay a recorded Go2 navigation session -# First run downloads ~2.4 GB of LiDAR/video data from LFS +# First run downloads ~85 MB from LFS (extracts to a ~220 MB SQLite replay DB) dimos --replay run unitree-go2 ``` From fb3fae7efd1b6c19d56c08c186595eaecb2fdafe Mon Sep 17 00:00:00 2001 From: Krishna_Hundekari Date: Mon, 1 Jun 2026 13:25:24 -0700 Subject: [PATCH 2/3] docs(install): note optional graphviz + sim first-run asset downloads (#2119) - ubuntu.md: mention optional graphviz for blueprint-graph visualization (dimos logs "graphviz not found, skipping blueprint graph" without it; everything else still works). - go2/index.md: note the first MuJoCo sim run also clones mujoco_menagerie and pulls a ~60 MB mujoco_sim asset bundle from LFS (one-time). --- docs/installation/ubuntu.md | 4 ++++ docs/platforms/quadruped/go2/index.md | 2 ++ 2 files changed, 6 insertions(+) diff --git a/docs/installation/ubuntu.md b/docs/installation/ubuntu.md index a715beeb07..f9b8fc5f5f 100644 --- a/docs/installation/ubuntu.md +++ b/docs/installation/ubuntu.md @@ -8,6 +8,10 @@ sudo apt-get update # "libGL.so.1: cannot open shared object file" (e.g. on minimal/headless/Docker installs). sudo apt-get install -y curl g++ portaudio19-dev git-lfs libturbojpeg libgl1 libegl1 python3-dev +# optional: graphviz enables blueprint-graph visualization. Without it dimos logs +# "graphviz not found, skipping blueprint graph" at startup (everything else still works). +# sudo apt-get install -y graphviz + # install uv curl -LsSf https://astral.sh/uv/install.sh | sh && export PATH="$HOME/.local/bin:$PATH" # NOTE: the `export` above only affects the current shell. Open a new terminal (or run diff --git a/docs/platforms/quadruped/go2/index.md b/docs/platforms/quadruped/go2/index.md index 83f7925be1..f02f46756e 100644 --- a/docs/platforms/quadruped/go2/index.md +++ b/docs/platforms/quadruped/go2/index.md @@ -110,6 +110,8 @@ From the command center ([localhost:7779](http://localhost:7779)): ```bash uv pip install 'dimos[base,unitree,sim]' +# First sim run also downloads assets: it git-clones mujoco_menagerie and pulls a +# ~60 MB mujoco_sim asset bundle from LFS (one-time; in addition to the replay data above). dimos --simulation run unitree-go2 ``` From 9851f9e0af8d887b05b003e40d94c75e4d7d36dc Mon Sep 17 00:00:00 2001 From: Krishna_Hundekari Date: Mon, 1 Jun 2026 13:39:09 -0700 Subject: [PATCH 3/3] fix(agentic): fail fast with a clear message when OPENAI_API_KEY is missing (#2119) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Agentic blueprints use OpenAI for text-to-speech (SpeakSkill) and, by default, the LLM agent. Without OPENAI_API_KEY the run previously crashed deep in start_all_modules with an opaque ExceptionGroup (a SpeakSkill.start failure), after already deploying modules and downloading assets. Add an openai_api_key_set blueprint requirement check (mirroring ollama_installed) on _common_agentic, so a missing key now fails at blueprint build with a clear, actionable message + key link — before any modules deploy. This also makes the OpenAI dependency of the -ollama variant explicit (it uses OpenAI TTS even with a local LLM). --- dimos/agents/skills/speak_skill.py | 16 ++++++++++++++++ .../go2/blueprints/agentic/_common_agentic.py | 7 ++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/dimos/agents/skills/speak_skill.py b/dimos/agents/skills/speak_skill.py index b46de157c4..027019a781 100644 --- a/dimos/agents/skills/speak_skill.py +++ b/dimos/agents/skills/speak_skill.py @@ -12,6 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +import os import threading import time @@ -28,6 +29,21 @@ logger = setup_logger() +def openai_api_key_set() -> str | None: + """Blueprint requirement check: SpeakSkill uses OpenAI text-to-speech, which needs + OPENAI_API_KEY. Returns None if set, else a clear message (mirrors ollama_installed). + Lets a missing key fail fast at blueprint build instead of crashing later in start().""" + if os.environ.get("OPENAI_API_KEY"): + return None + return ( + "OPENAI_API_KEY is not set. The agentic blueprint uses OpenAI for text-to-speech " + "(SpeakSkill), and by default for the LLM agent too.\n" + "\n" + " Set it with: export OPENAI_API_KEY=\n" + " Get a key at https://platform.openai.com/api-keys" + ) + + class SpeakSkill(Module): _tts_node: OpenAITTSNode | None = None _audio_output: SounddeviceAudioOutput | None = None diff --git a/dimos/robot/unitree/go2/blueprints/agentic/_common_agentic.py b/dimos/robot/unitree/go2/blueprints/agentic/_common_agentic.py index 93312225bc..c51ef77bd5 100644 --- a/dimos/robot/unitree/go2/blueprints/agentic/_common_agentic.py +++ b/dimos/robot/unitree/go2/blueprints/agentic/_common_agentic.py @@ -15,7 +15,7 @@ from dimos.agents.skills.navigation import NavigationSkillContainer from dimos.agents.skills.person_follow import PersonFollowSkillContainer -from dimos.agents.skills.speak_skill import SpeakSkill +from dimos.agents.skills.speak_skill import SpeakSkill, openai_api_key_set from dimos.agents.web_human_input import WebInput from dimos.core.coordination.blueprints import autoconnect from dimos.robot.unitree.go2.connection import GO2Connection @@ -27,6 +27,11 @@ UnitreeSkillContainer.blueprint(), WebInput.blueprint(), SpeakSkill.blueprint(), +).requirements( + # SpeakSkill (OpenAI TTS) needs OPENAI_API_KEY — fail fast at blueprint build with a + # clear message instead of an ExceptionGroup deep in start_all_modules. Mirrors the + # ollama_installed gate used by the -ollama variant. + openai_api_key_set, ) __all__ = ["_common_agentic"]