From 90500da351a1f1858e3fa570d54cb956bda993ac Mon Sep 17 00:00:00 2001 From: Johnny Greco Date: Wed, 24 Jun 2026 17:32:46 +0000 Subject: [PATCH 01/45] Add Reachy Mini OpenShell research scaffold --- projects/README.md | 8 + projects/reachy-mini-openshell/.dockerignore | 10 + projects/reachy-mini-openshell/.gitignore | 8 + projects/reachy-mini-openshell/Dockerfile | 40 ++++ projects/reachy-mini-openshell/Makefile | 22 ++ projects/reachy-mini-openshell/README.md | 95 +++++++++ .../docs/research-plan.md | 31 +++ .../openshell/policy.local-sim.yaml | 36 ++++ projects/reachy-mini-openshell/pyproject.toml | 33 +++ .../src/reachy_openshell/__init__.py | 2 + .../src/reachy_openshell/backend.py | 190 ++++++++++++++++++ .../src/reachy_openshell/smoke.py | 108 ++++++++++ 12 files changed, 583 insertions(+) create mode 100644 projects/README.md create mode 100644 projects/reachy-mini-openshell/.dockerignore create mode 100644 projects/reachy-mini-openshell/.gitignore create mode 100644 projects/reachy-mini-openshell/Dockerfile create mode 100644 projects/reachy-mini-openshell/Makefile create mode 100644 projects/reachy-mini-openshell/README.md create mode 100644 projects/reachy-mini-openshell/docs/research-plan.md create mode 100644 projects/reachy-mini-openshell/openshell/policy.local-sim.yaml create mode 100644 projects/reachy-mini-openshell/pyproject.toml create mode 100644 projects/reachy-mini-openshell/src/reachy_openshell/__init__.py create mode 100644 projects/reachy-mini-openshell/src/reachy_openshell/backend.py create mode 100644 projects/reachy-mini-openshell/src/reachy_openshell/smoke.py diff --git a/projects/README.md b/projects/README.md new file mode 100644 index 00000000..08fc37c2 --- /dev/null +++ b/projects/README.md @@ -0,0 +1,8 @@ +# Projects + +This directory contains self-contained research projects. Each project should live in its own subfolder with its own dependencies, runtime notes, and source layout. + +Current projects: + +- `reachy-mini-openshell`: Reachy Mini simulator/backend research for running the backend inside an OpenShell runtime. + diff --git a/projects/reachy-mini-openshell/.dockerignore b/projects/reachy-mini-openshell/.dockerignore new file mode 100644 index 00000000..75e643c1 --- /dev/null +++ b/projects/reachy-mini-openshell/.dockerignore @@ -0,0 +1,10 @@ +.git +.venv +__pycache__ +*.pyc +*.pyo +.pytest_cache +.ruff_cache +dist +*.egg-info + diff --git a/projects/reachy-mini-openshell/.gitignore b/projects/reachy-mini-openshell/.gitignore new file mode 100644 index 00000000..9c30bb62 --- /dev/null +++ b/projects/reachy-mini-openshell/.gitignore @@ -0,0 +1,8 @@ +.venv/ +__pycache__/ +*.py[cod] +.pytest_cache/ +.ruff_cache/ +dist/ +*.egg-info/ + diff --git a/projects/reachy-mini-openshell/Dockerfile b/projects/reachy-mini-openshell/Dockerfile new file mode 100644 index 00000000..1a83bbcb --- /dev/null +++ b/projects/reachy-mini-openshell/Dockerfile @@ -0,0 +1,40 @@ +FROM ghcr.io/nvidia/openshell-community/sandboxes/base:latest + +USER root +WORKDIR /sandbox/reachy-mini-openshell + +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + build-essential \ + pkg-config \ + python3-dev \ + libcairo2-dev \ + libgirepository1.0-dev \ + libglib2.0-dev \ + libgstreamer-plugins-bad1.0-dev \ + libgstreamer-plugins-base1.0-dev \ + libgstreamer1.0-dev \ + libnice10 \ + libportaudio2 \ + libssl-dev \ + gstreamer1.0-alsa \ + gstreamer1.0-nice \ + gstreamer1.0-plugins-bad \ + gstreamer1.0-plugins-good \ + python3-gi \ + python3-gi-cairo \ + && rm -rf /var/lib/apt/lists/* + +COPY pyproject.toml README.md ./ +COPY src ./src + +RUN python3 -m venv /opt/reachy-mini-openshell +ENV PATH="/opt/reachy-mini-openshell/bin:${PATH}" +ENV PYTHONDONTWRITEBYTECODE=1 + +RUN pip install --no-cache-dir ".[backend,sdk]" +RUN chown -R sandbox:sandbox /sandbox/reachy-mini-openshell /opt/reachy-mini-openshell + +USER sandbox + +CMD ["python3", "-m", "reachy_openshell.backend", "--host", "0.0.0.0", "--port", "8080"] diff --git a/projects/reachy-mini-openshell/Makefile b/projects/reachy-mini-openshell/Makefile new file mode 100644 index 00000000..ce34839a --- /dev/null +++ b/projects/reachy-mini-openshell/Makefile @@ -0,0 +1,22 @@ +UV ?= uv +PYTHON ?= python3 + +.PHONY: install install-backend install-sim sim smoke backend + +install: + $(UV) pip install -e ".[backend,sdk]" + +install-backend: + $(UV) pip install -e ".[backend]" + +install-sim: + $(UV) pip install -e ".[backend,sim]" + +sim: + reachy-mini-daemon --sim --scene $${REACHY_SCENE:-minimal} + +smoke: + $(PYTHON) -m reachy_openshell.smoke + +backend: + $(PYTHON) -m reachy_openshell.backend diff --git a/projects/reachy-mini-openshell/README.md b/projects/reachy-mini-openshell/README.md new file mode 100644 index 00000000..9ae54b84 --- /dev/null +++ b/projects/reachy-mini-openshell/README.md @@ -0,0 +1,95 @@ +# Reachy Mini OpenShell Research + +Minimal research scaffold for running a Reachy Mini backend inside an OpenShell sandbox while starting against the Reachy Mini MuJoCo simulator. + +## Current Shape + +- Host process: runs `reachy-mini-daemon --sim`, which starts the simulator and exposes the daemon API on port `8000`. +- OpenShell process: runs this backend in a sandbox and connects to the host daemon through `host.openshell.internal:8000`. +- First backend surface: `GET /health` for daemon reachability and `POST /moves/smoke` for a small head/antenna motion. + +## Local Simulator Quickstart + +On Linux, install the Reachy Mini GStreamer prerequisites before installing the SDK. The upstream guide lists the full package set and notes that Ubuntu 22.04 needs newer GStreamer packages. + +```bash +cd projects/reachy-mini-openshell +uv venv --python 3.12 +source .venv/bin/activate +uv pip install -e ".[backend,sim]" +``` + +Start the simulator: + +```bash +reachy-mini-daemon --sim --scene minimal +``` + +In another terminal: + +```bash +source .venv/bin/activate +python -m reachy_openshell.smoke +python -m reachy_openshell.backend +``` + +Then probe the backend: + +```bash +curl http://127.0.0.1:8080/health +curl -X POST http://127.0.0.1:8080/moves/smoke +``` + +On macOS, the Reachy docs recommend launching the simulator with `mjpython` instead: + +```bash +mjpython -m reachy_mini.daemon.app.main --sim +``` + +## OpenShell Sandbox Path + +For the sandboxed backend to reach a host-level simulator, bind the Reachy daemon to an interface visible from containers: + +```bash +reachy-mini-daemon --sim --scene minimal --fastapi-host 0.0.0.0 --fastapi-port 8000 +``` + +If your installed daemon exposes different flag names, check `reachy-mini-daemon --help`; the important part is that the daemon is reachable from the sandbox at `host.openshell.internal:8000`. + +Build and run the backend in OpenShell: + +```bash +openshell status +openshell sandbox create \ + --name reachy-mini-backend \ + --from . \ + --policy openshell/policy.local-sim.yaml \ + --env REACHY_HOST=host.openshell.internal \ + --env REACHY_PORT=8000 \ + --env REACHY_CONNECTION_MODE=network \ + -- python3 -m reachy_openshell.backend --host 0.0.0.0 --port 8080 +``` + +Expose the backend service: + +```bash +openshell service expose reachy-mini-backend 8080 +``` + +The sandbox image installs the Linux system packages needed by the Reachy SDK before installing the Python package. + +## Layout + +- `src/reachy_openshell/smoke.py`: SDK smoke motion for the simulator or a real robot daemon. +- `src/reachy_openshell/backend.py`: small FastAPI backend for health checks and the smoke motion. +- `openshell/policy.local-sim.yaml`: starter OpenShell policy allowing Python to reach the host simulator daemon. +- `Dockerfile`: OpenShell sandbox image for the backend, based on the OpenShell community base sandbox. + +## References + +- Reachy Mini simulator setup: https://huggingface.co/docs/reachy_mini/en/platforms/simulation/get_started +- Reachy Mini Linux GStreamer prerequisites: https://huggingface.co/docs/reachy_mini/en/SDK/gstreamer-installation +- Reachy Mini SDK API: https://huggingface.co/docs/reachy_mini/en/API/reachymini +- OpenShell overview: https://docs.nvidia.com/openshell/about/overview +- OpenShell sandbox management: https://docs.nvidia.com/openshell/sandboxes/manage-sandboxes +- OpenShell policy reference: https://docs.nvidia.com/openshell/reference/policy-schema diff --git a/projects/reachy-mini-openshell/docs/research-plan.md b/projects/reachy-mini-openshell/docs/research-plan.md new file mode 100644 index 00000000..adce629f --- /dev/null +++ b/projects/reachy-mini-openshell/docs/research-plan.md @@ -0,0 +1,31 @@ +# Research Plan + +## Working Hypothesis + +Keep the simulator on the host for the first spike so MuJoCo can open its viewer normally. Run only the backend in OpenShell. The sandbox reaches the host daemon through `host.openshell.internal:8000`, using a narrow OpenShell network policy. + +## Phase 0: Simulator Bootstrap + +- Install `reachy-mini[mujoco]` locally. +- Start `reachy-mini-daemon --sim --scene minimal`. +- Verify the Python SDK can connect and run the smoke motion. + +## Phase 1: Sandboxed Backend + +- Build the local OpenShell sandbox image from `Dockerfile`. +- Run `python3 -m reachy_openshell.backend` inside the sandbox. +- Confirm `GET /health` reaches the simulator daemon. +- Confirm `POST /moves/smoke` moves the simulated robot. + +## Phase 2: Policy Tightening + +- Capture the exact daemon traffic used by the SDK. +- Replace the current L4 passthrough policy with REST and WebSocket rules if the daemon API remains stable enough. +- Decide whether PyPI access is needed at runtime or only at image build time. + +## Open Questions + +- Should the simulator stay host-side for development, or should a headless simulator move into its own OpenShell sandbox later? +- Which daemon bind flags are stable across Reachy Mini SDK versions and operating systems? +- Do audio and camera paths need to be disabled or mocked for OpenShell-based backend tests? + diff --git a/projects/reachy-mini-openshell/openshell/policy.local-sim.yaml b/projects/reachy-mini-openshell/openshell/policy.local-sim.yaml new file mode 100644 index 00000000..ebff2820 --- /dev/null +++ b/projects/reachy-mini-openshell/openshell/policy.local-sim.yaml @@ -0,0 +1,36 @@ +version: 1 + +filesystem_policy: + include_workdir: true + read_only: + - /usr + - /lib + - /lib64 + - /etc + - /bin + - /sbin + - /opt + read_write: + - /sandbox + - /workspace + - /tmp + +landlock: + compatibility: best_effort + +process: + run_as_user: sandbox + run_as_group: sandbox + +network_policies: + reachy_daemon: + name: reachy-daemon-local-simulator + endpoints: + - host: host.openshell.internal + port: 8000 + binaries: + - path: /usr/bin/python* + - path: /usr/local/bin/python* + - path: /opt/reachy-mini-openshell/bin/python* + - path: /sandbox/**/python* + diff --git a/projects/reachy-mini-openshell/pyproject.toml b/projects/reachy-mini-openshell/pyproject.toml new file mode 100644 index 00000000..07029d0c --- /dev/null +++ b/projects/reachy-mini-openshell/pyproject.toml @@ -0,0 +1,33 @@ +[build-system] +requires = ["hatchling>=1.25"] +build-backend = "hatchling.build" + +[project] +name = "reachy-mini-openshell" +version = "0.1.0" +description = "Research scaffold for running a Reachy Mini backend in OpenShell against a Reachy Mini simulator." +readme = "README.md" +requires-python = ">=3.10" +dependencies = [] + +[project.optional-dependencies] +backend = [ + "fastapi>=0.115,<1", + "uvicorn[standard]>=0.30,<1", +] +sdk = [ + "reachy-mini>=1.8.3,<2", +] +sim = [ + "reachy-mini[mujoco]>=1.8.3,<2", +] +dev = [ + "ruff>=0.8,<1", +] + +[project.scripts] +reachy-backend = "reachy_openshell.backend:main" +reachy-smoke = "reachy_openshell.smoke:main" + +[tool.hatch.build.targets.wheel] +packages = ["src/reachy_openshell"] diff --git a/projects/reachy-mini-openshell/src/reachy_openshell/__init__.py b/projects/reachy-mini-openshell/src/reachy_openshell/__init__.py new file mode 100644 index 00000000..f38884b6 --- /dev/null +++ b/projects/reachy-mini-openshell/src/reachy_openshell/__init__.py @@ -0,0 +1,2 @@ +__version__ = "0.1.0" + diff --git a/projects/reachy-mini-openshell/src/reachy_openshell/backend.py b/projects/reachy-mini-openshell/src/reachy_openshell/backend.py new file mode 100644 index 00000000..39f8c5fc --- /dev/null +++ b/projects/reachy-mini-openshell/src/reachy_openshell/backend.py @@ -0,0 +1,190 @@ +from __future__ import annotations + +import argparse +import asyncio +import os +import sys +import urllib.error +import urllib.request +from dataclasses import asdict, dataclass +from typing import Any + +from . import __version__ + +LOCAL_HOSTS = {"localhost", "127.0.0.1", "::1"} + +try: + from fastapi import FastAPI, HTTPException +except ImportError: # pragma: no cover - exercised only when optional deps are absent. + FastAPI = None # type: ignore[assignment] + HTTPException = None # type: ignore[assignment] + + +@dataclass(frozen=True) +class Settings: + reachy_host: str + reachy_port: int + connection_mode: str + timeout: float + + @classmethod + def from_env(cls) -> "Settings": + host = os.getenv("REACHY_HOST", "localhost") + return cls( + reachy_host=host, + reachy_port=_env_int("REACHY_PORT", 8000), + connection_mode=os.getenv("REACHY_CONNECTION_MODE", _default_connection_mode(host)), + timeout=_env_float("REACHY_TIMEOUT", 5.0), + ) + + @property + def daemon_base_url(self) -> str: + return f"http://{self.reachy_host}:{self.reachy_port}" + + +def _env_int(name: str, default: int) -> int: + raw = os.getenv(name) + if raw is None: + return default + try: + return int(raw) + except ValueError as exc: + raise ValueError(f"{name} must be an integer, got {raw!r}") from exc + + +def _env_float(name: str, default: float) -> float: + raw = os.getenv(name) + if raw is None: + return default + try: + return float(raw) + except ValueError as exc: + raise ValueError(f"{name} must be a number, got {raw!r}") from exc + + +def _default_connection_mode(host: str) -> str: + return "localhost_only" if host in LOCAL_HOSTS else "network" + + +def daemon_status(settings: Settings) -> dict[str, Any]: + url = f"{settings.daemon_base_url}/api/daemon/status" + try: + with urllib.request.urlopen(url, timeout=settings.timeout) as response: + body = response.read(4096).decode("utf-8", errors="replace") + return { + "ok": 200 <= response.status < 500, + "status_code": response.status, + "url": url, + "body": body, + } + except (urllib.error.URLError, TimeoutError, OSError) as exc: + return { + "ok": False, + "url": url, + "error": str(exc), + } + + +def run_smoke_motion(settings: Settings) -> dict[str, Any]: + try: + from reachy_mini import ReachyMini + from reachy_mini.utils import create_head_pose + except ImportError as exc: + raise RuntimeError( + "Reachy Mini SDK is not installed. Install with `uv pip install -e .` " + "or include the `sim` extra for local simulator work." + ) from exc + + with ReachyMini( + host=settings.reachy_host, + port=settings.reachy_port, + connection_mode=settings.connection_mode, + spawn_daemon=False, + timeout=settings.timeout, + ) as mini: + mini.goto_target( + head=create_head_pose(z=20, roll=10, mm=True, degrees=True), + duration=1.0, + ) + mini.goto_target(antennas=[0.6, -0.6], duration=0.3) + mini.goto_target(antennas=[-0.6, 0.6], duration=0.3) + mini.goto_target( + head=create_head_pose(), + antennas=[0.0, 0.0], + duration=1.0, + ) + + return { + "ok": True, + "reachy": asdict(settings), + "motion": "smoke", + } + + +def _create_app() -> Any: + if FastAPI is None: + return None + + api = FastAPI( + title="Reachy Mini OpenShell Backend", + version=__version__, + ) + + @api.get("/health") + def health() -> dict[str, Any]: + settings = Settings.from_env() + status = daemon_status(settings) + return { + "ok": status["ok"], + "reachy": asdict(settings), + "daemon": status, + } + + @api.post("/moves/smoke") + async def smoke_move() -> dict[str, Any]: + settings = Settings.from_env() + try: + return await asyncio.to_thread(run_smoke_motion, settings) + except Exception as exc: # pragma: no cover - depends on live daemon. + raise HTTPException(status_code=502, detail=str(exc)) from exc + + return api + + +app = _create_app() + + +def main(argv: list[str] | None = None) -> int: + if FastAPI is None: + print( + "FastAPI is not installed. Install backend dependencies with " + '`uv pip install -e ".[backend]"`.', + file=sys.stderr, + ) + return 2 + + parser = argparse.ArgumentParser(description="Run the Reachy Mini OpenShell backend.") + parser.add_argument("--host", default=os.getenv("BACKEND_HOST", "0.0.0.0")) + parser.add_argument("--port", type=int, default=_env_int("BACKEND_PORT", 8080)) + parser.add_argument("--reachy-host", default=None) + parser.add_argument("--reachy-port", type=int, default=None) + parser.add_argument("--connection-mode", default=None) + parser.add_argument("--log-level", default=os.getenv("UVICORN_LOG_LEVEL", "info")) + args = parser.parse_args(argv) + + if args.reachy_host is not None: + os.environ["REACHY_HOST"] = args.reachy_host + if args.reachy_port is not None: + os.environ["REACHY_PORT"] = str(args.reachy_port) + if args.connection_mode is not None: + os.environ["REACHY_CONNECTION_MODE"] = args.connection_mode + + import uvicorn + + uvicorn.run(app, host=args.host, port=args.port, log_level=args.log_level) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) + diff --git a/projects/reachy-mini-openshell/src/reachy_openshell/smoke.py b/projects/reachy-mini-openshell/src/reachy_openshell/smoke.py new file mode 100644 index 00000000..f86a7ac2 --- /dev/null +++ b/projects/reachy-mini-openshell/src/reachy_openshell/smoke.py @@ -0,0 +1,108 @@ +from __future__ import annotations + +import argparse +import os +import sys +from dataclasses import dataclass + +LOCAL_HOSTS = {"localhost", "127.0.0.1", "::1"} + + +@dataclass(frozen=True) +class ReachyTarget: + host: str + port: int + connection_mode: str + timeout: float + + +def _env_int(name: str, default: int) -> int: + raw = os.getenv(name) + if raw is None: + return default + try: + return int(raw) + except ValueError as exc: + raise ValueError(f"{name} must be an integer, got {raw!r}") from exc + + +def _env_float(name: str, default: float) -> float: + raw = os.getenv(name) + if raw is None: + return default + try: + return float(raw) + except ValueError as exc: + raise ValueError(f"{name} must be a number, got {raw!r}") from exc + + +def _default_connection_mode(host: str) -> str: + return "localhost_only" if host in LOCAL_HOSTS else "network" + + +def build_parser() -> argparse.ArgumentParser: + default_host = os.getenv("REACHY_HOST", "localhost") + parser = argparse.ArgumentParser(description="Run a small Reachy Mini SDK smoke motion.") + parser.add_argument("--host", default=default_host) + parser.add_argument("--port", type=int, default=_env_int("REACHY_PORT", 8000)) + parser.add_argument( + "--connection-mode", + choices=["auto", "localhost_only", "network"], + default=os.getenv("REACHY_CONNECTION_MODE", _default_connection_mode(default_host)), + ) + parser.add_argument("--timeout", type=float, default=_env_float("REACHY_TIMEOUT", 5.0)) + return parser + + +def run_motion(target: ReachyTarget) -> None: + try: + from reachy_mini import ReachyMini + from reachy_mini.utils import create_head_pose + except ImportError as exc: + raise RuntimeError( + "Reachy Mini SDK is not installed. Install with `uv pip install -e .` " + "or `uv pip install -e '.[sim]'` for simulator work." + ) from exc + + with ReachyMini( + host=target.host, + port=target.port, + connection_mode=target.connection_mode, + spawn_daemon=False, + timeout=target.timeout, + ) as mini: + print(f"Connected to Reachy Mini daemon at {target.host}:{target.port}") + print("Moving head and antennas...") + mini.goto_target( + head=create_head_pose(z=20, roll=10, mm=True, degrees=True), + duration=1.0, + ) + mini.goto_target(antennas=[0.6, -0.6], duration=0.3) + mini.goto_target(antennas=[-0.6, 0.6], duration=0.3) + mini.goto_target( + head=create_head_pose(), + antennas=[0.0, 0.0], + duration=1.0, + ) + print("Smoke motion complete.") + + +def main(argv: list[str] | None = None) -> int: + args = build_parser().parse_args(argv) + target = ReachyTarget( + host=args.host, + port=args.port, + connection_mode=args.connection_mode, + timeout=args.timeout, + ) + try: + run_motion(target) + except Exception as exc: + print(f"Reachy smoke motion failed: {exc}", file=sys.stderr) + return 1 + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) + From a7ba27e21d08c666e62d50a79889299681790177 Mon Sep 17 00:00:00 2001 From: Johnny Greco Date: Wed, 24 Jun 2026 17:41:20 +0000 Subject: [PATCH 02/45] Address Reachy scaffold review findings --- README.md | 2 + projects/reachy-mini-openshell/README.md | 8 +- .../openshell/policy.local-sim.yaml | 3 - .../src/reachy_openshell/backend.py | 9 +- .../src/reachy_openshell/smoke.py | 7 +- .../tests/test_reachy_constructors.py | 85 +++++++++++++++++++ 6 files changed, 106 insertions(+), 8 deletions(-) create mode 100644 projects/reachy-mini-openshell/tests/test_reachy_constructors.py diff --git a/README.md b/README.md index 1ef43ce5..f54acf22 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,8 @@ OpenShell as the runtime. - `docs/dev-notes/` contains research engineering updates, release notes, and build logs worth sharing. - `docs/dev-notes/authors.json` contains reusable Dev Notes author metadata. +- `projects/` contains self-contained research project folders, including the + Reachy Mini OpenShell simulator/backend scaffold. - `scripts/render-dev-notes.py` renders Dev Notes cards, post bylines, and navigation entries from post front matter. - `zensical.toml` configures the documentation site. diff --git a/projects/reachy-mini-openshell/README.md b/projects/reachy-mini-openshell/README.md index 9ae54b84..d29ca663 100644 --- a/projects/reachy-mini-openshell/README.md +++ b/projects/reachy-mini-openshell/README.md @@ -7,10 +7,15 @@ Minimal research scaffold for running a Reachy Mini backend inside an OpenShell - Host process: runs `reachy-mini-daemon --sim`, which starts the simulator and exposes the daemon API on port `8000`. - OpenShell process: runs this backend in a sandbox and connects to the host daemon through `host.openshell.internal:8000`. - First backend surface: `GET /health` for daemon reachability and `POST /moves/smoke` for a small head/antenna motion. +- Default SDK media mode: `no_media`, so the motion-only smoke path does not require camera, audio, or WebRTC access. ## Local Simulator Quickstart -On Linux, install the Reachy Mini GStreamer prerequisites before installing the SDK. The upstream guide lists the full package set and notes that Ubuntu 22.04 needs newer GStreamer packages. +Prerequisites: + +- `uv` +- Python 3.10-3.12. Python 3.12 is recommended by the Reachy Mini docs and used below. +- On Linux, install the Reachy Mini GStreamer prerequisites before installing the SDK. The upstream guide lists the full package set and notes that Ubuntu 22.04 needs newer GStreamer packages. ```bash cd projects/reachy-mini-openshell @@ -67,6 +72,7 @@ openshell sandbox create \ --env REACHY_HOST=host.openshell.internal \ --env REACHY_PORT=8000 \ --env REACHY_CONNECTION_MODE=network \ + --env REACHY_MEDIA_BACKEND=no_media \ -- python3 -m reachy_openshell.backend --host 0.0.0.0 --port 8080 ``` diff --git a/projects/reachy-mini-openshell/openshell/policy.local-sim.yaml b/projects/reachy-mini-openshell/openshell/policy.local-sim.yaml index ebff2820..2eb80b63 100644 --- a/projects/reachy-mini-openshell/openshell/policy.local-sim.yaml +++ b/projects/reachy-mini-openshell/openshell/policy.local-sim.yaml @@ -12,7 +12,6 @@ filesystem_policy: - /opt read_write: - /sandbox - - /workspace - /tmp landlock: @@ -32,5 +31,3 @@ network_policies: - path: /usr/bin/python* - path: /usr/local/bin/python* - path: /opt/reachy-mini-openshell/bin/python* - - path: /sandbox/**/python* - diff --git a/projects/reachy-mini-openshell/src/reachy_openshell/backend.py b/projects/reachy-mini-openshell/src/reachy_openshell/backend.py index 39f8c5fc..47824f82 100644 --- a/projects/reachy-mini-openshell/src/reachy_openshell/backend.py +++ b/projects/reachy-mini-openshell/src/reachy_openshell/backend.py @@ -25,6 +25,7 @@ class Settings: reachy_host: str reachy_port: int connection_mode: str + media_backend: str timeout: float @classmethod @@ -34,6 +35,7 @@ def from_env(cls) -> "Settings": reachy_host=host, reachy_port=_env_int("REACHY_PORT", 8000), connection_mode=os.getenv("REACHY_CONNECTION_MODE", _default_connection_mode(host)), + media_backend=os.getenv("REACHY_MEDIA_BACKEND", "no_media"), timeout=_env_float("REACHY_TIMEOUT", 5.0), ) @@ -91,7 +93,7 @@ def run_smoke_motion(settings: Settings) -> dict[str, Any]: from reachy_mini.utils import create_head_pose except ImportError as exc: raise RuntimeError( - "Reachy Mini SDK is not installed. Install with `uv pip install -e .` " + "Reachy Mini SDK is not installed. Install with `uv pip install -e '.[sdk]'` " "or include the `sim` extra for local simulator work." ) from exc @@ -100,6 +102,7 @@ def run_smoke_motion(settings: Settings) -> dict[str, Any]: port=settings.reachy_port, connection_mode=settings.connection_mode, spawn_daemon=False, + media_backend=settings.media_backend, timeout=settings.timeout, ) as mini: mini.goto_target( @@ -169,6 +172,7 @@ def main(argv: list[str] | None = None) -> int: parser.add_argument("--reachy-host", default=None) parser.add_argument("--reachy-port", type=int, default=None) parser.add_argument("--connection-mode", default=None) + parser.add_argument("--media-backend", default=None) parser.add_argument("--log-level", default=os.getenv("UVICORN_LOG_LEVEL", "info")) args = parser.parse_args(argv) @@ -178,6 +182,8 @@ def main(argv: list[str] | None = None) -> int: os.environ["REACHY_PORT"] = str(args.reachy_port) if args.connection_mode is not None: os.environ["REACHY_CONNECTION_MODE"] = args.connection_mode + if args.media_backend is not None: + os.environ["REACHY_MEDIA_BACKEND"] = args.media_backend import uvicorn @@ -187,4 +193,3 @@ def main(argv: list[str] | None = None) -> int: if __name__ == "__main__": raise SystemExit(main()) - diff --git a/projects/reachy-mini-openshell/src/reachy_openshell/smoke.py b/projects/reachy-mini-openshell/src/reachy_openshell/smoke.py index f86a7ac2..b49d6e59 100644 --- a/projects/reachy-mini-openshell/src/reachy_openshell/smoke.py +++ b/projects/reachy-mini-openshell/src/reachy_openshell/smoke.py @@ -13,6 +13,7 @@ class ReachyTarget: host: str port: int connection_mode: str + media_backend: str timeout: float @@ -50,6 +51,7 @@ def build_parser() -> argparse.ArgumentParser: choices=["auto", "localhost_only", "network"], default=os.getenv("REACHY_CONNECTION_MODE", _default_connection_mode(default_host)), ) + parser.add_argument("--media-backend", default=os.getenv("REACHY_MEDIA_BACKEND", "no_media")) parser.add_argument("--timeout", type=float, default=_env_float("REACHY_TIMEOUT", 5.0)) return parser @@ -60,7 +62,7 @@ def run_motion(target: ReachyTarget) -> None: from reachy_mini.utils import create_head_pose except ImportError as exc: raise RuntimeError( - "Reachy Mini SDK is not installed. Install with `uv pip install -e .` " + "Reachy Mini SDK is not installed. Install with `uv pip install -e '.[sdk]'` " "or `uv pip install -e '.[sim]'` for simulator work." ) from exc @@ -69,6 +71,7 @@ def run_motion(target: ReachyTarget) -> None: port=target.port, connection_mode=target.connection_mode, spawn_daemon=False, + media_backend=target.media_backend, timeout=target.timeout, ) as mini: print(f"Connected to Reachy Mini daemon at {target.host}:{target.port}") @@ -93,6 +96,7 @@ def main(argv: list[str] | None = None) -> int: host=args.host, port=args.port, connection_mode=args.connection_mode, + media_backend=args.media_backend, timeout=args.timeout, ) try: @@ -105,4 +109,3 @@ def main(argv: list[str] | None = None) -> int: if __name__ == "__main__": raise SystemExit(main()) - diff --git a/projects/reachy-mini-openshell/tests/test_reachy_constructors.py b/projects/reachy-mini-openshell/tests/test_reachy_constructors.py new file mode 100644 index 00000000..8aa5005a --- /dev/null +++ b/projects/reachy-mini-openshell/tests/test_reachy_constructors.py @@ -0,0 +1,85 @@ +from __future__ import annotations + +import sys +import types +import unittest +from contextlib import contextmanager, redirect_stdout +from io import StringIO + +from reachy_openshell import backend, smoke + + +class FakeReachyMini: + calls: list[dict[str, object]] = [] + + def __init__(self, **kwargs: object) -> None: + self.calls.append(kwargs) + + def __enter__(self) -> "FakeReachyMini": + return self + + def __exit__(self, *_args: object) -> None: + return None + + def goto_target(self, **_kwargs: object) -> None: + return None + + +@contextmanager +def fake_reachy_modules(): + original = { + name: sys.modules.get(name) + for name in ("reachy_mini", "reachy_mini.utils") + } + + reachy_module = types.ModuleType("reachy_mini") + reachy_module.ReachyMini = FakeReachyMini + utils_module = types.ModuleType("reachy_mini.utils") + utils_module.create_head_pose = lambda **kwargs: {"head_pose": kwargs} + + sys.modules["reachy_mini"] = reachy_module + sys.modules["reachy_mini.utils"] = utils_module + FakeReachyMini.calls = [] + + try: + yield + finally: + for name, module in original.items(): + if module is None: + sys.modules.pop(name, None) + else: + sys.modules[name] = module + + +class ReachyConstructorTests(unittest.TestCase): + def test_backend_smoke_motion_disables_media_by_default(self) -> None: + settings = backend.Settings( + reachy_host="host.openshell.internal", + reachy_port=8000, + connection_mode="network", + media_backend="no_media", + timeout=5.0, + ) + + with fake_reachy_modules(): + backend.run_smoke_motion(settings) + + self.assertEqual(FakeReachyMini.calls[0]["media_backend"], "no_media") + + def test_smoke_cli_disables_media_by_default(self) -> None: + target = smoke.ReachyTarget( + host="localhost", + port=8000, + connection_mode="localhost_only", + media_backend="no_media", + timeout=5.0, + ) + + with fake_reachy_modules(), redirect_stdout(StringIO()): + smoke.run_motion(target) + + self.assertEqual(FakeReachyMini.calls[0]["media_backend"], "no_media") + + +if __name__ == "__main__": + unittest.main() From 8f6c1b8932b4bf1cf4ef8851df344eafe0b8a18c Mon Sep 17 00:00:00 2001 From: Johnny Greco Date: Wed, 24 Jun 2026 17:50:49 +0000 Subject: [PATCH 03/45] Tighten Reachy runtime defaults --- projects/README.md | 1 - projects/reachy-mini-openshell/.dockerignore | 1 - projects/reachy-mini-openshell/.gitignore | 1 - projects/reachy-mini-openshell/Dockerfile | 2 +- projects/reachy-mini-openshell/README.md | 2 +- .../docs/research-plan.md | 1 - .../src/reachy_openshell/__init__.py | 1 - .../src/reachy_openshell/backend.py | 2 +- .../src/reachy_openshell/smoke.py | 20 +++++++------ .../tests/test_reachy_constructors.py | 28 +++++++++---------- 10 files changed, 29 insertions(+), 30 deletions(-) diff --git a/projects/README.md b/projects/README.md index 08fc37c2..998778ed 100644 --- a/projects/README.md +++ b/projects/README.md @@ -5,4 +5,3 @@ This directory contains self-contained research projects. Each project should li Current projects: - `reachy-mini-openshell`: Reachy Mini simulator/backend research for running the backend inside an OpenShell runtime. - diff --git a/projects/reachy-mini-openshell/.dockerignore b/projects/reachy-mini-openshell/.dockerignore index 75e643c1..d6db44c1 100644 --- a/projects/reachy-mini-openshell/.dockerignore +++ b/projects/reachy-mini-openshell/.dockerignore @@ -7,4 +7,3 @@ __pycache__ .ruff_cache dist *.egg-info - diff --git a/projects/reachy-mini-openshell/.gitignore b/projects/reachy-mini-openshell/.gitignore index 9c30bb62..34e42671 100644 --- a/projects/reachy-mini-openshell/.gitignore +++ b/projects/reachy-mini-openshell/.gitignore @@ -5,4 +5,3 @@ __pycache__/ .ruff_cache/ dist/ *.egg-info/ - diff --git a/projects/reachy-mini-openshell/Dockerfile b/projects/reachy-mini-openshell/Dockerfile index 1a83bbcb..b7be69a1 100644 --- a/projects/reachy-mini-openshell/Dockerfile +++ b/projects/reachy-mini-openshell/Dockerfile @@ -37,4 +37,4 @@ RUN chown -R sandbox:sandbox /sandbox/reachy-mini-openshell /opt/reachy-mini-ope USER sandbox -CMD ["python3", "-m", "reachy_openshell.backend", "--host", "0.0.0.0", "--port", "8080"] +CMD ["python3", "-m", "reachy_openshell.backend", "--host", "127.0.0.1", "--port", "8080"] diff --git a/projects/reachy-mini-openshell/README.md b/projects/reachy-mini-openshell/README.md index d29ca663..9dfae05f 100644 --- a/projects/reachy-mini-openshell/README.md +++ b/projects/reachy-mini-openshell/README.md @@ -73,7 +73,7 @@ openshell sandbox create \ --env REACHY_PORT=8000 \ --env REACHY_CONNECTION_MODE=network \ --env REACHY_MEDIA_BACKEND=no_media \ - -- python3 -m reachy_openshell.backend --host 0.0.0.0 --port 8080 + -- python3 -m reachy_openshell.backend --host 127.0.0.1 --port 8080 ``` Expose the backend service: diff --git a/projects/reachy-mini-openshell/docs/research-plan.md b/projects/reachy-mini-openshell/docs/research-plan.md index adce629f..6e06d210 100644 --- a/projects/reachy-mini-openshell/docs/research-plan.md +++ b/projects/reachy-mini-openshell/docs/research-plan.md @@ -28,4 +28,3 @@ Keep the simulator on the host for the first spike so MuJoCo can open its viewer - Should the simulator stay host-side for development, or should a headless simulator move into its own OpenShell sandbox later? - Which daemon bind flags are stable across Reachy Mini SDK versions and operating systems? - Do audio and camera paths need to be disabled or mocked for OpenShell-based backend tests? - diff --git a/projects/reachy-mini-openshell/src/reachy_openshell/__init__.py b/projects/reachy-mini-openshell/src/reachy_openshell/__init__.py index f38884b6..3dc1f76b 100644 --- a/projects/reachy-mini-openshell/src/reachy_openshell/__init__.py +++ b/projects/reachy-mini-openshell/src/reachy_openshell/__init__.py @@ -1,2 +1 @@ __version__ = "0.1.0" - diff --git a/projects/reachy-mini-openshell/src/reachy_openshell/backend.py b/projects/reachy-mini-openshell/src/reachy_openshell/backend.py index 47824f82..c9f97acf 100644 --- a/projects/reachy-mini-openshell/src/reachy_openshell/backend.py +++ b/projects/reachy-mini-openshell/src/reachy_openshell/backend.py @@ -167,7 +167,7 @@ def main(argv: list[str] | None = None) -> int: return 2 parser = argparse.ArgumentParser(description="Run the Reachy Mini OpenShell backend.") - parser.add_argument("--host", default=os.getenv("BACKEND_HOST", "0.0.0.0")) + parser.add_argument("--host", default=os.getenv("BACKEND_HOST", "127.0.0.1")) parser.add_argument("--port", type=int, default=_env_int("BACKEND_PORT", 8080)) parser.add_argument("--reachy-host", default=None) parser.add_argument("--reachy-port", type=int, default=None) diff --git a/projects/reachy-mini-openshell/src/reachy_openshell/smoke.py b/projects/reachy-mini-openshell/src/reachy_openshell/smoke.py index b49d6e59..5933427c 100644 --- a/projects/reachy-mini-openshell/src/reachy_openshell/smoke.py +++ b/projects/reachy-mini-openshell/src/reachy_openshell/smoke.py @@ -49,13 +49,23 @@ def build_parser() -> argparse.ArgumentParser: parser.add_argument( "--connection-mode", choices=["auto", "localhost_only", "network"], - default=os.getenv("REACHY_CONNECTION_MODE", _default_connection_mode(default_host)), + default=os.getenv("REACHY_CONNECTION_MODE"), ) parser.add_argument("--media-backend", default=os.getenv("REACHY_MEDIA_BACKEND", "no_media")) parser.add_argument("--timeout", type=float, default=_env_float("REACHY_TIMEOUT", 5.0)) return parser +def target_from_args(args: argparse.Namespace) -> ReachyTarget: + return ReachyTarget( + host=args.host, + port=args.port, + connection_mode=args.connection_mode or _default_connection_mode(args.host), + media_backend=args.media_backend, + timeout=args.timeout, + ) + + def run_motion(target: ReachyTarget) -> None: try: from reachy_mini import ReachyMini @@ -92,13 +102,7 @@ def run_motion(target: ReachyTarget) -> None: def main(argv: list[str] | None = None) -> int: args = build_parser().parse_args(argv) - target = ReachyTarget( - host=args.host, - port=args.port, - connection_mode=args.connection_mode, - media_backend=args.media_backend, - timeout=args.timeout, - ) + target = target_from_args(args) try: run_motion(target) except Exception as exc: diff --git a/projects/reachy-mini-openshell/tests/test_reachy_constructors.py b/projects/reachy-mini-openshell/tests/test_reachy_constructors.py index 8aa5005a..59547309 100644 --- a/projects/reachy-mini-openshell/tests/test_reachy_constructors.py +++ b/projects/reachy-mini-openshell/tests/test_reachy_constructors.py @@ -1,10 +1,12 @@ from __future__ import annotations +import os import sys import types import unittest from contextlib import contextmanager, redirect_stdout from io import StringIO +from unittest.mock import patch from reachy_openshell import backend, smoke @@ -53,13 +55,8 @@ def fake_reachy_modules(): class ReachyConstructorTests(unittest.TestCase): def test_backend_smoke_motion_disables_media_by_default(self) -> None: - settings = backend.Settings( - reachy_host="host.openshell.internal", - reachy_port=8000, - connection_mode="network", - media_backend="no_media", - timeout=5.0, - ) + with patch.dict(os.environ, {}, clear=True): + settings = backend.Settings.from_env() with fake_reachy_modules(): backend.run_smoke_motion(settings) @@ -67,19 +64,22 @@ def test_backend_smoke_motion_disables_media_by_default(self) -> None: self.assertEqual(FakeReachyMini.calls[0]["media_backend"], "no_media") def test_smoke_cli_disables_media_by_default(self) -> None: - target = smoke.ReachyTarget( - host="localhost", - port=8000, - connection_mode="localhost_only", - media_backend="no_media", - timeout=5.0, - ) + with patch.dict(os.environ, {}, clear=True): + target = smoke.target_from_args(smoke.build_parser().parse_args([])) with fake_reachy_modules(), redirect_stdout(StringIO()): smoke.run_motion(target) self.assertEqual(FakeReachyMini.calls[0]["media_backend"], "no_media") + def test_smoke_cli_uses_network_mode_for_non_local_cli_host(self) -> None: + with patch.dict(os.environ, {}, clear=True): + target = smoke.target_from_args( + smoke.build_parser().parse_args(["--host", "host.openshell.internal"]) + ) + + self.assertEqual(target.connection_mode, "network") + if __name__ == "__main__": unittest.main() From a77be29befb8f5378c95b8e270c4aa80c5dd8055 Mon Sep 17 00:00:00 2001 From: Johnny Greco Date: Wed, 24 Jun 2026 17:14:57 -0400 Subject: [PATCH 04/45] Refactor Reachy OpenShell around conversation app --- projects/reachy-mini-openshell/.dockerignore | 9 - projects/reachy-mini-openshell/.env.example | 8 + projects/reachy-mini-openshell/.gitignore | 57 +- projects/reachy-mini-openshell/Dockerfile | 40 - projects/reachy-mini-openshell/LICENSE | 201 +++++ projects/reachy-mini-openshell/Makefile | 22 - projects/reachy-mini-openshell/README.md | 110 +-- .../docs/research-plan.md | 30 - projects/reachy-mini-openshell/index.html | 42 + .../openshell/policy.local-sim.yaml | 33 - projects/reachy-mini-openshell/pyproject.toml | 84 +- .../reachy_mini_conversation_app/__init__.py | 1 + .../reachy_mini_conversation_app/__main__.py | 5 + .../audio/__init__.py | 1 + .../audio/head_wobbler.py | 181 ++++ .../audio/speech_tapper.py | 268 ++++++ .../camera_worker.py | 241 +++++ .../reachy_mini_conversation_app/config.py | 73 ++ .../reachy_mini_conversation_app/console.py | 419 +++++++++ .../dance_emotion_moves.py | 86 ++ .../goto_queue_move.py | 68 ++ .../images/reachymini_avatar.png | Bin 0 -> 1228716 bytes .../images/user_avatar.png | Bin 0 -> 1111878 bytes .../src/reachy_mini_conversation_app/main.py | 255 ++++++ .../src/reachy_mini_conversation_app/moves.py | 849 ++++++++++++++++++ .../openai_realtime.py | 811 +++++++++++++++++ .../profiles/__init__.py | 1 + .../__init__.py | 1 + .../instructions.txt | 3 + .../sweep_look.py | 115 +++ .../tools.txt | 5 + .../reachy_mini_conversation_app/prompts.py | 47 + .../static/index.html | 54 ++ .../static/main.js | 136 +++ .../static/style.css | 210 +++++ .../tools/__init__.py | 1 + .../tools/background_tool_manager.py | 412 +++++++++ .../tools/camera.py | 68 ++ .../tools/core_tools.py | 213 +++++ .../tools/dance.py | 86 ++ .../tools/do_nothing.py | 30 + .../tools/head_tracking.py | 31 + .../tools/move_head.py | 79 ++ .../tools/play_emotion.py | 84 ++ .../tools/stop_dance.py | 31 + .../tools/stop_emotion.py | 31 + .../tools/task_cancel.py | 74 ++ .../tools/task_status.py | 104 +++ .../tools/tool_constants.py | 17 + .../src/reachy_mini_conversation_app/utils.py | 123 +++ .../vision/__init__.py | 1 + .../vision/processors.py | 331 +++++++ .../vision/yolo_head_tracker.py | 148 +++ .../src/reachy_openshell/__init__.py | 1 - .../src/reachy_openshell/backend.py | 195 ---- .../src/reachy_openshell/smoke.py | 115 --- projects/reachy-mini-openshell/style.css | 113 +++ .../tests/audio/test_head_wobbler.py | 110 +++ .../reachy-mini-openshell/tests/conftest.py | 15 + .../tests/test_openai_realtime.py | 544 +++++++++++ .../tests/test_reachy_constructors.py | 85 -- .../tools/test_background_tool_manager.py | 545 +++++++++++ .../tests/vision/test_processors.py | 498 ++++++++++ 63 files changed, 7916 insertions(+), 635 deletions(-) delete mode 100644 projects/reachy-mini-openshell/.dockerignore create mode 100644 projects/reachy-mini-openshell/.env.example delete mode 100644 projects/reachy-mini-openshell/Dockerfile create mode 100644 projects/reachy-mini-openshell/LICENSE delete mode 100644 projects/reachy-mini-openshell/Makefile delete mode 100644 projects/reachy-mini-openshell/docs/research-plan.md create mode 100644 projects/reachy-mini-openshell/index.html delete mode 100644 projects/reachy-mini-openshell/openshell/policy.local-sim.yaml create mode 100644 projects/reachy-mini-openshell/src/reachy_mini_conversation_app/__init__.py create mode 100644 projects/reachy-mini-openshell/src/reachy_mini_conversation_app/__main__.py create mode 100644 projects/reachy-mini-openshell/src/reachy_mini_conversation_app/audio/__init__.py create mode 100644 projects/reachy-mini-openshell/src/reachy_mini_conversation_app/audio/head_wobbler.py create mode 100644 projects/reachy-mini-openshell/src/reachy_mini_conversation_app/audio/speech_tapper.py create mode 100644 projects/reachy-mini-openshell/src/reachy_mini_conversation_app/camera_worker.py create mode 100644 projects/reachy-mini-openshell/src/reachy_mini_conversation_app/config.py create mode 100644 projects/reachy-mini-openshell/src/reachy_mini_conversation_app/console.py create mode 100644 projects/reachy-mini-openshell/src/reachy_mini_conversation_app/dance_emotion_moves.py create mode 100644 projects/reachy-mini-openshell/src/reachy_mini_conversation_app/goto_queue_move.py create mode 100644 projects/reachy-mini-openshell/src/reachy_mini_conversation_app/images/reachymini_avatar.png create mode 100644 projects/reachy-mini-openshell/src/reachy_mini_conversation_app/images/user_avatar.png create mode 100644 projects/reachy-mini-openshell/src/reachy_mini_conversation_app/main.py create mode 100644 projects/reachy-mini-openshell/src/reachy_mini_conversation_app/moves.py create mode 100644 projects/reachy-mini-openshell/src/reachy_mini_conversation_app/openai_realtime.py create mode 100644 projects/reachy-mini-openshell/src/reachy_mini_conversation_app/profiles/__init__.py create mode 100644 projects/reachy-mini-openshell/src/reachy_mini_conversation_app/profiles/_reachy_mini_conversation_app_locked_profile/__init__.py create mode 100644 projects/reachy-mini-openshell/src/reachy_mini_conversation_app/profiles/_reachy_mini_conversation_app_locked_profile/instructions.txt create mode 100644 projects/reachy-mini-openshell/src/reachy_mini_conversation_app/profiles/_reachy_mini_conversation_app_locked_profile/sweep_look.py create mode 100644 projects/reachy-mini-openshell/src/reachy_mini_conversation_app/profiles/_reachy_mini_conversation_app_locked_profile/tools.txt create mode 100644 projects/reachy-mini-openshell/src/reachy_mini_conversation_app/prompts.py create mode 100644 projects/reachy-mini-openshell/src/reachy_mini_conversation_app/static/index.html create mode 100644 projects/reachy-mini-openshell/src/reachy_mini_conversation_app/static/main.js create mode 100644 projects/reachy-mini-openshell/src/reachy_mini_conversation_app/static/style.css create mode 100644 projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/__init__.py create mode 100644 projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/background_tool_manager.py create mode 100644 projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/camera.py create mode 100644 projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/core_tools.py create mode 100644 projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/dance.py create mode 100644 projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/do_nothing.py create mode 100644 projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/head_tracking.py create mode 100644 projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/move_head.py create mode 100644 projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/play_emotion.py create mode 100644 projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/stop_dance.py create mode 100644 projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/stop_emotion.py create mode 100644 projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/task_cancel.py create mode 100644 projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/task_status.py create mode 100644 projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/tool_constants.py create mode 100644 projects/reachy-mini-openshell/src/reachy_mini_conversation_app/utils.py create mode 100644 projects/reachy-mini-openshell/src/reachy_mini_conversation_app/vision/__init__.py create mode 100644 projects/reachy-mini-openshell/src/reachy_mini_conversation_app/vision/processors.py create mode 100644 projects/reachy-mini-openshell/src/reachy_mini_conversation_app/vision/yolo_head_tracker.py delete mode 100644 projects/reachy-mini-openshell/src/reachy_openshell/__init__.py delete mode 100644 projects/reachy-mini-openshell/src/reachy_openshell/backend.py delete mode 100644 projects/reachy-mini-openshell/src/reachy_openshell/smoke.py create mode 100644 projects/reachy-mini-openshell/style.css create mode 100644 projects/reachy-mini-openshell/tests/audio/test_head_wobbler.py create mode 100644 projects/reachy-mini-openshell/tests/conftest.py create mode 100644 projects/reachy-mini-openshell/tests/test_openai_realtime.py delete mode 100644 projects/reachy-mini-openshell/tests/test_reachy_constructors.py create mode 100644 projects/reachy-mini-openshell/tests/tools/test_background_tool_manager.py create mode 100644 projects/reachy-mini-openshell/tests/vision/test_processors.py diff --git a/projects/reachy-mini-openshell/.dockerignore b/projects/reachy-mini-openshell/.dockerignore deleted file mode 100644 index d6db44c1..00000000 --- a/projects/reachy-mini-openshell/.dockerignore +++ /dev/null @@ -1,9 +0,0 @@ -.git -.venv -__pycache__ -*.pyc -*.pyo -.pytest_cache -.ruff_cache -dist -*.egg-info diff --git a/projects/reachy-mini-openshell/.env.example b/projects/reachy-mini-openshell/.env.example new file mode 100644 index 00000000..12cf25b2 --- /dev/null +++ b/projects/reachy-mini-openshell/.env.example @@ -0,0 +1,8 @@ +OPENAI_API_KEY= +MODEL_NAME="gpt-realtime" + +# Used only with --local-vision. +LOCAL_VISION_MODEL=HuggingFaceTB/SmolVLM2-2.2B-Instruct + +HF_HOME=./cache +HF_TOKEN= diff --git a/projects/reachy-mini-openshell/.gitignore b/projects/reachy-mini-openshell/.gitignore index 34e42671..2451acc1 100644 --- a/projects/reachy-mini-openshell/.gitignore +++ b/projects/reachy-mini-openshell/.gitignore @@ -1,7 +1,58 @@ -.venv/ +# Python __pycache__/ *.py[cod] -.pytest_cache/ -.ruff_cache/ +*$py.class +*.so + +# Virtual environments +.venv/ +venv/ +ENV/ +env/ + +# Environment variables +.env + +# Build and distribution +build/ dist/ *.egg-info/ +.eggs/ + +# Testing +.pytest_cache/ +.coverage +.hypothesis/ +htmlcov/ +coverage.xml +*.cover + +# Linting and formatting +.ruff_cache/ +.mypy_cache/ + +# IDE +.vscode/ +.idea/ +*.swp +*.swo + +# Security +*.key +*.pem +*.crt +*.csr + +# Temporary files +tmp/ +*.log +cache/ + +# macOS +.DS_Store + +# Linux +*~ +.directory +.Trash-* +.nfs* diff --git a/projects/reachy-mini-openshell/Dockerfile b/projects/reachy-mini-openshell/Dockerfile deleted file mode 100644 index b7be69a1..00000000 --- a/projects/reachy-mini-openshell/Dockerfile +++ /dev/null @@ -1,40 +0,0 @@ -FROM ghcr.io/nvidia/openshell-community/sandboxes/base:latest - -USER root -WORKDIR /sandbox/reachy-mini-openshell - -RUN apt-get update \ - && apt-get install -y --no-install-recommends \ - build-essential \ - pkg-config \ - python3-dev \ - libcairo2-dev \ - libgirepository1.0-dev \ - libglib2.0-dev \ - libgstreamer-plugins-bad1.0-dev \ - libgstreamer-plugins-base1.0-dev \ - libgstreamer1.0-dev \ - libnice10 \ - libportaudio2 \ - libssl-dev \ - gstreamer1.0-alsa \ - gstreamer1.0-nice \ - gstreamer1.0-plugins-bad \ - gstreamer1.0-plugins-good \ - python3-gi \ - python3-gi-cairo \ - && rm -rf /var/lib/apt/lists/* - -COPY pyproject.toml README.md ./ -COPY src ./src - -RUN python3 -m venv /opt/reachy-mini-openshell -ENV PATH="/opt/reachy-mini-openshell/bin:${PATH}" -ENV PYTHONDONTWRITEBYTECODE=1 - -RUN pip install --no-cache-dir ".[backend,sdk]" -RUN chown -R sandbox:sandbox /sandbox/reachy-mini-openshell /opt/reachy-mini-openshell - -USER sandbox - -CMD ["python3", "-m", "reachy_openshell.backend", "--host", "127.0.0.1", "--port", "8080"] diff --git a/projects/reachy-mini-openshell/LICENSE b/projects/reachy-mini-openshell/LICENSE new file mode 100644 index 00000000..261eeb9e --- /dev/null +++ b/projects/reachy-mini-openshell/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/projects/reachy-mini-openshell/Makefile b/projects/reachy-mini-openshell/Makefile deleted file mode 100644 index ce34839a..00000000 --- a/projects/reachy-mini-openshell/Makefile +++ /dev/null @@ -1,22 +0,0 @@ -UV ?= uv -PYTHON ?= python3 - -.PHONY: install install-backend install-sim sim smoke backend - -install: - $(UV) pip install -e ".[backend,sdk]" - -install-backend: - $(UV) pip install -e ".[backend]" - -install-sim: - $(UV) pip install -e ".[backend,sim]" - -sim: - reachy-mini-daemon --sim --scene $${REACHY_SCENE:-minimal} - -smoke: - $(PYTHON) -m reachy_openshell.smoke - -backend: - $(PYTHON) -m reachy_openshell.backend diff --git a/projects/reachy-mini-openshell/README.md b/projects/reachy-mini-openshell/README.md index 9dfae05f..de3e35db 100644 --- a/projects/reachy-mini-openshell/README.md +++ b/projects/reachy-mini-openshell/README.md @@ -1,101 +1,53 @@ -# Reachy Mini OpenShell Research +--- +title: Reachy OpenShell +emoji: 🤖 +colorFrom: purple +colorTo: gray +sdk: static +pinned: false +tags: + - reachy_mini + - reachy_mini_python_app +--- -Minimal research scaffold for running a Reachy Mini backend inside an OpenShell sandbox while starting against the Reachy Mini MuJoCo simulator. +# Reachy OpenShell -## Current Shape +Reachy OpenShell is a locked-profile fork of the Reachy Mini conversation app +for OpenShell research. -- Host process: runs `reachy-mini-daemon --sim`, which starts the simulator and exposes the daemon API on port `8000`. -- OpenShell process: runs this backend in a sandbox and connects to the host daemon through `host.openshell.internal:8000`. -- First backend surface: `GET /health` for daemon reachability and `POST /moves/smoke` for a small head/antenna motion. -- Default SDK media mode: `no_media`, so the motion-only smoke path does not require camera, audio, or WebRTC access. +## Customize -## Local Simulator Quickstart +The app is locked to: -Prerequisites: - -- `uv` -- Python 3.10-3.12. Python 3.12 is recommended by the Reachy Mini docs and used below. -- On Linux, install the Reachy Mini GStreamer prerequisites before installing the SDK. The upstream guide lists the full package set and notes that Ubuntu 22.04 needs newer GStreamer packages. - -```bash -cd projects/reachy-mini-openshell -uv venv --python 3.12 -source .venv/bin/activate -uv pip install -e ".[backend,sim]" -``` - -Start the simulator: - -```bash -reachy-mini-daemon --sim --scene minimal -``` - -In another terminal: - -```bash -source .venv/bin/activate -python -m reachy_openshell.smoke -python -m reachy_openshell.backend +```text +src/reachy_mini_conversation_app/profiles/_reachy_mini_conversation_app_locked_profile ``` -Then probe the backend: +That folder is the customization surface: -```bash -curl http://127.0.0.1:8080/health -curl -X POST http://127.0.0.1:8080/moves/smoke -``` - -On macOS, the Reachy docs recommend launching the simulator with `mjpython` instead: - -```bash -mjpython -m reachy_mini.daemon.app.main --sim -``` +- `instructions.txt`: system prompt for the assistant +- `tools.txt`: explicit tool allow-list +- Python files in that folder: profile-local tools -## OpenShell Sandbox Path +## Run Locally -For the sandboxed backend to reach a host-level simulator, bind the Reachy daemon to an interface visible from containers: +Start the Reachy Mini daemon first. For the simulator baseline: ```bash -reachy-mini-daemon --sim --scene minimal --fastapi-host 0.0.0.0 --fastapi-port 8000 +reachy-mini-daemon --sim --scene minimal --headless --no-media --fastapi-host 127.0.0.1 --fastapi-port 8000 --dataset-update-interval 0 ``` -If your installed daemon exposes different flag names, check `reachy-mini-daemon --help`; the important part is that the daemon is reachable from the sandbox at `host.openshell.internal:8000`. - -Build and run the backend in OpenShell: +Then run the conversation app: ```bash -openshell status -openshell sandbox create \ - --name reachy-mini-backend \ - --from . \ - --policy openshell/policy.local-sim.yaml \ - --env REACHY_HOST=host.openshell.internal \ - --env REACHY_PORT=8000 \ - --env REACHY_CONNECTION_MODE=network \ - --env REACHY_MEDIA_BACKEND=no_media \ - -- python3 -m reachy_openshell.backend --host 127.0.0.1 --port 8080 +python -m reachy_mini_conversation_app --gradio --no-camera ``` -Expose the backend service: +The app also installs a console script: ```bash -openshell service expose reachy-mini-backend 8080 +reachy-mini-conversation-app --gradio --no-camera ``` -The sandbox image installs the Linux system packages needed by the Reachy SDK before installing the Python package. - -## Layout - -- `src/reachy_openshell/smoke.py`: SDK smoke motion for the simulator or a real robot daemon. -- `src/reachy_openshell/backend.py`: small FastAPI backend for health checks and the smoke motion. -- `openshell/policy.local-sim.yaml`: starter OpenShell policy allowing Python to reach the host simulator daemon. -- `Dockerfile`: OpenShell sandbox image for the backend, based on the OpenShell community base sandbox. - -## References - -- Reachy Mini simulator setup: https://huggingface.co/docs/reachy_mini/en/platforms/simulation/get_started -- Reachy Mini Linux GStreamer prerequisites: https://huggingface.co/docs/reachy_mini/en/SDK/gstreamer-installation -- Reachy Mini SDK API: https://huggingface.co/docs/reachy_mini/en/API/reachymini -- OpenShell overview: https://docs.nvidia.com/openshell/about/overview -- OpenShell sandbox management: https://docs.nvidia.com/openshell/sandboxes/manage-sandboxes -- OpenShell policy reference: https://docs.nvidia.com/openshell/reference/policy-schema +Simulation mode auto-enables Gradio; `--gradio` is included here so the expected +browser interface is explicit. diff --git a/projects/reachy-mini-openshell/docs/research-plan.md b/projects/reachy-mini-openshell/docs/research-plan.md deleted file mode 100644 index 6e06d210..00000000 --- a/projects/reachy-mini-openshell/docs/research-plan.md +++ /dev/null @@ -1,30 +0,0 @@ -# Research Plan - -## Working Hypothesis - -Keep the simulator on the host for the first spike so MuJoCo can open its viewer normally. Run only the backend in OpenShell. The sandbox reaches the host daemon through `host.openshell.internal:8000`, using a narrow OpenShell network policy. - -## Phase 0: Simulator Bootstrap - -- Install `reachy-mini[mujoco]` locally. -- Start `reachy-mini-daemon --sim --scene minimal`. -- Verify the Python SDK can connect and run the smoke motion. - -## Phase 1: Sandboxed Backend - -- Build the local OpenShell sandbox image from `Dockerfile`. -- Run `python3 -m reachy_openshell.backend` inside the sandbox. -- Confirm `GET /health` reaches the simulator daemon. -- Confirm `POST /moves/smoke` moves the simulated robot. - -## Phase 2: Policy Tightening - -- Capture the exact daemon traffic used by the SDK. -- Replace the current L4 passthrough policy with REST and WebSocket rules if the daemon API remains stable enough. -- Decide whether PyPI access is needed at runtime or only at image build time. - -## Open Questions - -- Should the simulator stay host-side for development, or should a headless simulator move into its own OpenShell sandbox later? -- Which daemon bind flags are stable across Reachy Mini SDK versions and operating systems? -- Do audio and camera paths need to be disabled or mocked for OpenShell-based backend tests? diff --git a/projects/reachy-mini-openshell/index.html b/projects/reachy-mini-openshell/index.html new file mode 100644 index 00000000..d241f1fc --- /dev/null +++ b/projects/reachy-mini-openshell/index.html @@ -0,0 +1,42 @@ + + + + + + Reachy OpenShell + + + +
+
+
+
Reachy Mini App
+

Reachy OpenShell

+

A conversation app for Reachy Mini robot.

+
+ +
+
+
+

Getting Started

+

Installation

+
+
+

Install this app on your Reachy Mini using the app store, or run it locally:

+
uv sync
+reachy-mini-daemon --sim --scene minimal --headless --no-media
+python -m reachy_mini_conversation_app --gradio --no-camera
+
+ +
+
+
+

Configuration

+

OpenAI API Key

+
+
+

This app requires an OpenAI API key for voice conversations. Set it via the web interface or environment variable.

+
+
+ + diff --git a/projects/reachy-mini-openshell/openshell/policy.local-sim.yaml b/projects/reachy-mini-openshell/openshell/policy.local-sim.yaml deleted file mode 100644 index 2eb80b63..00000000 --- a/projects/reachy-mini-openshell/openshell/policy.local-sim.yaml +++ /dev/null @@ -1,33 +0,0 @@ -version: 1 - -filesystem_policy: - include_workdir: true - read_only: - - /usr - - /lib - - /lib64 - - /etc - - /bin - - /sbin - - /opt - read_write: - - /sandbox - - /tmp - -landlock: - compatibility: best_effort - -process: - run_as_user: sandbox - run_as_group: sandbox - -network_policies: - reachy_daemon: - name: reachy-daemon-local-simulator - endpoints: - - host: host.openshell.internal - port: 8000 - binaries: - - path: /usr/bin/python* - - path: /usr/local/bin/python* - - path: /opt/reachy-mini-openshell/bin/python* diff --git a/projects/reachy-mini-openshell/pyproject.toml b/projects/reachy-mini-openshell/pyproject.toml index 07029d0c..6ddc6313 100644 --- a/projects/reachy-mini-openshell/pyproject.toml +++ b/projects/reachy-mini-openshell/pyproject.toml @@ -1,33 +1,71 @@ [build-system] -requires = ["hatchling>=1.25"] -build-backend = "hatchling.build" +requires = [ "setuptools",] +build-backend = "setuptools.build_meta" [project] -name = "reachy-mini-openshell" -version = "0.1.0" -description = "Research scaffold for running a Reachy Mini backend in OpenShell against a Reachy Mini simulator." +name = "reachy_mini_conversation_app" +version = "0.3.0" +description = "OpenShell-oriented fork of the Reachy Mini conversation app." readme = "README.md" requires-python = ">=3.10" -dependencies = [] +dependencies = [ "aiortc>=1.13.0", "fastrtc>=0.0.34", "gradio==5.50.1.dev1", "huggingface-hub==1.3.0", "opencv-python>=4.12.0.88", "python-dotenv", "openai>=2.1", "reachy_mini_dances_library", "reachy_mini_toolbox", "reachy-mini>=1.5.0", "eclipse-zenoh~=1.7.0", "gradio_client>=1.13.3",] +[[project.authors]] +name = "Pollen Robotics" +email = "contact@pollen-robotics.com" + +[dependency-groups] +dev = [ "pytest", "pytest-asyncio", "ruff==0.12.0", "mypy==1.18.2", "pre-commit", "types-requests", "python-semantic-release>=10.5.3",] [project.optional-dependencies] -backend = [ - "fastapi>=0.115,<1", - "uvicorn[standard]>=0.30,<1", -] -sdk = [ - "reachy-mini>=1.8.3,<2", -] -sim = [ - "reachy-mini[mujoco]>=1.8.3,<2", -] -dev = [ - "ruff>=0.8,<1", -] +local_vision = [ "torch>=2.1", "transformers==5.0.0rc2", "num2words",] +yolo_vision = [ "ultralytics", "supervision",] +mediapipe_vision = [ "mediapipe==0.10.14",] +all_vision = [ "torch>=2.1", "transformers==5.0.0rc2", "num2words", "ultralytics", "supervision", "mediapipe==0.10.14",] [project.scripts] -reachy-backend = "reachy_openshell.backend:main" -reachy-smoke = "reachy_openshell.smoke:main" +reachy-mini-conversation-app = "reachy_mini_conversation_app.main:main" + +[tool.setuptools] +include-package-data = true + +[tool.ruff] +line-length = 119 +exclude = [ ".venv", "dist", "build", "**/__pycache__", "*.egg-info", ".mypy_cache", ".pytest_cache",] + +[tool.mypy] +python_version = "3.12" +files = [ "src/",] +ignore_missing_imports = true +strict = true +show_error_codes = true +warn_unused_ignores = true + +[project.entry-points.reachy_mini_apps] +reachy_mini_conversation_app = "reachy_mini_conversation_app.main:ReachyMiniConversationApp" + +[tool.setuptools.package-dir] +"" = "src" + +[tool.setuptools.package-data] +reachy_mini_conversation_app = [ "images/*", "static/*", "profiles/**/*.py", "profiles/**/*.txt",] + +[tool.ruff.lint] +select = [ "E", "F", "W", "I", "C4", "D",] +ignore = [ "E501", "D100", "D203", "D213",] + +[tool.ruff.format] +quote-style = "double" +indent-style = "space" +skip-magic-trailing-comma = false +line-ending = "auto" + +[tool.setuptools.packages.find] +where = [ "src",] -[tool.hatch.build.targets.wheel] -packages = ["src/reachy_openshell"] +[tool.ruff.lint.isort] +length-sort = true +lines-after-imports = 2 +no-lines-before = [ "standard-library", "local-folder",] +known-local-folder = [ "reachy_mini_conversation_app",] +known-first-party = [ "reachy_mini", "reachy_mini_dances_library", "reachy_mini_toolbox",] +split-on-trailing-comma = true diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/__init__.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/__init__.py new file mode 100644 index 00000000..60dc15c4 --- /dev/null +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/__init__.py @@ -0,0 +1 @@ +"""Nothing (for ruff).""" diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/__main__.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/__main__.py new file mode 100644 index 00000000..e5091e7b --- /dev/null +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/__main__.py @@ -0,0 +1,5 @@ +from reachy_mini_conversation_app.main import main + + +if __name__ == "__main__": + main() diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/audio/__init__.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/audio/__init__.py new file mode 100644 index 00000000..60dc15c4 --- /dev/null +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/audio/__init__.py @@ -0,0 +1 @@ +"""Nothing (for ruff).""" diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/audio/head_wobbler.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/audio/head_wobbler.py new file mode 100644 index 00000000..805d1cdb --- /dev/null +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/audio/head_wobbler.py @@ -0,0 +1,181 @@ +"""Moves head given audio samples.""" + +import time +import queue +import base64 +import logging +import threading +from typing import Tuple +from collections.abc import Callable + +import numpy as np +from numpy.typing import NDArray + +from reachy_mini_conversation_app.audio.speech_tapper import HOP_MS, SwayRollRT + + +SAMPLE_RATE = 24000 +MOVEMENT_LATENCY_S = 0.2 # seconds between audio and robot movement +logger = logging.getLogger(__name__) + + +class HeadWobbler: + """Converts audio deltas (base64) into head movement offsets.""" + + def __init__(self, set_speech_offsets: Callable[[Tuple[float, float, float, float, float, float]], None]) -> None: + """Initialize the head wobbler.""" + self._apply_offsets = set_speech_offsets + self._base_ts: float | None = None + self._hops_done: int = 0 + + self.audio_queue: "queue.Queue[Tuple[int, int, NDArray[np.int16]]]" = queue.Queue() + self.sway = SwayRollRT() + + # Synchronization primitives + self._state_lock = threading.Lock() + self._sway_lock = threading.Lock() + self._generation = 0 + + self._stop_event = threading.Event() + self._thread: threading.Thread | None = None + + def feed(self, delta_b64: str) -> None: + """Thread-safe: push audio into the consumer queue.""" + buf = np.frombuffer(base64.b64decode(delta_b64), dtype=np.int16).reshape(1, -1) + with self._state_lock: + generation = self._generation + self.audio_queue.put((generation, SAMPLE_RATE, buf)) + + def start(self) -> None: + """Start the head wobbler loop in a thread.""" + self._stop_event.clear() + self._thread = threading.Thread(target=self.working_loop, daemon=True) + self._thread.start() + logger.debug("Head wobbler started") + + def stop(self) -> None: + """Stop the head wobbler loop.""" + self._stop_event.set() + if self._thread is not None: + self._thread.join() + logger.debug("Head wobbler stopped") + + def working_loop(self) -> None: + """Convert audio deltas into head movement offsets.""" + hop_dt = HOP_MS / 1000.0 + + logger.debug("Head wobbler thread started") + while not self._stop_event.is_set(): + queue_ref = self.audio_queue + try: + chunk_generation, sr, chunk = queue_ref.get_nowait() # (gen, sr, data) + except queue.Empty: + # avoid while to never exit + time.sleep(MOVEMENT_LATENCY_S) + continue + + try: + with self._state_lock: + current_generation = self._generation + if chunk_generation != current_generation: + continue + + if self._base_ts is None: + with self._state_lock: + if self._base_ts is None: + self._base_ts = time.monotonic() + + pcm = np.asarray(chunk).squeeze(0) + with self._sway_lock: + results = self.sway.feed(pcm, sr) + + i = 0 + while i < len(results): + with self._state_lock: + if self._generation != current_generation: + break + base_ts = self._base_ts + hops_done = self._hops_done + + if base_ts is None: + base_ts = time.monotonic() + with self._state_lock: + if self._base_ts is None: + self._base_ts = base_ts + hops_done = self._hops_done + + target = base_ts + MOVEMENT_LATENCY_S + hops_done * hop_dt + now = time.monotonic() + + if now - target >= hop_dt: + lag_hops = int((now - target) / hop_dt) + drop = min(lag_hops, len(results) - i - 1) + if drop > 0: + with self._state_lock: + self._hops_done += drop + hops_done = self._hops_done + i += drop + continue + + if target > now: + time.sleep(target - now) + with self._state_lock: + if self._generation != current_generation: + break + + r = results[i] + offsets = ( + r["x_mm"] / 1000.0, + r["y_mm"] / 1000.0, + r["z_mm"] / 1000.0, + r["roll_rad"], + r["pitch_rad"], + r["yaw_rad"], + ) + + with self._state_lock: + if self._generation != current_generation: + break + + self._apply_offsets(offsets) + + with self._state_lock: + self._hops_done += 1 + i += 1 + finally: + queue_ref.task_done() + logger.debug("Head wobbler thread exited") + + ''' + def drain_audio_queue(self) -> None: + """Empty the audio queue.""" + try: + while True: + self.audio_queue.get_nowait() + except QueueEmpty: + pass + ''' + + def reset(self) -> None: + """Reset the internal state.""" + with self._state_lock: + self._generation += 1 + self._base_ts = None + self._hops_done = 0 + + # Drain any queued audio chunks from previous generations + drained_any = False + while True: + try: + _, _, _ = self.audio_queue.get_nowait() + except queue.Empty: + break + else: + drained_any = True + self.audio_queue.task_done() + + with self._sway_lock: + self.sway.reset() + + if drained_any: + logger.debug("Head wobbler queue drained during reset") diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/audio/speech_tapper.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/audio/speech_tapper.py new file mode 100644 index 00000000..3f4a2f16 --- /dev/null +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/audio/speech_tapper.py @@ -0,0 +1,268 @@ +from __future__ import annotations +import math +from typing import Any, Dict, List +from itertools import islice +from collections import deque + +import numpy as np +from numpy.typing import NDArray + + +# Tunables +SR = 16_000 +FRAME_MS = 20 +HOP_MS = 50 + +SWAY_MASTER = 1.5 +SENS_DB_OFFSET = +4.0 +VAD_DB_ON = -35.0 +VAD_DB_OFF = -45.0 +VAD_ATTACK_MS = 40 +VAD_RELEASE_MS = 250 +ENV_FOLLOW_GAIN = 0.65 + +SWAY_F_PITCH = 2.2 +SWAY_A_PITCH_DEG = 4.5 +SWAY_F_YAW = 0.6 +SWAY_A_YAW_DEG = 7.5 +SWAY_F_ROLL = 1.3 +SWAY_A_ROLL_DEG = 2.25 +SWAY_F_X = 0.35 +SWAY_A_X_MM = 4.5 +SWAY_F_Y = 0.45 +SWAY_A_Y_MM = 3.75 +SWAY_F_Z = 0.25 +SWAY_A_Z_MM = 2.25 + +SWAY_DB_LOW = -46.0 +SWAY_DB_HIGH = -18.0 +LOUDNESS_GAMMA = 0.9 +SWAY_ATTACK_MS = 50 +SWAY_RELEASE_MS = 250 + +# Derived +FRAME = int(SR * FRAME_MS / 1000) +HOP = int(SR * HOP_MS / 1000) +ATTACK_FR = max(1, int(VAD_ATTACK_MS / HOP_MS)) +RELEASE_FR = max(1, int(VAD_RELEASE_MS / HOP_MS)) +SWAY_ATTACK_FR = max(1, int(SWAY_ATTACK_MS / HOP_MS)) +SWAY_RELEASE_FR = max(1, int(SWAY_RELEASE_MS / HOP_MS)) + + +def _rms_dbfs(x: NDArray[np.float32]) -> float: + """Root-mean-square in dBFS for float32 mono array in [-1,1].""" + # numerically stable rms (avoid overflow) + x = x.astype(np.float32, copy=False) + rms = np.sqrt(np.mean(x * x, dtype=np.float32) + 1e-12, dtype=np.float32) + return float(20.0 * math.log10(float(rms) + 1e-12)) + + +def _loudness_gain(db: float, offset: float = SENS_DB_OFFSET) -> float: + """Normalize dB into [0,1] with gamma; clipped to [0,1].""" + t = (db + offset - SWAY_DB_LOW) / (SWAY_DB_HIGH - SWAY_DB_LOW) + if t < 0.0: + t = 0.0 + elif t > 1.0: + t = 1.0 + return t**LOUDNESS_GAMMA if LOUDNESS_GAMMA != 1.0 else t + + +def _to_float32_mono(x: NDArray[Any]) -> NDArray[np.float32]: + """Convert arbitrary PCM array to float32 mono in [-1,1]. + + Accepts shapes: (N,), (1,N), (N,1), (C,N), (N,C). + """ + a = np.asarray(x) + if a.ndim == 0: + return np.zeros(0, dtype=np.float32) + + # If 2D, decide which axis is channels (prefer small first dim) + if a.ndim == 2: + # e.g., (channels, samples) if channels is small (<=8) + if a.shape[0] <= 8 and a.shape[0] <= a.shape[1]: + a = np.mean(a, axis=0) + else: + a = np.mean(a, axis=1) + elif a.ndim > 2: + a = np.mean(a.reshape(a.shape[0], -1), axis=0) + + # Now 1D, cast/scale + if np.issubdtype(a.dtype, np.floating): + return a.astype(np.float32, copy=False) + # integer PCM + info = np.iinfo(a.dtype) + scale = float(max(-info.min, info.max)) + return a.astype(np.float32) / (scale if scale != 0.0 else 1.0) + + +def _resample_linear(x: NDArray[np.float32], sr_in: int, sr_out: int) -> NDArray[np.float32]: + """Lightweight linear resampler for short buffers.""" + if sr_in == sr_out or x.size == 0: + return x + # guard tiny sizes + n_out = int(round(x.size * sr_out / sr_in)) + if n_out <= 1: + return np.zeros(0, dtype=np.float32) + t_in = np.linspace(0.0, 1.0, num=x.size, dtype=np.float32, endpoint=True) + t_out = np.linspace(0.0, 1.0, num=n_out, dtype=np.float32, endpoint=True) + return np.interp(t_out, t_in, x).astype(np.float32, copy=False) + + +class SwayRollRT: + """Feed audio chunks → per-hop sway outputs. + + Usage: + rt = SwayRollRT() + rt.feed(pcm_int16_or_float, sr) -> List[dict] + """ + + def __init__(self, rng_seed: int = 7): + """Initialize state.""" + self._seed = int(rng_seed) + self.samples: deque[float] = deque(maxlen=10 * SR) # sliding window for VAD/env + self.carry: NDArray[np.float32] = np.zeros(0, dtype=np.float32) + + self.vad_on = False + self.vad_above = 0 + self.vad_below = 0 + + self.sway_env = 0.0 + self.sway_up = 0 + self.sway_down = 0 + + rng = np.random.default_rng(self._seed) + self.phase_pitch = float(rng.random() * 2 * math.pi) + self.phase_yaw = float(rng.random() * 2 * math.pi) + self.phase_roll = float(rng.random() * 2 * math.pi) + self.phase_x = float(rng.random() * 2 * math.pi) + self.phase_y = float(rng.random() * 2 * math.pi) + self.phase_z = float(rng.random() * 2 * math.pi) + self.t = 0.0 + + def reset(self) -> None: + """Reset state (VAD/env/buffers/time) but keep initial phases/seed.""" + self.samples.clear() + self.carry = np.zeros(0, dtype=np.float32) + self.vad_on = False + self.vad_above = 0 + self.vad_below = 0 + self.sway_env = 0.0 + self.sway_up = 0 + self.sway_down = 0 + self.t = 0.0 + + def feed(self, pcm: NDArray[Any], sr: int | None) -> List[Dict[str, float]]: + """Stream in PCM chunk. Returns a list of sway dicts, one per hop (HOP_MS). + + Args: + pcm: np.ndarray, shape (N,) or (C,N)/(N,C); int or float. + sr: sample rate of `pcm` (None -> assume SR). + + """ + sr_in = SR if sr is None else int(sr) + x = _to_float32_mono(pcm) + if x.size == 0: + return [] + if sr_in != SR: + x = _resample_linear(x, sr_in, SR) + if x.size == 0: + return [] + + # append to carry and consume fixed HOP chunks + if self.carry.size: + self.carry = np.concatenate([self.carry, x]) + else: + self.carry = x + + out: List[Dict[str, float]] = [] + + while self.carry.size >= HOP: + hop = self.carry[:HOP] + remaining: NDArray[np.float32] = self.carry[HOP:] + self.carry = remaining + + # keep sliding window for VAD/env computation + # (deque accepts any iterable; list() for small HOP is fine) + self.samples.extend(hop.tolist()) + if len(self.samples) < FRAME: + self.t += HOP_MS / 1000.0 + continue + + frame = np.fromiter( + islice(self.samples, len(self.samples) - FRAME, len(self.samples)), + dtype=np.float32, + count=FRAME, + ) + db = _rms_dbfs(frame) + + # VAD with hysteresis + attack/release + if db >= VAD_DB_ON: + self.vad_above += 1 + self.vad_below = 0 + if not self.vad_on and self.vad_above >= ATTACK_FR: + self.vad_on = True + elif db <= VAD_DB_OFF: + self.vad_below += 1 + self.vad_above = 0 + if self.vad_on and self.vad_below >= RELEASE_FR: + self.vad_on = False + + if self.vad_on: + self.sway_up = min(SWAY_ATTACK_FR, self.sway_up + 1) + self.sway_down = 0 + else: + self.sway_down = min(SWAY_RELEASE_FR, self.sway_down + 1) + self.sway_up = 0 + + up = self.sway_up / SWAY_ATTACK_FR + down = 1.0 - (self.sway_down / SWAY_RELEASE_FR) + target = up if self.vad_on else down + self.sway_env += ENV_FOLLOW_GAIN * (target - self.sway_env) + # clamp + if self.sway_env < 0.0: + self.sway_env = 0.0 + elif self.sway_env > 1.0: + self.sway_env = 1.0 + + loud = _loudness_gain(db) * SWAY_MASTER + env = self.sway_env + self.t += HOP_MS / 1000.0 + + # oscillators + pitch = ( + math.radians(SWAY_A_PITCH_DEG) + * loud + * env + * math.sin(2 * math.pi * SWAY_F_PITCH * self.t + self.phase_pitch) + ) + yaw = ( + math.radians(SWAY_A_YAW_DEG) + * loud + * env + * math.sin(2 * math.pi * SWAY_F_YAW * self.t + self.phase_yaw) + ) + roll = ( + math.radians(SWAY_A_ROLL_DEG) + * loud + * env + * math.sin(2 * math.pi * SWAY_F_ROLL * self.t + self.phase_roll) + ) + x_mm = SWAY_A_X_MM * loud * env * math.sin(2 * math.pi * SWAY_F_X * self.t + self.phase_x) + y_mm = SWAY_A_Y_MM * loud * env * math.sin(2 * math.pi * SWAY_F_Y * self.t + self.phase_y) + z_mm = SWAY_A_Z_MM * loud * env * math.sin(2 * math.pi * SWAY_F_Z * self.t + self.phase_z) + + out.append( + { + "pitch_rad": pitch, + "yaw_rad": yaw, + "roll_rad": roll, + "pitch_deg": math.degrees(pitch), + "yaw_deg": math.degrees(yaw), + "roll_deg": math.degrees(roll), + "x_mm": x_mm, + "y_mm": y_mm, + "z_mm": z_mm, + }, + ) + + return out diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/camera_worker.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/camera_worker.py new file mode 100644 index 00000000..e625c009 --- /dev/null +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/camera_worker.py @@ -0,0 +1,241 @@ +"""Camera worker thread with frame buffering and face tracking. + +Ported from main_works.py camera_worker() function to provide: +- 30Hz+ camera polling with thread-safe frame buffering +- Face tracking integration with smooth interpolation +- Latest frame always available for tools +""" + +import time +import logging +import threading +from typing import Any, List, Tuple + +import numpy as np +from numpy.typing import NDArray +from scipy.spatial.transform import Rotation as R + +from reachy_mini import ReachyMini +from reachy_mini.utils.interpolation import linear_pose_interpolation + + +logger = logging.getLogger(__name__) + + +class CameraWorker: + """Thread-safe camera worker with frame buffering and face tracking.""" + + def __init__(self, reachy_mini: ReachyMini, head_tracker: Any = None) -> None: + """Initialize.""" + self.reachy_mini = reachy_mini + self.head_tracker = head_tracker + + # Thread-safe frame storage + self.latest_frame: NDArray[np.uint8] | None = None + self.frame_lock = threading.Lock() + self._stop_event = threading.Event() + self._thread: threading.Thread | None = None + + # Face tracking state + self.is_head_tracking_enabled = True + self.face_tracking_offsets: List[float] = [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + ] # x, y, z, roll, pitch, yaw + self.face_tracking_lock = threading.Lock() + + # Face tracking timing variables (same as main_works.py) + self.last_face_detected_time: float | None = None + self.interpolation_start_time: float | None = None + self.interpolation_start_pose: NDArray[np.float32] | None = None + self.face_lost_delay = 2.0 # seconds to wait before starting interpolation + self.interpolation_duration = 1.0 # seconds to interpolate back to neutral + + # Track state changes + self.previous_head_tracking_state = self.is_head_tracking_enabled + + def get_latest_frame(self) -> NDArray[np.uint8] | None: + """Get the latest frame (thread-safe).""" + with self.frame_lock: + if self.latest_frame is None: + return None + # Return a copy in original BGR format (OpenCV native) + return self.latest_frame.copy() + + def get_face_tracking_offsets( + self, + ) -> Tuple[float, float, float, float, float, float]: + """Get current face tracking offsets (thread-safe).""" + with self.face_tracking_lock: + offsets = self.face_tracking_offsets + return (offsets[0], offsets[1], offsets[2], offsets[3], offsets[4], offsets[5]) + + def set_head_tracking_enabled(self, enabled: bool) -> None: + """Enable/disable head tracking.""" + self.is_head_tracking_enabled = enabled + logger.info(f"Head tracking {'enabled' if enabled else 'disabled'}") + + def start(self) -> None: + """Start the camera worker loop in a thread.""" + self._stop_event.clear() + self._thread = threading.Thread(target=self.working_loop, daemon=True) + self._thread.start() + logger.debug("Camera worker started") + + def stop(self) -> None: + """Stop the camera worker loop.""" + self._stop_event.set() + if self._thread is not None: + self._thread.join() + + logger.debug("Camera worker stopped") + + def working_loop(self) -> None: + """Enable the camera worker loop. + + Ported from main_works.py camera_worker() with same logic. + """ + logger.debug("Starting camera working loop") + + # Initialize head tracker if available + neutral_pose = np.eye(4) # Neutral pose (identity matrix) + self.previous_head_tracking_state = self.is_head_tracking_enabled + + while not self._stop_event.is_set(): + try: + current_time = time.time() + + # Get frame from robot + frame = self.reachy_mini.media.get_frame() + + if frame is not None: + # Thread-safe frame storage + with self.frame_lock: + self.latest_frame = frame # .copy() + + # Check if face tracking was just disabled + if self.previous_head_tracking_state and not self.is_head_tracking_enabled: + # Face tracking was just disabled - start interpolation to neutral + self.last_face_detected_time = current_time # Trigger the face-lost logic + self.interpolation_start_time = None # Will be set by the face-lost interpolation + self.interpolation_start_pose = None + + # Update tracking state + self.previous_head_tracking_state = self.is_head_tracking_enabled + + # Handle face tracking if enabled and head tracker available + if self.is_head_tracking_enabled and self.head_tracker is not None: + eye_center, _ = self.head_tracker.get_head_position(frame) + + if eye_center is not None: + # Face detected - immediately switch to tracking + self.last_face_detected_time = current_time + self.interpolation_start_time = None # Stop any interpolation + + # Convert normalized coordinates to pixel coordinates + h, w, _ = frame.shape + eye_center_norm = (eye_center + 1) / 2 + eye_center_pixels = [ + eye_center_norm[0] * w, + eye_center_norm[1] * h, + ] + + # Get the head pose needed to look at the target, but don't perform movement + target_pose = self.reachy_mini.look_at_image( + eye_center_pixels[0], + eye_center_pixels[1], + duration=0.0, + perform_movement=False, + ) + + # Extract translation and rotation from the target pose directly + translation = target_pose[:3, 3] + rotation = R.from_matrix(target_pose[:3, :3]).as_euler("xyz", degrees=False) + + # Scale down translation and rotation because smaller FOV + translation *= 0.6 + rotation *= 0.6 + + # Thread-safe update of face tracking offsets (use pose as-is) + with self.face_tracking_lock: + self.face_tracking_offsets = [ + translation[0], + translation[1], + translation[2], # x, y, z + rotation[0], + rotation[1], + rotation[2], # roll, pitch, yaw + ] + + # No face detected while tracking enabled - set face lost timestamp + elif self.last_face_detected_time is None or self.last_face_detected_time == current_time: + # Only update if we haven't already set a face lost time + # (current_time check prevents overriding the disable-triggered timestamp) + pass + + # Handle smooth interpolation (works for both face-lost and tracking-disabled cases) + if self.last_face_detected_time is not None: + time_since_face_lost = current_time - self.last_face_detected_time + + if time_since_face_lost >= self.face_lost_delay: + # Start interpolation if not already started + if self.interpolation_start_time is None: + self.interpolation_start_time = current_time + # Capture current pose as start of interpolation + with self.face_tracking_lock: + current_translation = self.face_tracking_offsets[:3] + current_rotation_euler = self.face_tracking_offsets[3:] + # Convert to 4x4 pose matrix + pose_matrix = np.eye(4, dtype=np.float32) + pose_matrix[:3, 3] = current_translation + pose_matrix[:3, :3] = R.from_euler( + "xyz", + current_rotation_euler, + ).as_matrix() + self.interpolation_start_pose = pose_matrix + + # Calculate interpolation progress (t from 0 to 1) + elapsed_interpolation = current_time - self.interpolation_start_time + t = min(1.0, elapsed_interpolation / self.interpolation_duration) + + # Interpolate between current pose and neutral pose + interpolated_pose = linear_pose_interpolation( + self.interpolation_start_pose, + neutral_pose, + t, + ) + + # Extract translation and rotation from interpolated pose + translation = interpolated_pose[:3, 3] + rotation = R.from_matrix(interpolated_pose[:3, :3]).as_euler("xyz", degrees=False) + + # Thread-safe update of face tracking offsets + with self.face_tracking_lock: + self.face_tracking_offsets = [ + translation[0], + translation[1], + translation[2], # x, y, z + rotation[0], + rotation[1], + rotation[2], # roll, pitch, yaw + ] + + # If interpolation is complete, reset timing + if t >= 1.0: + self.last_face_detected_time = None + self.interpolation_start_time = None + self.interpolation_start_pose = None + # else: Keep current offsets (within 2s delay period) + + # Small sleep to prevent excessive CPU usage (same as main_works.py) + time.sleep(0.04) + + except Exception as e: + logger.error(f"Camera worker error: {e}") + time.sleep(0.1) # Longer sleep on error + + logger.debug("Camera worker thread exited") diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/config.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/config.py new file mode 100644 index 00000000..fe10c9fd --- /dev/null +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/config.py @@ -0,0 +1,73 @@ +import os +import sys +import logging +from pathlib import Path + +from dotenv import find_dotenv, load_dotenv + + +LOCKED_PROFILE = "_reachy_mini_conversation_app_locked_profile" +DEFAULT_PROFILES_DIRECTORY = Path(__file__).parent / "profiles" + +logger = logging.getLogger(__name__) + + +def _env_flag(name: str, default: bool = False) -> bool: + """Parse a boolean environment flag.""" + raw = os.getenv(name) + if raw is None: + return default + + value = raw.strip().lower() + if value in {"1", "true", "yes", "on"}: + return True + if value in {"0", "false", "no", "off"}: + return False + + logger.warning("Invalid boolean value for %s=%r, using default=%s", name, raw, default) + return default + + +_profile_path = DEFAULT_PROFILES_DIRECTORY / LOCKED_PROFILE +_instructions_file = _profile_path / "instructions.txt" +if not _profile_path.is_dir(): + print(f"Error: locked profile '{LOCKED_PROFILE}' does not exist in {DEFAULT_PROFILES_DIRECTORY}", file=sys.stderr) + sys.exit(1) +if not _instructions_file.is_file(): + print(f"Error: locked profile '{LOCKED_PROFILE}' has no instructions.txt", file=sys.stderr) + sys.exit(1) + +_skip_dotenv = _env_flag("REACHY_MINI_SKIP_DOTENV", default=False) + +if _skip_dotenv: + logger.info("Skipping .env loading because REACHY_MINI_SKIP_DOTENV is set") +else: + # Locate .env file (search upward from current working directory) + dotenv_path = find_dotenv(usecwd=True) + + if dotenv_path: + # Load .env and override environment variables + load_dotenv(dotenv_path=dotenv_path, override=True) + logger.info(f"Configuration loaded from {dotenv_path}") + else: + logger.warning("No .env file found, using environment variables") + + +class Config: + """Configuration class for the conversation app.""" + + OPENAI_API_KEY = os.getenv("OPENAI_API_KEY") + MODEL_NAME = os.getenv("MODEL_NAME", "gpt-realtime") + HF_HOME = os.getenv("HF_HOME", "./cache") + LOCAL_VISION_MODEL = os.getenv("LOCAL_VISION_MODEL", "HuggingFaceTB/SmolVLM2-2.2B-Instruct") + HF_TOKEN = os.getenv("HF_TOKEN") + + logger.debug(f"Model: {MODEL_NAME}, HF_HOME: {HF_HOME}, Vision Model: {LOCAL_VISION_MODEL}") + logger.debug(f"Locked profile: {LOCKED_PROFILE}") + + def __init__(self) -> None: + """Initialize the configuration.""" + logger.info("Using locked profile '%s' from %s", LOCKED_PROFILE, DEFAULT_PROFILES_DIRECTORY) + + +config = Config() diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/console.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/console.py new file mode 100644 index 00000000..57103578 --- /dev/null +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/console.py @@ -0,0 +1,419 @@ +"""Bidirectional local audio stream with optional settings UI. + +In headless mode, there is no Gradio UI. If the OpenAI API key is not +available via environment/.env, we expose a minimal settings page via the +Reachy Mini Apps settings server to let non-technical users enter it. + +The settings UI is served from this package's ``static/`` folder and offers a +single password field to set ``OPENAI_API_KEY``. Once set, we persist it to the +app instance's ``.env`` file (if available) and proceed to start streaming. +""" + +import os +import sys +import time +import asyncio +import logging +from typing import List, Optional +from pathlib import Path + +from fastrtc import AdditionalOutputs, audio_to_float32 +from scipy.signal import resample + +from reachy_mini import ReachyMini +from reachy_mini.media.media_manager import MediaBackend +from reachy_mini_conversation_app.config import config +from reachy_mini_conversation_app.openai_realtime import OpenaiRealtimeHandler + + +try: + # FastAPI is provided by the Reachy Mini Apps runtime + from fastapi import FastAPI, Response + from pydantic import BaseModel + from fastapi.responses import FileResponse, JSONResponse + from starlette.staticfiles import StaticFiles +except Exception: # pragma: no cover - only loaded when settings_app is used + FastAPI = object # type: ignore + FileResponse = object # type: ignore + JSONResponse = object # type: ignore + StaticFiles = object # type: ignore + BaseModel = object # type: ignore + + +logger = logging.getLogger(__name__) + + +class LocalStream: + """LocalStream using Reachy Mini's recorder/player.""" + + def __init__( + self, + handler: OpenaiRealtimeHandler, + robot: ReachyMini, + *, + settings_app: Optional[FastAPI] = None, + instance_path: Optional[str] = None, + ): + """Initialize the stream with an OpenAI realtime handler and pipelines. + + - ``settings_app``: the Reachy Mini Apps FastAPI to attach settings endpoints. + - ``instance_path``: directory where per-instance ``.env`` should be stored. + """ + self.handler = handler + self._robot = robot + self._stop_event = asyncio.Event() + self._tasks: List[asyncio.Task[None]] = [] + # Allow the handler to flush the player queue when appropriate. + self.handler._clear_queue = self.clear_audio_queue + self._settings_app: Optional[FastAPI] = settings_app + self._instance_path: Optional[str] = instance_path + self._settings_initialized = False + self._asyncio_loop = None + + # ---- Settings UI (only when API key is missing) ---- + def _read_env_lines(self, env_path: Path) -> list[str]: + """Load env file contents or a template as a list of lines.""" + inst = env_path.parent + try: + if env_path.exists(): + try: + return env_path.read_text(encoding="utf-8").splitlines() + except Exception: + return [] + template_text = None + ex = inst / ".env.example" + if ex.exists(): + try: + template_text = ex.read_text(encoding="utf-8") + except Exception: + template_text = None + if template_text is None: + try: + cwd_example = Path.cwd() / ".env.example" + if cwd_example.exists(): + template_text = cwd_example.read_text(encoding="utf-8") + except Exception: + template_text = None + if template_text is None: + packaged = Path(__file__).parent / ".env.example" + if packaged.exists(): + try: + template_text = packaged.read_text(encoding="utf-8") + except Exception: + template_text = None + return template_text.splitlines() if template_text else [] + except Exception: + return [] + + def _persist_api_key(self, key: str) -> None: + """Persist API key to environment and instance ``.env`` if possible. + + Behavior: + - Always sets ``OPENAI_API_KEY`` in process env and in-memory config. + - Writes/updates ``/.env``: + * If ``.env`` exists, replaces/append OPENAI_API_KEY line. + * Else, copies template from ``/.env.example`` when present, + otherwise falls back to the packaged template + ``reachy_mini_conversation_app/.env.example``. + * Ensures the resulting file contains the full template plus the key. + - Loads the written ``.env`` into the current process environment. + """ + k = (key or "").strip() + if not k: + return + # Update live process env and config so consumers see it immediately + try: + os.environ["OPENAI_API_KEY"] = k + except Exception: # best-effort + pass + try: + config.OPENAI_API_KEY = k + except Exception: + pass + + if not self._instance_path: + return + try: + inst = Path(self._instance_path) + env_path = inst / ".env" + lines = self._read_env_lines(env_path) + replaced = False + for i, ln in enumerate(lines): + if ln.strip().startswith("OPENAI_API_KEY="): + lines[i] = f"OPENAI_API_KEY={k}" + replaced = True + break + if not replaced: + lines.append(f"OPENAI_API_KEY={k}") + final_text = "\n".join(lines) + "\n" + env_path.write_text(final_text, encoding="utf-8") + logger.info("Persisted OPENAI_API_KEY to %s", env_path) + + # Load the newly written .env into this process to ensure downstream imports see it + try: + from dotenv import load_dotenv + + load_dotenv(dotenv_path=str(env_path), override=True) + except Exception: + pass + except Exception as e: + logger.warning("Failed to persist OPENAI_API_KEY: %s", e) + + def _init_settings_ui_if_needed(self) -> None: + """Attach minimal settings UI to the settings app. + + Always mounts the UI when a settings_app is provided so that users + see a confirmation message even if the API key is already configured. + """ + if self._settings_initialized: + return + if self._settings_app is None: + return + + static_dir = Path(__file__).parent / "static" + index_file = static_dir / "index.html" + + if hasattr(self._settings_app, "mount"): + try: + # Serve /static/* assets + self._settings_app.mount("/static", StaticFiles(directory=str(static_dir)), name="static") + except Exception: + pass + + class ApiKeyPayload(BaseModel): + openai_api_key: str + + # GET / -> index.html + @self._settings_app.get("/") + def _root() -> FileResponse: + return FileResponse(str(index_file)) + + # GET /favicon.ico -> optional, avoid noisy 404s on some browsers + @self._settings_app.get("/favicon.ico") + def _favicon() -> Response: + return Response(status_code=204) + + # GET /status -> whether key is set + @self._settings_app.get("/status") + def _status() -> JSONResponse: + has_key = bool(config.OPENAI_API_KEY and str(config.OPENAI_API_KEY).strip()) + return JSONResponse({"has_key": has_key}) + + # GET /ready -> whether backend finished loading tools + @self._settings_app.get("/ready") + def _ready() -> JSONResponse: + try: + mod = sys.modules.get("reachy_mini_conversation_app.tools.core_tools") + ready = bool(getattr(mod, "_TOOLS_INITIALIZED", False)) if mod else False + except Exception: + ready = False + return JSONResponse({"ready": ready}) + + # POST /openai_api_key -> set/persist key + @self._settings_app.post("/openai_api_key") + def _set_key(payload: ApiKeyPayload) -> JSONResponse: + key = (payload.openai_api_key or "").strip() + if not key: + return JSONResponse({"ok": False, "error": "empty_key"}, status_code=400) + self._persist_api_key(key) + return JSONResponse({"ok": True}) + + # POST /validate_api_key -> validate key without persisting it + @self._settings_app.post("/validate_api_key") + async def _validate_key(payload: ApiKeyPayload) -> JSONResponse: + key = (payload.openai_api_key or "").strip() + if not key: + return JSONResponse({"valid": False, "error": "empty_key"}, status_code=400) + + # Try to validate by checking if we can fetch the models + try: + import httpx + + headers = {"Authorization": f"Bearer {key}", "Content-Type": "application/json"} + async with httpx.AsyncClient(timeout=10.0) as client: + response = await client.get("https://api.openai.com/v1/models", headers=headers) + if response.status_code == 200: + return JSONResponse({"valid": True}) + elif response.status_code == 401: + return JSONResponse({"valid": False, "error": "invalid_api_key"}, status_code=401) + else: + return JSONResponse( + {"valid": False, "error": "validation_failed"}, status_code=response.status_code + ) + except Exception as e: + logger.warning(f"API key validation failed: {e}") + return JSONResponse({"valid": False, "error": "validation_error"}, status_code=500) + + self._settings_initialized = True + + def launch(self) -> None: + """Start the recorder/player and run the async processing loops. + + If the OpenAI key is missing, expose a tiny settings UI via the + Reachy Mini settings server to collect it before starting streams. + """ + self._stop_event.clear() + + # Try to load an existing instance .env first (covers subsequent runs) + if self._instance_path: + try: + from dotenv import load_dotenv + + env_path = Path(self._instance_path) / ".env" + if env_path.exists(): + load_dotenv(dotenv_path=str(env_path), override=True) + new_key = os.getenv("OPENAI_API_KEY", "").strip() + if new_key: + try: + config.OPENAI_API_KEY = new_key + except Exception: + pass + except Exception: + pass # Instance .env loading is optional; continue with defaults + + # If key is still missing, try to download one from HuggingFace + if not (config.OPENAI_API_KEY and str(config.OPENAI_API_KEY).strip()): + logger.info("OPENAI_API_KEY not set, attempting to download from HuggingFace...") + try: + from gradio_client import Client + client = Client("HuggingFaceM4/gradium_setup", verbose=False) + key, status = client.predict(api_name="/claim_b_key") + if key and key.strip(): + logger.info("Successfully downloaded API key from HuggingFace") + # Persist it immediately + self._persist_api_key(key) + except Exception as e: + logger.warning(f"Failed to download API key from HuggingFace: {e}") + + # Always expose settings UI if a settings app is available + # (do this AFTER loading/downloading the key so status endpoint sees the right value) + self._init_settings_ui_if_needed() + + # If key is still missing -> wait until provided via the settings UI + if not (config.OPENAI_API_KEY and str(config.OPENAI_API_KEY).strip()): + logger.warning("OPENAI_API_KEY not found. Open the app settings page to enter it.") + # Poll until the key becomes available (set via the settings UI) + try: + while not (config.OPENAI_API_KEY and str(config.OPENAI_API_KEY).strip()): + time.sleep(0.2) + except KeyboardInterrupt: + logger.info("Interrupted while waiting for API key.") + return + + # Start media after key is set/available + self._robot.media.start_recording() + self._robot.media.start_playing() + time.sleep(1) # give some time to the pipelines to start + + async def runner() -> None: + self._asyncio_loop = asyncio.get_running_loop() # type: ignore[assignment] + self._tasks = [ + asyncio.create_task(self.handler.start_up(), name="openai-handler"), + asyncio.create_task(self.record_loop(), name="stream-record-loop"), + asyncio.create_task(self.play_loop(), name="stream-play-loop"), + ] + try: + await asyncio.gather(*self._tasks) + except asyncio.CancelledError: + logger.info("Tasks cancelled during shutdown") + finally: + # Ensure handler connection is closed + await self.handler.shutdown() + + asyncio.run(runner()) + + def close(self) -> None: + """Stop the stream and underlying media pipelines. + + This method: + - Stops audio recording and playback first + - Sets the stop event to signal async loops to terminate + - Cancels all pending async tasks (openai-handler, record-loop, play-loop) + """ + logger.info("Stopping LocalStream...") + + # Stop media pipelines FIRST before cancelling async tasks + # This ensures clean shutdown before PortAudio cleanup + try: + self._robot.media.stop_recording() + except Exception as e: + logger.debug(f"Error stopping recording (may already be stopped): {e}") + + try: + self._robot.media.stop_playing() + except Exception as e: + logger.debug(f"Error stopping playback (may already be stopped): {e}") + + # Now signal async loops to stop + self._stop_event.set() + + # Cancel all running tasks + for task in self._tasks: + if not task.done(): + task.cancel() + + def clear_audio_queue(self) -> None: + """Flush the player's appsrc to drop any queued audio immediately.""" + logger.info("User intervention: flushing player queue") + if self._robot.media.backend == MediaBackend.GSTREAMER: + # Directly flush gstreamer audio pipe + self._robot.media.audio.clear_player() + elif self._robot.media.backend == MediaBackend.DEFAULT or self._robot.media.backend == MediaBackend.DEFAULT_NO_VIDEO: + self._robot.media.audio.clear_output_buffer() + self.handler.output_queue = asyncio.Queue() + + async def record_loop(self) -> None: + """Read mic frames from the recorder and forward them to the handler.""" + input_sample_rate = self._robot.media.get_input_audio_samplerate() + logger.debug(f"Audio recording started at {input_sample_rate} Hz") + + while not self._stop_event.is_set(): + audio_frame = self._robot.media.get_audio_sample() + if audio_frame is not None: + await self.handler.receive((input_sample_rate, audio_frame)) + await asyncio.sleep(0) # avoid busy loop + + async def play_loop(self) -> None: + """Fetch outputs from the handler: log text and play audio frames.""" + while not self._stop_event.is_set(): + handler_output = await self.handler.emit() + + if isinstance(handler_output, AdditionalOutputs): + for msg in handler_output.args: + content = msg.get("content", "") + if isinstance(content, str): + logger.info( + "role=%s content=%s", + msg.get("role"), + content if len(content) < 500 else content[:500] + "…", + ) + + elif isinstance(handler_output, tuple): + input_sample_rate, audio_data = handler_output + output_sample_rate = self._robot.media.get_output_audio_samplerate() + + # Reshape if needed + if audio_data.ndim == 2: + # Scipy channels last convention + if audio_data.shape[1] > audio_data.shape[0]: + audio_data = audio_data.T + # Multiple channels -> Mono channel + if audio_data.shape[1] > 1: + audio_data = audio_data[:, 0] + + # Cast if needed + audio_frame = audio_to_float32(audio_data) + + # Resample if needed + if input_sample_rate != output_sample_rate: + audio_frame = resample( + audio_frame, + int(len(audio_frame) * output_sample_rate / input_sample_rate), + ) + + self._robot.media.push_audio_sample(audio_frame) + + else: + logger.debug("Ignoring output type=%s", type(handler_output).__name__) + + await asyncio.sleep(0) # yield to event loop diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/dance_emotion_moves.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/dance_emotion_moves.py new file mode 100644 index 00000000..d2d7028d --- /dev/null +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/dance_emotion_moves.py @@ -0,0 +1,86 @@ +"""Dance and emotion moves for the movement queue system. + +This module implements dance moves and emotions as Move objects that can be queued +and executed sequentially by the MovementManager. +""" + +from __future__ import annotations +import logging + +import numpy as np +from numpy.typing import NDArray + +from reachy_mini.motion.move import Move +from reachy_mini.motion.recorded_move import RecordedMoves +from reachy_mini_dances_library.dance_move import DanceMove + + +logger = logging.getLogger(__name__) + + +class DanceQueueMove(Move): # type: ignore + """Wrapper for dance moves to work with the movement queue system.""" + + def __init__(self, move_name: str): + """Initialize a DanceQueueMove.""" + self.dance_move = DanceMove(move_name) + self.move_name = move_name + + @property + def duration(self) -> float: + """Duration property required by official Move interface.""" + return float(self.dance_move.duration) + + def evaluate(self, t: float) -> tuple[NDArray[np.float64] | None, NDArray[np.float64] | None, float | None]: + """Evaluate dance move at time t.""" + try: + # Get the pose from the dance move + head_pose, antennas, body_yaw = self.dance_move.evaluate(t) + + # Convert to numpy array if antennas is tuple and return in official Move format + if isinstance(antennas, tuple): + antennas = np.array([antennas[0], antennas[1]]) + + return (head_pose, antennas, body_yaw) + + except Exception as e: + logger.error(f"Error evaluating dance move '{self.move_name}' at t={t}: {e}") + # Return neutral pose on error + from reachy_mini.utils import create_head_pose + + neutral_head_pose = create_head_pose(0, 0, 0, 0, 0, 0, degrees=True) + return (neutral_head_pose, np.array([0.0, 0.0], dtype=np.float64), 0.0) + + +class EmotionQueueMove(Move): # type: ignore + """Wrapper for emotion moves to work with the movement queue system.""" + + def __init__(self, emotion_name: str, recorded_moves: RecordedMoves): + """Initialize an EmotionQueueMove.""" + self.emotion_move = recorded_moves.get(emotion_name) + self.emotion_name = emotion_name + + @property + def duration(self) -> float: + """Duration property required by official Move interface.""" + return float(self.emotion_move.duration) + + def evaluate(self, t: float) -> tuple[NDArray[np.float64] | None, NDArray[np.float64] | None, float | None]: + """Evaluate emotion move at time t.""" + try: + # Get the pose from the emotion move + head_pose, antennas, body_yaw = self.emotion_move.evaluate(t) + + # Convert to numpy array if antennas is tuple and return in official Move format + if isinstance(antennas, tuple): + antennas = np.array([antennas[0], antennas[1]]) + + return (head_pose, antennas, body_yaw) + + except Exception as e: + logger.error(f"Error evaluating emotion '{self.emotion_name}' at t={t}: {e}") + # Return neutral pose on error + from reachy_mini.utils import create_head_pose + + neutral_head_pose = create_head_pose(0, 0, 0, 0, 0, 0, degrees=True) + return (neutral_head_pose, np.array([0.0, 0.0], dtype=np.float64), 0.0) diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/goto_queue_move.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/goto_queue_move.py new file mode 100644 index 00000000..64801597 --- /dev/null +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/goto_queue_move.py @@ -0,0 +1,68 @@ +"""Queued goto move for direct head, antenna, and body-yaw targets.""" + +from __future__ import annotations +import logging +from typing import Tuple + +import numpy as np +from numpy.typing import NDArray + +from reachy_mini.motion.move import Move + + +logger = logging.getLogger(__name__) + + +class GotoQueueMove(Move): # type: ignore[misc] + """Interpolate from a current pose to a target pose.""" + + def __init__( + self, + target_head_pose: NDArray[np.float32], + start_head_pose: NDArray[np.float32] | None = None, + target_antennas: Tuple[float, float] = (0, 0), + start_antennas: Tuple[float, float] | None = None, + target_body_yaw: float = 0, + start_body_yaw: float | None = None, + duration: float = 1.0, + ): + """Initialize a queued goto move.""" + self._duration = duration + self.target_head_pose = target_head_pose + self.start_head_pose = start_head_pose + self.target_antennas = target_antennas + self.start_antennas = start_antennas or (0, 0) + self.target_body_yaw = target_body_yaw + self.start_body_yaw = start_body_yaw or 0 + + @property + def duration(self) -> float: + """Duration required by the Move interface.""" + return self._duration + + def evaluate(self, t: float) -> tuple[NDArray[np.float64] | None, NDArray[np.float64] | None, float | None]: + """Evaluate the move at elapsed time t.""" + try: + from reachy_mini.utils import create_head_pose + from reachy_mini.utils.interpolation import linear_pose_interpolation + + t_clamped = max(0, min(1, t / self.duration)) + start_pose = self.start_head_pose + if start_pose is None: + start_pose = create_head_pose(0, 0, 0, 0, 0, 0, degrees=True) + + head_pose = linear_pose_interpolation(start_pose, self.target_head_pose, t_clamped) + antennas = np.array( + [ + self.start_antennas[0] + (self.target_antennas[0] - self.start_antennas[0]) * t_clamped, + self.start_antennas[1] + (self.target_antennas[1] - self.start_antennas[1]) * t_clamped, + ], + dtype=np.float64, + ) + body_yaw = self.start_body_yaw + (self.target_body_yaw - self.start_body_yaw) * t_clamped + return (head_pose, antennas, body_yaw) + except Exception as e: + logger.error("Error evaluating goto move at t=%s: %s", t, e) + target_head_pose_f64 = self.target_head_pose.astype(np.float64) + target_antennas_array = np.array([self.target_antennas[0], self.target_antennas[1]], dtype=np.float64) + return (target_head_pose_f64, target_antennas_array, self.target_body_yaw) diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/images/reachymini_avatar.png b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/images/reachymini_avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..2ed3249419fe85f096003f4ade6dcb713f53701e GIT binary patch literal 1228716 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

RZhh9HEVz|yXRBCQ9GaP7|+xf)7NUGRqfM4UJ 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ϓ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

ZmM-XP1MBEcZ>xAgVcP#Ve~0lN1X;%QbuNJ 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

p4&z$ze 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

N3|nN@mBDv+k_QoVSDTTkJue^dcl#qkhF_zpXj9 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

f`kgT0EX7RAUv3a|G6sbXH@?@@o0ht!=SohDt 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 z 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

+@*x2I@yd;MVe1AlLLBQ?QT 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 z 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 z zie>4%z0*d8l0uYmub}!ebVD^fb=k~z;G(1K1D(htKRx8dr|`#_)Vk55n(xsaV8*T* zx~FtV=a{@trtYRvQx$}UeEbGRFR5ewhr{Tl=chkBub`GD+I7OYt~UaqHG3kwndlZ7 z!lzs~=~Z+|2xHpgf=-$^GzrwrNNc>q&{mGN_Ou8dj*fQ2F5QkH*Cta(xLKX&$WmWK zVtGd1olPl+zHh-QGd(kGM^0Y*bTW>7_iZ!HS%wg{teWOKG&!YO7a!Fg3d%J6i9jCY zruvyroSQ0zisV*FX44j?dswvbbD80J{v%-STO^G_x!Jw zj_~B4K1CIUUNw%9fw>j~?&t47-=Md2soQTv=_ph#eZ? NT^#7Fm-nv5!W)gjoZt zzvmGTI`%L=wJLk;Cg&MNZ#cFmWx{X@-O0AWr%0KUa$8@$z@wK}yt&Umhw4$zo6{DK zp(%2Xxb=UmR|h}F-?rw|(S+x?`suZIIyKa@F>KfcyF9b3=$WLn^!xscPm>z}K|sF0 zTq@OrjJ!kH24kR>zRzhbj@7j4wK}vG>65xr7HFUFH~QkYsGlJKKB?P#n)I|^(GKRD zWU?m`y^Kr-rZl@uX*BBj)@)}`a*34 zUm+`meY!Dm zCms7e+K(qBQc_IbR%9)uXf~j?y1pJA_s;kI8qf$5tZ=o|?wdkim88qvTV5#bhx+Z9 zm^6hI6gu6+O&{Gh?Jh+>1giUrM3qx61h_BJv|nbmp5Df@Dc6H1^~OwBAs ztW;-e3-{>;OD=T6nhR9hvXaJl{rpY|-~7-k?QDIlxi)w8+Fp5Yi?&FslUvHMH_EQG zdZg*nlg=+I2!9e^ePr2?GnJj}sEnGd*+eBPa@)ls zmKhbMwON$N2u4^sp!Q5Cw8~rhwMK^PG3aTmHrjeF?;O~Xb*`jbCmv|=XF)ZnZLa6g z8HZjmoK90WmB*j{D<>2%aU3itNcE~dBJ$I(wPmP>Vb2>(riPRjrPG$-Dox#Q7)xFJ z(4}9m)|M3eSnPIf#jH9?j-Ba6xFuPv$}dcLDvL26UAa8O=kGrRMMu7~Y&@q2%C4@u^%56k}MOb9pD4%p2#?tRTuclw$E7^0Q6m?g^JRr{yYuZ%E>)Lp7kDjh8 z4LO#&_^$8>Ks9TIxX9_7tj{qhU?ip%9hzKvRwq;u6{$VatcDWTL=cKQjCARe_`$_I zA{4S}cAu%hB>J)RkV$c+YQqPM)udhSIm12nvTW$VN(Z|# zGS1x)Gh)b^xZ(GzvMjFfUhJzv%5RSZXpdd&&`#vAk7pPskY>aIjJ zZ})Qj;v`nXB=WVQ11&kuPx04#)vlk_Od#X0UN#Egi~mjm6)^&_p5(?pc?2=qrPbLy zq8Ws*^&zajqc(MfCw$lS?>Sz5(uT6#Yvsd>SX*yqNCFkjS#mC1{x7qOC7Kdt)2SSW zkW(I4j!s56P5Zt{;7h2zO%BpRy70ng=bw?lH&-)?d+o_p^-gbEsWcCDNuoKDNW+SB zwO1V(Z&iCkg|$>2h$Y+Y(jKpK%M=zgH{MjL+z5ABG^#$1xU&#JIOyWzvIQO~M|6+T z?X4vbv}S)oBL@MRmvm?_4i%kzV*QT%AJ#2cYOiTtL5F=*BxkYgX*{RAXs17JO)KY? z&C`AbIBd%iN zmYPmdcJ2ahb+rc2b!a_dtpNdw!ULukx?mo;Q1MDo@+{d^`JPXfQopA}LkZmfRP7`o zO54V@ldn3ooy}-_KXWi}J60)aLc(_$k?$$ez1sx3gvucIUyO zo&Al(!fU>r#?epYqWn?a;@AfRFfOxJRm+ljjV7SZQ$$&>yPqJ1OkEk%bx4t_NGMuz!Vgo zWr#@A(cXDY#axUT7B3ywR0MEMc}a(kD6Z%QVUaWMZ1`?vkBMDYi>RXByLtS3YZi9T z`TZOT2*}?t`o5vOWzh}@G`e!INEqRZttg8m(&U!G+>65~_CjmFj&sAmZSCkz$8f~2 z1PjmgY-iij-5#uGiAzqP8_Q@u3(k>L*+bKZ>j?1N5+NGe5JQk$tOtp#1ozO69_I-v zRH2Ip$~0faF51yN%Isp*Vk=Wpp7$1+uR`Zh!RP@JriHrwh8p@JhOmD8_{0quv?O3v zV0k<;n!1kg(;j}5v~}dnx?v!Qu!%W^sBz0Olwe-dX?hmJ4Uv+uSViDLB{Ccv`Mr8t zHXKZnCCV_joIn}xXe;niM+HX7RcE8xh*FCni3V1*Yh9yKU^|hd#g7x*TE6y$j=T)d z_1k7po<(2L*&^mG`&csK(vX7%24DK_sO55dgi>#p?5*Wfi7-Ar8np>)(3( zH4T)Db~M_q*Rw;vwdZvjypSGorkN1l&rTpUt>>zF<($?CC>6~~*)D;3mp5>WR8{D*Kx;#*!7g*_PvW)9|M)%=e6sTrxt0cMA|+gF@9q+ zvO|j#M^V}nN`5#@V%0*U4PuS3eRRd+N&}ekySmU&4k|B2IxqT~!H-gya>9cQAOFc% zow<Zux2~GC>e2lofhJhc_Yz60zvr7JLj}8^lM?g8DR|@JpJ-yDg;ZJ zc+xxkVVCznIjq_hE6oQ#wZMDZhyb@mGS@$y^&~yE@5)Y^twI*`hYtxk&I&Q6SXz~F zXq7=-OKr=Y%`)6W$JWy^O5M{cYqO)QCU0U)Gf^F)_bK<%{!quFW6$1cdPb8FGO`=9 zdbgy+*UDQ&Rcp$9r$$ccHmgkE;{Ew8R=mmJz3a8ML+punC_9i=p8|gves5%qR zJb~$X1uRJomStZZgWFian%wKWzlyA5h%HN(Hrl>FO)eQIrpa|CUdrV7f1D~7N_TF> zpN+)pg4P9sh;y1xti!B2`w6EHU-5*wN!zTjU=x7dN>5QaOga-hG|N9IHB=Yd&NRhx z{s#&ebbKBHGi2wy$3ig=r~u+?sWSbNQ1of)G&18!Y;9Gx`lcb^_Arsg?8Qe(C!X!{ zjLX1<>Bl1YWI4=K2~rhFrivWT<>=0i?c0oArq?_`4&(s;;ckY2{dFjg>ZlE>&UO^w z$YxqOmo6u*R6gdZOOlh#-8U&f>M`N1J}!b%d8zz8!iEDbmAAgjV`rT?q%BQV`{N! zo|nAQ^=X6OeMAsjS9KLYtX=U{yn3tt_Cg~*0$RPN^kd{7^2_9cK(+EdTm8e+IHL7r zdV(;4eldt7_tKqP^4|<9>R772qT&ZIgWBB6#M2fO3RLp`H{M4{;J+D~z5-(02yP4v zw97ooVX!s>`u(7_$WvoQo6`To*b+s~jc@&mFwdsH zTleKpPTBaa;p2ekG#RO2tF(;au7UHP0R|#9=0Fg^!9#)n0JeP}t@D{b+JDih2ZddA z4bKPy_V~KTP#c*N94xw-PG&gA(S`Iu*W?~7XUo6RtZ6;GmhWWMfk3|^JL`KU6E?A%KhN{oi+ZgxyUeMov{MD3hG_Jfe8lS=crugLy_p*angdSyRNqH@4bM9p~xvTq1(+ z%pUKIsHx3R@V9ZAskDe6g<4@XaV}MMDOqX`sU@F2AFUk% zzH1rZW`ES*mb)P?Af%WNkHHK*&apr^xkM) zk?x7~=6j2ZWCoNkcgsNPTP;4kk~CMM&vwAQ35b+%`c{IppT+^4&tG(FvURkr2X zX5WC!9qGO$N$v)w!)!ChgQ9X#^VRxc4hZ zKIXB|gKc-<(Xb^dP=jVnxh-liN6|^-tnTpN;h0wB4~#WicvYSAdyQixKr`RCHHsUR zf1?lu!h#W`vq(JPcRg45>wQDV98mjF0Z@5>*EDQ;xcditS?^xz8 zD(ne`)z1vY_Il}eZFnrwFffG7;5yL_wkAoZF}D26M)v6T6k~1l z;K)!l=57x7@5!D!9+W)a6pc0d$=CM1gr6P4F90akmW7i@g2)EwTLcUa#f75F+TG0E zuP;Y(co2W59wcQ@uuSAc2&N(o8+nc5B4}7Wm-yph&z@Tuj7HIY%_lQH+#{8O?z@q^ zgF#oIZaRj*aICoyH@edO#cOK%>_0u&ujCpSc!iZZhF+;6_Qtc6hnNjVnbp;E@Jt;1 zBWCpMZsEaby7(avu20^G9!DBdwe3gd_eXAhU6s<|p~6yPU%2ZbsR^xP=WqxcZ}NN? zCuPSxyps0;1O-csmCL&VZmZwZnKHgp){i$##3io8);9mdtfDE5CgZ$PA%4N}YdLg4 zf9Jt!agd6#C1`@T@ZKWRH^lfDTa|_Lat9r=V9B(13__Di*%vvx3gQO>iv27#Z3nRNhciB$CjL( z_E}y3Fh~y0*Hb;fMC2sc=JsFj>=e3eDEzX;#I|)f|5KgU0|rh$eXOi15FGCRcy`iT?I`wU6GV76`dV^C;Y{#H^kC!6fDzI#()#Do(r#p zwVbS#ei4G_St_@sr*;Plk{>cJ1Is2KNG&Ek_FLB7|8ER`ouj#~n}reRJaz^cX{qYJ zeHdLzeoFZyR?hTswm*DR8pUyk;7eP-BCN`A&3L%gG}Ia3oL(YF9w6pg3B2bVJ&`db zK7+P3WLMT_0a=Anr#*st_DDI0ulCfXh^Hx|vIjmpYu$ZiXL8T1b#4XTO=gx)`#KEM zYjvzCvPFHDV_mpcM~8>Anm31*vRAg)^nz2e(oq7%(hW=Q_#cpcvI!=B&FnndolR*~bJelfM0gIV5+ zE-K&iTtZ=$5hF=+;E3Ibx;bzjjj1~ZFGIZsF9SMufmNCV8nKnRO>%NKlOD*muk1CR{Lpik5wvUcjssH((2WG z^z*m@sN-F?dyaWT&iv{b$UrNS(eY92&mY2(viZ991|J?cA$kzLy-tKmpm!gF8Zg_S zHvlq=;QEamb-={ez8@32+uzFz?R`&_%VpPBZs z1ZfPS-aFV91VIdA!pWW}f$Da_;KTFWrMKT;YODMp6G(hL?zVE5ZSpH1B3)hXwc{Tv zBh6i|3`Av)k4D>>7buY!b+1aS>G6086RsycNxG%CSA$vHsbW7BR7o^eeQ~AT*F~BN z>9!5_(%!8lmfW^gHvC+U6ee|+q7x1A4|@gcXtKqqJXv?Zs*NxltqBwp&PhIyr2(Q{ zeJxj_o@X%OHNlNm9XuDx#(nI_bi-=o)alR@Mq{O~`Ss}qysQ_)A|h%$)dq7Hwf0ix z$9KH9BfFHV(;nvoMD%Nh&P1-G8x$m+ja7&9dCH^YtYqK(;%2@X=`8Ca=ZzlI^?voC z^;uCG@zuyYCHopy%_I5e9G8;muyz5yC}8>LQuk?s0X!1XQZEX@&!tc4Yy zKW_|{_6jY$$iC(Y?XZS>11q_0j>7bHjiTcV$U!73dbDL5^muaGZEhzsZHKhSAJcFN zKVRPCsXd2hZVB%W0O-=oDH-yknS1eM=h-rg*ZLJs_6dW)WQXg2U9mWKF?+stuE)lA zuu@GkJgJO-sH1-9?9k>^oO4q=O$vtW7*u{(V$_5n?Ss0{=r1Rgm6+nl_P1_O_K#1>Z7n`p90XlT}o7yOGfP*t;9;Y<_65 z6#vhCpzt`(YR*-B1d)44UUH|@U6a**>(y%q%mq**njqik&PceaD$- zavEJ(Ma8{kCZ%Meah$O_ixo=oNoFhm6Cn<+^yCSjsi<;ilT${=swyh)>ZAY2R1KOAia-|T6MaP=Wr;h;sC5G4D#lt0$ zU28NXuM?T$W#*B6Q1>^ImX*5us!H(JpG>|DrgS2s4@7-hproNqN|xumeXDnE0Hl8y zXH8Wq5IWVWR^m)Mbd~?C*wpd=>o24ii~9+QE^GNlw&GvZKka_b<*Zk|hj?t6_>wWc zR;^A50=Qmmq!sTM%*zwI+Li#j-sne+*j=jfZO5+?*^W=qOK9(J^YBzwGp1GQSs1^C z4JbZn+yIQdnkH3>AB0BxGuVW5Z&n>uo?r?g9?zf#2%6V$ND2OPZ`#D)_Y&H`UnM{4 z#0jgSY~_IM7G`JO_~rGj0U1&G-!^@5Y-Ri#>1QqyGv_dmUc#9AOHW;$1446xGKnyf z!z_VPtQS&_p3Kj4cgy;{!Y7f>5fn)`{Ipk-BX~|K4=o?OqFC~EGKcG{8HB1f@JdR> za7Rn8YHKr4QNk;%NB=wu{3J?sFP~tMZa4Td&WM^}+gKFI!z3Y|md>(NbGC(=#-&+# z)7KGuoM;)hc9=I?)54NmFeSXUs78Z7=FEtc5NyW$M&V6k>hh0zGA|v8UNuOEaXKAO z+euZ*`2f7{aruE3f1Yj6=aGMfi;jNj(vrPeM-ehRzXI@AR!A<-_NP$rK90Cljr&$O zEbYwdPaEY`nL|oS(sByB)bWxI2T9gmTDR-q+=7^Oa0XcaMl<_J-gKtvcOB318;zmC z0z+tjyqfHL+w0P}B-{Wp1y$X|n_ZRKvlBOl zl~U%pOy8;6B0E#VCD&z1Prr&R?PXf(N0fF1y%v)!B!JG2KLDqk777D6DTHZ# ze>JYJ!`-p1%_PU`OU8yg2G0kh=qRW+X<{aCR4sYJxbGgdK4O|T`L@x=J#k6E*VO(sJWb7VrU^*?!A-IN5xF-Cq6P+6Ewq z53GJ)DZbL6N4u8u&JC#%?^4Idqx*SZ4vUpOjcskp?8RHCq^H-FF0I2Ps%P+hqyqX) zp%Jl+RV1jK=;b?gU3L@b@y{O=cp2e13(BX`-s;wQo>uowa8C3(5IR4RCUM!6K`HQv`3Drin=pUp{m zgjE0k?j1$i@%$36Xpi8Mush04pU*4@n^~oKQfdpHC_q}Z{i?zH+4i(9%E!e;p6XvW zQ7+tLE{ij04YyFxpUwhY+siZD+kd29Yp)ikwFjPQh~~XtV15?davlv~~;3q2Gy?&Z=vS^R^ zg_Rn*j$N5%U#~*HryPl1InaqkZaov-i#e>~Q~swh;kCdMT%#QGiz0ze!Z|lU2HwWa zE3470hO?%gJ&8u1x^^fHlsx^t<&8kB_cQ2;Z#G+P2z#O_t z?bHzJq|R^Je)u)f8AVJyxoaQMwhd8AX+(p#KhvK`O-az+wwJ2rR>6GL4%;~uTcZkQ z&q>?+^ICtfp4{NcD#tL_rLAdkv}zhQN|%Y`&gpzuX1Wf6y0hJxkuV0vVGFW$e>Axbk6ozO@EH$cl7Wd2|mP zxMzcX`ylgbD=ZM)PeEyC>OTYL4CEAjrmUrVW!|&X?90Kq1I<# zW`Cqu0e@7BttC1>`wdSe{VK{dA+P>Ed_7k)CfnH@pR4;kj?wAtH=sL@k9!zmb=n)A zw9QQKp+gT)Xyh9d6F+UxY`&XulAZD0I?BFlhTq3r|Hd=dHHs0S3H^6wy+5xqjKJ|N zqV3(xX;ssxx9|whv{Y?~XnifduoQxVwCd+4VK{^2+uEt*@r)LvPvs6ntMmQJrXXFl zDv~yb7Zcvsd!FohPX?~JEo0H=^SbTWM29c&?(*pFoU-SxOZ0tm|lqRULOpQ3sQLODEzG*d1>>CIuy=1yj3r?(*XiP!f)f>B;YSM#&`YfO_m zKZstA@ujznqWK1CX$vr(?VTAVJ3j>c1L1O^D(~`(V9j(x&(V}1!7o-q*QH~rK zKi#qmH+?%ZNiR`IZORz-Wvfbo7IeQg4$emkmz8X-t#-=jK(`*@$l3ErE;}unETk$2 z&8?9s=>UY=b7PbLzj^;KUf_4$`^zXErY+&Qj95w8c&uy9()85h0%LT8k^|g$06y;n6Gst$w1fumV zxmlp-M<>XhPG*>Cj@}sksasM8E$&ib3Xv*TN=p!Rl}CBlBpmAJd9R@<>*+ZPmX|rb z&Kx-CyV6o-%Gu23eyvfI?`CqQKZ_q0S^9r!RnY&?psCs(7OMWx+_-a;|4BcOGHlIH ze%Q=08x|yy^7WI#kSi+r`KroV=Gw|NY=*TZa19o2>z6W+`zEL(s-8e)K zNT)yhR+WWjP)rjX)a~QTsz!=FIQc zxURogC=FBCv!fkKW`1KmnLz*iYJOO%2_Y8tXvyPadzfEUwnpu5&D~}gcHWumo%ci^ zi5R|DM*o|5&L}#BL#^Z*myO0c_C?PT2`ftK(MZ($ znTai`w1*x%ap?!Rim%f0_v&FrQ)qe%$@$){U8h z)YeI7w={D?1#iy^4{@S3$il*|q+}xJ{Qa-e< zAH!0PRG%+UgltJ5i_1#I?T~LdI+Au->s_CGql|^Gmh#(s+n|wr9$B0d&Tz|3iqJRz zRA`GiTl&A47M*$YG?G#4r{^?i$sdV?NSM$@tV*OD3?B8`3KHgyEy=F|mWS5RR+M!NOj-Ex<-i&`i1Bl(BadUN? zvv$W8DG}+gL#u=3CA0~Twy}O|R$t0QhX}@j&1yaFY_0W_I2hs3Ut#J$3cBCfA8VOJ z;Pw+U(~YxV^^{Og>%=%MkMe||OpKK~=^L~G8|OW3TKF6clTI!UOg^BVgdeHbsjJ9e z^;WFWtaP*qiv?A6ah3@)z0FZ3)X3S){GQvqM*k9cVjvImI9!$2iLuzrWQWlc2Wv?c zEsq_%WnAQI<-Cbq@|p+0$PZiJwr1Q@I{Z+wS)|F0hyAMd>W0qzNDm*n@s?MqF68WK zSvQbdPhbM%+1XXnVty&L1CJ?=P>4J$CBJ5O(2rm3MUPkgV}2CgFuSuwdee$PFhf-o$)ZyP(h11f!%ywS|^S22OZm7KqjorfI0srJl>^P{Qh63G*)+LOTrYJ$=m0HfcPEV5_nK;7m@RS z4?tWzG^7GMm%xU)Ahl^IHO-&qcX1DNz$ZzPg@RY?#`&qh*{^!a8|F#&=6m>U{%)`4 z9151VQM(tSz+n;mw!UmGs(5~wBjMw}$a(|B&Wp+XB0~f3mgcGj*qu^G^jLOjS@jVi zV?oJ7`J}gR1h9z6Ty@KcXU3{ulHc(f#mCgo#JL!@-d>5Je2K}+Eu1V41jmtiH+BAP+xsq+DbU4#8g;6ee7*KN+d*S~B_?H2Tu(g)me=wyDDayU2qx|wi&E*hTyO2DW(y^fC`LghB@?rF#Wjx~?pdbm2mum&gP6J9idzO)A0Gez1k^gf+kzKwBG}kuIa}!In)cf^Uq0%cRW+NBQxtvch30G0UbKqKawkyER328N;A+JdI0EJv|Pwl30>pgODe8(+4yuN>vK)&BAY z`lA%1S##wdvX&r5;BTNt#;UKQ_DmExDKDg3ZRVM55$)S<@!n$xMoXFq@b+i{-UZl& zU~BE!`p3V^^_n;&mFVGqSW(IUv-YV)Qvsg;&wu|*pU9l|)2}DfeDx6{!#mY%K<2FX znEiBWL+AB~+KPB|J>Uts7SUzPYJTrU)X<#{&660_*reE7tfCA zx03CmVQriiqfe1RRtAM-^TiKw>+8k_Wlh-ei?>Ia-0$q%4&|X)=f@(;q0e69lo}t;Z46020iA&_Kwig_2TJ! z!xYQpaQd6bJAnfLi!bAr)aC)6ZyTwqT~kA|c)4J?$H+DrVVU$IEq|qUF#cClsjaoOeP!IO6F!pQC5!R|J9iPuey; zQXm?P2z-Y{a{P|sP)42D92OH#wa7o(luePToWZGGL$5+^Z@|B!dEPp%5Yi<~*8Aua zB$Yg^n<1{=N&)=xy!Oo5-8s_lvG2C;5)WxvNCNR8Sf(Lom6@Fw7vH`3+m&wp!BM!O z6g^o9RX(OVKWg_w8~mil+H>6d8~svQ{$T`Csm5FTu=Y5c9M9^Wl9v$P1d;kh=vCzK z7}Q95lw1AUeylFED6OZ|C57r*sC=$s=~#!(lc5(#9kY!*QklkhDi#sgN2}Ohvv|8`8KV6vKdr`?B+NZd-wC6#ITSF__`82r6 z?5prW>hr>7^_VXnT_i5NM~{|Q{-e65`e|?&bti?!`iJd#a%H`f8_g~P`R5&?tmnBb z?(w-T{HKSWq7Ah%4^2B2XZfU_>(;&Tk?*{X0sR!4Jar9HQG{ObcKPJup?n;1Et0$n z%>4pQbWCd6-n?1FRD;A-s)lf0aabB6?d89s=$~P82+h~zW=a@QlgLYWk;l^k?CwZ~ zcs$fD4%5mn(#nd4bw*&~Y6qBQ0ZUAAv6P(mKNxhtJ@z%xK&zn_L3^P+B?q`ZFyDH^ zp`#y8^i;xNYe#q$`e#trxIa|S9O`KFhT0rUC(WhpZ(4I^Oka1j9S5{-W)3)FqiA3k zqSrBWQ#^!lyXm9Dhct5rE^%Zj_=~zN=GZeG)})(UR(t&HIXW+c^x=Kli%^1uJ=6l& zPPA~+;e{Mi(P{KGFi>pKksG+)c@<@OxS=!hmvC*L_{hFP5gN}A5}K)QUFLkCa|Mf< zocn_xhyy1~r32Yg$xCGf6(y|HwWI2yiZXlis|Mv@Faxp}_vVj%H1RCINcxd`(K2X} z&gVZAkM$q2GH9$I%qXLo_-^O4|C__}pqyom4llyGCSzHeYE)_Icq{tF9RkwfK#m8? ztDWFn)yMCFgzYKNPq!=p?m{qGL13*dl7GQAf6euJ%YR_ z5231tz1;9TT94x>24@MHP$TVhr1B1cyR zT94$%(i8gcyjF?nRd5K~Lsq#U4F+YpNAr?BKB2GufubulPjS5G*&Uk#$4!(kKKvOw zK5U1B)=R+p3sb}#f}QeX z!h>JlMQtbrz7jwC(^Y}#;m<=sY6!g z(;jeM z9KJvH_Qa?Ilw4OkH{qgp5-Jzm$%XCPcQ?3#hkWvL=*)!EJ8ihvla2(w!nVh+$uI}br|hd!k-5( z@CvC=u){GGDHZZi^F31Q1KE)C`p!|gt(1c4&3jeF{c45PeUQda;1SAIdf{?>+uK<# zjV@pRfCnXGGyB+H*df0s{ZO96FwXQhmRAmlhb z1%qkX)i~FuWIU7n>@{9@uH+=YqCd!^s)qar&)cCMcHJsD2kl#fzGDci)&0UxGn77Z+$eI6~=vwjlkb)&t1R`x~QlxBhF~7y?t3Afi}q+b@+RH zgl!A2<&X77zaFjyef&jmGf4XT2~Mj%b4w|Iok8 z|17&Ms^D7CLF4ml`93}SJms>X;;q?X+fDh}>gMvXdR-NxcZz77aeR=ceu5M@dpb~h z-A#tMGnwtr$om@-1gcBCwHAL54=jPg*004_l0{zw`#mXr-^@Kljg+gaJencx9+mkO z74E$EAxGq|c^^lqeS4;gtH(Sw9`(&N(rH=y>|LA|;!>@gFxrIF54$ea+>h>_!*bqy zsC1JYp@NFPfnODmsxE5?3N~Cya{h}XvXwiiJdqeRAWYUeJHlIe=4A7X7q-F|{Vf)v zUyIr4(8*!s@Vj+l00wf|pFstN0H=};K7B4Npm&G%uDN`T#uXKHQmx+> z?5O@GP9SZ6^ZW_0Kn^P%NZTSqn9T^E$DT-}h|~WLM5@Zv_dLwPX6Gq1JJBZ(9^)Ve7=QJ_7ht%HISA7u z4I1RCGxI3B`D?>*PFl;{ImUH6+ui_4i#NL5+bTdgY0e8uKbRVT%--ZwrFxSu?3g2`_sx%NRoY;se% ztykBS@w}%em8WLWTRKZ{-<*(jCaEiEit4|LR#TN|Ug{kGk~Vu)VK*tM_r(vVqCdiA zeaU{cp9xzS`~{v=2@8HAao~!mXWVqH%=LMhp3~v^>*8wW`S)*>={`5En1!i)tIQtU zyiiRE32k}b?$*)-Yy{@#s-m)3sbOHlhdnw>~peZ`)V?uKj5XtJ^G(aGJuOGaq8!fYdw=S3}Ag4C#|9ZYiWXCk~0)t29S(YywDk;aP&wlX#08;ICW z8(Grro9c6%9yd5hwJp*lAV1z(j~d`rro0SuO06SHb2Zlyk{VCl;T)nt_P$PUUT?c|JR0Kp4 z%yI-qwO1=s*}M9U?B+p=w6(^X2THq0))7m?QtmQ&aFE|#wbASn`F`?hl4Lt3zEo4{ zgji=R`GP%IJI}=-E$>?%hWI<8?BH2iuOYiNX&CDA_Zr@sCCpUFZvlF4#QfD`IGUQX zQVu)b^(tFmsg%v`oEib;ya@nV*)#gl+vDAFI}KrgnNI2EzN*V|es+a53Dj5w3#pxI zC05FPGOzu^`15#dnY#bry-@^jm1NuxZ?X=z7Bgl29#DFWIU>oFeo?WS{?)3sz8zBQr(Ly};%Z4;BY8&jH zT{@RSdE|#Ng<4R+!acpPyxZhhX{Z=)28P-#oINOe^~ayop7QuL4O&b%Zg~cLfReb+ zDaUa(o6=g1Y1s!ywqLyUd|YtQzxp0S>|tJAB_ouDuqh6v+?8$rw3gT91mPnl+roEc zey*7(j)TD4Z0Ni5LD9~&sq$YC|>+PM|X~BnOqS7Aw%YkzdD1rzLbt}m&}FJfz0nH$`G3hfFD^)Zj(8P ztw3TbbBq;c9u-OJSs_aYYMU(n^5s*>E~Wp1uNtPh*9`kfQS5JX@LzksSS_EQSNl)u zU~G}4dl{4akOczGoy__M>~&ceNowsLYUME;?z$VMC2rFS!-q^w`!8TT}CP=)1w0+Y>3YacH2a)Cyjm#?U&n&#NU$YW37V?dyWs7k>I zo$;g|4_J{A?WTWljC@P-cDif53DEc6a&T@9k4CmP(M#67r^^guEULvts* zFFa*5eIgtSAeefT9Q;lGq^eUbdpH}cc15qa1O&h78TVq4$+yTOZTxGp?0Kj1R`7R* z+Q^fW>ZDTz4*|nzOzS4|^ag|`-(JSLScle4LXX&Z{wuSytDVdv$oA|>PKyFrsB1f0 zHaNG>dS^mFeEr4KIiI;$VAO<=0k($1E2i<#2WXBYGrQdc_aHqV_pv{IQiatH*r5an zdCS^5cA(;5d_o9h+&1X#Sc41<&FG~RcopE%z}b` zpfz}`q?Yy`pyjx-H}1R{fBz-D>~7yD#IT&f7^CxwXRUf-z#O3Hp_=c~dvdre&3P@T zDJjsj{kXnRv^KmT4e~o!Md(}^F$h5q21ex>WHq-Dfm$pj*|%DB#nGNUS9LtdU`3Xe z^Y)$s=Nq$Wy8oS1KQG+L$J!wora<90jTQ%Dyl~w;PA>!6w-y`HGfjZT83P;9U9|xB zmrZe5rt$H1O>EdAIC+yzDR#%0K&v-94`uKeO%{A*#C!wBn=8vlSLjmSZ=>T>9#L4i z=}!V%JddE@9o4T|=2pQ+wU#}Ehpx38-O&;T7zu^)qCp+6aN78!=tq|j8u*YHX6AR@2vGftN*O#xb|D@tp zJFL7VVCKBQN{^?DqW4XA)j%?u_1VOEttaoSb-BHyLCyR`J1=ZJI9sS6xM&WSB@~h> z7lBrj55D`qY-Z;*Doa>!zR!{ox}EO1d^0tG0yz3AD&JR59Zht&HTnpeIQAoUc@DcU zI~(D%=6Gg(S2-lCv;Y(Z?LVwJG$E5o~PtAQL>V@SB1VwYGiie1rjRT ztA`p9IdfR;R*MZfhi(&peeF(*%w- z-NID%BO7_1-vCqTigwxlN9s{Di?`!uW|&H-7HO|z=OV>DAc)GS^?;2;oUDTFfrkU= zbW6~r`~&x^To{kpmS+e4hXM633efZQ;tzu=FkEpMvSz~^U-J)=lXs3PJ?~AUhR{Fw z^K5zVo&WV=C(dtvt&NSvsNjq#Ja4S=dUYnTT4D?XuX#qj`bhRhz$jfMtv~ljz8AJQ zaG(}$hpI`WBB$m@0cd8#t}T~PXN?`4wzpu(6ODAp$f#5FgVmiFal>bnt>$sy7`?zpq33^M2x%=}J+At9)%! z&qAhWKdPENd!{huto3G;YxeUUFcbWbvH760*7ngqUH7A~Q1IBAPPR<;e>6bOY3W$kK$GxCMvk@l!oX96|xd{Vdy6UWO?SyRoK->}!Vm7hS z9o9zM;|O2Sz`T+!mI2xgD|a}bd`jwYv!vBdo({yZX!CVt{pt;}@O)7j?r``|=hn;P z!#2(XISqJZm=&ShAD``~gI-sYP~P<_5xou6&DVM+E= z2Nlk(tLr$7awl(IQ?{SeM?S9lOjwxvtdmvt;#jIX9#e38+uUj$t~0q$OEKla-41$x z2$<9Tbdye1HBTOiO;%uHwI#>1jl{wsNS$rzRptoh1_^axxXKXHu`f;0Juh*7;?oif z_VSI>t~Wi?<@bJzcW91b0V}M8*a?4CMs^~guureY!-go0(gi(i1!pD z{U?(}mr0$cf+g+``y(hZuXB={Gfwd6O~fi6@eWxwp-EQ9x*PjwZVy(RS>O2!+A^D> zDy9^7a~Tu;v#?PjHV83Sj#h!SA$W+lb>~#bUfA#q#7u8_#@XG|BB{03+@kd@$vgA~^(S5Ine8@rs;W`>@&Vdh4TR>!$H(tZ5N$X8q8$Kyx$`utQ? z9#UqX2UC>Fu{T=zCwpfeDUk>MDLU$=2G03x4f2>z&IjzvNE_UjJc&;YzFnV0H^kYw z%E?a>|8VJ}wSJ_;S7~>Bq{S)Gt{D`s=rgO`cmG_(Skld(;!>|U)u*q=ps4NoQg--l zjORD3ynD)0w=LRh^?1A`9^+M~G0SgO*YX+N`wJt=a;AOsn~GYjn`LI=!uv2Nq)*NTDkZl5$x@~r8MHz=QZ4W zg3+2SN3S!VUdum7SeSFj@8$iSjh~@LN`8=OOhoWn2<&#=v0K4oyJa?y@} zb$pTv`^k>3*5MI^kEt{2fi~t|0l7~e)GXHaBI%IlnwjMHZJtE}XJ4x}8q;Z!evkM2 z8l@_wp+QLa9R@u5s@yg8?>vhi9B6>u`vzUObD8hKfjH|wr{kTlQm*9U6Duv8{GvJ74KpLkk@I%fJwU=N1JGc_Lw9{jY`@g=^$v>{ zpZ8%P^ ziHenIEAQx}D<}Pp`Y0m&zY4R%ad{tWG|6=)xjK+N*$!n^-XE!()I9AxAZ{{Y?Sp^m zj@QPd78DIak!mJYQH}o2`V&l5fU`*Sr(lsxP@wd_5MI|m(XXU=U7Laz?50?!d8^cv zjh`4HneeH`xC7tJ$OaMOjp3jm;X!7U_5b@n|AlpB4TZE`_=mzpWJ9pX^ z;;Y;Sz?8{ymDu}7e}2E~=(4+v7}9=n>p^5!B+*lsOMOx}s=sWHu%3>`XSK%7kKjQUgpxOkGua`f|hjKO1$-7nm^BlbC|v%du0S1Y{WrPd58mG#&hZcfEf)J^rX z$xK$C(_-39B#?}(xipSQ9ndigNcQXAq$iD=R*Cg{;iZmlPv3&TFqvdJuFU{_RCsM`yn6h zK*tWqFKw^n&DVM9+gk59adp({^reAbFhV@_()Yicy7=X#V$96|q^Dh*nO6_=*4o0O zwVoCH)k~9oUL^uD0%~!mn2>LE{>T68sZn`85Mz|gR9&rtF*4|@oXVyFj$a`{M1u>E zk9PHAZGC|BECA(a1pVF^{-9`8>bi*NYO8Od0H;Xi1Q(bZzD>5}S!@ zSpO*<3EfRj6h;1vGYL|Z+5MgAJ)yMz!+{VCf_4(=ZU}Ax=E>J94Vx zl4behCa%#?8W;It^9hPlu!R73P7~pfv0gIHJI&JSaw z7jFW0B+sREY)IA@a&unhZ#d9n>5WRt#S+ObRd@TmH|;gFLkRu(SK>_+(ni_<-~W zHbb-mOzZJ!UYN~R047vgwqL4hTbp6>@@g=L{^Bx`TEUi)8lX77QL!V+uLO?w>QvXX6{{J5C#X3AHxbwvY9j4-R)YHl$w!K*KcHEl0!~K z$LxpOcZM*i%|WC`=|DcPbaYlDolKk^RuiJ3xQ7z0yK+?5g!z|WKs%w`>RMcp20WNA z7vT@a>Zw9jnz_WWN*pSZM8v#at4P;HYM?f26`o(YO0PUHOMYz2QpHD1>l zWk+{TWb2q6+N*z*ROZi|&p3rLqAsqF)P(rPqjP8#kpF9cv=5uxw@mqD#uvDNCa6`h zEp&{2z17#JtRsPPwsnN1suNx~zMB2S9zhs(KTt{=Ls)pDLFEMhfSGnaj~4c3lv282 zdm{8m>1E*p;K8MJmhsLK?fVMJVf>XZ;@)?q!y0+DxTVoK8YZyyZj3utscywnB$vbG zxWhno{E{Ho|qe`>#1ALAZ?wuxSJ zA<~!km4%|lvb{3ITzQ@N1Y9=q+%l25@p)$W;87Grt<7MnU44wT-eVSn%}@U;M#0fs z9960Bz8UkcmZJ&_pPFNLx&fg`3+=B~9mT05g5)0mZz%nB5BND96&c)I-6F*Ae1b5S z9b!?UbEnFx{R%f)P{X_s4fF5w@V;KQN52S=bTCr@Y&z1R(Aych-a`t1NmcG8;=K$H z7@~y9jX}m!&MEuTLeaGFhRWS#iP|a{WL**{f^@A0OD`!V4Cr zz@>c!AY`-Dl&``4;8kJvx0soZ9o?k-{uOu|C?(!KEnb9k2SZD#DSM-sAX zJ$2>-w$79HHJ`5C-g*`z2=|wCcG#&UY4%5Ako}=qTJ}{2F@ffWoRRQn8kRRzbH9Pa4QN zuhm$(%}28?*(62z)h@2(Malv(Y+E=YFModDnqBxzozvECQ}0J#w5&w&j@ar9TzGGX5nCkYP^?npC{B&|Ud`T{X zi<(+eQwVDE8*y_Ok*YODlG_%oW@q-$UMVzhvC#AUfiYYas%r8mcSRPuex>NjFOH9X zVuJJ^@hU#q(IX*vFCJ#FrhR7yP^AW|<_-=P)E=cHmMUC-&Q*sN#*e6SR9Sx`y%;!P zCUkXP%qFx?~-&&PN`Am~dn=IdqOQr4)cmAl< zb4>l23~+!K(Hh1bwwj0L_k~;uZDAS-Gu?iC#pM;-7Y0RN^>}y-)s@TFVl&iza)k z$3xu%Q#211g}Z1^ThA#8b|4?HrCedtUn&zU0x^;fZ}GSk!$ndtSga)Xu@6HN5C6`7 zipF(5i2*N5qd8MfQHp;XxSwHrM;FIZ_0m3;*1H%TJ`I$$XM^R*HVAO}^u2*lna)KQ zQ8|p*=`xXZ#yZmtd#sK)m8Tj@1dfxt?l#uU>}n59x`MdYRnmFZNz;X!*708QxFkrM z8eNV!rxKPH6KU9aVW>F>1gef2o~2dDf_{3Izg3iLcebT zD-|~l`InYJCK}6=n-21lecV%V>G&LVGGaQx25`uslFYN3Cv;24o|}_Hd$VpI;LG^5 zF|lpgOsfzlf((DLfPX&Exwd_MkK%e$W_{k>HxhF0en&@y)Bj4pr_g+Ss6p{i;W5&S zC{CVvcK(r;N#-Ziczx{`UG=#F#?jt5qy@eBdMXN({BvPXm2Yz+ZL-{ z??GU_C|qr7eV5UcoHslgilnC4d9ana%C=kc=+ATiG3Wshcz&E=rhDSv*#G%I{b6qRH}k64zhT0CosfNR0{tVR8}=1a-A*heltbyfroQOySaTzl0eS^)#cW!LwYSI3p0e9uS3;J?k(8q z)7tEKM0aujc^ahRXNQ+0ViTq7Tx}=Wcg+kLVRkyc>9?IOi!KoEV1%sCD-8bc8|Kp^ z6iT)DkzZez_V0v*6Oe{h^#zJeGp#lq`^^4AxS;rV`>Z`;&8s3;C);v^3mMyX{3&Nwvs( zMO8myMT8G4L94vz&qK7b@kw;l(thL76Z7~CA8eYNR1$J{_%pa&l)hCn#@D#?8^6~( zK+g9Dfh#Yl&-W@!ODNN=wS?yFgbE$kk?HugGtu-Rx$=xEO4=k{#H#_R5QJe42Gt0m zD9$4$^NPvN1o=%WH0Eqjd;FEXrPp`~Z**s@fAsQC_QkiHe_YJfzEK6-s8<~3BwnM8 zVy?K_Ql}^Ynd-P)&kwc2p$)xiASq&iY|v{k>D|J1^F1?3yJk{VmGq!{;c@2&AM1PY zmM>ND4e(lG!x0YVRZeW=LmxoNJB#fSMtWKXJ;v_c`wBMl&PW(fM3z!wz#S2qHx0p+ zddZ7FvFD5Ye8|F<_l#&MA`-sp<^}%TFnu*gcg0m<0Zi|$Ll@=kMu3jZlVfi07{bct zKdVK@3w?B|-h*!~q)o;r+#+`%TiO~0xZ*@dy7CDRfof#uc2J}S7rkmK*WYYFXHWes zsvkT3q*OP7ZjLiYhVK`-;v!yT5H_U+ zY!EExn@$JRQst4>2&APQq}RcjcON0fnHQ8b$ULa6T5E9Bq*`6~pZ!AF#4FD`MPQOg zI5xqTh}oy(X})Y%z$BXIFtxd4QA!>D8vwtC)P=6Rgj_Oui8LZ||T zmEZ557c&6o!Me))8;_))I4kHofWfgd#-B0_KEx%lY(| zPCGs6@+XNLiD#eu($lFlYC9t7@1RNhmPWgxRsOL`*gt0hF=m2UzbPB(0c(VPm{#ZgXgJF<7f3v%F`Bk!i{F z3bxs`u2Yi9#VI`KM3bw+i#%$=a?eRq&GgeM@-CC$gJMV5*4Fx5gB4(FthoH^ID5cr zV-3Y8Wj-0cKfTp;`gO3fq&tE-wBf5BVmxqm<2(jtRIq~>J@OcBn1DG?!Pb1{2BE5Z ztW!hOp~6oNEX#ZgE@q*fNEK^RAJiDv&`l-#M$fg=VoT zdFF$dX?2wrQOQG%W=0VD8|{&QI`JSKntGSt6a8qrCjyNPz2JgqdP-_W4h3x%6wetc z(c)6W>iOd~HZB!ALl)!NVZ|5)kBpaC(@lX8jy1T2vb&Y*(7wbwPL`~k#=2JF4gw~4MdewtZAneTiEWW6#-n;uH!|bkZvRW@+Vg7s25D;% z3KCV$j(6R$Fz2F3FO$(@LIk*1P8+|ezpx*4VydcF55*bH68eY$jGHowun}Z1_wX@G zNvSz6C0SW#&Xf5o5lXDhlXR8C|KV3vA$v__&@vM95Kiv2=$wC`8ukwvG{LsmcwLXk zj94uHIepQ+c~x*Kiy7Q*qgK#)_AWh@uOu3Y7Ft>p)$B-G+!bJSJu5P?kpcg ztI*WA*jj~Hv-?o)^^xx;CkH!36viIeH?uTkocHqh-pN{xDZ1u_mkn-rc!2 zi%Nv<$w@o@ac174B`(tA)_T^-=Zye_AbjntIaW2y0>MM!M#^!W8%TB!Uq@EP$6joI zjD%m!T$JBsC8lMt+oen44fGp%N>^TuXH`sTNdc;+-q4|G<6ftf5kMT2JA~@#A3d*L z+K~=c_c42pQx6W6AbhlENAvY&)hSuIZ=%$xk04-r<=w8JaC-fogZQVH{msTRgqPZ5 z*Ct&T%clHWVz0N8JNf!F`g!F!ZSwuDOc_ZDLjql`Feg`Pi}Id2Jq)myo}9X0#ibGE zsi^$-X`Qg8+`HfW_$(j2JAZXlg&&{O(he(r=JKoN7HYAv=Ycnk&f@{fUA+!iSZdoU zdfizbwX<4ezVBSsik7ltCoRN_4nI^t7)EfqS;i0_aP)gBjM?|h`o+aq-SlGXis_f z^R3Jah=k zqPB!zN+tmT>`Sa{siu?QdjMY1^X*V6F~GaaygZ{UHLCJA5w4A{eoP2(Ya+=$WR~(N zQpP^jfW7LC-tkaHDACz0L{P{S+RWbOvAl+FdFtY$DDm!NtaJGdyc+WtZ5pl)RuoXj z1?=xg$`5iMxO;e@?MEh&ra!x&vsMLe?|`6Imz@>?1nri9|CEv`x}P2ROFcG=Fw`u) z?NLDqBU9eF9ge{dLQ<6LFQl5`e6m(0J}uY*4$A=4WkQTB%xl^GZAf|Yy|G!LLpHc? zq+90xN;_M?4ujUU4D*sn+o|LCLkf=|I>O{uu~=I~BfT3)RWYC|t|$=E9F+8$-nPMC zJu=N_D{#u=ilMtAJ^hxWMgC9Ai*0W9ZTEKdDP*NyC_Ttn2t?su101%g=>%$rp`ZBx zs(-Y*jd}B$ib>9DQ7k%#iZ`1JY~C3o%;wPHzoeJ65l!*94`-i52d0AY1Fl!V$wkVp zy(9f3RUuC+uorK9cURS%XjZ57O)J$R64BFPS5OO^iWIJdlU|3HSQx47Woj9F-igP| zgAw=qXdwGE$sm@{9U!SJ>0nLJLHiD@h8gnAPX}!x6aiWGtvIhOghhZOs==*0?3jUy zviWcWNN&$C)~d3#KXK(0j^tBBR?rkbJyBBKFd>@)?2axZPG@fkB3f&E__aFY9j!|7 z+9>Gr7$^NEzMh)3IGB%ENbXm9W`J)>8@WZ*jkOumVS4!=cKOq(-rKkWQ}&{1JKF#e zE~OIbA~lzi>vZcg23DUhMte3oRVfn~Qi##F7>&P4Pd;X=A_A$ORf@Hl;~-(P65q@s zdyf41erCQ6=Vs2ejCQR?8e@=gZeu$CW_;JDYBT!&u7=}L3y-gfAcNPCh61?N&3Y^U zd(=BxyLoE!y45^`m)FjdIhBoD|M{y_<`wqSx4#C{_x!Zd7=%`@hB|=F%8~r$V;NDdxlbUkOPx#j zVzmv}h|FueZ7%sKTsk+tvNTtgloW^7($V z>-SZ`U$dI&-0Gkc<=|j)-@nC2Q;{`$A{{-29*r)9$fb~5o9U4UUbvmh*V^{_rv->U zMDFDBr8vS?!P)VJ;LfO>SsHb^>~wHN2#Y#=>pJi#SvBF|neXeTD(e7k1C(7RaX)|_ z&nW}|!Z|gBp=*7nDdKrpwv?5)dO-8F|&rX}K+>>~0|1i`d49}4sXR_JZ_AFl?Ei{@2$ALPH!TXwFP)erb zFdkOjZiYrxAoVasa3v1=iVrf>6B0^vjZD}2TJ4ZS}ad7O(@E-hjRh0eQ)5Tf}Fw4{1Do2}hwl zq!;-E>%wCng3V(LDiWtfF&ca+-LEC2&0cS9M+lGi4gQFR-gq;(nSMbBh zvZeoR#)q8IgFlikIySyGm6049UpWx-*sH7h;$)dWm~>qhVv^hQ!&<<7ZtK%ty^C&# zEMi}FY?HiW4~;>1gB^m*nLHAKPg!mll^tChpfYt#4#4rkf2Ict ze3AR4`SR=;8e}|i<#bk96{BR|KInIRh(tL}wu+U(qtVJtH1fDZ7-MU!J0fl=yDX6? zgn|7 zaVfeB5{o2^}(N%>#dd7N$)l)IbzE)d@G@C|-MRUl5pH4Cmw*(MlJwmU*Q7fUuw! zRlzq!3)+b3jr!T2cJh&R zjv#^Wi>>K1@^=tj-cQvl*}0tZ75;X;!BCH3y+F!iRlY9jTR}keH3R?*H)JZpMM=^T zP><~FQM`T{s_hj6-%&?b@tEC8h{L?+iR^W5PPEtFjXCl?_NT>7PUN{(@BH-e_KETT z=4Pb3^^&^l2l%8lk#3mI5*uo@i z$d20sZYsqT`afYx1A9xK9UL)oW{Fpvr)~nbD%d&Ah))4gUa5jhUT0UEtQGxK{Tj9^ zzE(qv#>7=5gYHtc?5TaS!K{(kC$#N!Co_J*MWLFf9mz@DQ zir|c0xlK`lUVXHB6s2}j1-!Ns4(s!2h4Qosa2q@ms8ns0>tPEUcl=cyzy*|6rIFi( zc|~u3+$jst;#|`tiI`GK?k$WNmYJIt6VFRh8vsuq30Tk!j^r(|Gh?j6RQL=R`)b2lzsRrR%%r7d4VKb4EH zxV*nHeDguqI;a4T1}L&miLJc(gqm%W7oc0g)9s>R*weHbLn|7;a5Wk71@YD}n;j86 zEM!uPF{pAnG<`izoZVqEDr&=5E^``fVPLx7NYY$&5PcbJQ9^ePi@en6g{2F=viG!# z<3K_ATL(UTCGC#xp)e`laO+R1J#HCdKfu85*gk3*co({&v-bX4GEjp|0j5Spn~bwR zR%S{D?yAoKwrk%)hx_wld`F$zsN`KY7-ak_ji>uJ(yiHx`C8RRyDk`gC{ImuWnvRG z?g!l#o%i@DMUom*M7ZjYXr*0DU zh|JtopHZbyZwloJp)1QzbAT6B7WG)PbzqkKB)RSnenZ>oWtXhYFnf9Rp4;lB6Dm3~ z%dAVtP&}+yUkbfbAPt!ssk{Rpiwap|`PAbGmY%k3@8heUI3wGSfedE81m|q)OZN!dpB@q93kVg#cD+xuzT^IOmL>g#b~5oY$qUWmEL3u3mCZ7Ik}77Y+|N3wJ;Z z3F)L$-WcM)G6UN6d`jZln}UHE#LPG4*I@AMgCA#m^BYL>Uq9}{Ao=r ze;jNa-P8K&VP)bCT*J!t?RDu#G_MCiqT4dbj5;90sNuqK%m}y!dj8VVaMeo?gZ*W; zaZ=OG2};+xUvT9k`>Ix$kfZYT9|6_6sK2Vmms+Fp^+!L>#Y)HA=?X(E-D=cl55Kd& zYF}Zc`0__Y_M;|n#o8gWM|8%>pk@hh0*ff)vk$FY?Un~MK-5; zBUjA{u<*_so&ha7?-wjoQI0bE<5x@af3p%v-yRi~vhWYRkEMREJgVlgY~8E!RtszN zcJH_vrayy>ce=FuuB#LOS{H0g$cG-FE43)&-&^SUVyojYU(;}^efI1hDZI(o zE^0fHambZ&T*GC{cZQ?3pLl4l-n3iaU|S%Uaf8XnT$hXdEUr1SR#oZR6rr}_%M+(1 z&xRu!lqGtst`|)v4ucCDX?nJ3#mk`e^Ud~bRx(xlFNm_iQiTQ@RSAXc%~fRyeRd=H zLc-t~wVUEEXRY0K9BNOQ&8YV4jE@qucn5Dn95K+U&!;ctRX4>Hl{52V4$Q$kiWDF? zG&Dk%?~axhokWJ-P+v-myHkJCqBMesm=j&{>c%>}wxK`xLHc?Y z@TQ95u3A{_gAQxOC;diJp* zkX2Y&AJm1|C)av9`Av+H9+K`a;MBcnlsDjV>; zkROts3)mz4XJf32+0|H~C)aM8&#ARO${wmiDw4UA`L(32Wp%eNU{|KB&aiOI z*&f`eE#uut`Z1;iB?;A;@xoeOvbDo1PQ(SA$rjL7riO-eAzI(FC8U4SVkq*xm3-Lx zk!9Wu4*z!ngWql3N1hA)e)hWX(4q7E!|&tAy=r=LAy4QF=FJtXz)sqkj+J!TP35Dh zgz_hjkvSdH#Sr8gVW@ z1)E>JT=lOFQ#ubnS+jo|v_LT5zLb|?7aDZ!w^7o1i!Fc%kB;Q$j5bV$_2BQ|3We%N z+;VV^=rk3{cRHvHsQQXV&$7txj9lyN&@ZVO< z6peE{odNLUA0!}>fV;N~{Q67yI8*2rt#aH|LaRBm^pcmwbDFvg3b&j1`^9VvZd2AZ zKX7dq+OL+PoWD%y$2J7LX|pQR-i0LgS^d7^aU!<%SmUzdNv3A=NxU<@{_(B6wTmAC z05Fqn3c+EHcYi(SWH+NX(Fg6*f9i*Ik0WJ#<0N3XLApzIm!bFA32d)0SY z{o_I}owR+DrkqT@o9N3d`?Y!X@1f2|;Oy1R3oz>bzh*y=_&U@feU)aJJE5CR4)4dp zGjR^9^N_^&S&us`b}pTmly&B=TPdUn~e>uT?n`sbZ5+Q{Y8uMO=FfS}6 z{V18x-rnF1u%%{up#N@HlnrYH_K^^PMSLT9AXmmfg*K(~n29BIkE;B2g0%a7< ze@TVMdYlTck2yzBTNDx#-OwT*@A{OV50?wdHpAk;stsLMs(L2cO1ql5a1|i>jSf?l zxFU&PKM$Wid6oCRA6Cg@EJ;VN zgi$-QG#L11vd-hgi-`P44kXoH)^SMkX3scRjmjB&oBf2BS?l|jq<^i07mvqJ$FtQV z?mIH@V0mBL>r1WBg`50By*NYYKdcnm9L+UT6#B~>!?w>hYsBE<9njJAQTP(^)>Q&$7)#_%^IgqOJ z&Id_Me{OsF&YPrtIvf}pEEH?MK^z?}AjVS!neB|p?ki~(+q<8Y&n$zzeEW`=r;v=Q e=EY%Y?f(x++|!!IKW?u800000)m9Jw3JALbSvH6NOyM+!yS~@ z*EhcV#l82RyPUOH=bV{+_I~#7>1XeapR9}+7A7$!006*}5Pu>M0H7jnQ32PG5tnUf z)c^o6-ma(f`1$44#NJ#N@iiIZs;|dpr31hP+*z0RV90U9}SX(aQX< zt?X?q_%2)Wu|f0XT{2E2^CY`WZx+-xkm`a1d?JX|_#h_R4nuDYZB z(VdR%KL%yev9*QR*cn?|*j~PX_LmoQEp7hg1-K+acOB+u7(CTR`-M z%?vGVjO~ofjrF7<`o=oRSEN|{AjQ(c0Wr^iC&mP91+fs8AQzUExIoM)>k0&#@2LGN z2u3=#MojuTb~=|BxL#tAW&&~2Gqbn7MDkTK#MVy7#*XN|ff>ZY(9Y;C_tWpQwz%xs zfZSZi!q@=OL{G=e(7@J6hmDg<|FXyDXku)EAkRV%BJsqD z!O7f;&)8U>j|0MHz{SSJ$;e@#qtD2}#>>md!@{e}$feK11<_&Q;o{+Dwfo+eHiC-~ z8y!1K8*O6?1Ir)$G!!w?u|x3G62UDdJso4FOVqV(Yz}?=U z(zXyY1B&lR2r^$bWBzZ+_4ikpes*VbC1l!v3bJRip1qBk6WuT4e3yYgTm0zbN@x+- zT%lh-uTYn-sV6`b4j~iug7O+Y-a{BHa6EWgfLlI82%y|007(h z6_h1XTd_hPUj=;bA*M2bQ2B0BFRe3LWGW@go<(#R|TRgaw$g& z2re317>Wq9VzJz~{O!g~)MpS2Th?1F*q4u(H!&1#>>*ahdaO5Cu3vtGj)$zIz(RHh zi;a_om6e^1g`JCoOAYbJ_4AQajYat{%~^2}w0!Rk{fB1$(fy5^7*}$}O3CuzvI)vf zlB)s9FX11)-H&I*g z53*7nT;Fc=r%(tEetgV6`i%DaV^)@HQfZtK%OP`2+hZ{)*+`h1$fJJRHwPIjnFwRJ zms4JKv%KnHxrrcx6b}jM0u`ABzyiE{qCh2LA$*Ci1~fJ34`0d`_HvKA>8jaiD^MLeA#{ zJpPq#&9{s<5}RLoVN}H=fq1Q^GP5jVllwsfxMz0+XtKS;t)Hnr)8Ex^%3eiD$&;!! zIZmbXG70Nigal~%-M_&ZVHUz;Wd&hOgH&ubeduS}%B{{76veF8MkUy%j=8lJ^CYcA z_!{jw^P5MZRZQpj1A2}bMus>=fKUq&cvQOH5o)pvz(t}^=M?wQ2 zIFAEh@kGKzz7&D4gtzO{Wxu}f=rTPHO5JHRIkky=GlIr`=D+T_3wgOD92e6t^Marm zb(zNWpm}T()BnL~V|vOVCJh`zmmjnJx--NX`*}>bKqND>?jYgw4*yS4ZQ}2cRoAX@ zE#)z%37$d2wj2v;mR)#`@yVXtku{n*G0eClaZoGWc6M0xDk)K4eCGKz7mX|z;WHl} zKBT10k2aI!$rE*-W_5;aSepx`PF?L{|PzYVLgk}to# z(B$oIMD!K;vn4VL5&$Vhk41+C=clftv7jK-<}d30ykaL~7i;M$I%Ym?x>^*=Dz)H^ zUlj0Pt-+xa6Dk?oeDv|wp$37URZ{a^2*a@Fh4cE ze_W_3lBOp;hFE(qsxl~RK!k*egK)J^p(hy&b0IM5&J*mrl^3HrKInC>(&}nZY-?3* zp1});nV_k7TJ}e}s}EDgs0fr=7u;l7l0cG4WfLJTQf@asQML@w&qnk|B6nmW58@Oz z)qOsydjudaoNX8C9cpdOdHhyKGrLA)=_pGUBPpoTb0f@Bc-8DvTmZ(sePCq6!x_!0 zW~{Vq+o_Voisng1c_eG3yh;Qge4aoB$$KYT z7Txm8TWWv)1rrHJ?xl0B7MuZA;yCf{1nYD_$ zuIq<%ImZjp8ifs zxjKGym98s^=du?G8c%dfCOoNEdXp|AK2^G+tAOwKeFi zHv+#A_>I7C1b!p%8-d>l{6^q60>2UXjlgdNek1T3f!_%HM&LIBzY+M2z;6V8Bk&u6 z-w6Ch;5P!l5%`V3Zv=iL@Ed{O2>eFiHv<395IB7PD36AixWsVcNb+M3RfE?{U)kJo zor~5BEI!<#q(@c?eEbtcSll79#{QW(1P?p%H>Opy4Ow9=^E?nUW{B!18zx*N{9lG5C;YkyUYQAi!T7&Ye@S@`zT1b z0AySw6kMc>aexQ_9Tg274HX?74IKjm{Tk*iOw8-oG4Zi+Zr-|sPegPFpOBE4^dXR# zgyJ3{Avps%1r;?d9qnBpBMT!9%R?Gkn#)d*FfcGMuVLb0V&c&d6B5(>w?7vR0N~{r zL8R}WKg0$J83jQc#BS_Z(^x2KovVF zL4vJn^ezo_vGj~i^+Mx=T=r(e^xrbl=oNNy!`mZ|j8?6zSO0ekx0Qv!(Im?`(5XqH@>G<aN3 zM?QNN15!Zs1ov#f?KPIn1x}fd-a^d{a@>)Y*?bW(VBb}zo1U(4j5qv_OQS`K~X{eM%{?w*zue_Xj=;uzt=!v8i5T;MGHU7Q9#`Iu(8F&rPs7ArrK}wChK=Tf8x+eA1x!xX zmBaO*+;HvfX5gpecC8v+ZP`!)!P`?uFWj#!?NOyfCn#yO<0-B2yBJ>pP``vssuD}6 zCWx+f*nkK6c+_niT?0P||C`334n?UD+C-ZzMNWzg&f2_&Kk%H9x0{$=hXqAR?`&4< zf03|>vJRdudj#E?@k-3#)acl!H8_rOt${3^YpmM^`?=UR4Ge576nbpdR)PB$&q2g# zLQ6R!0%?MDxhh9_dob*wy3=9Vm(qIH1Px-xDKEab-m~L$EMM!-!pw?^m3AgH;=lyZ z06rkU{6D(f#JP1`D$#TFumf)1asi0E1?xUO1p48}h4K`rdf(&dmq2JEu)7qqkA3w4*+ zl6Ph-*=*_||4%5TE~qNcFT)!JQ{rKxG>yv$3N{y`^=I(OFM1X7cVf(H4v^>$0w#3nyfODW)zC#n;1RDkSpRT6_Cf(?gVFT!F$O z1X8#1BvoLY#0E3}#?Jq$V?c_?Svxg&6FtBbaxWlTWYOW22JTMF71H^pv9~^NQgTug z%&@~9TudsLK!QBPW%w$8R+(&_&mCjYl$)wMrg8DW)V1h*1P+3p+%uP$|5HNSS64Mn9-32mJi(^aY&fOQ$rh@E^3+Hc`>Wrki#$Eu(C_N&Itn$@Y9qQ?mfc{&jyX=V# zrvsf`DO}JI%*4}c1nK!7D@d}jNzHMF_lWHSt;_F>1<%l500Kb}@Mq@LaA=5oi_$PB zLNpdm&*11C(0FEu^!{TfKAd&tvPkATrXly-s}c?T**uCM(QFY(=$-lB}c7S&4ePq!zfg#mC6qOsqLXI4@;LeWqsvzX|$8 z@H)RRXe^Gvrmbg4Xs2&nL&P2sGxmJZuMCF-9r!-iAx<;;D~}{jq+~~A$o)T=DPhS` z(w{oCTcvQnt%6k<_?U){EgZ<98NHlv=QwBwwRCteRm*dga~@iik~iQXngcH1da?Jh z`kQDCbg{O5Q;=F_fRU5lTF|?}wz1!a%gP-m>5wyR(;bbjCx^_$V!2TG!~ZOR;8ML! z6eFQ2&p{IXewyZh>J?XV?x8?`V=b6XG0TmU>~$z0;w;t_eh#UM#|p z239@m-af1CSehv;E7v_HXKi&91m|VsdB5O^&TgabWp?Smu8bk_%~^81@7JCrkH$5-wLs$ey#{qB7sJzunX(UB}$Uxp)8$8 zT>yyF6v_os`P|PB105IDTDDtZlFlk*b4kE?g>VWv)%VItnC+3t<*Q_bJNU%&PsMLd zlDF3qLJI_UzS4@VvHSNV1tfNg&B zX_A732TngMsPEH3-GAS@(ya02Bn0XnslBe_X$IIE3i%LX~2E{VnE8-=YI_ZssrST6(YpT2&CkzgH3WO&P!IpcxF=1VVFK_=C9`Fu{`ojlo zoJJvbx=zz%@$`FwEq7sf7XW`)wP{HZNj7|Lv<^~ww3Zijash~%v}UQdcBSWKSZ`*g z2(@wVw$%*$ltnh62Z0pin5Nfb-@su#e{Ln@`PtU2=&k+3zedHl-8XGNwyIE+emYf< z8OI!EH7rb+bZelr;#GNM17eEE3^kR%=fb*@u^Krt?(Tkzv}#H2#2|_i_(YFEkk(CB z+lG^&$}oEzx5jBx;jB;;6f+GsD2ybI-Q~@MlsT{Gtemsw^|~3SPZ0!daVaE#oNVuc zwj5xOPGc4lh~)-Nob7kViVl3MYJruoppWIjJb%bK;MD#Dj>xuU@O<&^`oWU1`RT*n zh5qxcEgX+pt>L?lg6rs3GbT=fD$u=6muz{;UdneBRTkXzv@JTTSVry)`l-3`J*(*d ztxN!e7h%c>#+)1gsn@sS40w>5fs=Y8P*67>?epnogIjf?)ZJ6BG0i%0 ztbHO}*CdGV0PLDNQy$%BuxjFFFMULt zI=}88pfR69;Ly#q1NKiJJQ`Qq^sE;I`OCqFOG}p$SeJY2GhM2?lj>ejh)hL(hE;<) zIzRV20*=UEjq-Wer>2kWhi;nEU?wR7FaSsa%8(n68h+J{D;U)Po~GgtfdZz9a$i5D z_GBAO7@NJVKxe|(PN+S1>6JMP?M<0U#Q(ND{vwXEG01u$Y)@>h=mH>6rnI+GzcgMv&l#yXmHj4SvN|Q3b zcGGs9S==o+e2dO&bhn^%AZgvb0yvZ*k<$CsfRiO*b7uoCR%CRV_Oakal*4Vm2NpQG z=@t3wrixny2SxPtxM+M9%ay|U2n_4~mebvMbp20n@F$BgIOo6wPn)AK=hv1poGSPF`Dud>#TrPHWc`8kjZ>swyHES4Bge)om;7sXhzw*+xk4woZJe zyLP3B$S;u}p@zNWj{)rF5j%MoyXF;+mBYLJYBZqj%J7}TePFPMARWGYOy#%JXV^F+ zVhK<@m_Thu`p1zs1q}5^@sBS6ju(JD6F_PbBs z)sn5cW{|$g2`fKTyu@8Tw&w@#f2HwXpYAOM3V<v;i#f^L(}A8O|%%^Z~~Olh{;JJL&8(|+5WK>P<-kI$UnsdEzoZgWxa&(wpa}MllBd=j7_PJ$DaVwXJQD-r4 zmo5t*-QCh4@^=fZ7)@k@~3i10>-x!-{iXSe>&M-lydx%aBq8V zz=dVqI9;z0Eg<1`I)}q*ZEkwSO4Q+4e1J-%{B`nhh&WuVC+K}np6v#$lD84vJI80m z|CMk9>FsQ%2M&(0xit+A|H6y60+rC0o6rpW*n-x;Cb8?__^nK`}{7HiKbh;<+Nt^H&3>NSiW%(?L-t>8HdB zA6Gjc^A|QNEesZ`GBE`$g#?7UxMP$)!bo!|kqrzvD9UJxQ>6IJ$XOc<LZ(H$AkNrf}Q-=$H&_UJ2=w|YQ#J?x0Dhg>; zPp7s?TR%pO#1{BGZG>&gb4NZ3yss$lkep$_L;4amZ25Xlkv~Tv8sIck zZhKxZD;2G{$op{2_uP9Lcs6fPt!8~_*C$kXU20T50F=kBKtzOs{9*l1yYx%?O+PWw zY*x$KKKGgwdO9e{=vR67)IBn3mQ?Eo{WY@1UE30#u>7szmw@@O{%VahV!6f0uh%3~ z%k|3lhwH(BF((lTYpViHlTwM2Rr7Mq+Pzj=7+LM4K*AR%o@~V|De2oIM^+=^y}{L4 zhTT)R0<7F#RZ5)6hU)=tXT0oj4H933=19P~>^=U6R)Y~Pj%x!uI~t8vCqdapongW1m#Zm6K>qVve}KMbr<-XFi3#aU;>Kf!vt7T1iE zc>!>~0NjM@E4Gf3IT!|<7Bf4}xcoq$_Dn&(??)q&i%XA)_H3 zKA%nv9wxBT=o24$Etn==Unv&691>go@mi(Sb2N0?V6vU zGn@*MOxUiy>NM2G!@M!+a>$kB6K|N@bE@#A=0+ck^hK}nGNd9LM`-hrK&yN0sP|Vecok$@VgSF+VT9HSst$ah}cBot=8;;K)|S$zXvo$ zkgIBM>ARUiGP(p94S_X>04NKbY|^8xZqpmbXSkKLS{uCgbwiq;KX%6YcD<4kMgNXi zk21H_lxn@b+1Ye7N{TD-xb0@fK;U!QW&^OW&c6j}2-OB~i9PR45XJPrZa@t{`qqP$ zn%j-M<54mOFXfyBj}9MM(XM+XohE?if(G9@8rIJhfC*H))4?KyAx(evI7CAHVQt%K zhuC*ZXkhvp@aUZU)dSq|sH|CvJy`S-@vRd>OZgN;t`z7(fRo{ur5b+q{;gJfOWNcV#=)eE zF~Fn^S2HK`PfmP5FtSD>DDph2J-?)~_8qVs)tnXhvWq4>1#7}T;2~o~*INAr0HX?= zvEkY>-8U_`sm&zznaTN3x42b-B@L^XZ)M@Yu*NsTNpE_~*UmF^RmdRErfPB8{58<1 zSv!T0U}>;}u3LOL_;IAR3~{?c@7xoAjvz|KK!DOyB20`&7&;o?_)?I5hOnegqR4ohMmT0lFnEU<-gyCVSNggy;=rF%)+2Xe6^QcV zoPEfy&ZEC(14!*|61p`cC}&64(s%XF=~HgNM0(o>*Ia2r7R4q>OqUb1Z-JR>a`0d0i9yp58+MKLvYV$_pS?5Myz*O_vYx^AXlza|KG zs9PGjccwUyBN^PVZY<+1S&PYkPBE>V!Iot*Rvn+tdRO$LgMHSBjMDHV?KsSk1;qX(8ldOo+gt8;ABU^$5rqKjKv05%v~ z?_L0EkcTW;vO5Vi#WK<{>Mj82!d_&)WbRtdi5Gy!wz50LQ)93|LQKyyszF10XSt2rkH`ohk+}9@V5)f7XiI&Qp<)r+$N(hflN4HMi*dn z*zpkKL?TXb!?{6aqI6XHL583B+}~-Mhf_gYDshU(pvyR#JmBC3xL8^Ql=KwTc~98~ z+M5d8@3{cn*Nos63Z)7ZeoPFgudWE)g?N5rr)N=oiW*HKU_F)KSsb9KG)huQ@vVj! z_MoKDM^LP>=V9ZVPD+7Z1&{AJ2PtWFx!l%xTf^M9L`KFtw!?MPw>1tN*IhB`lIb3J zKSfefd;#D`(lR(pNS2_#Z-h{iSKi2frxwya&kD+33{quDlk(I6$96o5PUNII1YyC6R*eExh1Q>!zPgI;Njh%F4EOjZj)X zrQT1nxIcvz=J=)+zED}ZnsVCL=!Ovy!!LW1H*i3=7aafV_-G$c5e7hzc^aNCGGUAd z!Z_MC+|_{vfhKdvPk|yKv-Wnt%yVd-LjP)a%GHa6h;Tsi&vY;9I5-OmIX18lEU>me zd$Ti~SOrDv7E1jd0+_xzByu!gNIr+6)SFVwA^#(iSoC-xR$G6&1T@$de7bP~7|lw- zN)zd6CoQ<{2!>q%L|*j-x3Znyf`TppN{)&`F;wvea`D+3&eqoyVco-{P{dltoC?}N zWVgzBB8-SchyLqb*-j$Pr0+7#ciS_Q2> ze2;C=@qbome_An2VtAN&u2E@>=5Cm|{oTNVL3bioPb9KwrT*CThdlcaQVGO)YSLS{ zhg5{fcF;P#PuCNMMDRb@QJmF}1h5|h7fzM=Hspw=@JG<=+GlIz>c)!%GuiNDR`1d&~?Pocewv76If z^*VeujWqhh3@J*S4bpG}@j_BV&J~20oixLU7PjjcE{%&&p;#4`b_mpEAK z%P2Sq;i7-g@%9F9@z$;J=VOVJlQQo_t>2ZCqYKq%z)V#o6uiQgX`XhO&}SS9#Y50z z)5ld+Ken41MG{5zD!%aWtkIRX4GUX!7kH3FK+sbl|6BopSo-^WkqMEDAkxBAjF<4< zQ*tlm{^GK*>vle4x}ci4450-Hp!nKoyNMQ4?6OmN1igf`y};J9u+G9~2@3Nd-wS{` z!8oUZ^O{aYrFntQ`7Fj-;>r_lypa_l!l!RFMa`^s9~hqZfZ<*Ai9`qD+qTZGJ;8Z% zh|t%Ov&m`ZZ%ji_g0x%s4f-S9(@bBe5K3<9s!UWLCcX-wJP?BUyaT`rD୅?_ z*goS{Wm+M&tu%$!$LH9PiC;O=UoQ?I%wn8^<0SLZ0@8W&yQHN!(con<7-l9(LW#8c z=q#^RpYl1_I0u~jkEx-A9H)7hRZ%lYS{>Oipsch5d&OZU2Kxe4v!#Xg95q9U8MF2w zJO3so3pJdz<%2Mh^F)iB2lX_bL<*t1VP4G+tz)3m#cBot{QDia8e5F)c~VB;u}UQ5A5jarSk+dE8P)x05KU(6ZGn;^k?Y zkaM@!A%>4u*&E`-u2snS6Wi;6+u{HliH%2QR>Z-Lwbw@{IV-+>(=_KXHcy%$f=S#Z zTMJpy4EdrQTAghz#gcNzysKVhh~wN9EVc1ql|M_FXR;iXZ06MhSmqi=h{hmoTU@z8 zc2}mop0YrX%bnF5h>?&>G7Ksrqn%$|0Blz8ys8OG1Mg+NF4s>Ri3wTs5^M25*wTj}h!t%&D=`!=ihHbrz%hj=_rV+E4sv&74=C*@X1uZykH$%xMf}obiqV2?9QR zQnFUJ2=s4R_zBw|0Tr?-e>6iL<0fMHOda(tU9fyQxkvaN8H>1qxr%|)$CLVHr9nnP z%k#3U?!tEo%1=@C(+M6HQX(8A!unhpq00-I(oW=_Jv?3?=d^6hfUGhI1O9R<-cYEy z({PZPM`1k=v8$k-%wE>%yV?5XMKr)&r3Lu%{5cJlRx{GJ?)aJdtU)|ycjrPhGf;4Z zmK=_)2q%~dbPFfe@|}7?%WO)tubp(j>2|UY5j2!88nUa5=a+liRaB-KN+sU1Hehp& z99Wl$XB8Um_(TRXRRdBWRhMwL55}0z85xM=Pi;$4$m`(n-c}nM=M^2GCfvPc<(8A(0lJM3loiiiuZf9Qukl4kMD~evt8SC@69N>7 z4N!*hYU)rttrh(+b4Lrv_{sxZuZ`V8!(~DGu8t3J_@^no?IxUZ^(jK0dH9EjEDRmR zD`e=^y+q#{;4&F-cxiCI-C2I|(O0?D4r}zad9fu%NT$-Omt3BbyN0{ zi-VfS7VLSq^DRFnI{1nyI(q*_!q5Oth7GY^pn$xyY;_9l50AjB(h$b(fX?(z|EP$l zXEplPy3U2n}xhCg`)W;(EdfYBzUxesMvMEuTL4QLt5ei2l6lK25K z)g%;|ckRgYzTBNYo@95+2dh-jGk5a)ix$~9UR&+X z%|CJ%z90PI-T^^laCQ*s>WPk$BYRPW3#xsR90CD z^$GAn+1DRWbaPwd=FmE+^+Dk3;sLYS%KS3_#WA_?NNPm!+e)nFDecq7F*VjENz)kS z$Bl@3ywwyDjN5t^j8XAi6jDZFDw6|2~(FF%aY?s8}yOEJ9%^#QT>(!bnBFyLnvaTT1P48w7{D7QB{C}F)C37}EBvU6LtdcD=p zypvwRhNl#jnSvjF6fB5j$$#9SEG6PgFC9lIy}RdSPlGYSigKdNY&*jmy4WCnQrpp< zYWr6UcKP&zj0oZyY=Y7=Eriu!m*~%DhDVx|U@CSR{sQCtkg#$mE5XZj;OraPlhr0E z!_!0smF`5*KZOoWs*@dDV|7%*6~&YS=)^1sKJ)+7CD+H)&=v>D4l$tVBZ}k+k>?~* zl6#4fpJB1No*LSVjUZP5dKmr=2is`JFtUm{_()IZ0#Jy#|G9Ci^@Pm8;Cv*-a{2+m zv72_BX?
T<<`aNR5pUaBFCQ;L?37j0zLk%7`eyQKVj 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%0D>BVAmJI2)_(-M2eiGpR*4?gw9T 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

=c&~A1`s+3u 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�?+F-B|<+;TZlXaVve)p}rlc@uIy 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 z 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

    %bNlnZ?KS?lUkMp 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

    sEfh$?G0FW$*Y^T;6iGyGxV%dRQ-WD0{*eoF- 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

    w^Nji^)3dLj>v_EI4f0DnC|l> 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 It1tM)eTdeoUjgcsbd` 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󎲣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

    XExh=5vbvaj2S5H=>x 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

    C;%H0WS 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,Bxw>{03Z#Csv@e{c5)x>(%+Ez-d5am`j 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

    )u?y@7XkDFlyTPkoW{>qjnArhQ#F3eH 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 literal 0 HcmV?d00001 diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/main.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/main.py new file mode 100644 index 00000000..6b809e8a --- /dev/null +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/main.py @@ -0,0 +1,255 @@ +"""Entrypoint for the Reachy Mini conversation app.""" + +import os +import sys +import time +import asyncio +import argparse +import threading +from typing import Any, Dict, List, Optional + +from reachy_mini import ReachyMini, ReachyMiniApp +from reachy_mini_conversation_app.utils import ( + parse_args, + setup_logger, + handle_vision_stuff, + log_connection_troubleshooting, +) + + +def update_chatbot(chatbot: List[Dict[str, Any]], response: Dict[str, Any]) -> List[Dict[str, Any]]: + """Update the chatbot with AdditionalOutputs.""" + chatbot.append(response) + return chatbot + + +def main() -> None: + """Entrypoint for the Reachy Mini conversation app.""" + args, _ = parse_args() + run(args) + + +def run( + args: argparse.Namespace, + robot: ReachyMini = None, + app_stop_event: Optional[threading.Event] = None, + settings_app: Optional[Any] = None, + instance_path: Optional[str] = None, +) -> None: + """Run the Reachy Mini conversation app.""" + try: + import gradio as gr + from fastapi import FastAPI + from fastrtc import Stream + from gradio.utils import get_space + except ImportError as exc: + raise RuntimeError( + "Reachy OpenShell conversation dependencies are not installed. " + "Run `uv sync` or `pip install -e .` from this project directory." + ) from exc + + # Putting these dependencies here makes the dashboard faster to load when the conversation app is installed + from reachy_mini_conversation_app.moves import MovementManager + from reachy_mini_conversation_app.console import LocalStream + from reachy_mini_conversation_app.openai_realtime import OpenaiRealtimeHandler + from reachy_mini_conversation_app.tools.core_tools import ToolDependencies + from reachy_mini_conversation_app.audio.head_wobbler import HeadWobbler + + logger = setup_logger(args.debug) + logger.info("Starting Reachy Mini Conversation App") + + if args.no_camera and args.head_tracker is not None: + logger.warning( + "Head tracking disabled: --no-camera flag is set. " + "Remove --no-camera to enable head tracking." + ) + + if robot is None: + try: + robot_kwargs = {} + if args.robot_name is not None: + robot_kwargs["robot_name"] = args.robot_name + + logger.info("Initializing ReachyMini (SDK will auto-detect appropriate backend)") + robot = ReachyMini(**robot_kwargs) + + except TimeoutError as e: + logger.error( + "Connection timeout: Failed to connect to Reachy Mini daemon. " + f"Details: {e}" + ) + log_connection_troubleshooting(logger, args.robot_name) + sys.exit(1) + + except ConnectionError as e: + logger.error( + "Connection failed: Unable to establish connection to Reachy Mini. " + f"Details: {e}" + ) + log_connection_troubleshooting(logger, args.robot_name) + sys.exit(1) + + except Exception as e: + logger.error( + f"Unexpected error during robot initialization: {type(e).__name__}: {e}" + ) + logger.error("Please check your configuration and try again.") + sys.exit(1) + + # Auto-enable Gradio in simulation mode (both MuJoCo for daemon and mockup-sim for desktop app) + status = robot.client.get_status() + if isinstance(status, dict): + simulation_enabled = status.get("simulation_enabled", False) + mockup_sim_enabled = status.get("mockup_sim_enabled", False) + else: + simulation_enabled = getattr(status, "simulation_enabled", False) + mockup_sim_enabled = getattr(status, "mockup_sim_enabled", False) + + is_simulation = simulation_enabled or mockup_sim_enabled + + if is_simulation and not args.gradio: + logger.info("Simulation mode detected. Automatically enabling gradio flag.") + args.gradio = True + + camera_worker, _, vision_manager = handle_vision_stuff(args, robot) + + movement_manager = MovementManager( + current_robot=robot, + camera_worker=camera_worker, + ) + + head_wobbler = HeadWobbler(set_speech_offsets=movement_manager.set_speech_offsets) + + deps = ToolDependencies( + reachy_mini=robot, + movement_manager=movement_manager, + camera_worker=camera_worker, + vision_manager=vision_manager, + head_wobbler=head_wobbler, + ) + current_file_path = os.path.dirname(os.path.abspath(__file__)) + logger.debug(f"Current file absolute path: {current_file_path}") + chatbot = gr.Chatbot( + type="messages", + resizable=True, + avatar_images=( + os.path.join(current_file_path, "images", "user_avatar.png"), + os.path.join(current_file_path, "images", "reachymini_avatar.png"), + ), + ) + logger.debug(f"Chatbot avatar images: {chatbot.avatar_images}") + + handler = OpenaiRealtimeHandler(deps, gradio_mode=args.gradio, instance_path=instance_path) + + stream_manager: gr.Blocks | LocalStream | None = None + + if args.gradio: + api_key_textbox = gr.Textbox( + label="OPENAI API Key", + type="password", + value=os.getenv("OPENAI_API_KEY") if not get_space() else "", + ) + + stream = Stream( + handler=handler, + mode="send-receive", + modality="audio", + additional_inputs=[ + chatbot, + api_key_textbox, + ], + additional_outputs=[chatbot], + additional_outputs_handler=update_chatbot, + ui_args={"title": "Talk with Reachy Mini"}, + ) + stream_manager = stream.ui + if not settings_app: + app = FastAPI() + else: + app = settings_app + + app = gr.mount_gradio_app(app, stream.ui, path="/") + else: + # In headless mode, wire settings_app + instance_path to console LocalStream + stream_manager = LocalStream( + handler, + robot, + settings_app=settings_app, + instance_path=instance_path, + ) + + # Each async service → its own thread/loop + movement_manager.start() + head_wobbler.start() + if camera_worker: + camera_worker.start() + if vision_manager: + vision_manager.start() + + def poll_stop_event() -> None: + """Poll the stop event to allow graceful shutdown.""" + if app_stop_event is not None: + app_stop_event.wait() + + logger.info("App stop event detected, shutting down...") + try: + stream_manager.close() + except Exception as e: + logger.error(f"Error while closing stream manager: {e}") + + if app_stop_event: + threading.Thread(target=poll_stop_event, daemon=True).start() + + try: + stream_manager.launch() + except KeyboardInterrupt: + logger.info("Keyboard interruption in main thread... closing server.") + finally: + movement_manager.stop() + head_wobbler.stop() + if camera_worker: + camera_worker.stop() + if vision_manager: + vision_manager.stop() + + # Ensure media is explicitly closed before disconnecting + try: + robot.media.close() + except Exception as e: + logger.debug(f"Error closing media during shutdown: {e}") + + # prevent connection to keep alive some threads + robot.client.disconnect() + time.sleep(1) + logger.info("Shutdown complete.") + + +class ReachyMiniConversationApp(ReachyMiniApp): # type: ignore[misc] + """Reachy Mini Apps entry point for the conversation app.""" + + custom_app_url = "http://0.0.0.0:7860/" + dont_start_webserver = False + + def run(self, reachy_mini: ReachyMini, stop_event: threading.Event) -> None: + """Run the Reachy Mini conversation app.""" + loop = asyncio.new_event_loop() + asyncio.set_event_loop(loop) + + args, _ = parse_args() + + instance_path = self._get_instance_path().parent + run( + args, + robot=reachy_mini, + app_stop_event=stop_event, + settings_app=self.settings_app, + instance_path=instance_path, + ) + + +if __name__ == "__main__": + app = ReachyMiniConversationApp() + try: + app.wrapped_run() + except KeyboardInterrupt: + app.stop() diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/moves.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/moves.py new file mode 100644 index 00000000..3c319e73 --- /dev/null +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/moves.py @@ -0,0 +1,849 @@ +"""Movement system with sequential primary moves and additive secondary moves. + +Design overview +- Primary moves (emotions, dances, goto, breathing) are mutually exclusive and run + sequentially. +- Secondary moves (speech sway, face tracking) are additive offsets applied on top + of the current primary pose. +- There is a single control point to the robot: `ReachyMini.set_target`. +- The control loop runs near 100 Hz and is phase-aligned via a monotonic clock. +- Idle behaviour starts an infinite `BreathingMove` after a short inactivity delay + unless listening is active. + +Threading model +- A dedicated worker thread owns all real-time state and issues `set_target` + commands. +- Other threads communicate via a command queue (enqueue moves, mark activity, + toggle listening). +- Secondary offset producers set pending values guarded by locks; the worker + snaps them atomically. + +Units and frames +- Secondary offsets are interpreted as metres for x/y/z and radians for + roll/pitch/yaw in the world frame (unless noted by `compose_world_offset`). +- Antennas and `body_yaw` are in radians. +- Head pose composition uses `compose_world_offset(primary_head, secondary_head)`; + the secondary offset must therefore be expressed in the world frame. + +Safety +- Listening freezes antennas, then blends them back on unfreeze. +- Interpolations and blends are used to avoid jumps at all times. +- `set_target` errors are rate-limited in logs. +""" + +from __future__ import annotations +import time +import logging +import threading +from queue import Empty, Queue +from typing import Any, Dict, Tuple +from collections import deque +from dataclasses import dataclass + +import numpy as np +from numpy.typing import NDArray + +from reachy_mini import ReachyMini +from reachy_mini.utils import create_head_pose +from reachy_mini.motion.move import Move +from reachy_mini.utils.interpolation import ( + compose_world_offset, + linear_pose_interpolation, +) + + +logger = logging.getLogger(__name__) + +# Configuration constants +CONTROL_LOOP_FREQUENCY_HZ = 100.0 # Hz - Target frequency for the movement control loop + +# Type definitions +FullBodyPose = Tuple[NDArray[np.float32], Tuple[float, float], float] # (head_pose_4x4, antennas, body_yaw) + + +class BreathingMove(Move): # type: ignore + """Breathing move with interpolation to neutral and then continuous breathing patterns.""" + + def __init__( + self, + interpolation_start_pose: NDArray[np.float32], + interpolation_start_antennas: Tuple[float, float], + interpolation_duration: float = 1.0, + ): + """Initialize breathing move. + + Args: + interpolation_start_pose: 4x4 matrix of current head pose to interpolate from + interpolation_start_antennas: Current antenna positions to interpolate from + interpolation_duration: Duration of interpolation to neutral (seconds) + + """ + self.interpolation_start_pose = interpolation_start_pose + self.interpolation_start_antennas = np.array(interpolation_start_antennas) + self.interpolation_duration = interpolation_duration + + # Neutral positions for breathing base + self.neutral_head_pose = create_head_pose(0, 0, 0, 0, 0, 0, degrees=True) + self.neutral_antennas = np.array([0.0, 0.0]) + + # Breathing parameters + self.breathing_z_amplitude = 0.005 # 5mm gentle breathing + self.breathing_frequency = 0.1 # Hz (6 breaths per minute) + self.antenna_sway_amplitude = np.deg2rad(15) # 15 degrees + self.antenna_frequency = 0.5 # Hz (faster antenna sway) + + @property + def duration(self) -> float: + """Duration property required by official Move interface.""" + return float("inf") # Continuous breathing (never ends naturally) + + def evaluate(self, t: float) -> tuple[NDArray[np.float64] | None, NDArray[np.float64] | None, float | None]: + """Evaluate breathing move at time t.""" + if t < self.interpolation_duration: + # Phase 1: Interpolate to neutral base position + interpolation_t = t / self.interpolation_duration + + # Interpolate head pose + head_pose = linear_pose_interpolation( + self.interpolation_start_pose, self.neutral_head_pose, interpolation_t, + ) + + # Interpolate antennas + antennas_interp = ( + 1 - interpolation_t + ) * self.interpolation_start_antennas + interpolation_t * self.neutral_antennas + antennas = antennas_interp.astype(np.float64) + + else: + # Phase 2: Breathing patterns from neutral base + breathing_time = t - self.interpolation_duration + + # Gentle z-axis breathing + z_offset = self.breathing_z_amplitude * np.sin(2 * np.pi * self.breathing_frequency * breathing_time) + head_pose = create_head_pose(x=0, y=0, z=z_offset, roll=0, pitch=0, yaw=0, degrees=True, mm=False) + + # Antenna sway (opposite directions) + antenna_sway = self.antenna_sway_amplitude * np.sin(2 * np.pi * self.antenna_frequency * breathing_time) + antennas = np.array([antenna_sway, -antenna_sway], dtype=np.float64) + + # Return in official Move interface format: (head_pose, antennas_array, body_yaw) + return (head_pose, antennas, 0.0) + + +def combine_full_body(primary_pose: FullBodyPose, secondary_pose: FullBodyPose) -> FullBodyPose: + """Combine primary and secondary full body poses. + + Args: + primary_pose: (head_pose, antennas, body_yaw) - primary move + secondary_pose: (head_pose, antennas, body_yaw) - secondary offsets + + Returns: + Combined full body pose (head_pose, antennas, body_yaw) + + """ + primary_head, primary_antennas, primary_body_yaw = primary_pose + secondary_head, secondary_antennas, secondary_body_yaw = secondary_pose + + # Combine head poses using compose_world_offset; the secondary pose must be an + # offset expressed in the world frame (T_off_world) applied to the absolute + # primary transform (T_abs). + combined_head = compose_world_offset(primary_head, secondary_head, reorthonormalize=True) + + # Sum antennas and body_yaw + combined_antennas = ( + primary_antennas[0] + secondary_antennas[0], + primary_antennas[1] + secondary_antennas[1], + ) + combined_body_yaw = primary_body_yaw + secondary_body_yaw + + return (combined_head, combined_antennas, combined_body_yaw) + + +def clone_full_body_pose(pose: FullBodyPose) -> FullBodyPose: + """Create a deep copy of a full body pose tuple.""" + head, antennas, body_yaw = pose + return (head.copy(), (float(antennas[0]), float(antennas[1])), float(body_yaw)) + + +@dataclass +class MovementState: + """State tracking for the movement system.""" + + # Primary move state + current_move: Move | None = None + move_start_time: float | None = None + last_activity_time: float = 0.0 + + # Secondary move state (offsets) + speech_offsets: Tuple[float, float, float, float, float, float] = ( + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + ) + face_tracking_offsets: Tuple[float, float, float, float, float, float] = ( + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + ) + + # Status flags + last_primary_pose: FullBodyPose | None = None + + def update_activity(self) -> None: + """Update the last activity time.""" + self.last_activity_time = time.monotonic() + + +@dataclass +class LoopFrequencyStats: + """Track rolling loop frequency statistics.""" + + mean: float = 0.0 + m2: float = 0.0 + min_freq: float = float("inf") + count: int = 0 + last_freq: float = 0.0 + potential_freq: float = 0.0 + + def reset(self) -> None: + """Reset accumulators while keeping the last potential frequency.""" + self.mean = 0.0 + self.m2 = 0.0 + self.min_freq = float("inf") + self.count = 0 + + +class MovementManager: + """Coordinate sequential moves, additive offsets, and robot output at 100 Hz. + + Responsibilities: + - Own a real-time loop that samples the current primary move (if any), fuses + secondary offsets, and calls `set_target` exactly once per tick. + - Start an idle `BreathingMove` after `idle_inactivity_delay` when not + listening and no moves are queued. + - Expose thread-safe APIs so other threads can enqueue moves, mark activity, + or feed secondary offsets without touching internal state. + + Timing: + - All elapsed-time calculations rely on `time.monotonic()` through `self._now` + to avoid wall-clock jumps. + - The loop attempts 100 Hz + + Concurrency: + - External threads communicate via `_command_queue` messages. + - Secondary offsets are staged via dirty flags guarded by locks and consumed + atomically inside the worker loop. + """ + + def __init__( + self, + current_robot: ReachyMini, + camera_worker: "Any" = None, + ): + """Initialize movement manager.""" + self.current_robot = current_robot + self.camera_worker = camera_worker + + # Single timing source for durations + self._now = time.monotonic + + # Movement state + self.state = MovementState() + self.state.last_activity_time = self._now() + neutral_pose = create_head_pose(0, 0, 0, 0, 0, 0, degrees=True) + self.state.last_primary_pose = (neutral_pose, (0.0, 0.0), 0.0) + + # Move queue (primary moves) + self.move_queue: deque[Move] = deque() + + # Configuration + self.idle_inactivity_delay = 0.3 # seconds + self.target_frequency = CONTROL_LOOP_FREQUENCY_HZ + self.target_period = 1.0 / self.target_frequency + + self._stop_event = threading.Event() + self._thread: threading.Thread | None = None + self._is_listening = False + self._last_commanded_pose: FullBodyPose = clone_full_body_pose(self.state.last_primary_pose) + self._listening_antennas: Tuple[float, float] = self._last_commanded_pose[1] + self._antenna_unfreeze_blend = 1.0 + self._antenna_blend_duration = 0.4 # seconds to blend back after listening + self._last_listening_blend_time = self._now() + self._breathing_active = False # true when breathing move is running or queued + self._listening_debounce_s = 0.15 + self._last_listening_toggle_time = self._now() + self._last_set_target_err = 0.0 + self._set_target_err_interval = 1.0 # seconds between error logs + self._set_target_err_suppressed = 0 + + # Cross-thread signalling + self._command_queue: "Queue[Tuple[str, Any]]" = Queue() + self._speech_offsets_lock = threading.Lock() + self._pending_speech_offsets: Tuple[float, float, float, float, float, float] = ( + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + ) + self._speech_offsets_dirty = False + + self._face_offsets_lock = threading.Lock() + self._pending_face_offsets: Tuple[float, float, float, float, float, float] = ( + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + ) + self._face_offsets_dirty = False + + self._shared_state_lock = threading.Lock() + self._shared_last_activity_time = self.state.last_activity_time + self._shared_is_listening = self._is_listening + self._status_lock = threading.Lock() + self._freq_stats = LoopFrequencyStats() + self._freq_snapshot = LoopFrequencyStats() + + def queue_move(self, move: Move) -> None: + """Queue a primary move to run after the currently executing one. + + Thread-safe: the move is enqueued via the worker command queue so the + control loop remains the sole mutator of movement state. + """ + self._command_queue.put(("queue_move", move)) + + def clear_move_queue(self) -> None: + """Stop the active move and discard any queued primary moves. + + Thread-safe: executed by the worker thread via the command queue. + """ + self._command_queue.put(("clear_queue", None)) + + def set_speech_offsets(self, offsets: Tuple[float, float, float, float, float, float]) -> None: + """Update speech-induced secondary offsets (x, y, z, roll, pitch, yaw). + + Offsets are interpreted as metres for translation and radians for + rotation in the world frame. Thread-safe via a pending snapshot. + """ + with self._speech_offsets_lock: + self._pending_speech_offsets = offsets + self._speech_offsets_dirty = True + + def set_moving_state(self, duration: float) -> None: + """Mark the robot as actively moving for the provided duration. + + Legacy hook used by goto helpers to keep inactivity and breathing logic + aware of manual motions. Thread-safe via the command queue. + """ + self._command_queue.put(("set_moving_state", duration)) + + def is_idle(self) -> bool: + """Return True when the robot has been inactive longer than the idle delay.""" + with self._shared_state_lock: + last_activity = self._shared_last_activity_time + listening = self._shared_is_listening + + if listening: + return False + + return self._now() - last_activity >= self.idle_inactivity_delay + + def set_listening(self, listening: bool) -> None: + """Enable or disable listening mode without touching shared state directly. + + While listening: + - Antenna positions are frozen at the last commanded values. + - Blending is reset so that upon unfreezing the antennas return smoothly. + - Idle breathing is suppressed. + + Thread-safe: the change is posted to the worker command queue. + """ + with self._shared_state_lock: + if self._shared_is_listening == listening: + return + self._command_queue.put(("set_listening", listening)) + + def _poll_signals(self, current_time: float) -> None: + """Apply queued commands and pending offset updates.""" + self._apply_pending_offsets() + + while True: + try: + command, payload = self._command_queue.get_nowait() + except Empty: + break + self._handle_command(command, payload, current_time) + + def _apply_pending_offsets(self) -> None: + """Apply the most recent speech/face offset updates.""" + speech_offsets: Tuple[float, float, float, float, float, float] | None = None + with self._speech_offsets_lock: + if self._speech_offsets_dirty: + speech_offsets = self._pending_speech_offsets + self._speech_offsets_dirty = False + + if speech_offsets is not None: + self.state.speech_offsets = speech_offsets + self.state.update_activity() + + face_offsets: Tuple[float, float, float, float, float, float] | None = None + with self._face_offsets_lock: + if self._face_offsets_dirty: + face_offsets = self._pending_face_offsets + self._face_offsets_dirty = False + + if face_offsets is not None: + self.state.face_tracking_offsets = face_offsets + self.state.update_activity() + + def _handle_command(self, command: str, payload: Any, current_time: float) -> None: + """Handle a single cross-thread command.""" + if command == "queue_move": + if isinstance(payload, Move): + self.move_queue.append(payload) + self.state.update_activity() + duration = getattr(payload, "duration", None) + if duration is not None: + try: + duration_str = f"{float(duration):.2f}" + except (TypeError, ValueError): + duration_str = str(duration) + else: + duration_str = "?" + logger.debug( + "Queued move with duration %ss, queue size: %s", + duration_str, + len(self.move_queue), + ) + else: + logger.warning("Ignored queue_move command with invalid payload: %s", payload) + elif command == "clear_queue": + self.move_queue.clear() + self.state.current_move = None + self.state.move_start_time = None + self._breathing_active = False + logger.info("Cleared move queue and stopped current move") + elif command == "set_moving_state": + try: + duration = float(payload) + except (TypeError, ValueError): + logger.warning("Invalid moving state duration: %s", payload) + return + self.state.update_activity() + elif command == "mark_activity": + self.state.update_activity() + elif command == "set_listening": + desired_state = bool(payload) + now = self._now() + if now - self._last_listening_toggle_time < self._listening_debounce_s: + return + self._last_listening_toggle_time = now + + if self._is_listening == desired_state: + return + + self._is_listening = desired_state + self._last_listening_blend_time = now + if desired_state: + # Freeze: snapshot current commanded antennas and reset blend + self._listening_antennas = ( + float(self._last_commanded_pose[1][0]), + float(self._last_commanded_pose[1][1]), + ) + self._antenna_unfreeze_blend = 0.0 + else: + # Unfreeze: restart blending from frozen pose + self._antenna_unfreeze_blend = 0.0 + self.state.update_activity() + else: + logger.warning("Unknown command received by MovementManager: %s", command) + + def _publish_shared_state(self) -> None: + """Expose idle-related state for external threads.""" + with self._shared_state_lock: + self._shared_last_activity_time = self.state.last_activity_time + self._shared_is_listening = self._is_listening + + def _manage_move_queue(self, current_time: float) -> None: + """Manage the primary move queue (sequential execution).""" + if self.state.current_move is None or ( + self.state.move_start_time is not None + and current_time - self.state.move_start_time >= self.state.current_move.duration + ): + self.state.current_move = None + self.state.move_start_time = None + + if self.move_queue: + self.state.current_move = self.move_queue.popleft() + self.state.move_start_time = current_time + # Any real move cancels breathing mode flag + self._breathing_active = isinstance(self.state.current_move, BreathingMove) + logger.debug(f"Starting new move, duration: {self.state.current_move.duration}s") + + def _manage_breathing(self, current_time: float) -> None: + """Manage automatic breathing when idle.""" + if ( + self.state.current_move is None + and not self.move_queue + and not self._is_listening + and not self._breathing_active + ): + idle_for = current_time - self.state.last_activity_time + if idle_for >= self.idle_inactivity_delay: + try: + # These 2 functions return the latest available sensor data from the robot, but don't perform I/O synchronously. + # Therefore, we accept calling them inside the control loop. + _, current_antennas = self.current_robot.get_current_joint_positions() + current_head_pose = self.current_robot.get_current_head_pose() + + self._breathing_active = True + self.state.update_activity() + + breathing_move = BreathingMove( + interpolation_start_pose=current_head_pose, + interpolation_start_antennas=current_antennas, + interpolation_duration=1.0, + ) + self.move_queue.append(breathing_move) + logger.debug("Started breathing after %.1fs of inactivity", idle_for) + except Exception as e: + self._breathing_active = False + logger.error("Failed to start breathing: %s", e) + + if isinstance(self.state.current_move, BreathingMove) and self.move_queue: + self.state.current_move = None + self.state.move_start_time = None + self._breathing_active = False + logger.debug("Stopping breathing due to new move activity") + + if self.state.current_move is not None and not isinstance(self.state.current_move, BreathingMove): + self._breathing_active = False + + def _get_primary_pose(self, current_time: float) -> FullBodyPose: + """Get the primary full body pose from current move or neutral.""" + # When a primary move is playing, sample it and cache the resulting pose + if self.state.current_move is not None and self.state.move_start_time is not None: + move_time = current_time - self.state.move_start_time + head, antennas, body_yaw = self.state.current_move.evaluate(move_time) + + if head is None: + head = create_head_pose(0, 0, 0, 0, 0, 0, degrees=True) + if antennas is None: + antennas = np.array([0.0, 0.0]) + if body_yaw is None: + body_yaw = 0.0 + + antennas_tuple = (float(antennas[0]), float(antennas[1])) + head_copy = head.copy() + primary_full_body_pose = ( + head_copy, + antennas_tuple, + float(body_yaw), + ) + + self.state.last_primary_pose = clone_full_body_pose(primary_full_body_pose) + # Otherwise reuse the last primary pose so we avoid jumps between moves + elif self.state.last_primary_pose is not None: + primary_full_body_pose = clone_full_body_pose(self.state.last_primary_pose) + else: + neutral_head_pose = create_head_pose(0, 0, 0, 0, 0, 0, degrees=True) + primary_full_body_pose = (neutral_head_pose, (0.0, 0.0), 0.0) + self.state.last_primary_pose = clone_full_body_pose(primary_full_body_pose) + + return primary_full_body_pose + + def _get_secondary_pose(self) -> FullBodyPose: + """Get the secondary full body pose from speech and face tracking offsets.""" + # Combine speech sway offsets + face tracking offsets for secondary pose + secondary_offsets = [ + self.state.speech_offsets[0] + self.state.face_tracking_offsets[0], + self.state.speech_offsets[1] + self.state.face_tracking_offsets[1], + self.state.speech_offsets[2] + self.state.face_tracking_offsets[2], + self.state.speech_offsets[3] + self.state.face_tracking_offsets[3], + self.state.speech_offsets[4] + self.state.face_tracking_offsets[4], + self.state.speech_offsets[5] + self.state.face_tracking_offsets[5], + ] + + secondary_head_pose = create_head_pose( + x=secondary_offsets[0], + y=secondary_offsets[1], + z=secondary_offsets[2], + roll=secondary_offsets[3], + pitch=secondary_offsets[4], + yaw=secondary_offsets[5], + degrees=False, + mm=False, + ) + return (secondary_head_pose, (0.0, 0.0), 0.0) + + def _compose_full_body_pose(self, current_time: float) -> FullBodyPose: + """Compose primary and secondary poses into a single command pose.""" + primary = self._get_primary_pose(current_time) + secondary = self._get_secondary_pose() + return combine_full_body(primary, secondary) + + def _update_primary_motion(self, current_time: float) -> None: + """Advance queue state and idle behaviours for this tick.""" + self._manage_move_queue(current_time) + self._manage_breathing(current_time) + + def _calculate_blended_antennas(self, target_antennas: Tuple[float, float]) -> Tuple[float, float]: + """Blend target antennas with listening freeze state and update blending.""" + now = self._now() + listening = self._is_listening + listening_antennas = self._listening_antennas + blend = self._antenna_unfreeze_blend + blend_duration = self._antenna_blend_duration + last_update = self._last_listening_blend_time + self._last_listening_blend_time = now + + if listening: + antennas_cmd = listening_antennas + new_blend = 0.0 + else: + dt = max(0.0, now - last_update) + if blend_duration <= 0: + new_blend = 1.0 + else: + new_blend = min(1.0, blend + dt / blend_duration) + antennas_cmd = ( + listening_antennas[0] * (1.0 - new_blend) + target_antennas[0] * new_blend, + listening_antennas[1] * (1.0 - new_blend) + target_antennas[1] * new_blend, + ) + + if listening: + self._antenna_unfreeze_blend = 0.0 + else: + self._antenna_unfreeze_blend = new_blend + if new_blend >= 1.0: + self._listening_antennas = ( + float(target_antennas[0]), + float(target_antennas[1]), + ) + + return antennas_cmd + + def _issue_control_command(self, head: NDArray[np.float32], antennas: Tuple[float, float], body_yaw: float) -> None: + """Send the fused pose to the robot with throttled error logging.""" + try: + self.current_robot.set_target(head=head, antennas=antennas, body_yaw=body_yaw) + except Exception as e: + now = self._now() + if now - self._last_set_target_err >= self._set_target_err_interval: + msg = f"Failed to set robot target: {e}" + if self._set_target_err_suppressed: + msg += f" (suppressed {self._set_target_err_suppressed} repeats)" + self._set_target_err_suppressed = 0 + logger.error(msg) + self._last_set_target_err = now + else: + self._set_target_err_suppressed += 1 + else: + with self._status_lock: + self._last_commanded_pose = clone_full_body_pose((head, antennas, body_yaw)) + + def _update_frequency_stats( + self, loop_start: float, prev_loop_start: float, stats: LoopFrequencyStats, + ) -> LoopFrequencyStats: + """Update frequency statistics based on the current loop start time.""" + period = loop_start - prev_loop_start + if period > 0: + stats.last_freq = 1.0 / period + stats.count += 1 + delta = stats.last_freq - stats.mean + stats.mean += delta / stats.count + stats.m2 += delta * (stats.last_freq - stats.mean) + stats.min_freq = min(stats.min_freq, stats.last_freq) + return stats + + def _schedule_next_tick(self, loop_start: float, stats: LoopFrequencyStats) -> Tuple[float, LoopFrequencyStats]: + """Compute sleep time to maintain target frequency and update potential freq.""" + computation_time = self._now() - loop_start + stats.potential_freq = 1.0 / computation_time if computation_time > 0 else float("inf") + sleep_time = max(0.0, self.target_period - computation_time) + return sleep_time, stats + + def _record_frequency_snapshot(self, stats: LoopFrequencyStats) -> None: + """Store a thread-safe snapshot of current frequency statistics.""" + with self._status_lock: + self._freq_snapshot = LoopFrequencyStats( + mean=stats.mean, + m2=stats.m2, + min_freq=stats.min_freq, + count=stats.count, + last_freq=stats.last_freq, + potential_freq=stats.potential_freq, + ) + + def _maybe_log_frequency(self, loop_count: int, print_interval_loops: int, stats: LoopFrequencyStats) -> None: + """Emit frequency telemetry when enough loops have elapsed.""" + if loop_count % print_interval_loops != 0 or stats.count == 0: + return + + variance = stats.m2 / stats.count if stats.count > 0 else 0.0 + lowest = stats.min_freq if stats.min_freq != float("inf") else 0.0 + logger.debug( + "Loop freq - avg: %.2fHz, variance: %.4f, min: %.2fHz, last: %.2fHz, potential: %.2fHz, target: %.1fHz", + stats.mean, + variance, + lowest, + stats.last_freq, + stats.potential_freq, + self.target_frequency, + ) + stats.reset() + + def _update_face_tracking(self, current_time: float) -> None: + """Get face tracking offsets from camera worker thread.""" + if self.camera_worker is not None: + # Get face tracking offsets from camera worker thread + offsets = self.camera_worker.get_face_tracking_offsets() + self.state.face_tracking_offsets = offsets + else: + # No camera worker, use neutral offsets + self.state.face_tracking_offsets = (0.0, 0.0, 0.0, 0.0, 0.0, 0.0) + + def start(self) -> None: + """Start the worker thread that drives the 100 Hz control loop.""" + if self._thread is not None and self._thread.is_alive(): + logger.warning("Move worker already running; start() ignored") + return + self._stop_event.clear() + self._thread = threading.Thread(target=self.working_loop, daemon=True) + self._thread.start() + logger.debug("Move worker started") + + def stop(self) -> None: + """Request the worker thread to stop and wait for it to exit. + + Before stopping, resets the robot to a neutral position. + """ + if self._thread is None or not self._thread.is_alive(): + logger.debug("Move worker not running; stop() ignored") + return + + logger.info("Stopping movement manager and resetting to neutral position...") + + # Clear any queued moves and stop current move + self.clear_move_queue() + + # Stop the worker thread first so it doesn't interfere + self._stop_event.set() + if self._thread is not None: + self._thread.join() + self._thread = None + logger.debug("Move worker stopped") + + # Reset to neutral position using goto_target (same approach as wake_up) + try: + neutral_head_pose = create_head_pose(0, 0, 0, 0, 0, 0, degrees=True) + neutral_antennas = [0.0, 0.0] + neutral_body_yaw = 0.0 + + # Use goto_target directly on the robot + self.current_robot.goto_target( + head=neutral_head_pose, + antennas=neutral_antennas, + duration=2.0, + body_yaw=neutral_body_yaw, + ) + + logger.info("Reset to neutral position completed") + + except Exception as e: + logger.error(f"Failed to reset to neutral position: {e}") + + def get_status(self) -> Dict[str, Any]: + """Return a lightweight status snapshot for observability.""" + with self._status_lock: + pose_snapshot = clone_full_body_pose(self._last_commanded_pose) + freq_snapshot = LoopFrequencyStats( + mean=self._freq_snapshot.mean, + m2=self._freq_snapshot.m2, + min_freq=self._freq_snapshot.min_freq, + count=self._freq_snapshot.count, + last_freq=self._freq_snapshot.last_freq, + potential_freq=self._freq_snapshot.potential_freq, + ) + + head_matrix = pose_snapshot[0].tolist() if pose_snapshot else None + antennas = pose_snapshot[1] if pose_snapshot else None + body_yaw = pose_snapshot[2] if pose_snapshot else None + + return { + "queue_size": len(self.move_queue), + "is_listening": self._is_listening, + "breathing_active": self._breathing_active, + "last_commanded_pose": { + "head": head_matrix, + "antennas": antennas, + "body_yaw": body_yaw, + }, + "loop_frequency": { + "last": freq_snapshot.last_freq, + "mean": freq_snapshot.mean, + "min": freq_snapshot.min_freq, + "potential": freq_snapshot.potential_freq, + "samples": freq_snapshot.count, + }, + } + + def working_loop(self) -> None: + """Control loop main movements - reproduces main_works.py control architecture. + + Single set_target() call with pose fusion. + """ + logger.debug("Starting enhanced movement control loop (100Hz)") + + loop_count = 0 + prev_loop_start = self._now() + print_interval_loops = max(1, int(self.target_frequency * 2)) + freq_stats = self._freq_stats + + while not self._stop_event.is_set(): + loop_start = self._now() + loop_count += 1 + + if loop_count > 1: + freq_stats = self._update_frequency_stats(loop_start, prev_loop_start, freq_stats) + prev_loop_start = loop_start + + # 1) Poll external commands and apply pending offsets (atomic snapshot) + self._poll_signals(loop_start) + + # 2) Manage the primary move queue (start new move, end finished move, breathing) + self._update_primary_motion(loop_start) + + # 3) Update vision-based secondary offsets + self._update_face_tracking(loop_start) + + # 4) Build primary and secondary full-body poses, then fuse them + head, antennas, body_yaw = self._compose_full_body_pose(loop_start) + + # 5) Apply listening antenna freeze or blend-back + antennas_cmd = self._calculate_blended_antennas(antennas) + + # 6) Single set_target call - the only control point + self._issue_control_command(head, antennas_cmd, body_yaw) + + # 7) Adaptive sleep to align to next tick, then publish shared state + sleep_time, freq_stats = self._schedule_next_tick(loop_start, freq_stats) + self._publish_shared_state() + self._record_frequency_snapshot(freq_stats) + + # 8) Periodic telemetry on loop frequency + self._maybe_log_frequency(loop_count, print_interval_loops, freq_stats) + + if sleep_time > 0: + time.sleep(sleep_time) + + logger.debug("Movement control loop stopped") diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/openai_realtime.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/openai_realtime.py new file mode 100644 index 00000000..c43d6172 --- /dev/null +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/openai_realtime.py @@ -0,0 +1,811 @@ +import json +import uuid +import base64 +import random +import asyncio +import logging +from typing import Any, Final, Tuple, Literal, Optional +from pathlib import Path +from datetime import datetime + +import cv2 +import numpy as np +import gradio as gr +from openai import AsyncOpenAI +from fastrtc import AdditionalOutputs, AsyncStreamHandler, wait_for_item, audio_to_int16 +from numpy.typing import NDArray +from scipy.signal import resample +from websockets.exceptions import ConnectionClosedError + +from reachy_mini_conversation_app.config import LOCKED_PROFILE, config +from reachy_mini_conversation_app.prompts import get_session_voice, get_session_instructions +from reachy_mini_conversation_app.tools.core_tools import ( + ToolDependencies, + get_tool_specs, +) +from reachy_mini_conversation_app.tools.background_tool_manager import ( + ToolCallRoutine, + ToolNotification, + BackgroundToolManager, +) + + +logger = logging.getLogger(__name__) + +OPEN_AI_INPUT_SAMPLE_RATE: Final[Literal[24000]] = 24000 +OPEN_AI_OUTPUT_SAMPLE_RATE: Final[Literal[24000]] = 24000 + +# Cost tracking from usage data (pricing as of Feb 2026 https://openai.com/api/pricing/) +AUDIO_INPUT_COST_PER_1M = 32.0 +AUDIO_OUTPUT_COST_PER_1M = 64.0 +TEXT_INPUT_COST_PER_1M = 4.0 +TEXT_OUTPUT_COST_PER_1M = 16.0 +IMAGE_INPUT_COST_PER_1M = 5.0 + +_RESPONSE_DONE_TIMEOUT: Final[float] = 30.0 + + +def _compute_response_cost(usage: Any) -> float: + """Compute dollar cost from a response usage object.""" + inp = getattr(usage, "input_token_details", None) + out = getattr(usage, "output_token_details", None) + cost = 0.0 + if inp: + cost += (getattr(inp, "audio_tokens", 0) or 0) * AUDIO_INPUT_COST_PER_1M / 1e6 + cost += (getattr(inp, "text_tokens", 0) or 0) * TEXT_INPUT_COST_PER_1M / 1e6 + cost += (getattr(inp, "image_tokens", 0) or 0) * IMAGE_INPUT_COST_PER_1M / 1e6 + if out: + cost += (getattr(out, "audio_tokens", 0) or 0) * AUDIO_OUTPUT_COST_PER_1M / 1e6 + cost += (getattr(out, "text_tokens", 0) or 0) * TEXT_OUTPUT_COST_PER_1M / 1e6 + return cost + + +class OpenaiRealtimeHandler(AsyncStreamHandler): + """An OpenAI realtime handler for fastrtc Stream.""" + + def __init__(self, deps: ToolDependencies, gradio_mode: bool = False, instance_path: Optional[str] = None): + """Initialize the handler.""" + super().__init__( + expected_layout="mono", + output_sample_rate=OPEN_AI_OUTPUT_SAMPLE_RATE, + input_sample_rate=OPEN_AI_INPUT_SAMPLE_RATE, + ) + + # Override typing of the sample rates to match OpenAI's requirements + self.output_sample_rate: Literal[24000] = self.output_sample_rate + self.input_sample_rate: Literal[24000] = self.input_sample_rate + + self.deps = deps + + # Override type annotations for OpenAI strict typing (only for values used in API) + self.output_sample_rate = OPEN_AI_OUTPUT_SAMPLE_RATE + self.input_sample_rate = OPEN_AI_INPUT_SAMPLE_RATE + + self.connection: Any = None + self.output_queue: "asyncio.Queue[Tuple[int, NDArray[np.int16]] | AdditionalOutputs]" = asyncio.Queue() + + self.last_activity_time = asyncio.get_event_loop().time() + self.start_time = asyncio.get_event_loop().time() + self.is_idle_tool_call = False + self.gradio_mode = gradio_mode + self.instance_path = instance_path + # Track how the API key was provided (env vs textbox) and its value + self._key_source: Literal["env", "textbox"] = "env" + self._provided_api_key: str | None = None + + # Debouncing for partial transcripts + self.partial_transcript_task: asyncio.Task[None] | None = None + self.partial_transcript_sequence: int = 0 # sequence counter to prevent stale emissions + self.partial_debounce_delay = 0.5 # seconds + + # Internal lifecycle flags + self._shutdown_requested: bool = False + self._connected_event: asyncio.Event = asyncio.Event() + + # Background tool manager + self.tool_manager = BackgroundToolManager() + + # Cost tracking + self.cumulative_cost: float = 0.0 + + # Response-in-progress guard: the Realtime API only allows one active + # response per conversation at a time. A dedicated worker task + # (_response_sender_loop) dequeues and sends one request at a time + self._pending_responses: asyncio.Queue[dict[str, Any]] = asyncio.Queue() + self._response_done_event: asyncio.Event = asyncio.Event() + self._response_done_event.set() + self._last_response_rejected: bool = False + + def copy(self) -> "OpenaiRealtimeHandler": + """Create a copy of the handler.""" + return OpenaiRealtimeHandler(self.deps, self.gradio_mode, self.instance_path) + + async def _emit_debounced_partial(self, transcript: str, sequence: int) -> None: + """Emit partial transcript after debounce delay.""" + try: + await asyncio.sleep(self.partial_debounce_delay) + # Only emit if this is still the latest partial (by sequence number) + if self.partial_transcript_sequence == sequence: + await self.output_queue.put(AdditionalOutputs({"role": "user_partial", "content": transcript})) + logger.debug(f"Debounced partial emitted: {transcript}") + except asyncio.CancelledError: + logger.debug("Debounced partial cancelled") + raise + + async def start_up(self) -> None: + """Start the handler with minimal retries on unexpected websocket closure.""" + openai_api_key = config.OPENAI_API_KEY + if self.gradio_mode and not openai_api_key: + # api key was not found in .env or in the environment variables + await self.wait_for_args() # type: ignore[no-untyped-call] + args = list(self.latest_args) + textbox_api_key = args[3] if len(args[3]) > 0 else None + if textbox_api_key is not None: + openai_api_key = textbox_api_key + self._key_source = "textbox" + self._provided_api_key = textbox_api_key + else: + openai_api_key = config.OPENAI_API_KEY + else: + if not openai_api_key or not openai_api_key.strip(): + # In headless console mode, LocalStream now blocks startup until the key is provided. + # However, unit tests may invoke this handler directly with a stubbed client. + # To keep tests hermetic without requiring a real key, fall back to a placeholder. + logger.warning("OPENAI_API_KEY missing. Proceeding with a placeholder (tests/offline).") + openai_api_key = "DUMMY" + + self.client = AsyncOpenAI(api_key=openai_api_key) + + max_attempts = 3 + for attempt in range(1, max_attempts + 1): + try: + await self._run_realtime_session() + # Normal exit from the session, stop retrying + return + except ConnectionClosedError as e: + # Abrupt close (e.g., "no close frame received or sent") → retry + logger.warning("Realtime websocket closed unexpectedly (attempt %d/%d): %s", attempt, max_attempts, e) + if attempt < max_attempts: + # exponential backoff with jitter + base_delay = 2 ** (attempt - 1) # 1s, 2s, 4s, 8s, etc. + jitter = random.uniform(0, 0.5) + delay = base_delay + jitter + logger.info("Retrying in %.1f seconds...", delay) + await asyncio.sleep(delay) + continue + raise + finally: + # never keep a stale reference + self.connection = None + try: + self._connected_event.clear() + except Exception: + pass + + async def _restart_session(self) -> None: + """Force-close the current session and start a fresh one in background. + + Does not block the caller while the new session is establishing. + """ + try: + if self.connection is not None: + try: + await self.connection.close() + except Exception: + pass + finally: + self.connection = None + + # Ensure we have a client (start_up must have run once) + if getattr(self, "client", None) is None: + logger.warning("Cannot restart: OpenAI client not initialized yet.") + return + + # Fire-and-forget new session and wait briefly for connection + try: + self._connected_event.clear() + except Exception: + pass + asyncio.create_task(self._run_realtime_session(), name="openai-realtime-restart") + try: + await asyncio.wait_for(self._connected_event.wait(), timeout=5.0) + logger.info("Realtime session restarted and connected.") + except asyncio.TimeoutError: + logger.warning("Realtime session restart timed out; continuing in background.") + except Exception as e: + logger.warning("_restart_session failed: %s", e) + + async def _safe_response_create(self, **kwargs: Any) -> None: + """Enqueue a response.create() kwargs for the sender worker _response_sender_loop(). + + This method never blocks the caller. + """ + await self._pending_responses.put(kwargs) + + async def _response_sender_loop(self) -> None: + """Dedicated worker that sends ``response.create()`` calls serially. + + This logic was designed to comply with the response.create() docstring specification for event ordering: + https://github.com/openai/openai-python/blob/3e0c05b84a2056870abf3bd6a5e7849020209cc3/src/openai/resources/realtime/realtime.py#L649C1-L651C30 + + For each queued request the worker: + 1. Waits until no response is active (_response_done_event). + 2. Sends response.create(). + 3. Waits for the response cycle to complete (response.done). + 4. If the server rejected with active_response, retries from step 1. + """ + while self.connection: + try: + kwargs = await self._pending_responses.get() + except asyncio.CancelledError: + return + + sent = False + max_retries = 5 + attempts = 0 + while not sent and self.connection and attempts < max_retries: + try: + await asyncio.wait_for(self._response_done_event.wait(), timeout=_RESPONSE_DONE_TIMEOUT) + except asyncio.TimeoutError: + logger.debug("Timed out waiting for previous response to finish; forcing ahead") + self._response_done_event.set() + + if not self.connection: + break + + self._last_response_rejected = False + try: + await self.connection.response.create(**kwargs) + except Exception as e: + logger.debug("_response_sender_loop: send failed: %s", e) + self._response_done_event.set() + break + + try: + await asyncio.wait_for(self._response_done_event.wait(), timeout=_RESPONSE_DONE_TIMEOUT) + except asyncio.TimeoutError: + logger.debug("Timed out waiting for response.done; assuming response completed") + self._response_done_event.set() + break + + # Check if we were rejected + if self._last_response_rejected: + attempts += 1 + if attempts >= max_retries: + logger.debug("response.create rejected %d times; giving up", attempts) + break + logger.debug("response.create was rejected; retrying (%d/%d)", attempts, max_retries) + continue + + sent = True + + async def _handle_tool_result(self, bg_tool: ToolNotification) -> None: + """Process the result of a tool call.""" + if bg_tool.error is not None: + logger.error("Tool '%s' (id=%s) failed with error: %s", bg_tool.tool_name, bg_tool.id, bg_tool.error) + tool_result = {"error": bg_tool.error} + elif bg_tool.result is not None: + tool_result = bg_tool.result + logger.info( + "Tool '%s' (id=%s) executed successfully.", + bg_tool.tool_name, bg_tool.id, + ) + logger.debug("Tool '%s' full result: %s", bg_tool.tool_name, tool_result) + else: + logger.warning("Tool '%s' (id=%s) returned no result and no error", bg_tool.tool_name, bg_tool.id) + tool_result = {"error": "No result returned from tool execution"} + + # Connection may have closed while tool was running + if not self.connection: + logger.warning("Connection closed during tool '%s' (id=%s) execution; cannot send result back", bg_tool.tool_name, bg_tool.id) + return + + try: + # Send the tool result back + if isinstance(bg_tool.id, str): + await self.connection.conversation.item.create( + item={ + "type": "function_call_output", + "call_id": bg_tool.id, + "output": json.dumps(tool_result), + }, + ) + + await self.output_queue.put( + AdditionalOutputs( + { + "role": "assistant", + "content": json.dumps(tool_result), + # Gradio UI metadata.status accept only "pending" and "done". Do not accept bg.tool.status values. + "metadata": { + "title": f"🛠️ Used tool {bg_tool.tool_name}", + "status": "done", + }, + }, + ), + ) + + if bg_tool.tool_name == "camera" and "b64_im" in tool_result: + # use raw base64, don't json.dumps (which adds quotes) + b64_im = tool_result["b64_im"] + if not isinstance(b64_im, str): + logger.warning("Unexpected type for b64_im: %s", type(b64_im)) + b64_im = str(b64_im) + await self.connection.conversation.item.create( + item={ + "type": "message", + "role": "user", + "content": [ + { + "type": "input_image", + "image_url": f"data:image/jpeg;base64,{b64_im}", + }, + ], + }, + ) + logger.info("Added camera image to conversation") + + if self.deps.camera_worker is not None: + np_img = self.deps.camera_worker.get_latest_frame() + if np_img is not None: + # Camera frames are BGR from OpenCV; convert so Gradio displays correct colors. + rgb_frame = cv2.cvtColor(np_img, cv2.COLOR_BGR2RGB) + else: + rgb_frame = None + img = gr.Image(value=rgb_frame) + + await self.output_queue.put( + AdditionalOutputs( + { + "role": "assistant", + "content": img, + }, + ), + ) + + # If this tool call was triggered by an idle signal, don't make the robot speak. + # For other tool calls, let the robot reply out loud. + if not bg_tool.is_idle_tool_call: + await self._safe_response_create( + response={ + "instructions": "Use the tool result just returned and answer concisely in speech.", + }, + ) + + # Re-synchronize the head wobble after a tool call that may have taken some time + if self.deps.head_wobbler is not None: + self.deps.head_wobbler.reset() + + except ConnectionClosedError: + logger.warning("Connection closed while sending tool result") + self.connection = None + self._response_done_event.set() + + async def _run_realtime_session(self) -> None: + """Establish and manage a single realtime session.""" + async with self.client.realtime.connect(model=config.MODEL_NAME) as conn: + try: + await conn.session.update( + session={ + "type": "realtime", + "instructions": get_session_instructions(), + "audio": { + "input": { + "format": { + "type": "audio/pcm", + "rate": self.input_sample_rate, + }, + "transcription": {"model": "gpt-4o-transcribe", "language": "en"}, + "turn_detection": { + "type": "server_vad", + "interrupt_response": True, + }, + }, + "output": { + "format": { + "type": "audio/pcm", + "rate": self.output_sample_rate, + }, + "voice": get_session_voice(), + }, + }, + "tools": get_tool_specs(), # type: ignore[typeddict-item] + "tool_choice": "auto", + }, + ) + logger.info( + "Realtime session initialized with locked_profile=%r voice=%r", + LOCKED_PROFILE, + get_session_voice(), + ) + # If we reached here, the session update succeeded which implies the API key worked. + # Persist the key to a newly created .env (copied from .env.example) if needed. + self._persist_api_key_if_needed() + except Exception: + logger.exception("Realtime session.update failed; aborting startup") + return + + logger.info("Realtime session updated successfully") + + # Manage event received from the openai server + self.connection = conn + try: + self._connected_event.set() + except Exception: + pass + + + response_sender_task: asyncio.Task[None] | None = None + try: + # Start the background tool manager + self.tool_manager.start_up(tool_callbacks=[self._handle_tool_result]) + + # Start the response sender worker + response_sender_task = asyncio.create_task( + self._response_sender_loop(), name="response-sender" + ) + + async for event in self.connection: + logger.debug(f"OpenAI event: {event.type}") + if event.type == "input_audio_buffer.speech_started": + if hasattr(self, "_clear_queue") and callable(self._clear_queue): + self._clear_queue() + if self.deps.head_wobbler is not None: + self.deps.head_wobbler.reset() + self.deps.movement_manager.set_listening(True) + logger.debug("User speech started") + + if event.type == "input_audio_buffer.speech_stopped": + self.deps.movement_manager.set_listening(False) + logger.debug("User speech stopped - server will auto-commit with VAD") + + if event.type in ( + "response.audio.done", + "response.output_audio.done", + "response.audio.completed", + "response.completed", + ): + logger.debug("response completed") + + if event.type == "response.created": + self._response_done_event.clear() + logger.debug("Response created (active)") + + if event.type == "response.done": + # Doesn't mean the audio is done playing + self._response_done_event.set() + logger.debug("Response done") + + response = getattr(event, "response", None) + usage = getattr(response, "usage", None) if response else None + if usage: + cost = _compute_response_cost(usage) + self.cumulative_cost += cost + logger.debug("Cost: $%.4f | Cumulative: $%.4f", cost, self.cumulative_cost) + else: + logger.warning("No usage data available for cost tracking") + + # Handle partial transcription (user speaking in real-time) + if event.type == "conversation.item.input_audio_transcription.partial": + logger.debug(f"User partial transcript: {event.transcript}") + + # Increment sequence + self.partial_transcript_sequence += 1 + current_sequence = self.partial_transcript_sequence + + # Cancel previous debounce task if it exists + if self.partial_transcript_task and not self.partial_transcript_task.done(): + self.partial_transcript_task.cancel() + try: + await self.partial_transcript_task + except asyncio.CancelledError: + pass + + # Start new debounce timer with sequence number + self.partial_transcript_task = asyncio.create_task( + self._emit_debounced_partial(event.transcript, current_sequence) + ) + + # Handle completed transcription (user finished speaking) + if event.type == "conversation.item.input_audio_transcription.completed": + logger.debug(f"User transcript: {event.transcript}") + + # Cancel any pending partial emission + if self.partial_transcript_task and not self.partial_transcript_task.done(): + self.partial_transcript_task.cancel() + try: + await self.partial_transcript_task + except asyncio.CancelledError: + pass + + await self.output_queue.put(AdditionalOutputs({"role": "user", "content": event.transcript})) + + # Handle assistant transcription + if event.type in ("response.audio_transcript.done", "response.output_audio_transcript.done"): + logger.debug(f"Assistant transcript: {event.transcript}") + await self.output_queue.put(AdditionalOutputs({"role": "assistant", "content": event.transcript})) + + # Handle audio delta + if event.type in ("response.audio.delta", "response.output_audio.delta"): + if self.deps.head_wobbler is not None: + self.deps.head_wobbler.feed(event.delta) + self.last_activity_time = asyncio.get_event_loop().time() + logger.debug("last activity time updated to %s", self.last_activity_time) + await self.output_queue.put( + ( + self.output_sample_rate, + np.frombuffer(base64.b64decode(event.delta), dtype=np.int16).reshape(1, -1), + ), + ) + + # ---- tool-calling plumbing ---- + if event.type == "response.function_call_arguments.done": + tool_name = getattr(event, "name", None) + args_json_str = getattr(event, "arguments", None) + call_id: str = str(getattr(event, "call_id", uuid.uuid4())) + + logger.info( + "Tool call received — tool_name=%r, call_id=%s, is_idle=%s, args=%s", + tool_name, call_id, self.is_idle_tool_call, args_json_str, + ) + + if not isinstance(tool_name, str) or not isinstance(args_json_str, str): + logger.error( + "Invalid tool call: tool_name=%s (type=%s), args=%s (type=%s), call_id=%s", + tool_name, type(tool_name).__name__, + args_json_str, type(args_json_str).__name__, + call_id, + ) + continue + + bg_tool = await self.tool_manager.start_tool( + call_id=call_id, + tool_call_routine=ToolCallRoutine( + tool_name=tool_name, + args_json_str=args_json_str, + deps=self.deps, + ), + is_idle_tool_call=self.is_idle_tool_call, + ) + + await self.output_queue.put( + AdditionalOutputs( + { + "role": "assistant", + "content": f"🛠️ Used tool {tool_name} with args {args_json_str}. The tool is now running. Tool ID: {bg_tool.tool_id}", + }, + ), + ) + + if self.is_idle_tool_call: + self.is_idle_tool_call = False + else: + await self._safe_response_create( + response={ + "instructions": "Notify what the tool has been running giving meaningful information about the task", + }, + ) + + logger.info("Started background tool: %s (id=%s, call_id=%s)", tool_name, bg_tool.tool_id, call_id) + + # server error + if event.type == "error": + err = getattr(event, "error", None) + msg = getattr(err, "message", str(err) if err else "unknown error") + code = getattr(err, "code", "") + + if code == "conversation_already_has_active_response": + # response.create was rejected. The sender worker + # is waiting on _response_done_event; when the active + # response finishes it will wake up and see this flag. + self._last_response_rejected = True + logger.debug("response.create rejected; worker will retry after active response finishes") + else: + logger.error("Realtime error [%s]: %s (raw=%s)", code, msg, err) + + # Only show user-facing errors, not internal state errors + if code not in ("input_audio_buffer_commit_empty",): + await self.output_queue.put( + AdditionalOutputs({"role": "assistant", "content": f"[error] {msg}"}) + ) + finally: + # Stop the response sender worker. + if response_sender_task is not None: + response_sender_task.cancel() + try: + await response_sender_task + except asyncio.CancelledError: + pass + + # Stop background tool manager tasks (listener + cleanup) in all paths. + await self.tool_manager.shutdown() + + # Microphone receive + async def receive(self, frame: Tuple[int, NDArray[np.int16]]) -> None: + """Receive audio frame from the microphone and send it to the OpenAI server. + + Handles both mono and stereo audio formats, converting to the expected + mono format for OpenAI's API. Resamples if the input sample rate differs + from the expected rate. + + Args: + frame: A tuple containing (sample_rate, audio_data). + + """ + if not self.connection: + return + + input_sample_rate, audio_frame = frame + + # Reshape if needed + if audio_frame.ndim == 2: + # Scipy channels last convention + if audio_frame.shape[1] > audio_frame.shape[0]: + audio_frame = audio_frame.T + # Multiple channels -> Mono channel + if audio_frame.shape[1] > 1: + audio_frame = audio_frame[:, 0] + + # Resample if needed + if self.input_sample_rate != input_sample_rate: + audio_frame = resample(audio_frame, int(len(audio_frame) * self.input_sample_rate / input_sample_rate)) + + # Cast if needed + audio_frame = audio_to_int16(audio_frame) + + # Send to OpenAI (guard against races during reconnect) + try: + audio_message = base64.b64encode(audio_frame.tobytes()).decode("utf-8") + await self.connection.input_audio_buffer.append(audio=audio_message) + except Exception as e: + logger.debug("Dropping audio frame: connection not ready (%s)", e) + return + + async def emit(self) -> Tuple[int, NDArray[np.int16]] | AdditionalOutputs | None: + """Emit audio frame to be played by the speaker.""" + # sends to the stream the stuff put in the output queue by the openai event handler + # This is called periodically by the fastrtc Stream + + # Handle idle + idle_duration = asyncio.get_event_loop().time() - self.last_activity_time + if idle_duration > 15.0 and self.deps.movement_manager.is_idle(): + try: + await self.send_idle_signal(idle_duration) + except Exception as e: + logger.warning("Idle signal skipped (connection closed?): %s", e) + return None + + self.last_activity_time = asyncio.get_event_loop().time() # avoid repeated resets + + return await wait_for_item(self.output_queue) # type: ignore[no-any-return] + + async def shutdown(self) -> None: + """Shutdown the handler.""" + self._shutdown_requested = True + + # Unblock the response sender worker so it can exit + self._response_done_event.set() + + # Stop background tool manager tasks (listener + cleanup) + await self.tool_manager.shutdown() + + # Cancel any pending debounce task + if self.partial_transcript_task and not self.partial_transcript_task.done(): + self.partial_transcript_task.cancel() + try: + await self.partial_transcript_task + except asyncio.CancelledError: + pass + + if self.connection: + try: + await self.connection.close() + except ConnectionClosedError as e: + logger.debug(f"Connection already closed during shutdown: {e}") + except Exception as e: + logger.debug(f"connection.close() ignored: {e}") + finally: + self.connection = None + + # Clear any remaining items in the output queue + while not self.output_queue.empty(): + try: + self.output_queue.get_nowait() + except asyncio.QueueEmpty: + break + + def format_timestamp(self) -> str: + """Format current timestamp with date, time, and elapsed seconds.""" + loop_time = asyncio.get_event_loop().time() # monotonic + elapsed_seconds = loop_time - self.start_time + dt = datetime.now() # wall-clock + return f"[{dt.strftime('%Y-%m-%d %H:%M:%S')} | +{elapsed_seconds:.1f}s]" + + async def send_idle_signal(self, idle_duration: float) -> None: + """Send an idle signal to the openai server.""" + logger.debug("Sending idle signal") + self.is_idle_tool_call = True + timestamp_msg = f"[Idle time update: {self.format_timestamp()} - No activity for {idle_duration:.1f}s] You've been idle for a while. Feel free to get creative - dance, show an emotion, look around, do nothing, or just be yourself!" + if not self.connection: + logger.debug("No connection, cannot send idle signal") + return + await self.connection.conversation.item.create( + item={ + "type": "message", + "role": "user", + "content": [{"type": "input_text", "text": timestamp_msg}], + }, + ) + await self._safe_response_create( + response={ + "instructions": "You MUST respond with function calls only - no speech or text. Choose appropriate actions for idle behavior.", + "tool_choice": "required", + }, + ) + + def _persist_api_key_if_needed(self) -> None: + """Persist the API key into `.env` inside `instance_path/` when appropriate. + + - Only runs in Gradio mode when key came from the textbox and is non-empty. + - Only saves if `self.instance_path` is not None. + - Writes `.env` to `instance_path/.env` (does not overwrite if it already exists). + - If `instance_path/.env.example` exists, copies its contents while overriding OPENAI_API_KEY. + """ + try: + if not self.gradio_mode: + logger.warning("Not in Gradio mode; skipping API key persistence.") + return + + if self._key_source != "textbox": + logger.info("API key not provided via textbox; skipping persistence.") + return + + key = (self._provided_api_key or "").strip() + if not key: + logger.warning("No API key provided via textbox; skipping persistence.") + return + if self.instance_path is None: + logger.warning("Instance path is None; cannot persist API key.") + return + + # Update the current process environment for downstream consumers + try: + import os + + os.environ["OPENAI_API_KEY"] = key + except Exception: # best-effort + pass + + target_dir = Path(self.instance_path) + env_path = target_dir / ".env" + if env_path.exists(): + # Respect existing user configuration + logger.info(".env already exists at %s; not overwriting.", env_path) + return + + example_path = target_dir / ".env.example" + content_lines: list[str] = [] + if example_path.exists(): + try: + content = example_path.read_text(encoding="utf-8") + content_lines = content.splitlines() + except Exception as e: + logger.warning("Failed to read .env.example at %s: %s", example_path, e) + + # Replace or append the OPENAI_API_KEY line + replaced = False + for i, line in enumerate(content_lines): + if line.strip().startswith("OPENAI_API_KEY="): + content_lines[i] = f"OPENAI_API_KEY={key}" + replaced = True + break + if not replaced: + content_lines.append(f"OPENAI_API_KEY={key}") + + # Ensure file ends with newline + final_text = "\n".join(content_lines) + "\n" + env_path.write_text(final_text, encoding="utf-8") + logger.info("Created %s and stored OPENAI_API_KEY for future runs.", env_path) + except Exception as e: + # Never crash the app for QoL persistence; just log. + logger.warning("Could not persist OPENAI_API_KEY to .env: %s", e) diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/profiles/__init__.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/profiles/__init__.py new file mode 100644 index 00000000..f2f5f454 --- /dev/null +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/profiles/__init__.py @@ -0,0 +1 @@ +"""Profiles for Reachy Mini conversation app.""" diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/profiles/_reachy_mini_conversation_app_locked_profile/__init__.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/profiles/_reachy_mini_conversation_app_locked_profile/__init__.py new file mode 100644 index 00000000..2657e8cf --- /dev/null +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/profiles/_reachy_mini_conversation_app_locked_profile/__init__.py @@ -0,0 +1 @@ +"""Locked Reachy OpenShell profile.""" diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/profiles/_reachy_mini_conversation_app_locked_profile/instructions.txt b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/profiles/_reachy_mini_conversation_app_locked_profile/instructions.txt new file mode 100644 index 00000000..358102c5 --- /dev/null +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/profiles/_reachy_mini_conversation_app_locked_profile/instructions.txt @@ -0,0 +1,3 @@ +You are a helpful assistant controlling a Reachy Mini robot for OpenShell research. +Keep responses concise, friendly, and concrete. +Use the sweep_look tool when looking around would help. diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/profiles/_reachy_mini_conversation_app_locked_profile/sweep_look.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/profiles/_reachy_mini_conversation_app_locked_profile/sweep_look.py new file mode 100644 index 00000000..f80499d1 --- /dev/null +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/profiles/_reachy_mini_conversation_app_locked_profile/sweep_look.py @@ -0,0 +1,115 @@ +import logging +from typing import Any, Dict + +import numpy as np + +from reachy_mini.utils import create_head_pose +from reachy_mini_conversation_app.goto_queue_move import GotoQueueMove +from reachy_mini_conversation_app.tools.core_tools import Tool, ToolDependencies + + +logger = logging.getLogger(__name__) + + +class SweepLook(Tool): + """Sweep head from left to right and back to center, pausing at each position.""" + + name = "sweep_look" + description = "Sweep head from left to right while rotating the body, pausing at each extreme, then return to center" + parameters_schema = { + "type": "object", + "properties": {}, + "required": [], + } + + async def __call__(self, deps: ToolDependencies, **kwargs: Any) -> Dict[str, Any]: + """Execute sweep look: left -> hold -> right -> hold -> center.""" + logger.info("Tool call: sweep_look") + + deps.movement_manager.clear_move_queue() + + current_head_pose = deps.reachy_mini.get_current_head_pose() + head_joints, antenna_joints = deps.reachy_mini.get_current_joint_positions() + + current_body_yaw = head_joints[0] + current_antenna1 = antenna_joints[0] + current_antenna2 = antenna_joints[1] + + max_angle = 0.9 * np.pi + transition_duration = 3.0 + hold_duration = 1.0 + + left_head_pose = create_head_pose(0, 0, 0, 0, 0, max_angle, degrees=False) + move_to_left = GotoQueueMove( + target_head_pose=left_head_pose, + start_head_pose=current_head_pose, + target_antennas=(current_antenna1, current_antenna2), + start_antennas=(current_antenna1, current_antenna2), + target_body_yaw=current_body_yaw + max_angle, + start_body_yaw=current_body_yaw, + duration=transition_duration, + ) + + hold_left = GotoQueueMove( + target_head_pose=left_head_pose, + start_head_pose=left_head_pose, + target_antennas=(current_antenna1, current_antenna2), + start_antennas=(current_antenna1, current_antenna2), + target_body_yaw=current_body_yaw + max_angle, + start_body_yaw=current_body_yaw + max_angle, + duration=hold_duration, + ) + + center_head_pose = create_head_pose(0, 0, 0, 0, 0, 0, degrees=False) + return_to_center_from_left = GotoQueueMove( + target_head_pose=center_head_pose, + start_head_pose=left_head_pose, + target_antennas=(current_antenna1, current_antenna2), + start_antennas=(current_antenna1, current_antenna2), + target_body_yaw=current_body_yaw, + start_body_yaw=current_body_yaw + max_angle, + duration=transition_duration, + ) + + right_head_pose = create_head_pose(0, 0, 0, 0, 0, -max_angle, degrees=False) + move_to_right = GotoQueueMove( + target_head_pose=right_head_pose, + start_head_pose=center_head_pose, + target_antennas=(current_antenna1, current_antenna2), + start_antennas=(current_antenna1, current_antenna2), + target_body_yaw=current_body_yaw - max_angle, + start_body_yaw=current_body_yaw, + duration=transition_duration, + ) + + hold_right = GotoQueueMove( + target_head_pose=right_head_pose, + start_head_pose=right_head_pose, + target_antennas=(current_antenna1, current_antenna2), + start_antennas=(current_antenna1, current_antenna2), + target_body_yaw=current_body_yaw - max_angle, + start_body_yaw=current_body_yaw - max_angle, + duration=hold_duration, + ) + + return_to_center_final = GotoQueueMove( + target_head_pose=center_head_pose, + start_head_pose=right_head_pose, + target_antennas=(current_antenna1, current_antenna2), + start_antennas=(current_antenna1, current_antenna2), + target_body_yaw=current_body_yaw, + start_body_yaw=current_body_yaw - max_angle, + duration=transition_duration, + ) + + deps.movement_manager.queue_move(move_to_left) + deps.movement_manager.queue_move(hold_left) + deps.movement_manager.queue_move(return_to_center_from_left) + deps.movement_manager.queue_move(move_to_right) + deps.movement_manager.queue_move(hold_right) + deps.movement_manager.queue_move(return_to_center_final) + + total_duration = transition_duration * 4 + hold_duration * 2 + deps.movement_manager.set_moving_state(total_duration) + + return {"status": f"sweeping look left-right-center, total {total_duration:.1f}s"} diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/profiles/_reachy_mini_conversation_app_locked_profile/tools.txt b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/profiles/_reachy_mini_conversation_app_locked_profile/tools.txt new file mode 100644 index 00000000..d5f05cb2 --- /dev/null +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/profiles/_reachy_mini_conversation_app_locked_profile/tools.txt @@ -0,0 +1,5 @@ +dance +stop_dance +play_emotion +stop_emotion +sweep_look diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/prompts.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/prompts.py new file mode 100644 index 00000000..d174c6b6 --- /dev/null +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/prompts.py @@ -0,0 +1,47 @@ +import sys +import logging +from pathlib import Path + +from reachy_mini_conversation_app.config import LOCKED_PROFILE, DEFAULT_PROFILES_DIRECTORY + + +logger = logging.getLogger(__name__) + + +INSTRUCTIONS_FILENAME = "instructions.txt" +VOICE_FILENAME = "voice.txt" + + +def _locked_profile_path() -> Path: + return DEFAULT_PROFILES_DIRECTORY / LOCKED_PROFILE + + +def get_session_instructions() -> str: + """Load the locked profile instructions for the realtime session.""" + instructions_file = _locked_profile_path() / INSTRUCTIONS_FILENAME + logger.info("Loading prompt from locked profile '%s'", LOCKED_PROFILE) + + try: + if instructions_file.exists(): + instructions = instructions_file.read_text(encoding="utf-8").strip() + if instructions: + return instructions + logger.error("Locked profile '%s' has empty %s", LOCKED_PROFILE, INSTRUCTIONS_FILENAME) + sys.exit(1) + logger.error("Locked profile '%s' has no %s", LOCKED_PROFILE, INSTRUCTIONS_FILENAME) + sys.exit(1) + except Exception as e: + logger.error("Failed to load instructions from locked profile '%s': %s", LOCKED_PROFILE, e) + sys.exit(1) + + +def get_session_voice(default: str = "cedar") -> str: + """Resolve the locked profile voice.""" + try: + voice_file = _locked_profile_path() / VOICE_FILENAME + if voice_file.exists(): + voice = voice_file.read_text(encoding="utf-8").strip() + return voice or default + except Exception: + pass + return default diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/static/index.html b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/static/index.html new file mode 100644 index 00000000..058cff29 --- /dev/null +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/static/index.html @@ -0,0 +1,54 @@ + + + + + + Reachy OpenShell - Settings + + + +
    +
    +
    +

    Loading…

    +
    +
    +
    +
    Headless control
    +

    Reachy OpenShell

    +

    Configure your OpenAI API key for the conversation app.

    +
    + + + + +
    + + + + diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/static/main.js b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/static/main.js new file mode 100644 index 00000000..4932fc8d --- /dev/null +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/static/main.js @@ -0,0 +1,136 @@ +const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); + +async function fetchWithTimeout(url, options = {}, timeoutMs = 2000) { + const controller = new AbortController(); + const id = setTimeout(() => controller.abort(), timeoutMs); + try { + return await fetch(url, { ...options, signal: controller.signal }); + } finally { + clearTimeout(id); + } +} + +async function waitForStatus(timeoutMs = 15000) { + const loadingText = document.querySelector("#loading p"); + let attempts = 0; + const deadline = Date.now() + timeoutMs; + while (true) { + attempts += 1; + try { + const url = new URL("/status", window.location.origin); + url.searchParams.set("_", Date.now().toString()); + const resp = await fetchWithTimeout(url, {}, 2000); + if (resp.ok) return await resp.json(); + } catch (e) {} + if (loadingText) { + loadingText.textContent = attempts > 8 ? "Starting backend…" : "Loading…"; + } + if (Date.now() >= deadline) return null; + await sleep(500); + } +} + +async function validateKey(key) { + const body = { openai_api_key: key }; + const resp = await fetch("/validate_api_key", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify(body), + }); + const data = await resp.json().catch(() => ({})); + if (!resp.ok) { + throw new Error(data.error || "validation_failed"); + } + return data; +} + +async function saveKey(key) { + const body = { openai_api_key: key }; + const resp = await fetch("/openai_api_key", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify(body), + }); + if (!resp.ok) { + const data = await resp.json().catch(() => ({})); + throw new Error(data.error || "save_failed"); + } + return await resp.json(); +} + +function show(el, flag) { + el.classList.toggle("hidden", !flag); +} + +async function init() { + const loading = document.getElementById("loading"); + const statusEl = document.getElementById("status"); + const formPanel = document.getElementById("form-panel"); + const configuredPanel = document.getElementById("configured"); + const saveBtn = document.getElementById("save-btn"); + const changeKeyBtn = document.getElementById("change-key-btn"); + const input = document.getElementById("api-key"); + + show(loading, true); + show(formPanel, false); + show(configuredPanel, false); + + const st = (await waitForStatus()) || { has_key: false }; + + if (st.has_key) { + show(configuredPanel, true); + } else { + show(formPanel, true); + } + show(loading, false); + + changeKeyBtn.addEventListener("click", () => { + show(configuredPanel, false); + show(formPanel, true); + input.value = ""; + statusEl.textContent = ""; + statusEl.className = "status"; + }); + + input.addEventListener("input", () => { + input.classList.remove("error"); + }); + + saveBtn.addEventListener("click", async () => { + const key = input.value.trim(); + if (!key) { + statusEl.textContent = "Please enter a valid key."; + statusEl.className = "status warn"; + input.classList.add("error"); + return; + } + statusEl.textContent = "Validating API key..."; + statusEl.className = "status"; + input.classList.remove("error"); + try { + const validation = await validateKey(key); + if (!validation.valid) { + statusEl.textContent = "Invalid API key. Please check your key and try again."; + statusEl.className = "status error"; + input.classList.add("error"); + return; + } + statusEl.textContent = "Key valid! Saving..."; + statusEl.className = "status ok"; + await saveKey(key); + statusEl.textContent = "Saved. Reloading…"; + statusEl.className = "status ok"; + window.location.reload(); + } catch (e) { + input.classList.add("error"); + if (e.message === "invalid_api_key") { + statusEl.textContent = "Invalid API key. Please check your key and try again."; + } else { + statusEl.textContent = "Failed to validate/save key. Please try again."; + } + statusEl.className = "status error"; + } + }); +} + +window.addEventListener("DOMContentLoaded", init); \ No newline at end of file diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/static/style.css b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/static/style.css new file mode 100644 index 00000000..1f8f0c8f --- /dev/null +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/static/style.css @@ -0,0 +1,210 @@ +:root { + --bg: #060b1a; + --bg-2: #071023; + --panel: rgba(11, 18, 36, 0.8); + --border: rgba(255, 255, 255, 0.08); + --text: #eaf2ff; + --muted: #9fb6d7; + --ok: #4ce0b3; + --warn: #ffb547; + --error: #ff5c70; + --accent: #45c4ff; + --accent-2: #5ef0c1; + --shadow: 0 20px 70px rgba(0, 0, 0, 0.45); +} + +* { box-sizing: border-box; } +body { + margin: 0; + min-height: 100vh; + font-family: "Space Grotesk", "Inter", "Segoe UI", sans-serif; + background: radial-gradient(circle at 20% 20%, rgba(69, 196, 255, 0.16), transparent 35%), + radial-gradient(circle at 80% 0%, rgba(94, 240, 193, 0.16), transparent 32%), + linear-gradient(135deg, var(--bg), var(--bg-2)); + color: var(--text); +} + +.ambient { + position: fixed; + inset: 0; + background: radial-gradient(circle at 30% 60%, rgba(255, 255, 255, 0.05), transparent 35%), + radial-gradient(circle at 75% 30%, rgba(69, 196, 255, 0.08), transparent 32%); + filter: blur(60px); + z-index: 0; + pointer-events: none; +} + +.loading { + position: fixed; + inset: 0; + background: rgba(5, 10, 24, 0.92); + backdrop-filter: blur(4px); + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + z-index: 9999; +} +.loading .spinner { + width: 46px; + height: 46px; + border: 4px solid rgba(255,255,255,0.15); + border-top-color: var(--accent); + border-radius: 50%; + animation: spin 1s linear infinite; + margin-bottom: 12px; +} +.loading p { color: var(--muted); margin: 0; letter-spacing: 0.4px; } +@keyframes spin { to { transform: rotate(360deg); } } + +.container { + position: relative; + max-width: 600px; + margin: 10vh auto; + padding: 0 24px 40px; + z-index: 1; +} + +.hero { + margin-bottom: 24px; +} +.hero h1 { + margin: 6px 0 6px; + font-size: 32px; + letter-spacing: -0.4px; +} +.subtitle { + margin: 0; + color: var(--muted); + line-height: 1.5; +} +.pill { + display: inline-flex; + align-items: center; + gap: 6px; + padding: 6px 12px; + border-radius: 999px; + background: rgba(94, 240, 193, 0.1); + color: var(--accent-2); + font-size: 12px; + letter-spacing: 0.3px; + border: 1px solid rgba(94, 240, 193, 0.25); +} + +.panel { + background: var(--panel); + border: 1px solid var(--border); + border-radius: 14px; + padding: 18px 18px 16px; + box-shadow: var(--shadow); + backdrop-filter: blur(10px); + margin-top: 16px; +} +.panel-heading { + display: flex; + align-items: center; + justify-content: space-between; + gap: 12px; + margin-bottom: 8px; +} +.panel-heading h2 { + margin: 2px 0; + font-size: 22px; +} +.eyebrow { + margin: 0; + text-transform: uppercase; + font-size: 11px; + letter-spacing: 0.5px; + color: var(--muted); +} +.muted { color: var(--muted); } +.chip { + display: inline-flex; + align-items: center; + padding: 6px 10px; + border-radius: 999px; + font-size: 12px; + color: var(--text); + background: rgba(255, 255, 255, 0.08); + border: 1px solid var(--border); +} +.chip-ok { + background: rgba(76, 224, 179, 0.15); + color: var(--ok); + border-color: rgba(76, 224, 179, 0.4); +} + +.hidden { display: none; } +label { + display: block; + margin: 8px 0 6px; + font-size: 13px; + color: var(--muted); + letter-spacing: 0.2px; +} +input[type="password"], +input[type="text"] { + width: 100%; + padding: 12px 14px; + border: 1px solid var(--border); + border-radius: 10px; + background: rgba(255, 255, 255, 0.04); + color: var(--text); + transition: border 0.15s ease, box-shadow 0.15s ease; +} +input:focus { + border-color: rgba(94, 240, 193, 0.7); + outline: none; + box-shadow: 0 0 0 3px rgba(94, 240, 193, 0.15); +} +input.error { + border-color: var(--error); + box-shadow: 0 0 0 3px rgba(255, 92, 112, 0.15); +} + +button { + display: inline-flex; + align-items: center; + justify-content: center; + margin-top: 12px; + padding: 11px 16px; + border: none; + border-radius: 10px; + background: linear-gradient(120deg, var(--accent), var(--accent-2)); + color: #031022; + cursor: pointer; + font-weight: 600; + letter-spacing: 0.2px; + box-shadow: 0 14px 40px rgba(69, 196, 255, 0.25); + transition: transform 0.12s ease, filter 0.12s ease, box-shadow 0.12s ease; +} +button:hover { filter: brightness(1.06); transform: translateY(-1px); } +button:active { transform: translateY(0); } +button.ghost { + background: rgba(255, 255, 255, 0.05); + color: var(--text); + box-shadow: none; + border: 1px solid var(--border); +} +button.ghost:hover { border-color: rgba(94, 240, 193, 0.4); } +.actions { + display: flex; + align-items: center; + gap: 12px; + flex-wrap: wrap; +} +.status { + margin: 0; + color: var(--muted); + font-size: 13px; +} +.status.ok { color: var(--ok); } +.status.warn { color: var(--warn); } +.status.error { color: var(--error); } + +@media (max-width: 760px) { + .hero h1 { font-size: 26px; } + button { width: 100%; justify-content: center; } + .actions { flex-direction: column; align-items: flex-start; } +} \ No newline at end of file diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/__init__.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/__init__.py new file mode 100644 index 00000000..6bc971c2 --- /dev/null +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/__init__.py @@ -0,0 +1 @@ +"""Tools loaded by the locked Reachy OpenShell profile.""" diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/background_tool_manager.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/background_tool_manager.py new file mode 100644 index 00000000..c7859c81 --- /dev/null +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/background_tool_manager.py @@ -0,0 +1,412 @@ +"""Background tool orchestrator for non-blocking tool execution. + +Allows tools to run long operations asynchronously while the robot +continues conversing. Tools can be tracked, cancelled, and their +completion is announced vocally via a silent notification queue. +""" + +from __future__ import annotations +import time +import asyncio +import logging +from typing import Any, Dict, Callable, Optional, Coroutine + +from pydantic import Field, BaseModel, PrivateAttr + +from reachy_mini_conversation_app.tools.core_tools import ( + ToolDependencies, + dispatch_tool_call, + dispatch_tool_call_with_manager, +) +from reachy_mini_conversation_app.tools.tool_constants import ToolState, SystemTool + + +logger = logging.getLogger(__name__) + +_SYSTEM_TOOL_NAMES: set[str] = {t.value for t in SystemTool} + +class ToolProgress(BaseModel): + """Progress of a background tool.""" + + """the progress of the tool""" + progress: float = Field(..., ge=0.0, le=1.0) + + """the message of the tool""" + message: Optional[str] = None + + +class ToolCallRoutine(BaseModel): + """Encapsulates an async callable with its arguments for deferred execution.""" + + model_config = {"arbitrary_types_allowed": True} + + """the name of the tool""" + tool_name: str + + """the JSON arguments for the tool call""" + args_json_str: str + + """the dependencies for the tool call""" + deps: "ToolDependencies" + + async def __call__(self, tool_manager: BackgroundToolManager) -> Any: + """Execute the stored callable with its arguments.""" + if self.tool_name in _SYSTEM_TOOL_NAMES: + # For safety purposes, we only allow system tools to be called with the tool manager + return await dispatch_tool_call_with_manager(tool_name=self.tool_name, args_json=self.args_json_str, deps=self.deps, tool_manager=tool_manager) + return await dispatch_tool_call(tool_name=self.tool_name, args_json=self.args_json_str, deps=self.deps) + + +class ToolNotification(BaseModel): + """Notification payload for completed tools.""" + + """the ID of the tool""" + id: str + + """the name of the tool""" + tool_name: str + + """whether the tool call was triggered by an idle signal""" + is_idle_tool_call: bool + + """the status of the tool""" + status: ToolState + + """the result of the tool""" + result: Optional[Dict[str, Any]] = None + + """the error of the tool""" + error: Optional[str] = None + + +class BackgroundTool(ToolNotification): + """Represents a background tool.""" + + """the progress of the tool""" + progress: Optional[ToolProgress] = None + + """the start time of the tool""" + started_at: float = Field(default_factory=time.monotonic) + + """the completion time of the tool""" + completed_at: Optional[float] = None + + """the async tool execution task""" + _task: Optional[asyncio.Task[None]] = PrivateAttr(default=None) + + @property + def tool_id(self) -> str: + """Get the name of the tool.""" + return f"{self.tool_name}-{self.id}-{self.started_at}" + + def get_notification(self) -> ToolNotification: + """Get the notification for the tool.""" + return ToolNotification( + id=self.id, + tool_name=self.tool_name, + is_idle_tool_call=self.is_idle_tool_call, + status=self.status, + result=self.result, + error=self.error, + ) + + +class BackgroundToolManager(BaseModel): + """Manages background tools for non-blocking tool execution. + + Features: + - Start async tools without blocking the conversation + - Track tool status and progress + - Cancel running tools + + """ + + """the dictionary of tools""" + _tools: Dict[str, BackgroundTool] = PrivateAttr(default_factory=dict) + + """the async queue for notifications""" + _notification_queue: asyncio.Queue[ToolNotification] = PrivateAttr(default_factory=asyncio.Queue) + + """the event loop""" + _loop: Optional[asyncio.AbstractEventLoop] = PrivateAttr(default=None) + + """internal lifecycle tasks (notification listener, periodic cleanup)""" + _lifecycle_tasks: list[asyncio.Task[None]] = PrivateAttr(default_factory=list) + + """the maximum duration of a tool execution in seconds (default: 1 day)""" + _max_tool_duration_seconds: float = PrivateAttr(default=86400) + + """the maximum time to keep a completed/failed/cancelled tool in memory (default: 1 hour)""" + _max_tool_memory_seconds: float = PrivateAttr(default=3600) + + def set_loop( + self, + loop: Optional[asyncio.AbstractEventLoop] = None, + ) -> None: + """Set the event loop. + + Args: + loop: The event loop (defaults to current running loop) + + """ + if loop is not None: + self._loop = loop + else: + try: + self._loop = asyncio.get_running_loop() + except RuntimeError: + self._loop = asyncio.new_event_loop() + logger.debug("BackgroundToolManager: event loop set") + + + async def start_tool( + self, + call_id: str, + tool_call_routine: ToolCallRoutine, + is_idle_tool_call: bool, + with_progress: bool = False, + ) -> BackgroundTool: + """Start a new background tool. + + Args: + call_id: The ID of the tool + tool_call_routine: The ToolCallRoutine containing the callable and its arguments + with_progress: Whether to track progress (0.0-1.0) + is_idle_tool_call: Whether the tool call was triggered by an idle signal + + Returns: + BackgroundTool object with tool ID + + """ + tool_name = tool_call_routine.tool_name + id = call_id + bg_tool = BackgroundTool( + id=id, + tool_name=tool_name, + is_idle_tool_call=is_idle_tool_call, + progress=ToolProgress(progress=0.0) if with_progress else None, + status=ToolState.RUNNING, + ) + self._tools[bg_tool.tool_id] = bg_tool + + async_task = asyncio.create_task( + self._run_tool(bg_tool, tool_call_routine), + name=f"bg-{tool_name}-{id}", + ) + bg_tool._task = async_task + + logger.info(f"Started background tool: {bg_tool.tool_name} (id={id})") + + return bg_tool + + async def _run_tool( + self, + bg_tool: BackgroundTool, + tool_call_routine: ToolCallRoutine, + ) -> None: + """Execute the tool and handle completion.""" + result: dict[str, Any] = await tool_call_routine(self) + bg_tool.completed_at = time.monotonic() + error = result.get("error") + + if error is not None: + if error == "Tool cancelled": + bg_tool.status = ToolState.CANCELLED + logger.debug(f"Background tool cancelled: {bg_tool.tool_name} (id={bg_tool.id})") + else: + bg_tool.status = ToolState.FAILED + logger.debug(f"Background tool failed: {bg_tool.tool_name} (id={bg_tool.id}): {bg_tool.error}") + bg_tool.error = result["error"] + + else: + bg_tool.result = result + bg_tool.status = ToolState.COMPLETED + logger.debug(f"Background tool completed: {bg_tool.tool_name} (id={bg_tool.id})") + + await self._notification_queue.put(bg_tool.get_notification()) + logger.debug(f"Queued notification for tool: {bg_tool.tool_name} (id={bg_tool.id})") + + async def update_progress( + self, + tool_id: str, + progress: float, + message: Optional[str] = None, + ) -> bool: + """Update progress for a tool (for tools with with_progress=True). + + Args: + tool_id: The tool ID + progress: Progress value between 0.0 and 1.0 + message: Optional progress message (e.g., "50% downloaded") + + Returns: + True if updated successfully, False if tool not found or not tracking progress + + """ + tool = self._tools.get(tool_id) + if tool is None: + return False + + if tool.progress is None: + # Tool not tracking progress + return False + + tool.progress = ToolProgress(progress=max(0.0, min(1.0, progress)), message=message) + logger.debug(f"Tool {tool_id} progress: {progress:.1%} - {message or ''}") + return True + + async def cancel_tool(self, tool_id: str, log: bool = True) -> bool: + """Cancel a running tool by ID. + + Args: + tool_id: The tool ID to cancel + log: Whether to log the cancellation + + Returns: + True if cancelled, False if tool not found or not running + + """ + tool = self._tools.get(tool_id) + if tool is None: + if log: + logger.warning(f"Cannot cancel tool {tool_id}: not found") + return False + + if tool.status != ToolState.RUNNING: + if log: + logger.warning(f"Cannot cancel tool {tool_id}: status is {tool.status.value}") + return True + + if tool._task: + tool._task.cancel() + if log: + logger.info(f"Cancelled tool: {tool.tool_name} (id={tool_id})") + return True + + return False + + def start_up(self, tool_callbacks: list[Callable[[ToolNotification], Coroutine[Any, Any, None]]]) -> None: + """Start the background tool manager. + + This method starts two concurrent tasks: + - _listener: Listens for completed BackgroundTool notifications and calls the callbacks. + - _cleanup: Cleans up completed/failed/cancelled tools that have been in memory for too long and times out tools that have been running too long. + + Args: + tool_callbacks: A list of async or sync callables that receive the completed BackgroundTool notifications. + + """ + self.set_loop() + + async def _listener() -> None: + while True: + bg_tool = await self._notification_queue.get() + for callback in tool_callbacks: + await callback(bg_tool) + + async def _cleanup(interval_seconds: float = 5 * 60) -> None: + while True: + await asyncio.sleep(interval_seconds) + await self.cleanup_tools() + await self.timeout_tools() + + self._lifecycle_tasks = [ + asyncio.create_task(_cleanup(), name="bg-tool-cleanup"), + asyncio.create_task(_listener(), name="bg-tool-listener-callback"), + ] + + logger.info( + "BackgroundToolManager started. " + "Max tool execution duration: %s seconds (tools running longer will be auto-cancelled). " + "Max tool memory retention: %s seconds (completed/failed/cancelled tools older than this are purged).", + self._max_tool_duration_seconds, self._max_tool_memory_seconds, + ) + + async def shutdown(self) -> None: + """Cancel all background tasks (listener, cleanup) and running tools.""" + for task in self._lifecycle_tasks: + task.cancel() + for task in self._lifecycle_tasks: + try: + await task + except asyncio.CancelledError: + pass + self._lifecycle_tasks.clear() + + for tool_id in list(self._tools): + await self.cancel_tool(tool_id, log=False) + + logger.info("BackgroundToolManager shut down") + + async def timeout_tools(self) -> int: + """Cancel tools that have been running too long. + + Returns: + Number of tools cancelled + + """ + now = time.monotonic() + to_cancel = [] + + for tool_id, tool in self._tools.items(): + if tool.status == ToolState.RUNNING: + if tool.started_at and (now - tool.started_at) > self._max_tool_duration_seconds: + to_cancel.append(tool_id) + + for tool_id in to_cancel: + await self.cancel_tool(tool_id) + + if to_cancel: + logger.debug(f"Timed out {len(to_cancel)} tools") + + return len(to_cancel) + + async def cleanup_tools(self) -> int: + """Remove completed/failed/cancelled tools that have been in memory for too long. + + Returns: + Number of tools removed + + """ + now = time.monotonic() + to_remove = [] + + for tool_id, tool in self._tools.items(): + if tool.status in (ToolState.COMPLETED, ToolState.FAILED, ToolState.CANCELLED): + if tool.completed_at and (now - tool.completed_at) > self._max_tool_memory_seconds: + to_remove.append(tool_id) + + for tool_id in to_remove: + del self._tools[tool_id] + + if to_remove: + logger.debug(f"Cleaned up {len(to_remove)} old tools") + + return len(to_remove) + + def get_tool(self, tool_id: str) -> Optional[BackgroundTool]: + """Get a tool by ID.""" + return self._tools.get(tool_id) + + def get_running_tools(self) -> list[BackgroundTool]: + """Get all currently running tools.""" + return [t for t in self._tools.values() if t.status == ToolState.RUNNING] + + def get_all_tools(self, limit: Optional[int] = None) -> list[BackgroundTool]: + """Get recent tools (most recent first). + + Args: + limit: Maximum number of tools to return (None means all) + + Returns: + List of tools sorted by start time (most recent first) + + """ + sorted_tools = sorted( + self._tools.values(), + key=lambda t: t.started_at, + reverse=True, + ) + if limit is not None: + return sorted_tools[:limit] + return sorted_tools diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/camera.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/camera.py new file mode 100644 index 00000000..0c7fbb8f --- /dev/null +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/camera.py @@ -0,0 +1,68 @@ +import base64 +import asyncio +import logging +from typing import Any, Dict + +import cv2 + +from reachy_mini_conversation_app.tools.core_tools import Tool, ToolDependencies + + +logger = logging.getLogger(__name__) + + +class Camera(Tool): + """Take a picture with the camera and ask a question about it.""" + + name = "camera" + description = "Take a picture with the camera and ask a question about it." + parameters_schema = { + "type": "object", + "properties": { + "question": { + "type": "string", + "description": "The question to ask about the picture", + }, + }, + "required": ["question"], + } + + async def __call__(self, deps: ToolDependencies, **kwargs: Any) -> Dict[str, Any]: + """Take a picture with the camera and ask a question about it.""" + image_query = (kwargs.get("question") or "").strip() + if not image_query: + logger.warning("camera: empty question") + return {"error": "question must be a non-empty string"} + + logger.info("Tool call: camera question=%s", image_query[:120]) + + # Get frame from camera worker buffer (like main_works.py) + if deps.camera_worker is not None: + frame = deps.camera_worker.get_latest_frame() + if frame is None: + logger.error("No frame available from camera worker") + return {"error": "No frame available"} + else: + logger.error("Camera worker not available") + return {"error": "Camera worker not available"} + + # Use vision manager for processing if available + if deps.vision_manager is not None: + vision_result = await asyncio.to_thread( + deps.vision_manager.processor.process_image, frame, image_query, + ) + if isinstance(vision_result, dict) and "error" in vision_result: + return vision_result + return ( + {"image_description": vision_result} + if isinstance(vision_result, str) + else {"error": "vision returned non-string"} + ) + + # Encode image directly to JPEG bytes without writing to file + success, buffer = cv2.imencode('.jpg', frame) + if not success: + raise RuntimeError("Failed to encode frame as JPEG") + + b64_encoded = base64.b64encode(buffer.tobytes()).decode("utf-8") + return {"b64_im": b64_encoded} diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/core_tools.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/core_tools.py new file mode 100644 index 00000000..38bd525e --- /dev/null +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/core_tools.py @@ -0,0 +1,213 @@ +from __future__ import annotations +import abc +import json +import asyncio +import inspect +import logging +import importlib +from typing import TYPE_CHECKING, Any, Dict, List +from dataclasses import dataclass + +from reachy_mini import ReachyMini +from reachy_mini_conversation_app.config import LOCKED_PROFILE, DEFAULT_PROFILES_DIRECTORY +from reachy_mini_conversation_app.tools.tool_constants import SystemTool + + +if TYPE_CHECKING: + from reachy_mini_conversation_app.tools.background_tool_manager import BackgroundToolManager + + +logger = logging.getLogger(__name__) + + +DEFAULT_PROFILES_MODULE = "reachy_mini_conversation_app.profiles" + + +if not logger.handlers: + handler = logging.StreamHandler() + formatter = logging.Formatter("%(asctime)s %(levelname)s %(name)s:%(lineno)d | %(message)s") + handler.setFormatter(formatter) + logger.addHandler(handler) + logger.setLevel(logging.INFO) + + +ALL_TOOLS: Dict[str, "Tool"] = {} +ALL_TOOL_SPECS: List[Dict[str, Any]] = [] +_TOOLS_INITIALIZED = False + + +def get_concrete_subclasses(base: type[Tool]) -> List[type[Tool]]: + """Recursively find all concrete (non-abstract) subclasses of a base class.""" + result: List[type[Tool]] = [] + for cls in base.__subclasses__(): + if not inspect.isabstract(cls): + result.append(cls) + result.extend(get_concrete_subclasses(cls)) + return result + + +@dataclass +class ToolDependencies: + """External dependencies injected into tools.""" + + reachy_mini: ReachyMini + movement_manager: Any + camera_worker: Any | None = None + vision_manager: Any | None = None + head_wobbler: Any | None = None + motion_duration_s: float = 1.0 + + +class Tool(abc.ABC): + """Base abstraction for tools used in function-calling.""" + + name: str + description: str + parameters_schema: Dict[str, Any] + + def spec(self) -> Dict[str, Any]: + """Return the function spec for LLM consumption.""" + return { + "type": "function", + "name": self.name, + "description": self.description, + "parameters": self.parameters_schema, + } + + @abc.abstractmethod + async def __call__(self, deps: ToolDependencies, **kwargs: Any) -> Dict[str, Any]: + """Async tool execution entrypoint.""" + raise NotImplementedError + + +def _try_import_tool(module_path: str) -> bool: + """Import a tool module, returning False only when that module does not exist.""" + try: + importlib.import_module(module_path) + return True + except ModuleNotFoundError as exc: + if exc.name != module_path: + raise + return False + + +def _format_error(error: Exception) -> str: + """Format an exception for logging.""" + if isinstance(error, ModuleNotFoundError): + return f"Missing dependency: {error}" + if isinstance(error, ImportError): + return f"Import error: {error}" + return f"{type(error).__name__}: {error}" + + +def _load_profile_tools() -> None: + """Load tools from the locked profile's tools.txt file.""" + profile = LOCKED_PROFILE + logger.info("Loading tools for locked profile: %s", profile) + + profile_module_path = DEFAULT_PROFILES_DIRECTORY / profile + tools_txt_path = profile_module_path / "tools.txt" + + if not tools_txt_path.exists(): + raise RuntimeError(f"tools.txt not found at {tools_txt_path}") + + try: + lines = tools_txt_path.read_text(encoding="utf-8").splitlines() + except Exception as e: + raise RuntimeError(f"Failed to read tools.txt: {e}") from e + + tool_names = [] + for line in lines: + line = line.strip() + if not line or line.startswith("#"): + continue + tool_names.append(line) + + tool_names.extend({tool.value for tool in SystemTool}) + + logger.info("Found %d tools to load: %s", len(tool_names), tool_names) + + for tool_name in tool_names: + profile_import_path = f"{DEFAULT_PROFILES_MODULE}.{profile}.{tool_name}" + shared_module_path = f"reachy_mini_conversation_app.tools.{tool_name}" + + try: + if _try_import_tool(profile_import_path): + logger.info("Loaded profile tool: %s", tool_name) + continue + except Exception as e: + raise RuntimeError(f"Failed to load profile tool '{tool_name}': {_format_error(e)}") from e + + try: + if _try_import_tool(shared_module_path): + logger.info("Loaded built-in tool: %s", tool_name) + continue + except Exception as e: + raise RuntimeError(f"Failed to load built-in tool '{tool_name}': {_format_error(e)}") from e + + raise RuntimeError(f"Tool '{tool_name}' was not found in the locked profile or built-in tools") + + +def _initialize_tools() -> None: + """Populate registry once, even if module is imported repeatedly.""" + global ALL_TOOLS, ALL_TOOL_SPECS, _TOOLS_INITIALIZED + + if _TOOLS_INITIALIZED: + logger.debug("Tools already initialized; skipping reinitialization.") + return + + _load_profile_tools() + + ALL_TOOLS = {cls.name: cls() for cls in get_concrete_subclasses(Tool)} # type: ignore[type-abstract] + ALL_TOOL_SPECS = [tool.spec() for tool in ALL_TOOLS.values()] + + for tool_name, tool in ALL_TOOLS.items(): + logger.info(f"tool registered: {tool_name} - {tool.description}") + + _TOOLS_INITIALIZED = True + + +_initialize_tools() + + +def get_tool_specs(exclusion_list: list[str] | None = None) -> list[Dict[str, Any]]: + """Get tool specs, optionally excluding some tools.""" + exclusion_list = exclusion_list or [] + return [spec for spec in ALL_TOOL_SPECS if spec.get("name") not in exclusion_list] + + +# Dispatcher +def _safe_load_obj(args_json: str) -> Dict[str, Any]: + try: + parsed_args = json.loads(args_json or "{}") + return parsed_args if isinstance(parsed_args, dict) else {} + except Exception: + logger.warning("bad args_json=%r", args_json) + return {} + + +async def _dispatch_tool_call(tool_name: str, args: Dict[str, Any], deps: ToolDependencies) -> Dict[str, Any]: + tool = ALL_TOOLS.get(tool_name) + if not tool: + return {"error": f"unknown tool: {tool_name}"} + try: + return await tool(deps, **args) + except asyncio.CancelledError: + logger.info("Tool cancelled: %s", tool_name) + return {"error": "Tool cancelled"} + except Exception as e: + msg = f"{type(e).__name__}: {e}" + logger.exception("Tool error in %s: %s", tool_name, msg) + return {"error": msg} + + +async def dispatch_tool_call(tool_name: str, args_json: str, deps: ToolDependencies) -> Dict[str, Any]: + """Dispatch a tool call by name with JSON args and dependencies.""" + return await _dispatch_tool_call(tool_name, _safe_load_obj(args_json), deps) + + +async def dispatch_tool_call_with_manager(tool_name: str, args_json: str, deps: ToolDependencies, tool_manager: "BackgroundToolManager") -> Dict[str, Any]: + """Dispatch a tool call, injecting a BackgroundToolManager into the args.""" + args = _safe_load_obj(args_json) + args["tool_manager"] = tool_manager + return await _dispatch_tool_call(tool_name, args, deps) diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/dance.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/dance.py new file mode 100644 index 00000000..833cd552 --- /dev/null +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/dance.py @@ -0,0 +1,86 @@ +import logging +from typing import Any, Dict + +from reachy_mini_conversation_app.tools.core_tools import Tool, ToolDependencies + + +logger = logging.getLogger(__name__) + +# Initialize dance library +try: + from reachy_mini_dances_library.collection.dance import AVAILABLE_MOVES + from reachy_mini_conversation_app.dance_emotion_moves import DanceQueueMove + + DANCE_AVAILABLE = True +except ImportError as e: + logger.warning(f"Dance library not available: {e}") + AVAILABLE_MOVES = {} + DANCE_AVAILABLE = False + + +class Dance(Tool): + """Play a named or random dance move once (or repeat). Non-blocking.""" + + name = "dance" + description = "Play a named or random dance move once (or repeat). Non-blocking." + parameters_schema = { + "type": "object", + "properties": { + "move": { + "type": "string", + "description": """Name of the move; use 'random' or omit for random. + Here is a list of the available moves: + simple_nod: A simple, continuous up-and-down nodding motion. + head_tilt_roll: A continuous side-to-side head roll (ear to shoulder). + side_to_side_sway: A smooth, side-to-side sway of the entire head. + dizzy_spin: A circular 'dizzy' head motion combining roll and pitch. + stumble_and_recover: A simulated stumble and recovery with multiple axis movements. Good vibes + interwoven_spirals: A complex spiral motion using three axes at different frequencies. + sharp_side_tilt: A sharp, quick side-to-side tilt using a triangle waveform. + side_peekaboo: A multi-stage peekaboo performance, hiding and peeking to each side. + yeah_nod: An emphatic two-part yeah nod using transient motions. + uh_huh_tilt: A combined roll-and-pitch uh-huh gesture of agreement. + neck_recoil: A quick, transient backward recoil of the neck. + chin_lead: A forward motion led by the chin, combining translation and pitch. + groovy_sway_and_roll: A side-to-side sway combined with a corresponding roll for a groovy effect. + chicken_peck: A sharp, forward, chicken-like pecking motion. + side_glance_flick: A quick glance to the side that holds, then returns. + polyrhythm_combo: A 3-beat sway and a 2-beat nod create a polyrhythmic feel. + grid_snap: A robotic, grid-snapping motion using square waveforms. + pendulum_swing: A simple, smooth pendulum-like swing using a roll motion. + jackson_square: Traces a rectangle via a 5-point path, with sharp twitches on arrival at each checkpoint. + """, + }, + "repeat": { + "type": "integer", + "description": "How many times to repeat the move (default 1).", + }, + }, + "required": [], + } + + async def __call__(self, deps: ToolDependencies, **kwargs: Any) -> Dict[str, Any]: + """Play a named or random dance move once (or repeat). Non-blocking.""" + if not DANCE_AVAILABLE: + return {"error": "Dance system not available"} + + move_name = kwargs.get("move") + repeat = int(kwargs.get("repeat", 1)) + + logger.info("Tool call: dance move=%s repeat=%d", move_name, repeat) + + if not move_name or move_name == "random": + import random + + move_name = random.choice(list(AVAILABLE_MOVES.keys())) + + if move_name not in AVAILABLE_MOVES: + return {"error": f"Unknown dance move '{move_name}'. Available: {list(AVAILABLE_MOVES.keys())}"} + + # Add dance moves to queue + movement_manager = deps.movement_manager + for _ in range(repeat): + dance_move = DanceQueueMove(move_name) + movement_manager.queue_move(dance_move) + + return {"status": "queued", "move": move_name, "repeat": repeat} diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/do_nothing.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/do_nothing.py new file mode 100644 index 00000000..c64588f6 --- /dev/null +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/do_nothing.py @@ -0,0 +1,30 @@ +import logging +from typing import Any, Dict + +from reachy_mini_conversation_app.tools.core_tools import Tool, ToolDependencies + + +logger = logging.getLogger(__name__) + + +class DoNothing(Tool): + """Choose to do nothing - stay still and silent. Use when you want to be contemplative or just chill.""" + + name = "do_nothing" + description = "Choose to do nothing - stay still and silent. Use when you want to be contemplative or just chill." + parameters_schema = { + "type": "object", + "properties": { + "reason": { + "type": "string", + "description": "Optional reason for doing nothing (e.g., 'contemplating existence', 'saving energy', 'being mysterious')", + }, + }, + "required": [], + } + + async def __call__(self, deps: ToolDependencies, **kwargs: Any) -> Dict[str, Any]: + """Do nothing - stay still and silent.""" + reason = kwargs.get("reason", "just chilling") + logger.info("Tool call: do_nothing reason=%s", reason) + return {"status": "doing nothing", "reason": reason} diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/head_tracking.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/head_tracking.py new file mode 100644 index 00000000..57fa178d --- /dev/null +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/head_tracking.py @@ -0,0 +1,31 @@ +import logging +from typing import Any, Dict + +from reachy_mini_conversation_app.tools.core_tools import Tool, ToolDependencies + + +logger = logging.getLogger(__name__) + + +class HeadTracking(Tool): + """Toggle head tracking state.""" + + name = "head_tracking" + description = "Toggle head tracking state." + parameters_schema = { + "type": "object", + "properties": {"start": {"type": "boolean"}}, + "required": ["start"], + } + + async def __call__(self, deps: ToolDependencies, **kwargs: Any) -> Dict[str, Any]: + """Enable or disable head tracking.""" + enable = bool(kwargs.get("start")) + + # Update camera worker head tracking state + if deps.camera_worker is not None: + deps.camera_worker.set_head_tracking_enabled(enable) + + status = "started" if enable else "stopped" + logger.info("Tool call: head_tracking %s", status) + return {"status": f"head tracking {status}"} diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/move_head.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/move_head.py new file mode 100644 index 00000000..4633572e --- /dev/null +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/move_head.py @@ -0,0 +1,79 @@ +import logging +from typing import Any, Dict, Tuple, Literal + +from reachy_mini.utils import create_head_pose +from reachy_mini_conversation_app.goto_queue_move import GotoQueueMove +from reachy_mini_conversation_app.tools.core_tools import Tool, ToolDependencies + + +logger = logging.getLogger(__name__) + +Direction = Literal["left", "right", "up", "down", "front"] + + +class MoveHead(Tool): + """Move head in a given direction.""" + + name = "move_head" + description = "Move your head in a given direction: left, right, up, down or front." + parameters_schema = { + "type": "object", + "properties": { + "direction": { + "type": "string", + "enum": ["left", "right", "up", "down", "front"], + }, + }, + "required": ["direction"], + } + + # mapping: direction -> args for create_head_pose + DELTAS: Dict[str, Tuple[int, int, int, int, int, int]] = { + "left": (0, 0, 0, 0, 0, 40), + "right": (0, 0, 0, 0, 0, -40), + "up": (0, 0, 0, 0, -30, 0), + "down": (0, 0, 0, 0, 30, 0), + "front": (0, 0, 0, 0, 0, 0), + } + + async def __call__(self, deps: ToolDependencies, **kwargs: Any) -> Dict[str, Any]: + """Move head in a given direction.""" + direction_raw = kwargs.get("direction") + if not isinstance(direction_raw, str): + return {"error": "direction must be a string"} + direction: Direction = direction_raw # type: ignore[assignment] + logger.info("Tool call: move_head direction=%s", direction) + + deltas = self.DELTAS.get(direction, self.DELTAS["front"]) + target = create_head_pose(*deltas, degrees=True) + + # Use new movement manager + try: + movement_manager = deps.movement_manager + + # Get current state for interpolation + current_head_pose = deps.reachy_mini.get_current_head_pose() + _, current_antennas = deps.reachy_mini.get_current_joint_positions() + + # Create goto move + goto_move = GotoQueueMove( + target_head_pose=target, + start_head_pose=current_head_pose, + target_antennas=(0, 0), # Reset antennas to default + start_antennas=( + current_antennas[0], + current_antennas[1], + ), # Skip body_yaw + target_body_yaw=0, # Reset body yaw + start_body_yaw=current_antennas[0], # body_yaw is first in joint positions + duration=deps.motion_duration_s, + ) + + movement_manager.queue_move(goto_move) + movement_manager.set_moving_state(deps.motion_duration_s) + + return {"status": f"looking {direction}"} + + except Exception as e: + logger.error("move_head failed") + return {"error": f"move_head failed: {type(e).__name__}: {e}"} diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/play_emotion.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/play_emotion.py new file mode 100644 index 00000000..34b2fdac --- /dev/null +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/play_emotion.py @@ -0,0 +1,84 @@ +import logging +from typing import Any, Dict + +from reachy_mini_conversation_app.tools.core_tools import Tool, ToolDependencies + + +logger = logging.getLogger(__name__) + +# Initialize emotion library +try: + from reachy_mini.motion.recorded_move import RecordedMoves + from reachy_mini_conversation_app.dance_emotion_moves import EmotionQueueMove + + # Note: huggingface_hub automatically reads HF_TOKEN from environment variables + RECORDED_MOVES = RecordedMoves("pollen-robotics/reachy-mini-emotions-library") + EMOTION_AVAILABLE = True +except ImportError as e: + logger.warning(f"Emotion library not available: {e}") + RECORDED_MOVES = None + EMOTION_AVAILABLE = False + + +def get_available_emotions_and_descriptions() -> str: + """Get formatted list of available emotions with descriptions.""" + if not EMOTION_AVAILABLE: + return "Emotions not available" + + try: + emotion_names = RECORDED_MOVES.list_moves() + output = "Available emotions:\n" + for name in emotion_names: + description = RECORDED_MOVES.get(name).description + output += f" - {name}: {description}\n" + return output + except Exception as e: + return f"Error getting emotions: {e}" + + +class PlayEmotion(Tool): + """Play a pre-recorded emotion.""" + + name = "play_emotion" + description = "Play a pre-recorded emotion" + parameters_schema = { + "type": "object", + "properties": { + "emotion": { + "type": "string", + "description": f"""Name of the emotion to play. + Here is a list of the available emotions: + {get_available_emotions_and_descriptions()} + """, + }, + }, + "required": ["emotion"], + } + + async def __call__(self, deps: ToolDependencies, **kwargs: Any) -> Dict[str, Any]: + """Play a pre-recorded emotion.""" + if not EMOTION_AVAILABLE: + return {"error": "Emotion system not available"} + + emotion_name = kwargs.get("emotion") + if not emotion_name: + return {"error": "Emotion name is required"} + + logger.info("Tool call: play_emotion emotion=%s", emotion_name) + + # Check if emotion exists + try: + emotion_names = RECORDED_MOVES.list_moves() + if emotion_name not in emotion_names: + return {"error": f"Unknown emotion '{emotion_name}'. Available: {emotion_names}"} + + # Add emotion to queue + movement_manager = deps.movement_manager + emotion_move = EmotionQueueMove(emotion_name, RECORDED_MOVES) + movement_manager.queue_move(emotion_move) + + return {"status": "queued", "emotion": emotion_name} + + except Exception as e: + logger.exception("Failed to play emotion") + return {"error": f"Failed to play emotion: {e!s}"} diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/stop_dance.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/stop_dance.py new file mode 100644 index 00000000..ab14e84a --- /dev/null +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/stop_dance.py @@ -0,0 +1,31 @@ +import logging +from typing import Any, Dict + +from reachy_mini_conversation_app.tools.core_tools import Tool, ToolDependencies + + +logger = logging.getLogger(__name__) + + +class StopDance(Tool): + """Stop the current dance move.""" + + name = "stop_dance" + description = "Stop the current dance move" + parameters_schema = { + "type": "object", + "properties": { + "dummy": { + "type": "boolean", + "description": "dummy boolean, set it to true", + }, + }, + "required": ["dummy"], + } + + async def __call__(self, deps: ToolDependencies, **kwargs: Any) -> Dict[str, Any]: + """Stop the current dance move.""" + logger.info("Tool call: stop_dance") + movement_manager = deps.movement_manager + movement_manager.clear_move_queue() + return {"status": "stopped dance and cleared queue"} diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/stop_emotion.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/stop_emotion.py new file mode 100644 index 00000000..b5d2323f --- /dev/null +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/stop_emotion.py @@ -0,0 +1,31 @@ +import logging +from typing import Any, Dict + +from reachy_mini_conversation_app.tools.core_tools import Tool, ToolDependencies + + +logger = logging.getLogger(__name__) + + +class StopEmotion(Tool): + """Stop the current emotion.""" + + name = "stop_emotion" + description = "Stop the current emotion" + parameters_schema = { + "type": "object", + "properties": { + "dummy": { + "type": "boolean", + "description": "dummy boolean, set it to true", + }, + }, + "required": ["dummy"], + } + + async def __call__(self, deps: ToolDependencies, **kwargs: Any) -> Dict[str, Any]: + """Stop the current emotion.""" + logger.info("Tool call: stop_emotion") + movement_manager = deps.movement_manager + movement_manager.clear_move_queue() + return {"status": "stopped emotion and cleared queue"} diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/task_cancel.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/task_cancel.py new file mode 100644 index 00000000..6e3c6e89 --- /dev/null +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/task_cancel.py @@ -0,0 +1,74 @@ +"""Tool cancel tool - cancel running background tools.""" + +import logging +from typing import TYPE_CHECKING, Any, Dict + +from reachy_mini_conversation_app.tools.core_tools import Tool, ToolDependencies +from reachy_mini_conversation_app.tools.tool_constants import ToolState + + +if TYPE_CHECKING: + from reachy_mini_conversation_app.tools.background_tool_manager import BackgroundToolManager + + +logger = logging.getLogger(__name__) + + +class TaskCancel(Tool): + """Cancel a running background tool task.""" + + name = "task_cancel" + description = ( + "Cancel a running background tool task. " + "Use this when the user wants to stop a tool that's running in the background. " + "Requires confirmation before cancelling." + ) + parameters_schema = { + "type": "object", + "properties": { + "tool_id": { + "type": "string", + "description": "The tool ID to cancel", + } + }, + "required": ["tool_id"], + } + + async def __call__(self, deps: ToolDependencies, **kwargs: Any) -> Dict[str, Any]: + """Cancel a background tool.""" + tool_id = kwargs.get("tool_id", "") + tool_manager: BackgroundToolManager | None = kwargs.get("tool_manager") + + if tool_manager is None: + return {"error": "Tool manager is required."} + + logger.info(f"Tool call: tool_cancel tool_id={tool_id}") + + if not tool_id: + return {"error": "Tool ID is required."} + + tool = tool_manager.get_tool(tool_id) + + if not tool: + return {"error": f"Tool {tool_id} not found."} + + # Check if tool is still running + if tool.status != ToolState.RUNNING: + return { + "status": f"{tool.status.value}", + "message": f"Tool '{tool.tool_name}' is not running (status: {tool.status.value}).", + "tool_id": tool_id, + } + + # Cancel the tool + if await tool_manager.cancel_tool(tool_id): + return { + "status": "cancelled", + "message": f"Tool '{tool.tool_name}' has been cancelled.", + "tool_id": tool_id, + "tool_name": tool.tool_name, + } + else: + return { + "error": f"Could not cancel tool {tool_id}. It may have already completed.", + } diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/task_status.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/task_status.py new file mode 100644 index 00000000..a5d0138d --- /dev/null +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/task_status.py @@ -0,0 +1,104 @@ +"""Tool status tool - check status of background tools.""" + +import time +import logging +from typing import TYPE_CHECKING, Any, Dict + +from reachy_mini_conversation_app.tools.core_tools import Tool, ToolDependencies +from reachy_mini_conversation_app.tools.tool_constants import SystemTool + + +if TYPE_CHECKING: + from reachy_mini_conversation_app.tools.background_tool_manager import BackgroundToolManager + + +logger = logging.getLogger(__name__) + + +class TaskStatus(Tool): + """Check status of background tool tasks.""" + + name = "task_status" + description = ( + "Check the status of background tool tasks. " + "Use this when the user asks about running tools or wants to know what's happening in the background." + ) + parameters_schema = { + "type": "object", + "properties": { + "tool_id": { + "type": "string", + "description": "Specific tool ID to check (optional, shows all running tools if omitted)", + }, + }, + "required": [], + } + + async def __call__(self, deps: ToolDependencies, **kwargs: Any) -> Dict[str, Any]: + """Get status of background tools.""" + tool_id: str | None = kwargs.get("tool_id") + tool_manager: BackgroundToolManager | None = kwargs.get("tool_manager") + + if tool_manager is None: + return {"error": "Tool manager is required."} + + logger.info(f"Tool call: tool_status tool_id={tool_id}") + + if tool_id: + tool = tool_manager.get_tool(tool_id) + if not tool: + return {"error": f"Tool {tool_id} not found."} + + result: Dict[str, Any] = { + "tool_id": tool.tool_id, + "name": tool.tool_name, + "status": tool.status.value, + "started_at": tool.started_at, + } + if tool.completed_at: + result["completed_at"] = tool.completed_at + + if tool.progress is not None: + result["progress_percent"] = f"{tool.progress.progress:.0%}" + if tool.progress.message: + result["progress_message"] = tool.progress.message + + if tool.result: + result["result"] = tool.result + if tool.error: + result["error"] = tool.error + + return result + + # Get all running tools + running = tool_manager.get_running_tools() + if not running: + return { + "status": "idle", + "message": "No tools running in the background.", + } + + tools_info = [] + for tool in [tool for tool in running if tool.tool_name not in [system_tool.value for system_tool in SystemTool]]: + elapsed = time.monotonic() - tool.started_at + tool_info: Dict[str, Any] = { + "tool_id": tool.tool_id, + "name": tool.tool_name, + "status": tool.status.value, + "elapsed_seconds": round(elapsed, 1), + } + + # Add progress if tracking + if tool.progress is not None: + tool_info["progress_percent"] = f"{tool.progress.progress:.0%}" + if tool.progress.message: + tool_info["progress_message"] = tool.progress.message + + tools_info.append(tool_info) + + return { + "status": "running", + "count": len(tools_info), + "message": f"{len(tools_info)} tool(s) running in the background.", + "tools": tools_info, + } diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/tool_constants.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/tool_constants.py new file mode 100644 index 00000000..da163c09 --- /dev/null +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/tool_constants.py @@ -0,0 +1,17 @@ +from enum import Enum + + +class ToolState(Enum): + """Status of a background tool.""" + + RUNNING = "running" + COMPLETED = "completed" + FAILED = "failed" + CANCELLED = "cancelled" + + +class SystemTool(Enum): + """System tools are tools that are used to manage the background tool manager.""" + + TASK_STATUS = "task_status" + TASK_CANCEL = "task_cancel" diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/utils.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/utils.py new file mode 100644 index 00000000..67e28275 --- /dev/null +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/utils.py @@ -0,0 +1,123 @@ +import logging +import argparse +import warnings +from typing import Any, Tuple, Optional + +from reachy_mini import ReachyMini +from reachy_mini_conversation_app.camera_worker import CameraWorker + + +def parse_args() -> Tuple[argparse.Namespace, list]: # type: ignore + """Parse command line arguments.""" + parser = argparse.ArgumentParser("Reachy Mini Conversation App") + parser.add_argument( + "--head-tracker", + choices=["yolo", "mediapipe", None], + default=None, + help="Choose head tracker (default: None)", + ) + parser.add_argument("--no-camera", default=False, action="store_true", help="Disable camera usage") + parser.add_argument( + "--local-vision", + default=False, + action="store_true", + help="Use local vision model instead of gpt-realtime vision", + ) + parser.add_argument("--gradio", default=False, action="store_true", help="Open gradio interface") + parser.add_argument("--debug", default=False, action="store_true", help="Enable debug logging") + parser.add_argument( + "--robot-name", + type=str, + default=None, + help="[Optional] Robot name/prefix for Zenoh topics (must match daemon's --robot-name). Only needed for development with multiple robots.", + ) + return parser.parse_known_args() + + +def handle_vision_stuff(args: argparse.Namespace, current_robot: ReachyMini) -> Tuple[CameraWorker | None, Any, Any]: + """Initialize camera, head tracker, camera worker, and vision manager. + + By default, vision is handled by gpt-realtime model when camera tool is used. + If --local-vision flag is used, a local vision model will process images periodically. + """ + camera_worker = None + head_tracker = None + vision_manager = None + + if not args.no_camera: + # Initialize head tracker if specified + if args.head_tracker is not None: + if args.head_tracker == "yolo": + from reachy_mini_conversation_app.vision.yolo_head_tracker import HeadTracker + + head_tracker = HeadTracker() + elif args.head_tracker == "mediapipe": + from reachy_mini_toolbox.vision import HeadTracker # type: ignore[no-redef] + + head_tracker = HeadTracker() + + # Initialize camera worker + camera_worker = CameraWorker(current_robot, head_tracker) + + # Initialize vision manager only if local vision is requested + if args.local_vision: + try: + from reachy_mini_conversation_app.vision.processors import initialize_vision_manager + + vision_manager = initialize_vision_manager(camera_worker) + except ImportError as e: + raise ImportError( + "To use --local-vision, please install the extra dependencies: pip install '.[local_vision]'", + ) from e + else: + logging.getLogger(__name__).info( + "Using gpt-realtime for vision (default). Use --local-vision for local processing.", + ) + + return camera_worker, head_tracker, vision_manager + + +def setup_logger(debug: bool) -> logging.Logger: + """Setups the logger.""" + log_level = "DEBUG" if debug else "INFO" + logging.basicConfig( + level=getattr(logging, log_level, logging.INFO), + format="%(asctime)s %(levelname)s %(name)s:%(lineno)d | %(message)s", + ) + logger = logging.getLogger(__name__) + + # Suppress WebRTC warnings + warnings.filterwarnings("ignore", message=".*AVCaptureDeviceTypeExternal.*") + warnings.filterwarnings("ignore", category=UserWarning, module="aiortc") + + # Tame third-party noise (looser in DEBUG) + if log_level == "DEBUG": + logging.getLogger("aiortc").setLevel(logging.INFO) + logging.getLogger("fastrtc").setLevel(logging.INFO) + logging.getLogger("aioice").setLevel(logging.INFO) + logging.getLogger("openai").setLevel(logging.INFO) + logging.getLogger("websockets").setLevel(logging.INFO) + else: + logging.getLogger("aiortc").setLevel(logging.ERROR) + logging.getLogger("fastrtc").setLevel(logging.ERROR) + logging.getLogger("aioice").setLevel(logging.WARNING) + return logger + +def log_connection_troubleshooting(logger: logging.Logger, robot_name: Optional[str]) -> None: + """Log troubleshooting steps for connection issues.""" + logger.error("Troubleshooting steps:") + logger.error(" 1. Verify reachy-mini-daemon is running") + + if robot_name is not None: + logger.error( + f" 2. Daemon must be started with: --robot-name '{robot_name}'" + ) + else: + logger.error( + " 2. If daemon uses --robot-name, add the same flag here: " + "--robot-name " + ) + + logger.error(" 3. For wireless: check network connectivity") + logger.error(" 4. Review daemon logs") + logger.error(" 5. Restart the daemon") diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/vision/__init__.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/vision/__init__.py new file mode 100644 index 00000000..60dc15c4 --- /dev/null +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/vision/__init__.py @@ -0,0 +1 @@ +"""Nothing (for ruff).""" diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/vision/processors.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/vision/processors.py new file mode 100644 index 00000000..71598d8b --- /dev/null +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/vision/processors.py @@ -0,0 +1,331 @@ +import os +import time +import base64 +import logging +import threading +from typing import Any, Dict +from dataclasses import dataclass + +import cv2 +import numpy as np +import torch +from numpy.typing import NDArray +from transformers import AutoProcessor, AutoModelForImageTextToText +from huggingface_hub import snapshot_download + +from reachy_mini_conversation_app.config import config + + +logger = logging.getLogger(__name__) + + +@dataclass +class VisionConfig: + """Configuration for vision processing.""" + + model_path: str = config.LOCAL_VISION_MODEL + vision_interval: float = 5.0 + max_new_tokens: int = 64 + jpeg_quality: int = 85 + max_retries: int = 3 + retry_delay: float = 1.0 + device_preference: str = "auto" # "auto", "cuda", "cpu" + + +class VisionProcessor: + """Handles SmolVLM2 model loading and inference.""" + + def __init__(self, vision_config: VisionConfig | None = None): + """Initialize the vision processor.""" + self.vision_config = vision_config or VisionConfig() + self.model_path = self.vision_config.model_path + self.device = self._determine_device() + self.processor = None + self.model = None + self._initialized = False + + def _determine_device(self) -> str: + pref = self.vision_config.device_preference + if pref == "cpu": + return "cpu" + if pref == "cuda": + return "cuda" if torch.cuda.is_available() else "cpu" + if pref == "mps": + return "mps" if torch.backends.mps.is_available() else "cpu" + # auto: prefer mps on Apple, then cuda, else cpu + if torch.backends.mps.is_available(): + return "mps" + return "cuda" if torch.cuda.is_available() else "cpu" + + def initialize(self) -> bool: + """Load model and processor onto the selected device.""" + try: + logger.info(f"Loading SmolVLM2 model on {self.device} (HF_HOME={config.HF_HOME})") + self.processor = AutoProcessor.from_pretrained(self.model_path) # type: ignore + + # Select dtype depending on device + if self.device == "cuda": + dtype = torch.bfloat16 + elif self.device == "mps": + dtype = torch.float32 # best for MPS + else: + dtype = torch.float32 + + model_kwargs: Dict[str, Any] = {"dtype": dtype} + + # flash_attention_2 is CUDA-only; skip on MPS/CPU + if self.device == "cuda": + model_kwargs["_attn_implementation"] = "flash_attention_2" + + # Load model weights + self.model = AutoModelForImageTextToText.from_pretrained(self.model_path, **model_kwargs).to(self.device) # type: ignore + + if self.model is not None: + self.model.eval() + self._initialized = True + return True + + except Exception as e: + logger.error(f"Failed to initialize vision model: {e}") + return False + + def process_image( + self, + cv2_image: NDArray[np.uint8], + prompt: str = "Briefly describe what you see in one sentence.", + ) -> str: + """Process CV2 image and return description with retry logic.""" + if not self._initialized or self.processor is None or self.model is None: + return "Vision model not initialized" + + for attempt in range(self.vision_config.max_retries): + try: + # Convert to JPEG bytes + success, jpeg_buffer = cv2.imencode( + ".jpg", + cv2_image, + [cv2.IMWRITE_JPEG_QUALITY, self.vision_config.jpeg_quality], + ) + if not success: + return "Failed to encode image" + + # Convert to base64 + image_base64 = base64.b64encode(jpeg_buffer.tobytes()).decode("utf-8") + + messages = [ + { + "role": "user", + "content": [ + { + "type": "image", + "url": f"data:image/jpeg;base64,{image_base64}", + }, + {"type": "text", "text": prompt}, + ], + }, + ] + + inputs = self.processor.apply_chat_template( + messages, + add_generation_prompt=True, + tokenize=True, + return_dict=True, + return_tensors="pt", + ) + + # Move tensors to device WITHOUT forcing dtype (keeps input_ids as torch.long) + inputs = {k: (v.to(self.device) if hasattr(v, "to") else v) for k, v in inputs.items()} + + with torch.no_grad(): + generated_ids = self.model.generate( + **inputs, + do_sample=False, + max_new_tokens=self.vision_config.max_new_tokens, + pad_token_id=self.processor.tokenizer.eos_token_id, + ) + + generated_texts = self.processor.batch_decode( + generated_ids, + skip_special_tokens=True, + ) + + # Extract just the response part + full_text = generated_texts[0] + response = self._extract_response(full_text) + + # Clean up GPU memory if using CUDA + if self.device == "cuda": + torch.cuda.empty_cache() + elif self.device == "mps": + torch.mps.empty_cache() + + return response.replace(chr(10), " ").strip() + + except torch.cuda.OutOfMemoryError as e: + logger.error(f"CUDA OOM on attempt {attempt + 1}: {e}") + if self.device == "cuda": + torch.cuda.empty_cache() + if attempt < self.vision_config.max_retries - 1: + time.sleep(self.vision_config.retry_delay * (attempt + 1)) + else: + return "GPU out of memory - vision processing failed" + + except Exception as e: + logger.error(f"Vision processing failed (attempt {attempt + 1}): {e}") + if attempt < self.vision_config.max_retries - 1: + time.sleep(self.vision_config.retry_delay) + else: + return f"Vision processing error after {self.vision_config.max_retries} attempts" + + def _extract_response(self, full_text: str) -> str: + """Extract the assistant's response from the full generated text.""" + # Handle different response formats + markers = ["assistant\n", "Assistant:", "Response:", "\n\n"] + + for marker in markers: + if marker in full_text: + response = full_text.split(marker)[-1].strip() + if response: # Ensure we got a meaningful response + return response + + # Fallback: return the full text cleaned up + return full_text.strip() + + def get_model_info(self) -> Dict[str, Any]: + """Get information about the loaded model.""" + return { + "initialized": self._initialized, + "device": self.device, + "model_path": self.model_path, + "cuda_available": torch.cuda.is_available(), + "gpu_memory": torch.cuda.get_device_properties(0).total_memory // (1024**3) + if torch.cuda.is_available() + else "N/A", + } + + +class VisionManager: + """Manages periodic vision processing and scene understanding.""" + + def __init__(self, camera: Any, vision_config: VisionConfig | None = None): + """Initialize vision manager with camera and configuration.""" + self.camera = camera + self.vision_config = vision_config or VisionConfig() + self.vision_interval = self.vision_config.vision_interval + self.processor = VisionProcessor(self.vision_config) + + self._last_processed_time = 0.0 + self._stop_event = threading.Event() + self._thread: threading.Thread | None = None + + # Initialize processor + if not self.processor.initialize(): + logger.error("Failed to initialize vision processor") + raise RuntimeError("Vision processor initialization failed") + + def start(self) -> None: + """Start the vision processing loop in a thread.""" + self._stop_event.clear() + self._thread = threading.Thread(target=self._working_loop, daemon=True) + self._thread.start() + logger.info("Local vision processing started") + + def stop(self) -> None: + """Stop the vision processing loop.""" + self._stop_event.set() + if self._thread is not None: + self._thread.join() + logger.info("Local vision processing stopped") + + def _working_loop(self) -> None: + """Vision processing loop (runs in separate thread).""" + while not self._stop_event.is_set(): + try: + current_time = time.time() + + if current_time - self._last_processed_time >= self.vision_interval: + frame = self.camera.get_latest_frame() + if frame is not None: + description = self.processor.process_image( + frame, + "Briefly describe what you see in one sentence.", + ) + + # Only update if we got a valid response + if description and not description.startswith(("Vision", "Failed", "Error")): + self._last_processed_time = current_time + logger.debug(f"Vision update: {description}") + else: + logger.warning(f"Invalid vision response: {description}") + + time.sleep(1.0) # Check every second + + except Exception: + logger.exception("Vision processing loop error") + time.sleep(5.0) # Longer sleep on error + + logger.info("Vision loop finished") + + def get_status(self) -> Dict[str, Any]: + """Get comprehensive status information.""" + return { + "last_processed": self._last_processed_time, + "processor_info": self.processor.get_model_info(), + "config": { + "interval": self.vision_interval, + }, + } + + +def initialize_vision_manager(camera_worker: Any) -> VisionManager | None: + """Initialize vision manager with model download and configuration. + + Args: + camera_worker: CameraWorker instance for frame capture + Returns: + VisionManager instance or None if initialization fails + + """ + try: + model_id = config.LOCAL_VISION_MODEL + cache_dir = os.path.expanduser(config.HF_HOME) + + # Prepare cache directory + os.makedirs(cache_dir, exist_ok=True) + os.environ["HF_HOME"] = cache_dir + logger.info("HF_HOME set to %s", cache_dir) + + # Download model to cache + logger.info(f"Downloading vision model {model_id} to cache...") + snapshot_download( + repo_id=model_id, + repo_type="model", + cache_dir=cache_dir, + ) + logger.info(f"Model {model_id} downloaded to {cache_dir}") + + # Configure vision processing + vision_config = VisionConfig( + model_path=model_id, + vision_interval=5.0, + max_new_tokens=64, + jpeg_quality=85, + max_retries=3, + retry_delay=1.0, + device_preference="auto", + ) + + # Initialize vision manager + vision_manager = VisionManager(camera_worker, vision_config) + + # Log device info + device_info = vision_manager.processor.get_model_info() + logger.info( + f"Vision processing enabled: {device_info.get('model_path')} on {device_info.get('device')}", + ) + + return vision_manager + + except Exception as e: + logger.error(f"Failed to initialize vision manager: {e}") + return None diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/vision/yolo_head_tracker.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/vision/yolo_head_tracker.py new file mode 100644 index 00000000..3619bc7e --- /dev/null +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/vision/yolo_head_tracker.py @@ -0,0 +1,148 @@ +from __future__ import annotations +import logging +from typing import Tuple + +import numpy as np +from numpy.typing import NDArray + + +try: + from supervision import Detections + from ultralytics import YOLO # type: ignore +except ImportError as e: + raise ImportError( + "To use YOLO head tracker, please install the extra dependencies: pip install '.[yolo_vision]'", + ) from e +from huggingface_hub import hf_hub_download + + +logger = logging.getLogger(__name__) + + +class HeadTracker: + """Lightweight head tracker using YOLO for face detection.""" + + def __init__( + self, + model_repo: str = "AdamCodd/YOLOv11n-face-detection", + model_filename: str = "model.pt", + confidence_threshold: float = 0.3, + device: str = "cpu", + ) -> None: + """Initialize YOLO-based head tracker. + + Args: + model_repo: HuggingFace model repository + model_filename: Model file name + confidence_threshold: Minimum confidence for face detection + device: Device to run inference on ('cpu' or 'cuda') + + """ + self.confidence_threshold = confidence_threshold + + try: + # Download and load YOLO model + model_path = hf_hub_download(repo_id=model_repo, filename=model_filename) + self.model = YOLO(model_path).to(device) + logger.info(f"YOLO face detection model loaded from {model_repo}") + except Exception as e: + logger.error(f"Failed to load YOLO model: {e}") + raise + + def _select_best_face(self, detections: Detections) -> int | None: + """Select the best face based on confidence and area (largest face with highest confidence). + + Args: + detections: Supervision detections object + + Returns: + Index of best face or None if no valid faces + + """ + if detections.xyxy.shape[0] == 0: + return None + + # Check if confidence is available + if detections.confidence is None: + return None + + # Filter by confidence threshold + valid_mask = detections.confidence >= self.confidence_threshold + if not np.any(valid_mask): + return None + + valid_indices = np.where(valid_mask)[0] + + # Calculate areas for valid detections + boxes = detections.xyxy[valid_indices] + areas = (boxes[:, 2] - boxes[:, 0]) * (boxes[:, 3] - boxes[:, 1]) + + # Combine confidence and area (weighted towards larger faces) + confidences = detections.confidence[valid_indices] + scores = confidences * 0.7 + (areas / np.max(areas)) * 0.3 + + # Return index of best face + best_idx = valid_indices[np.argmax(scores)] + return int(best_idx) + + def _bbox_to_mp_coords(self, bbox: NDArray[np.float32], w: int, h: int) -> NDArray[np.float32]: + """Convert bounding box center to MediaPipe-style coordinates [-1, 1]. + + Args: + bbox: Bounding box [x1, y1, x2, y2] + w: Image width + h: Image height + + Returns: + Center point in [-1, 1] coordinates + + """ + center_x = (bbox[0] + bbox[2]) / 2.0 + center_y = (bbox[1] + bbox[3]) / 2.0 + + # Normalize to [0, 1] then to [-1, 1] + norm_x = (center_x / w) * 2.0 - 1.0 + norm_y = (center_y / h) * 2.0 - 1.0 + + return np.array([norm_x, norm_y], dtype=np.float32) + + def get_head_position(self, img: NDArray[np.uint8]) -> Tuple[NDArray[np.float32] | None, float | None]: + """Get head position from face detection. + + Args: + img: Input image + + Returns: + Tuple of (eye_center [-1,1], roll_angle) + + """ + h, w = img.shape[:2] + + try: + # Run YOLO inference + results = self.model(img, verbose=False) + detections = Detections.from_ultralytics(results[0]) + + # Select best face + face_idx = self._select_best_face(detections) + if face_idx is None: + logger.debug("No face detected above confidence threshold") + return None, None + + bbox = detections.xyxy[face_idx] + + if detections.confidence is not None: + confidence = detections.confidence[face_idx] + logger.debug(f"Face detected with confidence: {confidence:.2f}") + + # Get face center in [-1, 1] coordinates + face_center = self._bbox_to_mp_coords(bbox, w, h) + + # Roll is 0 since we don't have keypoints for precise angle estimation + roll = 0.0 + + return face_center, roll + + except Exception as e: + logger.error(f"Error in head position detection: {e}") + return None, None diff --git a/projects/reachy-mini-openshell/src/reachy_openshell/__init__.py b/projects/reachy-mini-openshell/src/reachy_openshell/__init__.py deleted file mode 100644 index 3dc1f76b..00000000 --- a/projects/reachy-mini-openshell/src/reachy_openshell/__init__.py +++ /dev/null @@ -1 +0,0 @@ -__version__ = "0.1.0" diff --git a/projects/reachy-mini-openshell/src/reachy_openshell/backend.py b/projects/reachy-mini-openshell/src/reachy_openshell/backend.py deleted file mode 100644 index c9f97acf..00000000 --- a/projects/reachy-mini-openshell/src/reachy_openshell/backend.py +++ /dev/null @@ -1,195 +0,0 @@ -from __future__ import annotations - -import argparse -import asyncio -import os -import sys -import urllib.error -import urllib.request -from dataclasses import asdict, dataclass -from typing import Any - -from . import __version__ - -LOCAL_HOSTS = {"localhost", "127.0.0.1", "::1"} - -try: - from fastapi import FastAPI, HTTPException -except ImportError: # pragma: no cover - exercised only when optional deps are absent. - FastAPI = None # type: ignore[assignment] - HTTPException = None # type: ignore[assignment] - - -@dataclass(frozen=True) -class Settings: - reachy_host: str - reachy_port: int - connection_mode: str - media_backend: str - timeout: float - - @classmethod - def from_env(cls) -> "Settings": - host = os.getenv("REACHY_HOST", "localhost") - return cls( - reachy_host=host, - reachy_port=_env_int("REACHY_PORT", 8000), - connection_mode=os.getenv("REACHY_CONNECTION_MODE", _default_connection_mode(host)), - media_backend=os.getenv("REACHY_MEDIA_BACKEND", "no_media"), - timeout=_env_float("REACHY_TIMEOUT", 5.0), - ) - - @property - def daemon_base_url(self) -> str: - return f"http://{self.reachy_host}:{self.reachy_port}" - - -def _env_int(name: str, default: int) -> int: - raw = os.getenv(name) - if raw is None: - return default - try: - return int(raw) - except ValueError as exc: - raise ValueError(f"{name} must be an integer, got {raw!r}") from exc - - -def _env_float(name: str, default: float) -> float: - raw = os.getenv(name) - if raw is None: - return default - try: - return float(raw) - except ValueError as exc: - raise ValueError(f"{name} must be a number, got {raw!r}") from exc - - -def _default_connection_mode(host: str) -> str: - return "localhost_only" if host in LOCAL_HOSTS else "network" - - -def daemon_status(settings: Settings) -> dict[str, Any]: - url = f"{settings.daemon_base_url}/api/daemon/status" - try: - with urllib.request.urlopen(url, timeout=settings.timeout) as response: - body = response.read(4096).decode("utf-8", errors="replace") - return { - "ok": 200 <= response.status < 500, - "status_code": response.status, - "url": url, - "body": body, - } - except (urllib.error.URLError, TimeoutError, OSError) as exc: - return { - "ok": False, - "url": url, - "error": str(exc), - } - - -def run_smoke_motion(settings: Settings) -> dict[str, Any]: - try: - from reachy_mini import ReachyMini - from reachy_mini.utils import create_head_pose - except ImportError as exc: - raise RuntimeError( - "Reachy Mini SDK is not installed. Install with `uv pip install -e '.[sdk]'` " - "or include the `sim` extra for local simulator work." - ) from exc - - with ReachyMini( - host=settings.reachy_host, - port=settings.reachy_port, - connection_mode=settings.connection_mode, - spawn_daemon=False, - media_backend=settings.media_backend, - timeout=settings.timeout, - ) as mini: - mini.goto_target( - head=create_head_pose(z=20, roll=10, mm=True, degrees=True), - duration=1.0, - ) - mini.goto_target(antennas=[0.6, -0.6], duration=0.3) - mini.goto_target(antennas=[-0.6, 0.6], duration=0.3) - mini.goto_target( - head=create_head_pose(), - antennas=[0.0, 0.0], - duration=1.0, - ) - - return { - "ok": True, - "reachy": asdict(settings), - "motion": "smoke", - } - - -def _create_app() -> Any: - if FastAPI is None: - return None - - api = FastAPI( - title="Reachy Mini OpenShell Backend", - version=__version__, - ) - - @api.get("/health") - def health() -> dict[str, Any]: - settings = Settings.from_env() - status = daemon_status(settings) - return { - "ok": status["ok"], - "reachy": asdict(settings), - "daemon": status, - } - - @api.post("/moves/smoke") - async def smoke_move() -> dict[str, Any]: - settings = Settings.from_env() - try: - return await asyncio.to_thread(run_smoke_motion, settings) - except Exception as exc: # pragma: no cover - depends on live daemon. - raise HTTPException(status_code=502, detail=str(exc)) from exc - - return api - - -app = _create_app() - - -def main(argv: list[str] | None = None) -> int: - if FastAPI is None: - print( - "FastAPI is not installed. Install backend dependencies with " - '`uv pip install -e ".[backend]"`.', - file=sys.stderr, - ) - return 2 - - parser = argparse.ArgumentParser(description="Run the Reachy Mini OpenShell backend.") - parser.add_argument("--host", default=os.getenv("BACKEND_HOST", "127.0.0.1")) - parser.add_argument("--port", type=int, default=_env_int("BACKEND_PORT", 8080)) - parser.add_argument("--reachy-host", default=None) - parser.add_argument("--reachy-port", type=int, default=None) - parser.add_argument("--connection-mode", default=None) - parser.add_argument("--media-backend", default=None) - parser.add_argument("--log-level", default=os.getenv("UVICORN_LOG_LEVEL", "info")) - args = parser.parse_args(argv) - - if args.reachy_host is not None: - os.environ["REACHY_HOST"] = args.reachy_host - if args.reachy_port is not None: - os.environ["REACHY_PORT"] = str(args.reachy_port) - if args.connection_mode is not None: - os.environ["REACHY_CONNECTION_MODE"] = args.connection_mode - if args.media_backend is not None: - os.environ["REACHY_MEDIA_BACKEND"] = args.media_backend - - import uvicorn - - uvicorn.run(app, host=args.host, port=args.port, log_level=args.log_level) - return 0 - - -if __name__ == "__main__": - raise SystemExit(main()) diff --git a/projects/reachy-mini-openshell/src/reachy_openshell/smoke.py b/projects/reachy-mini-openshell/src/reachy_openshell/smoke.py deleted file mode 100644 index 5933427c..00000000 --- a/projects/reachy-mini-openshell/src/reachy_openshell/smoke.py +++ /dev/null @@ -1,115 +0,0 @@ -from __future__ import annotations - -import argparse -import os -import sys -from dataclasses import dataclass - -LOCAL_HOSTS = {"localhost", "127.0.0.1", "::1"} - - -@dataclass(frozen=True) -class ReachyTarget: - host: str - port: int - connection_mode: str - media_backend: str - timeout: float - - -def _env_int(name: str, default: int) -> int: - raw = os.getenv(name) - if raw is None: - return default - try: - return int(raw) - except ValueError as exc: - raise ValueError(f"{name} must be an integer, got {raw!r}") from exc - - -def _env_float(name: str, default: float) -> float: - raw = os.getenv(name) - if raw is None: - return default - try: - return float(raw) - except ValueError as exc: - raise ValueError(f"{name} must be a number, got {raw!r}") from exc - - -def _default_connection_mode(host: str) -> str: - return "localhost_only" if host in LOCAL_HOSTS else "network" - - -def build_parser() -> argparse.ArgumentParser: - default_host = os.getenv("REACHY_HOST", "localhost") - parser = argparse.ArgumentParser(description="Run a small Reachy Mini SDK smoke motion.") - parser.add_argument("--host", default=default_host) - parser.add_argument("--port", type=int, default=_env_int("REACHY_PORT", 8000)) - parser.add_argument( - "--connection-mode", - choices=["auto", "localhost_only", "network"], - default=os.getenv("REACHY_CONNECTION_MODE"), - ) - parser.add_argument("--media-backend", default=os.getenv("REACHY_MEDIA_BACKEND", "no_media")) - parser.add_argument("--timeout", type=float, default=_env_float("REACHY_TIMEOUT", 5.0)) - return parser - - -def target_from_args(args: argparse.Namespace) -> ReachyTarget: - return ReachyTarget( - host=args.host, - port=args.port, - connection_mode=args.connection_mode or _default_connection_mode(args.host), - media_backend=args.media_backend, - timeout=args.timeout, - ) - - -def run_motion(target: ReachyTarget) -> None: - try: - from reachy_mini import ReachyMini - from reachy_mini.utils import create_head_pose - except ImportError as exc: - raise RuntimeError( - "Reachy Mini SDK is not installed. Install with `uv pip install -e '.[sdk]'` " - "or `uv pip install -e '.[sim]'` for simulator work." - ) from exc - - with ReachyMini( - host=target.host, - port=target.port, - connection_mode=target.connection_mode, - spawn_daemon=False, - media_backend=target.media_backend, - timeout=target.timeout, - ) as mini: - print(f"Connected to Reachy Mini daemon at {target.host}:{target.port}") - print("Moving head and antennas...") - mini.goto_target( - head=create_head_pose(z=20, roll=10, mm=True, degrees=True), - duration=1.0, - ) - mini.goto_target(antennas=[0.6, -0.6], duration=0.3) - mini.goto_target(antennas=[-0.6, 0.6], duration=0.3) - mini.goto_target( - head=create_head_pose(), - antennas=[0.0, 0.0], - duration=1.0, - ) - print("Smoke motion complete.") - - -def main(argv: list[str] | None = None) -> int: - args = build_parser().parse_args(argv) - target = target_from_args(args) - try: - run_motion(target) - except Exception as exc: - print(f"Reachy smoke motion failed: {exc}", file=sys.stderr) - return 1 - return 0 - - -if __name__ == "__main__": - raise SystemExit(main()) diff --git a/projects/reachy-mini-openshell/style.css b/projects/reachy-mini-openshell/style.css new file mode 100644 index 00000000..c8bbe123 --- /dev/null +++ b/projects/reachy-mini-openshell/style.css @@ -0,0 +1,113 @@ +:root { + --bg: #060b1a; + --bg-2: #071023; + --panel: rgba(11, 18, 36, 0.8); + --border: rgba(255, 255, 255, 0.08); + --text: #eaf2ff; + --muted: #9fb6d7; + --accent: #45c4ff; + --accent-2: #5ef0c1; + --shadow: 0 20px 70px rgba(0, 0, 0, 0.45); +} + +* { box-sizing: border-box; } +body { + margin: 0; + min-height: 100vh; + font-family: "Space Grotesk", "Inter", "Segoe UI", sans-serif; + background: radial-gradient(circle at 20% 20%, rgba(69, 196, 255, 0.16), transparent 35%), + radial-gradient(circle at 80% 0%, rgba(94, 240, 193, 0.16), transparent 32%), + linear-gradient(135deg, var(--bg), var(--bg-2)); + color: var(--text); +} + +.ambient { + position: fixed; + inset: 0; + background: radial-gradient(circle at 30% 60%, rgba(255, 255, 255, 0.05), transparent 35%), + radial-gradient(circle at 75% 30%, rgba(69, 196, 255, 0.08), transparent 32%); + filter: blur(60px); + z-index: 0; + pointer-events: none; +} + +.container { + position: relative; + max-width: 600px; + margin: 10vh auto; + padding: 0 24px 40px; + z-index: 1; +} + +.hero { + margin-bottom: 24px; +} +.hero h1 { + margin: 6px 0 6px; + font-size: 32px; + letter-spacing: -0.4px; +} +.subtitle { + margin: 0; + color: var(--muted); + line-height: 1.5; +} +.pill { + display: inline-flex; + align-items: center; + gap: 6px; + padding: 6px 12px; + border-radius: 999px; + background: rgba(94, 240, 193, 0.1); + color: var(--accent-2); + font-size: 12px; + letter-spacing: 0.3px; + border: 1px solid rgba(94, 240, 193, 0.25); +} + +.panel { + background: var(--panel); + border: 1px solid var(--border); + border-radius: 14px; + padding: 18px 18px 16px; + box-shadow: var(--shadow); + backdrop-filter: blur(10px); + margin-top: 16px; +} +.panel-heading { + display: flex; + align-items: center; + justify-content: space-between; + gap: 12px; + margin-bottom: 8px; +} +.panel-heading h2 { + margin: 2px 0; + font-size: 22px; +} +.eyebrow { + margin: 0; + text-transform: uppercase; + font-size: 11px; + letter-spacing: 0.5px; + color: var(--muted); +} +.muted { color: var(--muted); } + +pre { + background: rgba(0, 0, 0, 0.3); + border: 1px solid var(--border); + border-radius: 8px; + padding: 12px 14px; + overflow-x: auto; + margin: 12px 0 0; +} +code { + font-family: "SF Mono", "Fira Code", monospace; + font-size: 13px; + color: var(--accent); +} + +@media (max-width: 760px) { + .hero h1 { font-size: 26px; } +} \ No newline at end of file diff --git a/projects/reachy-mini-openshell/tests/audio/test_head_wobbler.py b/projects/reachy-mini-openshell/tests/audio/test_head_wobbler.py new file mode 100644 index 00000000..853dcfbe --- /dev/null +++ b/projects/reachy-mini-openshell/tests/audio/test_head_wobbler.py @@ -0,0 +1,110 @@ +"""Regression tests for the audio-driven head wobble behaviour.""" + +import math +import time +import base64 +import threading +from typing import Any, List, Tuple +from collections.abc import Callable + +import numpy as np + +from reachy_mini_conversation_app.audio.head_wobbler import HeadWobbler + + +def _make_audio_chunk(duration_s: float = 0.3, frequency_hz: float = 220.0) -> str: + """Generate a base64-encoded mono PCM16 sine wave.""" + sample_rate = 24000 + sample_count = int(sample_rate * duration_s) + t = np.linspace(0, duration_s, sample_count, endpoint=False) + wave = 0.6 * np.sin(2 * math.pi * frequency_hz * t) + pcm = np.clip(wave * np.iinfo(np.int16).max, -32768, 32767).astype(np.int16) + return base64.b64encode(pcm.tobytes()).decode("ascii") + + +def _wait_for(predicate: Callable[[], bool], timeout: float = 0.6) -> bool: + """Poll `predicate` until true or timeout.""" + end_time = time.time() + timeout + while time.time() < end_time: + if predicate(): + return True + time.sleep(0.01) + return False + + +def _start_wobbler() -> Tuple[HeadWobbler, List[Tuple[float, Tuple[float, float, float, float, float, float]]]]: + captured: List[Tuple[float, Tuple[float, float, float, float, float, float]]] = [] + + def capture(offsets: Tuple[float, float, float, float, float, float]) -> None: + captured.append((time.time(), offsets)) + + wobbler = HeadWobbler(set_speech_offsets=capture) + wobbler.start() + return wobbler, captured + + +def test_reset_drops_pending_offsets() -> None: + """Reset should stop wobble output derived from pre-reset audio.""" + wobbler, captured = _start_wobbler() + try: + wobbler.feed(_make_audio_chunk(duration_s=0.35)) + assert _wait_for(lambda: len(captured) > 0), "wobbler did not emit initial offsets" + + pre_reset_count = len(captured) + wobbler.reset() + time.sleep(0.3) + assert len(captured) == pre_reset_count, "offsets continued after reset without new audio" + finally: + wobbler.stop() + + +def test_reset_allows_future_offsets() -> None: + """After reset, fresh audio must still produce wobble offsets.""" + wobbler, captured = _start_wobbler() + try: + wobbler.feed(_make_audio_chunk(duration_s=0.35)) + assert _wait_for(lambda: len(captured) > 0), "wobbler did not emit initial offsets" + + wobbler.reset() + pre_second_count = len(captured) + + wobbler.feed(_make_audio_chunk(duration_s=0.35, frequency_hz=440.0)) + assert _wait_for(lambda: len(captured) > pre_second_count), "no offsets after reset" + assert wobbler._thread is not None and wobbler._thread.is_alive() + finally: + wobbler.stop() + + +def test_reset_during_inflight_chunk_keeps_worker(monkeypatch: Any) -> None: + """Simulate reset during chunk processing to ensure the worker survives.""" + wobbler, captured = _start_wobbler() + ready = threading.Event() + release = threading.Event() + + original_feed = wobbler.sway.feed + + def blocking_feed(pcm, sr): # type: ignore[no-untyped-def] + ready.set() + release.wait(timeout=2.0) + return original_feed(pcm, sr) + + monkeypatch.setattr(wobbler.sway, "feed", blocking_feed) + + try: + wobbler.feed(_make_audio_chunk(duration_s=0.35)) + assert ready.wait(timeout=1.0), "worker thread did not dequeue audio" + + wobbler.reset() + release.set() + + # Allow the worker to finish processing the first chunk (which should be discarded) + time.sleep(0.1) + + assert wobbler._thread is not None and wobbler._thread.is_alive(), "worker thread died after reset" + + pre_second = len(captured) + wobbler.feed(_make_audio_chunk(duration_s=0.35, frequency_hz=440.0)) + assert _wait_for(lambda: len(captured) > pre_second), "no offsets emitted after in-flight reset" + assert wobbler._thread.is_alive() + finally: + wobbler.stop() diff --git a/projects/reachy-mini-openshell/tests/conftest.py b/projects/reachy-mini-openshell/tests/conftest.py new file mode 100644 index 00000000..0e7310d4 --- /dev/null +++ b/projects/reachy-mini-openshell/tests/conftest.py @@ -0,0 +1,15 @@ +"""Pytest configuration for path setup.""" + +import os +import sys +from pathlib import Path + + +PROJECT_ROOT = Path(__file__).resolve().parents[1] +SRC_PATH = PROJECT_ROOT / "src" +if str(SRC_PATH) not in sys.path: + sys.path.insert(0, str(SRC_PATH)) + + +# Make tests reproducible by ignoring machine-specific .env config. +os.environ["REACHY_MINI_SKIP_DOTENV"] = "1" diff --git a/projects/reachy-mini-openshell/tests/test_openai_realtime.py b/projects/reachy-mini-openshell/tests/test_openai_realtime.py new file mode 100644 index 00000000..39a82e3e --- /dev/null +++ b/projects/reachy-mini-openshell/tests/test_openai_realtime.py @@ -0,0 +1,544 @@ +import random +import asyncio +import logging +from typing import Any +from datetime import datetime, timezone +from unittest.mock import MagicMock + +import pytest + +import reachy_mini_conversation_app.openai_realtime as rt_mod +import reachy_mini_conversation_app.tools.background_tool_manager as btm_mod +from reachy_mini_conversation_app.openai_realtime import OpenaiRealtimeHandler, _compute_response_cost +from reachy_mini_conversation_app.tools.core_tools import ToolDependencies +from reachy_mini_conversation_app.tools.background_tool_manager import ToolCallRoutine + + +def _build_handler(loop: asyncio.AbstractEventLoop) -> OpenaiRealtimeHandler: + asyncio.set_event_loop(loop) + deps = ToolDependencies(reachy_mini=MagicMock(), movement_manager=MagicMock()) + return OpenaiRealtimeHandler(deps) + + +def test_format_timestamp_uses_wall_clock() -> None: + """Test that format_timestamp uses wall clock time.""" + loop = asyncio.new_event_loop() + try: + print("Testing format_timestamp...") + handler = _build_handler(loop) + formatted = handler.format_timestamp() + print(f"Formatted timestamp: {formatted}") + finally: + asyncio.set_event_loop(None) + loop.close() + + # Extract year from "[YYYY-MM-DD ...]" + year = int(formatted[1:5]) + assert year == datetime.now(timezone.utc).year + +@pytest.mark.asyncio +async def test_start_up_retries_on_abrupt_close(monkeypatch: Any, caplog: Any) -> None: + """First connection dies with ConnectionClosedError during iteration -> retried. + + Second connection iterates cleanly (no events) -> start_up returns without raising. + Ensures handler clears self.connection at the end. + """ + caplog.set_level(logging.WARNING) + + # Use a local Exception as the module's ConnectionClosedError to avoid ws dependency + FakeCCE = type("FakeCCE", (Exception,), {}) + monkeypatch.setattr(rt_mod, "ConnectionClosedError", FakeCCE) + + # Make asyncio.sleep return immediately (for backoff) + _real_sleep = asyncio.sleep + async def _mock_sleep(*_a: Any, **_kw: Any) -> None: await _real_sleep(0) + monkeypatch.setattr(asyncio, "sleep", _mock_sleep, raising=False) + + attempt_counter = {"n": 0} + + class FakeConn: + """Minimal realtime connection stub.""" + + def __init__(self, mode: str): + self._mode = mode + + class _Session: + async def update(self, **_kw: Any) -> None: return None + self.session = _Session() + + class _InputAudioBuffer: + async def append(self, **_kw: Any) -> None: return None + self.input_audio_buffer = _InputAudioBuffer() + + class _Item: + async def create(self, **_kw: Any) -> None: return None + + class _Conversation: + item = _Item() + self.conversation = _Conversation() + + class _Response: + async def create(self, **_kw: Any) -> None: return None + async def cancel(self, **_kw: Any) -> None: return None + self.response = _Response() + + async def __aenter__(self) -> "FakeConn": return self + async def __aexit__(self, exc_type: Any, exc: Any, tb: Any) -> bool: return False + async def close(self) -> None: return None + + # Async iterator protocol + def __aiter__(self) -> "FakeConn": return self + async def __anext__(self) -> None: + if self._mode == "raise_on_iter": + raise FakeCCE("abrupt close (simulated)") + raise StopAsyncIteration # clean exit (no events) + + class FakeRealtime: + def connect(self, **_kw: Any) -> FakeConn: + attempt_counter["n"] += 1 + mode = "raise_on_iter" if attempt_counter["n"] == 1 else "clean" + return FakeConn(mode) + + class FakeClient: + def __init__(self, **_kw: Any) -> None: self.realtime = FakeRealtime() + + # Patch the OpenAI client used by the handler + monkeypatch.setattr(rt_mod, "AsyncOpenAI", FakeClient) + + # Build handler with minimal deps + deps = ToolDependencies(reachy_mini=MagicMock(), movement_manager=MagicMock()) + handler = rt_mod.OpenaiRealtimeHandler(deps) + + # Run: should retry once and exit cleanly + await handler.start_up() + + # Validate: two attempts total (fail -> retry -> succeed), and connection cleared + assert attempt_counter["n"] == 2 + assert handler.connection is None + + # Optional: confirm we logged the unexpected close once + warnings = [r for r in caplog.records if r.levelname == "WARNING" and "closed unexpectedly" in r.msg] + assert len(warnings) == 1 + +# ---- Cost calculation tests ---- + + +def _make_usage( + audio_in: int | None = 0, + text_in: int | None = 0, + image_in: int | None = 0, + audio_out: int | None = 0, + text_out: int | None = 0, + has_input: bool = True, + has_output: bool = True, +) -> MagicMock: + """Build a fake usage object matching the OpenAI response.usage shape.""" + usage = MagicMock() + if has_input: + inp = MagicMock() + inp.audio_tokens = audio_in + inp.text_tokens = text_in + inp.image_tokens = image_in + usage.input_token_details = inp + else: + usage.input_token_details = None + if has_output: + out = MagicMock() + out.audio_tokens = audio_out + out.text_tokens = text_out + usage.output_token_details = out + else: + usage.output_token_details = None + return usage + + +@pytest.mark.parametrize( + "usage_kwargs, expect_positive", + [ + # All token types present → positive cost + ({"audio_in": 1000, "text_in": 2000, "image_in": 500, "audio_out": 800, "text_out": 300}, True), + # All None tokens → must not crash + ({"audio_in": None, "text_in": None, "image_in": None, "audio_out": None, "text_out": None}, False), + # Mix of None and valid ints + ({"audio_in": None, "text_in": 500, "image_in": None, "audio_out": 1000, "text_out": None}, True), + # Missing input/output details entirely + ({"has_input": False, "has_output": False}, False), + ], + ids=["normal", "all_none", "mixed", "missing_details"], +) +def test_compute_response_cost(usage_kwargs: dict[str, Any], expect_positive: bool) -> None: + """Verify _compute_response_cost handles various token combinations without crashing.""" + usage = _make_usage(**usage_kwargs) + cost = _compute_response_cost(usage) + if expect_positive: + assert cost > 0 + else: + assert cost == 0.0 + + +# ---- Stress test: response.create rejection + retry ---- + + +@pytest.mark.asyncio +async def test_response_sender_retries_on_active_response_rejection(monkeypatch: Any, caplog: Any) -> None: + """Stress test: response.create rejection + retry via real event processing. + + Tool results (is_idle_tool_call=False) queue response.create calls via + _safe_response_create. When the server rejects some with + ``conversation_already_has_active_response``, the error event flows through + the event handler and _response_sender_loop retries the rejected request. + + The full _run_realtime_session event loop runs so that the error-handling + code path (setting _last_response_rejected) is exercised by real event + processing, not mocked out. + """ + caplog.set_level(logging.DEBUG) + + FakeCCE = type("FakeCCE", (Exception,), {}) + monkeypatch.setattr(rt_mod, "ConnectionClosedError", FakeCCE) + monkeypatch.setattr(rt_mod, "get_session_instructions", lambda: "test") + monkeypatch.setattr(rt_mod, "get_session_voice", lambda: "alloy") + monkeypatch.setattr(rt_mod, "get_tool_specs", lambda: []) + + N_TOOL_RESULTS = 400 + REJECT_CALL_NUMBERS = {1, 3, 5, 10, 25, 50, 75, 100, 150, 200, 300, 399} + EXPECTED_TOTAL_CALLS = N_TOOL_RESULTS + len(REJECT_CALL_NUMBERS) + + event_queue: asyncio.Queue[Any] = asyncio.Queue() + response_create_log: list[tuple[int, dict[str, Any]]] = [] + handler_ref: list[Any] = [] + + # ---- Fake event / error objects mirroring the OpenAI SDK shapes ---- + + class FakeError: + def __init__(self, message: str, code: str) -> None: + self.message = message + self.code = code + self.type = "invalid_request_error" + self.event_id = None + self.param = None + + def __repr__(self) -> str: + return ( + f"RealtimeError(message='{self.message}', type='{self.type}', " + f"code='{self.code}', event_id=None, param=None)" + ) + + class FakeEvent: + def __init__(self, etype: str, **kwargs: Any) -> None: + self.type = etype + for k, v in kwargs.items(): + setattr(self, k, v) + + # ---- Fake connection components ---- + + class FakeResponseAPI: + """Mimics connection.response. + + Pushes server events into the shared event_queue so they flow + through the real event-handling code. Also guards the serialization + invariant: every create() must arrive when no response is active. + """ + + def __init__(self) -> None: + self._call_count = 0 + self._serialization_violations: list[int] = [] + + async def create(self, **kwargs: Any) -> None: + self._call_count += 1 + n = self._call_count + response_create_log.append((n, kwargs)) + + h = handler_ref[0] + + # Real backend rejects when a response is already active. + if not h._response_done_event.is_set(): + self._serialization_violations.append(n) + await event_queue.put( + FakeEvent( + "error", + error=FakeError( + message=( + f"Conversation already has an active response in " + f"progress: resp_fake{n}. Wait until the response " + f"is finished before creating a new one." + ), + code="conversation_already_has_active_response", + ), + ) + ) + await asyncio.sleep(0) + await event_queue.put( + FakeEvent("response.done", response=MagicMock()) + ) + return + + # Intentional rejections (simulating a race where another + # response sneaks in right after our check). + if n in REJECT_CALL_NUMBERS: + await event_queue.put( + FakeEvent( + "error", + error=FakeError( + message=( + f"Conversation already has an active response in " + f"progress: resp_fake{n}. Wait until the response " + f"is finished before creating a new one." + ), + code="conversation_already_has_active_response", + ), + ) + ) + await asyncio.sleep(0) + else: + await event_queue.put(FakeEvent("response.created")) + + await event_queue.put( + FakeEvent("response.done", response=MagicMock()) + ) + + + async def cancel(self, **_kw: Any) -> None: + pass + + fake_response_api = FakeResponseAPI() + + class FakeSession: + async def update(self, **_kw: Any) -> None: + pass + + class FakeInputAudioBuffer: + async def append(self, **_kw: Any) -> None: + pass + + class FakeItem: + async def create(self, **_kw: Any) -> None: + pass + + class FakeConversation: + item = FakeItem() + + class FakeConn: + session = FakeSession() + input_audio_buffer = FakeInputAudioBuffer() + conversation = FakeConversation() + response = fake_response_api + + async def __aenter__(self) -> "FakeConn": + return self + + async def __aexit__(self, *_a: Any) -> bool: + return False + + async def close(self) -> None: + pass + + def __aiter__(self) -> "FakeConn": + return self + + async def __anext__(self) -> FakeEvent: + event: FakeEvent = await event_queue.get() + if event is None: # sentinel → end iteration + raise StopAsyncIteration + return event + + class FakeRealtime: + def connect(self, **_kw: Any) -> FakeConn: + return FakeConn() + + class FakeClient: + def __init__(self, **_kw: Any) -> None: + self.realtime = FakeRealtime() + + monkeypatch.setattr(rt_mod, "AsyncOpenAI", FakeClient) + + # Patch dispatch_tool_call so tools complete with a result. + async def _fake_dispatch( + tool_name: str, args_json: str, deps: Any, **_kw: Any + ) -> dict[str, Any]: + await asyncio.sleep(random.uniform(0.3, 0.5)) + return {"ok": True, "tool": tool_name} + + monkeypatch.setattr(btm_mod, "dispatch_tool_call", _fake_dispatch) + + # ---- Build handler and start the full realtime session ---- + + deps = ToolDependencies(reachy_mini=MagicMock(), movement_manager=MagicMock()) + handler = rt_mod.OpenaiRealtimeHandler(deps) + handler_ref.append(handler) + + asyncio.create_task(handler.start_up()) + + # ---- Start tools via the real BackgroundToolManager pipeline ---- + # start_tool → _run_tool → notification queue → listener → _handle_tool_result + + for i in range(N_TOOL_RESULTS): + await handler.tool_manager.start_tool( + call_id=f"call_{i}", + tool_call_routine=ToolCallRoutine( + tool_name="test_tool", + args_json_str=f'{{"index": {i}}}', + deps=deps, + ), + is_idle_tool_call=False, + ) + + # Yield so spawned tool tasks, the listener, and the sender can drain. + await asyncio.sleep(5) + + # ---- Tear down ---- + + await event_queue.put(None) # sentinel stops event iteration + + await handler.shutdown() + + + # ---- Assertions ---- + + # Serialization: every response.create() must have been called only when + # no response was in-flight (_response_done_event was set). Any violation + # means the sender fired a new request before the previous one finished. + assert fake_response_api._serialization_violations == [], ( + f"response.create() was called while a response was still active on " + f"call(s) {fake_response_api._serialization_violations}" + ) + + # Total response.create() calls = tool results + retries for rejected ones + assert fake_response_api._call_count == EXPECTED_TOTAL_CALLS, ( + f"Expected {EXPECTED_TOTAL_CALLS} response.create calls " + f"({N_TOOL_RESULTS} results + {len(REJECT_CALL_NUMBERS)} retries), " + f"got {fake_response_api._call_count}" + ) + + # The error event handler must have set _last_response_rejected for each + # rejection (the log message comes from the event handler code path). + rejection_logs = [ + r for r in caplog.records + if "worker will retry" in getattr(r, "msg", "") + ] + assert len(rejection_logs) == len(REJECT_CALL_NUMBERS), ( + f"Expected {len(REJECT_CALL_NUMBERS)} rejection entries from error handler, " + f"got {len(rejection_logs)}" + ) + + # The sender loop must have retried after each rejection. + retry_logs = [ + r for r in caplog.records + if "response.create was rejected; retrying" in getattr(r, "msg", "") + ] + assert len(retry_logs) == len(REJECT_CALL_NUMBERS), ( + f"Expected {len(REJECT_CALL_NUMBERS)} retry entries from sender loop, " + f"got {len(retry_logs)}" + ) + + +# ---- Response creation timeout guard tests ---- + + +@pytest.mark.asyncio +async def test_response_sender_loop_times_out_waiting_for_response_done( + monkeypatch: Any, caplog: Any, +) -> None: + """If response.done is never received the sender loop should time out. + + Rather than hang forever, it force-sets the event and moves on. + """ + caplog.set_level(logging.DEBUG) + + monkeypatch.setattr(rt_mod, "_RESPONSE_DONE_TIMEOUT", 0.3) + + deps = ToolDependencies(reachy_mini=MagicMock(), movement_manager=MagicMock()) + handler = rt_mod.OpenaiRealtimeHandler(deps) + + create_count = 0 + + class FakeResponse: + async def create(self, **_kw: Any) -> None: + nonlocal create_count + create_count += 1 + # Simulate response.created clearing the event, but never + # send response.done (so the event stays cleared forever). + handler._response_done_event.clear() + + async def cancel(self, **_kw: Any) -> None: + pass + + fake_conn = MagicMock() + fake_conn.response = FakeResponse() + handler.connection = fake_conn + + # Queue two requests + await handler._safe_response_create(instructions="req1") + await handler._safe_response_create(instructions="req2") + + sender_task = asyncio.create_task(handler._response_sender_loop()) + + # Give enough time for both requests to time out (0.3s each + margin) + await asyncio.sleep(1.5) + + handler.connection = None # signal the loop to exit + handler._response_done_event.set() + await asyncio.wait_for(sender_task, timeout=2.0) + + assert create_count == 2, f"Expected 2 response.create calls, got {create_count}" + + timeout_logs = [ + r for r in caplog.records + if "Timed out waiting for response.done" in r.getMessage() + ] + assert len(timeout_logs) == 2, ( + f"Expected 2 timeout warnings, got {len(timeout_logs)}" + ) + + +@pytest.mark.asyncio +async def test_response_sender_loop_times_out_waiting_for_previous_response( + monkeypatch: Any, caplog: Any, +) -> None: + """If a previous response never completes, the pre-condition wait times out. + + It should force-set the event and proceed to send. + """ + caplog.set_level(logging.DEBUG) + + monkeypatch.setattr(rt_mod, "_RESPONSE_DONE_TIMEOUT", 0.3) + + deps = ToolDependencies(reachy_mini=MagicMock(), movement_manager=MagicMock()) + handler = rt_mod.OpenaiRealtimeHandler(deps) + + # Pretend a response is already in-flight (event cleared) + handler._response_done_event.clear() + + created = asyncio.Event() + + class FakeResponse: + async def create(self, **_kw: Any) -> None: + # Immediately complete the response cycle so the loop can finish + handler._response_done_event.set() + created.set() + + async def cancel(self, **_kw: Any) -> None: + pass + + fake_conn = MagicMock() + fake_conn.response = FakeResponse() + handler.connection = fake_conn + + await handler._safe_response_create(instructions="waiting_req") + + sender_task = asyncio.create_task(handler._response_sender_loop()) + + # Wait for the request to be sent (after timing out on the pre-condition) + await asyncio.wait_for(created.wait(), timeout=2.0) + + handler.connection = None + handler._response_done_event.set() + await asyncio.wait_for(sender_task, timeout=2.0) + + timeout_logs = [ + r for r in caplog.records + if "Timed out waiting for previous response" in r.getMessage() + ] + assert len(timeout_logs) == 1, ( + f"Expected 1 pre-condition timeout warning, got {len(timeout_logs)}" + ) diff --git a/projects/reachy-mini-openshell/tests/test_reachy_constructors.py b/projects/reachy-mini-openshell/tests/test_reachy_constructors.py deleted file mode 100644 index 59547309..00000000 --- a/projects/reachy-mini-openshell/tests/test_reachy_constructors.py +++ /dev/null @@ -1,85 +0,0 @@ -from __future__ import annotations - -import os -import sys -import types -import unittest -from contextlib import contextmanager, redirect_stdout -from io import StringIO -from unittest.mock import patch - -from reachy_openshell import backend, smoke - - -class FakeReachyMini: - calls: list[dict[str, object]] = [] - - def __init__(self, **kwargs: object) -> None: - self.calls.append(kwargs) - - def __enter__(self) -> "FakeReachyMini": - return self - - def __exit__(self, *_args: object) -> None: - return None - - def goto_target(self, **_kwargs: object) -> None: - return None - - -@contextmanager -def fake_reachy_modules(): - original = { - name: sys.modules.get(name) - for name in ("reachy_mini", "reachy_mini.utils") - } - - reachy_module = types.ModuleType("reachy_mini") - reachy_module.ReachyMini = FakeReachyMini - utils_module = types.ModuleType("reachy_mini.utils") - utils_module.create_head_pose = lambda **kwargs: {"head_pose": kwargs} - - sys.modules["reachy_mini"] = reachy_module - sys.modules["reachy_mini.utils"] = utils_module - FakeReachyMini.calls = [] - - try: - yield - finally: - for name, module in original.items(): - if module is None: - sys.modules.pop(name, None) - else: - sys.modules[name] = module - - -class ReachyConstructorTests(unittest.TestCase): - def test_backend_smoke_motion_disables_media_by_default(self) -> None: - with patch.dict(os.environ, {}, clear=True): - settings = backend.Settings.from_env() - - with fake_reachy_modules(): - backend.run_smoke_motion(settings) - - self.assertEqual(FakeReachyMini.calls[0]["media_backend"], "no_media") - - def test_smoke_cli_disables_media_by_default(self) -> None: - with patch.dict(os.environ, {}, clear=True): - target = smoke.target_from_args(smoke.build_parser().parse_args([])) - - with fake_reachy_modules(), redirect_stdout(StringIO()): - smoke.run_motion(target) - - self.assertEqual(FakeReachyMini.calls[0]["media_backend"], "no_media") - - def test_smoke_cli_uses_network_mode_for_non_local_cli_host(self) -> None: - with patch.dict(os.environ, {}, clear=True): - target = smoke.target_from_args( - smoke.build_parser().parse_args(["--host", "host.openshell.internal"]) - ) - - self.assertEqual(target.connection_mode, "network") - - -if __name__ == "__main__": - unittest.main() diff --git a/projects/reachy-mini-openshell/tests/tools/test_background_tool_manager.py b/projects/reachy-mini-openshell/tests/tools/test_background_tool_manager.py new file mode 100644 index 00000000..90b7a7f1 --- /dev/null +++ b/projects/reachy-mini-openshell/tests/tools/test_background_tool_manager.py @@ -0,0 +1,545 @@ +"""Tests for BackgroundToolManager.""" + +from __future__ import annotations +import asyncio +from typing import Any +from unittest.mock import AsyncMock, MagicMock + +import pytest + +from reachy_mini_conversation_app.tools.tool_constants import ToolState +from reachy_mini_conversation_app.tools.background_tool_manager import ( + ToolProgress, + BackgroundTool, + ToolCallRoutine, + ToolNotification, + BackgroundToolManager, +) + + +# --------------------------------------------------------------------------- +# Helpers +# --------------------------------------------------------------------------- + + +def _make_routine( + tool_name: str = "test_tool", + result: dict[str, Any] | None = None, + error: Exception | None = None, + delay: float = 0.0, +) -> ToolCallRoutine: + """Create a mock ToolCallRoutine that returns *result* or raises *error*. + + If *delay* > 0, the routine will sleep for that many seconds before + returning / raising so we can test cancellation and progress. + + Mirrors the contract of ``_dispatch_tool_call`` in core_tools: exceptions + (including ``CancelledError``) are caught and returned as + ``{"error": "..."}`` dicts so that ``_run_tool`` never sees a raw raise. + """ + routine = MagicMock(spec=ToolCallRoutine) + routine.tool_name = tool_name + routine.args_json_str = "{}" + + async def _call(manager: BackgroundToolManager) -> dict[str, Any]: + try: + if delay: + await asyncio.sleep(delay) + if error is not None: + raise error + return result or {"ok": True} + except asyncio.CancelledError: + return {"error": "Tool cancelled"} + except Exception as e: + return {"error": f"{type(e).__name__}: {e}"} + + routine.__call__ = _call # type: ignore[method-assign] + routine.side_effect = _call + return routine + + +# --------------------------------------------------------------------------- +# Model / data-class sanity checks +# --------------------------------------------------------------------------- + + +class TestToolProgress: + """Validate ToolProgress construction and bounds.""" + + def test_valid_progress(self) -> None: + """Accept valid progress values and messages.""" + p = ToolProgress(progress=0.5, message="halfway") + assert p.progress == 0.5 + assert p.message == "halfway" + + def test_bounds(self) -> None: + """Allow 0.0 and 1.0 as boundary values.""" + assert ToolProgress(progress=0.0).progress == 0.0 + assert ToolProgress(progress=1.0).progress == 1.0 + + def test_out_of_bounds_raises(self) -> None: + """Reject progress values outside [0, 1].""" + with pytest.raises(Exception): + ToolProgress(progress=-0.1) + with pytest.raises(Exception): + ToolProgress(progress=1.1) + + +class TestToolNotification: + """Validate ToolNotification construction.""" + + def test_creation(self) -> None: + """Create a notification and verify its fields.""" + n = ToolNotification( + id="abc", + tool_name="my_tool", + is_idle_tool_call=False, + status=ToolState.COMPLETED, + result={"data": 1}, + ) + assert n.id == "abc" + assert n.status == ToolState.COMPLETED + assert n.result == {"data": 1} + assert n.error is None + + +class TestBackgroundTool: + """Validate BackgroundTool helpers.""" + + def test_tool_id(self) -> None: + """Verify the composite tool_id property includes started_at.""" + t = BackgroundTool( + id="123", + tool_name="weather", + is_idle_tool_call=False, + status=ToolState.RUNNING, + ) + assert t.tool_id == f"weather-123-{t.started_at}" + + def test_get_notification(self) -> None: + """Convert a BackgroundTool to a ToolNotification.""" + t = BackgroundTool( + id="1", + tool_name="t", + is_idle_tool_call=True, + status=ToolState.COMPLETED, + result={"x": 1}, + error=None, + ) + n = t.get_notification() + assert isinstance(n, ToolNotification) + assert n.id == "1" + assert n.tool_name == "t" + assert n.is_idle_tool_call is True + assert n.status == ToolState.COMPLETED + assert n.result == {"x": 1} + + +# --------------------------------------------------------------------------- +# BackgroundToolManager +# --------------------------------------------------------------------------- + + +@pytest.fixture +def manager() -> BackgroundToolManager: + """Return a fresh BackgroundToolManager for each test.""" + return BackgroundToolManager() + + +class TestSetLoop: + """Verify event-loop assignment via set_loop.""" + + @pytest.mark.asyncio + async def test_set_loop_uses_running_loop(self, manager: BackgroundToolManager) -> None: + """Default to the current running loop.""" + manager.set_loop() + assert manager._loop is asyncio.get_running_loop() + + def test_set_loop_explicit(self, manager: BackgroundToolManager) -> None: + """Accept an explicitly provided loop.""" + loop = asyncio.new_event_loop() + try: + manager.set_loop(loop) + assert manager._loop is loop + finally: + loop.close() + + def test_set_loop_creates_new_when_no_running(self, manager: BackgroundToolManager) -> None: + """When called outside an async context it falls back to a new loop.""" + manager.set_loop() + assert manager._loop is not None + + +class TestStartTool: + """Verify tool registration via start_tool.""" + + @pytest.mark.asyncio + async def test_start_registers_tool(self, manager: BackgroundToolManager) -> None: + """Register a tool and verify its initial state.""" + routine = _make_routine("greet") + bg = await manager.start_tool( + call_id="c1", + tool_call_routine=routine, + is_idle_tool_call=False, + ) + assert bg.tool_name == "greet" + assert bg.id == "c1" + assert bg.status == ToolState.RUNNING + assert manager.get_tool(bg.tool_id) is bg + + # Let the task finish + await asyncio.sleep(0.05) + + @pytest.mark.asyncio + async def test_start_with_progress(self, manager: BackgroundToolManager) -> None: + """Initialize progress tracking when requested.""" + routine = _make_routine("slow", delay=0.1) + bg = await manager.start_tool( + call_id="c2", + tool_call_routine=routine, + is_idle_tool_call=True, + with_progress=True, + ) + assert bg.progress is not None + assert bg.progress.progress == 0.0 + await asyncio.sleep(0.15) + + +class TestRunToolLifecycle: + """Test _run_tool via start_tool (the public entry point).""" + + @pytest.mark.asyncio + async def test_successful_completion(self, manager: BackgroundToolManager) -> None: + """Complete a tool and verify result, status, and notification.""" + routine = _make_routine("ok_tool", result={"answer": 42}) + bg = await manager.start_tool("c1", routine, is_idle_tool_call=False) + + # Wait for the task to finish + await asyncio.sleep(0.05) + + assert bg.status == ToolState.COMPLETED + assert bg.result == {"answer": 42} + assert bg.completed_at is not None + assert bg.error is None + + # Notification should be queued + notification = manager._notification_queue.get_nowait() + assert notification.status == ToolState.COMPLETED + + @pytest.mark.asyncio + async def test_tool_failure(self, manager: BackgroundToolManager) -> None: + """Mark a tool as FAILED when it raises an exception.""" + routine = _make_routine("bad_tool", error=ValueError("boom")) + bg = await manager.start_tool("c1", routine, is_idle_tool_call=False) + + await asyncio.sleep(0.05) + + assert bg.status == ToolState.FAILED + assert "ValueError: boom" in (bg.error or "") + assert bg.completed_at is not None + + notification = manager._notification_queue.get_nowait() + assert notification.status == ToolState.FAILED + + @pytest.mark.asyncio + async def test_tool_cancellation(self, manager: BackgroundToolManager) -> None: + """Cancel a running tool and verify CANCELLED status.""" + routine = _make_routine("long_tool", delay=10.0) + bg = await manager.start_tool("c1", routine, is_idle_tool_call=False) + + # Give the task a moment to start, then cancel + await asyncio.sleep(0.02) + cancelled = await manager.cancel_tool(bg.tool_id) + assert cancelled is True + + # Let cancellation propagate + await asyncio.sleep(0.05) + + assert bg.status == ToolState.CANCELLED + assert bg.error == "Tool cancelled" + assert bg.completed_at is not None + + +class TestUpdateProgress: + """Verify progress updates on running tools.""" + + @pytest.mark.asyncio + async def test_update_progress_success(self, manager: BackgroundToolManager) -> None: + """Update progress value and message on a tracked tool.""" + routine = _make_routine("prog", delay=0.5) + bg = await manager.start_tool("c1", routine, is_idle_tool_call=False, with_progress=True) + + ok = await manager.update_progress(bg.tool_id, 0.5, "half done") + assert ok is True + assert bg.progress is not None + assert bg.progress.progress == 0.5 + assert bg.progress.message == "half done" + + # Cancel to clean up + await manager.cancel_tool(bg.tool_id) + await asyncio.sleep(0.05) + + @pytest.mark.asyncio + async def test_update_progress_clamps(self, manager: BackgroundToolManager) -> None: + """Clamp out-of-range progress values to [0, 1].""" + routine = _make_routine("prog", delay=0.5) + bg = await manager.start_tool("c1", routine, is_idle_tool_call=False, with_progress=True) + + await manager.update_progress(bg.tool_id, 1.5) + assert bg.progress is not None + assert bg.progress.progress == 1.0 + + await manager.update_progress(bg.tool_id, -0.5) + assert bg.progress.progress == 0.0 + + await manager.cancel_tool(bg.tool_id) + await asyncio.sleep(0.05) + + @pytest.mark.asyncio + async def test_update_progress_unknown_tool(self, manager: BackgroundToolManager) -> None: + """Return False for an unknown tool_id.""" + ok = await manager.update_progress("nonexistent", 0.5) + assert ok is False + + @pytest.mark.asyncio + async def test_update_progress_no_tracking(self, manager: BackgroundToolManager) -> None: + """Return False when progress tracking is disabled.""" + routine = _make_routine("fast", delay=0.5) + bg = await manager.start_tool("c1", routine, is_idle_tool_call=False, with_progress=False) + + ok = await manager.update_progress(bg.tool_id, 0.5) + assert ok is False + + await manager.cancel_tool(bg.tool_id) + await asyncio.sleep(0.05) + + +class TestCancelTool: + """Verify tool cancellation behaviour.""" + + @pytest.mark.asyncio + async def test_cancel_nonexistent(self, manager: BackgroundToolManager) -> None: + """Return False when the tool_id does not exist.""" + result = await manager.cancel_tool("does-not-exist") + assert result is False + + @pytest.mark.asyncio + async def test_cancel_already_completed(self, manager: BackgroundToolManager) -> None: + """Return True when cancelling an already-completed tool.""" + routine = _make_routine("done") + bg = await manager.start_tool("c1", routine, is_idle_tool_call=False) + await asyncio.sleep(0.05) # let it finish + assert bg.status == ToolState.COMPLETED + + # Cancelling a completed tool should return True (not running, no-op) + result = await manager.cancel_tool(bg.tool_id) + assert result is True + + +class TestTimeoutTools: + """Verify automatic timeout of long-running tools.""" + + @pytest.mark.asyncio + async def test_timeout_cancels_old_tools(self, manager: BackgroundToolManager) -> None: + """Cancel tools exceeding max duration.""" + # Use a very short max duration + manager._max_tool_duration_seconds = 0.01 + + routine = _make_routine("slow", delay=10.0) + await manager.start_tool("c1", routine, is_idle_tool_call=False) + + # Wait longer than the timeout + await asyncio.sleep(0.05) + + count = await manager.timeout_tools() + assert count == 1 + + await asyncio.sleep(0.05) + + @pytest.mark.asyncio + async def test_timeout_ignores_recent_tools(self, manager: BackgroundToolManager) -> None: + """Leave recent tools untouched.""" + manager._max_tool_duration_seconds = 9999 + + routine = _make_routine("fast", delay=10.0) + bg = await manager.start_tool("c1", routine, is_idle_tool_call=False) + + count = await manager.timeout_tools() + assert count == 0 + + await manager.cancel_tool(bg.tool_id) + await asyncio.sleep(0.05) + + +class TestCleanupTools: + """Verify cleanup of completed tools from memory.""" + + @pytest.mark.asyncio + async def test_cleanup_removes_old_completed(self, manager: BackgroundToolManager) -> None: + """Remove completed tools past the retention window.""" + manager._max_tool_memory_seconds = 0.01 + + routine = _make_routine("old") + bg = await manager.start_tool("c1", routine, is_idle_tool_call=False) + await asyncio.sleep(0.05) + assert bg.status == ToolState.COMPLETED + + # Wait for the memory retention to expire + await asyncio.sleep(0.05) + + removed = await manager.cleanup_tools() + assert removed == 1 + assert manager.get_tool(bg.tool_id) is None + + @pytest.mark.asyncio + async def test_cleanup_keeps_recent_completed(self, manager: BackgroundToolManager) -> None: + """Keep recently completed tools.""" + manager._max_tool_memory_seconds = 9999 + + routine = _make_routine("recent") + bg = await manager.start_tool("c1", routine, is_idle_tool_call=False) + await asyncio.sleep(0.05) + + removed = await manager.cleanup_tools() + assert removed == 0 + assert manager.get_tool(bg.tool_id) is not None + + @pytest.mark.asyncio + async def test_cleanup_ignores_running(self, manager: BackgroundToolManager) -> None: + """Never remove still-running tools.""" + manager._max_tool_memory_seconds = 0.0 # immediate expiry + + routine = _make_routine("still_going", delay=10.0) + bg = await manager.start_tool("c1", routine, is_idle_tool_call=False) + + removed = await manager.cleanup_tools() + assert removed == 0 + + await manager.cancel_tool(bg.tool_id) + await asyncio.sleep(0.05) + + +class TestGetters: + """Verify tool retrieval helpers.""" + + @pytest.mark.asyncio + async def test_get_tool(self, manager: BackgroundToolManager) -> None: + """Return None for missing tools and the instance for known ones.""" + assert manager.get_tool("nope") is None + + routine = _make_routine("x") + bg = await manager.start_tool("1", routine, is_idle_tool_call=False) + assert manager.get_tool(bg.tool_id) is bg + await asyncio.sleep(0.05) + + @pytest.mark.asyncio + async def test_get_running_tools(self, manager: BackgroundToolManager) -> None: + """Return only tools that are still running.""" + r1 = _make_routine("a", delay=10.0) + r2 = _make_routine("b", delay=10.0) + r3 = _make_routine("c") # finishes immediately + + bg1 = await manager.start_tool("1", r1, is_idle_tool_call=False) + bg2 = await manager.start_tool("2", r2, is_idle_tool_call=False) + await manager.start_tool("3", r3, is_idle_tool_call=False) + await asyncio.sleep(0.05) # let r3 finish + + running = manager.get_running_tools() + assert len(running) == 2 + names = {t.tool_name for t in running} + assert names == {"a", "b"} + + # Clean up + await manager.cancel_tool(bg1.tool_id) + await manager.cancel_tool(bg2.tool_id) + await asyncio.sleep(0.05) + + @pytest.mark.asyncio + async def test_get_all_tools_sorted(self, manager: BackgroundToolManager) -> None: + """Tools are returned most-recent-first.""" + r1 = _make_routine("first") + r2 = _make_routine("second") + + await manager.start_tool("1", r1, is_idle_tool_call=False) + await asyncio.sleep(0.02) # ensure different started_at + await manager.start_tool("2", r2, is_idle_tool_call=False) + + await asyncio.sleep(0.05) + + all_tools = manager.get_all_tools() + assert len(all_tools) == 2 + assert all_tools[0].tool_name == "second" + assert all_tools[1].tool_name == "first" + + @pytest.mark.asyncio + async def test_get_all_tools_limit(self, manager: BackgroundToolManager) -> None: + """Respect the limit parameter on get_all_tools.""" + for i in range(5): + r = _make_routine(f"t{i}") + await manager.start_tool(str(i), r, is_idle_tool_call=False) + + await asyncio.sleep(0.05) + + limited = manager.get_all_tools(limit=3) + assert len(limited) == 3 + + +class TestStartUp: + """Verify start_up bootstraps background tasks.""" + + @pytest.mark.asyncio + async def test_startup_creates_tasks(self, manager: BackgroundToolManager) -> None: + """start_up should create the listener and cleanup background tasks.""" + callback = AsyncMock() + manager.start_up(tool_callbacks=[callback]) + + # Start a tool and let it complete — the listener should invoke the callback + routine = _make_routine("ping") + await manager.start_tool("c1", routine, is_idle_tool_call=False) + await asyncio.sleep(0.1) + + assert callback.call_count == 1 + notification = callback.call_args[0][0] + assert isinstance(notification, ToolNotification) + assert notification.status == ToolState.COMPLETED + + @pytest.mark.asyncio + async def test_startup_multiple_callbacks(self, manager: BackgroundToolManager) -> None: + """Invoke all registered callbacks on completion.""" + cb1 = AsyncMock() + cb2 = AsyncMock() + manager.start_up(tool_callbacks=[cb1, cb2]) + + routine = _make_routine("multi") + await manager.start_tool("c1", routine, is_idle_tool_call=False) + await asyncio.sleep(0.1) + + assert cb1.call_count == 1 + assert cb2.call_count == 1 + + +class TestNotificationQueue: + """Verify notifications are enqueued on tool completion or failure.""" + + @pytest.mark.asyncio + async def test_notifications_queued_on_completion(self, manager: BackgroundToolManager) -> None: + """Queue a COMPLETED notification with the tool result.""" + routine = _make_routine("notif", result={"v": 1}) + await manager.start_tool("c1", routine, is_idle_tool_call=False) + await asyncio.sleep(0.05) + + n = manager._notification_queue.get_nowait() + assert n.tool_name == "notif" + assert n.status == ToolState.COMPLETED + assert n.result == {"v": 1} + + @pytest.mark.asyncio + async def test_notifications_queued_on_failure(self, manager: BackgroundToolManager) -> None: + """Queue a FAILED notification with the error message.""" + routine = _make_routine("fail", error=RuntimeError("oops")) + await manager.start_tool("c1", routine, is_idle_tool_call=False) + await asyncio.sleep(0.05) + + n = manager._notification_queue.get_nowait() + assert n.status == ToolState.FAILED + assert "RuntimeError: oops" in (n.error or "") diff --git a/projects/reachy-mini-openshell/tests/vision/test_processors.py b/projects/reachy-mini-openshell/tests/vision/test_processors.py new file mode 100644 index 00000000..bfde6fad --- /dev/null +++ b/projects/reachy-mini-openshell/tests/vision/test_processors.py @@ -0,0 +1,498 @@ +"""Tests for the vision processing module.""" + +import time +from typing import Any +from unittest.mock import Mock, MagicMock, patch + +import numpy as np +import pytest + +from reachy_mini_conversation_app.vision.processors import ( + VisionConfig, + VisionManager, + VisionProcessor, + initialize_vision_manager, +) + + +def test_vision_config_defaults() -> None: + """Test VisionConfig has sensible defaults.""" + config = VisionConfig() + assert config.vision_interval == 5.0 + assert config.max_new_tokens == 64 + assert config.jpeg_quality == 85 + assert config.max_retries == 3 + assert config.retry_delay == 1.0 + assert config.device_preference == "auto" + + +def test_vision_config_custom_values() -> None: + """Test VisionConfig accepts custom values.""" + config = VisionConfig( + model_path="/custom/path", + vision_interval=10.0, + max_new_tokens=128, + jpeg_quality=95, + max_retries=5, + retry_delay=2.0, + device_preference="cpu", + ) + assert config.model_path == "/custom/path" + assert config.vision_interval == 10.0 + assert config.max_new_tokens == 128 + assert config.jpeg_quality == 95 + assert config.max_retries == 5 + assert config.retry_delay == 2.0 + assert config.device_preference == "cpu" + + + +@pytest.fixture +def mock_torch() -> Any: + """Mock torch module to avoid loading actual models.""" + with patch("reachy_mini_conversation_app.vision.processors.torch") as mock: + mock.cuda.is_available.return_value = False + mock.backends.mps.is_available.return_value = False + mock.float32 = "float32" + mock.bfloat16 = "bfloat16" + yield mock + + +@pytest.fixture +def mock_transformers() -> Any: + """Mock transformers module.""" + with patch("reachy_mini_conversation_app.vision.processors.AutoProcessor") as proc, \ + patch("reachy_mini_conversation_app.vision.processors.AutoModelForImageTextToText") as model: + + # Mock processor + mock_processor = MagicMock() + mock_processor.apply_chat_template.return_value = { + "input_ids": MagicMock(to=lambda x: MagicMock()), + "attention_mask": MagicMock(to=lambda x: MagicMock()), + "pixel_values": MagicMock(to=lambda x: MagicMock()), + } + mock_processor.batch_decode.return_value = ["assistant\nThis is a test description."] + mock_processor.tokenizer.eos_token_id = 2 + proc.from_pretrained.return_value = mock_processor + + # Mock model + mock_model_instance = MagicMock() + mock_model_instance.eval.return_value = None + mock_model_instance.generate.return_value = [[1, 2, 3]] + mock_model_instance.to.return_value = mock_model_instance + model.from_pretrained.return_value = mock_model_instance + + yield {"processor": proc, "model": model} + + +def test_vision_processor_device_selection_cpu(mock_torch: Any) -> None: + """Test VisionProcessor selects CPU when specified.""" + config = VisionConfig(device_preference="cpu") + processor = VisionProcessor(config) + assert processor.device == "cpu" + + +def test_vision_processor_device_selection_cuda_unavailable(mock_torch: Any) -> None: + """Test VisionProcessor falls back to CPU when CUDA unavailable.""" + mock_torch.cuda.is_available.return_value = False + config = VisionConfig(device_preference="cuda") + processor = VisionProcessor(config) + assert processor.device == "cpu" + + +def test_vision_processor_device_selection_cuda_available(mock_torch: Any) -> None: + """Test VisionProcessor selects CUDA when available.""" + mock_torch.cuda.is_available.return_value = True + config = VisionConfig(device_preference="cuda") + processor = VisionProcessor(config) + assert processor.device == "cuda" + + +def test_vision_processor_device_selection_mps_available(mock_torch: Any) -> None: + """Test VisionProcessor selects MPS when available on Apple Silicon.""" + mock_torch.backends.mps.is_available.return_value = True + config = VisionConfig(device_preference="mps") + processor = VisionProcessor(config) + assert processor.device == "mps" + + +def test_vision_processor_device_selection_auto_prefers_mps(mock_torch: Any) -> None: + """Test VisionProcessor auto mode prefers MPS on Apple Silicon.""" + mock_torch.backends.mps.is_available.return_value = True + mock_torch.cuda.is_available.return_value = False + config = VisionConfig(device_preference="auto") + processor = VisionProcessor(config) + assert processor.device == "mps" + + +def test_vision_processor_device_selection_auto_prefers_cuda_over_cpu(mock_torch: Any) -> None: + """Test VisionProcessor auto mode prefers CUDA over CPU.""" + mock_torch.backends.mps.is_available.return_value = False + mock_torch.cuda.is_available.return_value = True + config = VisionConfig(device_preference="auto") + processor = VisionProcessor(config) + assert processor.device == "cuda" + + +def test_vision_processor_initialization(mock_torch: Any, mock_transformers: Any) -> None: + """Test VisionProcessor initializes successfully.""" + config = VisionConfig(model_path="test/model") + processor = VisionProcessor(config) + + assert not processor._initialized + result = processor.initialize() + + assert result is True + assert processor._initialized + mock_transformers["processor"].from_pretrained.assert_called_once_with("test/model") + mock_transformers["model"].from_pretrained.assert_called_once() + + +def test_vision_processor_initialization_failure(mock_torch: Any) -> None: + """Test VisionProcessor handles initialization failure gracefully.""" + with patch("reachy_mini_conversation_app.vision.processors.AutoProcessor") as mock_proc: + mock_proc.from_pretrained.side_effect = Exception("Model not found") + + config = VisionConfig(model_path="invalid/model") + processor = VisionProcessor(config) + result = processor.initialize() + + assert result is False + assert not processor._initialized + + +def test_vision_processor_process_image_not_initialized(mock_torch: Any) -> None: + """Test process_image returns error when model not initialized.""" + processor = VisionProcessor() + test_image = np.zeros((480, 640, 3), dtype=np.uint8) + + result = processor.process_image(test_image) + assert result == "Vision model not initialized" + + +def test_vision_processor_process_image_success(mock_torch: Any, mock_transformers: Any) -> None: + """Test process_image processes an image successfully.""" + with patch("reachy_mini_conversation_app.vision.processors.cv2") as mock_cv2: + # Mock cv2.imencode to return success + mock_cv2.imencode.return_value = (True, np.array([1, 2, 3], dtype=np.uint8)) + mock_cv2.IMWRITE_JPEG_QUALITY = 1 + + processor = VisionProcessor() + processor.initialize() + + test_image = np.zeros((480, 640, 3), dtype=np.uint8) + result = processor.process_image(test_image, "Describe this image.") + + assert isinstance(result, str) + assert result == "This is a test description." + + +def test_vision_processor_process_image_encode_failure(mock_torch: Any, mock_transformers: Any) -> None: + """Test process_image handles image encoding failure.""" + with patch("reachy_mini_conversation_app.vision.processors.cv2") as mock_cv2: + mock_cv2.imencode.return_value = (False, None) + mock_cv2.IMWRITE_JPEG_QUALITY = 1 + + processor = VisionProcessor() + processor.initialize() + + test_image = np.zeros((480, 640, 3), dtype=np.uint8) + result = processor.process_image(test_image) + + assert result == "Failed to encode image" + + +def test_vision_processor_process_image_with_retry(mock_torch: Any, mock_transformers: Any) -> None: + """Test process_image retries on failure.""" + with patch("reachy_mini_conversation_app.vision.processors.cv2") as mock_cv2: + mock_cv2.imencode.return_value = (True, np.array([1, 2, 3], dtype=np.uint8)) + mock_cv2.IMWRITE_JPEG_QUALITY = 1 + + # Set up the OutOfMemoryError to be a proper exception + mock_torch.cuda.OutOfMemoryError = type("OutOfMemoryError", (Exception,), {}) + + processor = VisionProcessor(VisionConfig(max_retries=3, retry_delay=0.01)) + processor.initialize() + + # Make the model generate fail twice, then succeed + call_count = [0] + assert processor.model is not None + original_generate = processor.model.generate + + def failing_generate(*args: Any, **kwargs: Any) -> Any: + call_count[0] += 1 + if call_count[0] < 3: + raise Exception("Temporary failure") + return original_generate(*args, **kwargs) + + processor.model.generate = failing_generate + + test_image = np.zeros((480, 640, 3), dtype=np.uint8) + result = processor.process_image(test_image) + + assert isinstance(result, str) + assert call_count[0] == 3 + + +def test_vision_processor_extract_response_variants() -> None: + """Test _extract_response handles different response formats.""" + processor = VisionProcessor() + + # Test with "assistant\n" marker + result = processor._extract_response("user prompt\nassistant\nThe response text") + assert result == "The response text" + + # Test with "Assistant:" marker + result = processor._extract_response("User: prompt\nAssistant: Another response") + assert result == "Another response" + + # Test fallback to full text + result = processor._extract_response("Just some text without markers") + assert result == "Just some text without markers" + + +def test_vision_processor_get_model_info(mock_torch: Any, mock_transformers: Any) -> None: + """Test get_model_info returns correct information.""" + mock_torch.cuda.is_available.return_value = True + mock_torch.cuda.get_device_properties.return_value.total_memory = 8 * 1024**3 + + processor = VisionProcessor(VisionConfig(model_path="test/model", device_preference="cpu")) + processor.initialize() + + info = processor.get_model_info() + + assert info["initialized"] is True + assert info["device"] == "cpu" + assert info["model_path"] == "test/model" + assert "cuda_available" in info + + +@pytest.fixture +def mock_camera() -> Mock: + """Create a mock camera object.""" + camera = Mock() + camera.get_latest_frame.return_value = np.zeros((480, 640, 3), dtype=np.uint8) + return camera + + +def test_vision_manager_initialization(mock_torch: Any, mock_transformers: Any, mock_camera: Mock) -> None: + """Test VisionManager initializes successfully.""" + config = VisionConfig(vision_interval=2.0) + manager = VisionManager(mock_camera, config) + + assert manager.vision_interval == 2.0 + assert manager.processor._initialized + + +def test_vision_manager_initialization_failure(mock_torch: Any, mock_camera: Mock) -> None: + """Test VisionManager raises error when processor initialization fails.""" + with patch("reachy_mini_conversation_app.vision.processors.AutoProcessor") as mock_proc: + mock_proc.from_pretrained.side_effect = Exception("Model not found") + + with pytest.raises(RuntimeError, match="Vision processor initialization failed"): + VisionManager(mock_camera, VisionConfig()) + + +def test_vision_manager_start_stop(mock_torch: Any, mock_transformers: Any, mock_camera: Mock) -> None: + """Test VisionManager can start and stop.""" + manager = VisionManager(mock_camera, VisionConfig()) + + manager.start() + assert manager._thread is not None + assert manager._thread.is_alive() + assert not manager._stop_event.is_set() + + time.sleep(0.1) # Let thread run briefly + + manager.stop() + assert manager._stop_event.is_set() + assert not manager._thread.is_alive() + + +def test_vision_manager_processes_frames(mock_torch: Any, mock_transformers: Any, mock_camera: Mock) -> None: + """Test VisionManager processes frames at intervals.""" + with patch("reachy_mini_conversation_app.vision.processors.cv2") as mock_cv2: + mock_cv2.imencode.return_value = (True, np.array([1, 2, 3], dtype=np.uint8)) + mock_cv2.IMWRITE_JPEG_QUALITY = 1 + + config = VisionConfig(vision_interval=0.1) # Fast interval for testing + manager = VisionManager(mock_camera, config) + + manager.start() + time.sleep(0.3) # Wait for at least 2 processing cycles + manager.stop() + + # Camera should have been called at least once + assert mock_camera.get_latest_frame.call_count >= 1 + + +def test_vision_manager_handles_none_frame(mock_torch: Any, mock_transformers: Any, mock_camera: Mock) -> None: + """Test VisionManager handles None frame gracefully.""" + mock_camera.get_latest_frame.return_value = None + + config = VisionConfig(vision_interval=0.1) + manager = VisionManager(mock_camera, config) + + manager.start() + time.sleep(0.2) + manager.stop() + + # Verify camera was called but no crashes occurred + assert mock_camera.get_latest_frame.called + + +def test_vision_manager_handles_processing_error(mock_torch: Any, mock_transformers: Any, mock_camera: Mock) -> None: + """Test VisionManager handles processing errors gracefully.""" + with patch("reachy_mini_conversation_app.vision.processors.cv2") as mock_cv2: + mock_cv2.imencode.side_effect = Exception("Processing error") + mock_cv2.IMWRITE_JPEG_QUALITY = 1 + + config = VisionConfig(vision_interval=0.1) + manager = VisionManager(mock_camera, config) + + manager.start() + time.sleep(0.2) + manager.stop() + + # Verify thread stopped gracefully despite errors + assert manager._stop_event.is_set() + + +def test_vision_manager_get_status(mock_torch: Any, mock_transformers: Any, mock_camera: Mock) -> None: + """Test VisionManager get_status returns correct information.""" + manager = VisionManager(mock_camera, VisionConfig(vision_interval=5.0)) + + status = manager.get_status() + + assert "last_processed" in status + assert "processor_info" in status + assert "config" in status + assert status["config"]["interval"] == 5.0 + + +def test_vision_manager_skips_invalid_responses(mock_torch: Any, mock_transformers: Any, mock_camera: Mock) -> None: + """Test VisionManager doesn't update timestamp for invalid responses.""" + with patch("reachy_mini_conversation_app.vision.processors.cv2") as mock_cv2: + mock_cv2.imencode.return_value = (True, np.array([1, 2, 3], dtype=np.uint8)) + mock_cv2.IMWRITE_JPEG_QUALITY = 1 + + # Make processor return invalid response + config = VisionConfig(vision_interval=0.1) + manager = VisionManager(mock_camera, config) + + # Mock the processor's process_image method to return invalid response + with patch.object(manager.processor, 'process_image', return_value="Vision model not initialized"): + initial_time = manager._last_processed_time + + manager.start() + time.sleep(0.2) + manager.stop() + + # Last processed time should not have been updated + assert manager._last_processed_time == initial_time + + +def test_initialize_vision_manager_success(mock_torch: Any, mock_transformers: Any, mock_camera: Mock) -> None: + """Test initialize_vision_manager creates VisionManager successfully.""" + with patch("reachy_mini_conversation_app.vision.processors.snapshot_download") as mock_download, \ + patch("reachy_mini_conversation_app.vision.processors.os.makedirs"), \ + patch("reachy_mini_conversation_app.vision.processors.config") as mock_config: + + mock_config.LOCAL_VISION_MODEL = "test/model" + mock_config.HF_HOME = "/tmp/hf_cache" + + result = initialize_vision_manager(mock_camera) + + assert result is not None + assert isinstance(result, VisionManager) + mock_download.assert_called_once() + + +def test_initialize_vision_manager_download_failure(mock_torch: Any, mock_camera: Mock) -> None: + """Test initialize_vision_manager handles download failure.""" + with patch("reachy_mini_conversation_app.vision.processors.snapshot_download") as mock_download, \ + patch("reachy_mini_conversation_app.vision.processors.os.makedirs"), \ + patch("reachy_mini_conversation_app.vision.processors.config") as mock_config: + + mock_config.LOCAL_VISION_MODEL = "test/model" + mock_config.HF_HOME = "/tmp/hf_cache" + mock_download.side_effect = Exception("Network error") + + result = initialize_vision_manager(mock_camera) + + assert result is None + + +def test_initialize_vision_manager_processor_failure(mock_torch: Any, mock_camera: Mock) -> None: + """Test initialize_vision_manager handles processor initialization failure.""" + with patch("reachy_mini_conversation_app.vision.processors.snapshot_download"), \ + patch("reachy_mini_conversation_app.vision.processors.os.makedirs"), \ + patch("reachy_mini_conversation_app.vision.processors.config") as mock_config, \ + patch("reachy_mini_conversation_app.vision.processors.AutoProcessor") as mock_proc: + + mock_config.LOCAL_VISION_MODEL = "test/model" + mock_config.HF_HOME = "/tmp/hf_cache" + mock_proc.from_pretrained.side_effect = Exception("Model load error") + + result = initialize_vision_manager(mock_camera) + + assert result is None + + +def test_vision_processor_cuda_oom_recovery(mock_torch: Any, mock_transformers: Any) -> None: + """Test VisionProcessor recovers from CUDA OOM errors.""" + with patch("reachy_mini_conversation_app.vision.processors.cv2") as mock_cv2: + mock_cv2.imencode.return_value = (True, np.array([1, 2, 3], dtype=np.uint8)) + mock_cv2.IMWRITE_JPEG_QUALITY = 1 + + processor = VisionProcessor(VisionConfig(max_retries=2, retry_delay=0.01)) + processor.initialize() + processor.device = "cuda" # Force CUDA for this test + + # Make generate raise OOM error + mock_torch.cuda.OutOfMemoryError = type("OutOfMemoryError", (Exception,), {}) + assert processor.model is not None + processor.model.generate.side_effect = mock_torch.cuda.OutOfMemoryError("OOM") + + test_image = np.zeros((480, 640, 3), dtype=np.uint8) + result = processor.process_image(test_image) + + assert "GPU out of memory" in result + mock_torch.cuda.empty_cache.assert_called() + + +def test_vision_processor_cache_cleanup_mps(mock_torch: Any, mock_transformers: Any) -> None: + """Test VisionProcessor cleans up MPS cache after processing.""" + with patch("reachy_mini_conversation_app.vision.processors.cv2") as mock_cv2: + mock_cv2.imencode.return_value = (True, np.array([1, 2, 3], dtype=np.uint8)) + mock_cv2.IMWRITE_JPEG_QUALITY = 1 + + processor = VisionProcessor() + processor.initialize() + processor.device = "mps" # Force MPS for this test + + test_image = np.zeros((480, 640, 3), dtype=np.uint8) + processor.process_image(test_image) + + # Should call mps empty_cache + mock_torch.mps.empty_cache.assert_called() + + +def test_vision_manager_thread_safety(mock_torch: Any, mock_transformers: Any, mock_camera: Mock) -> None: + """Test VisionManager thread safety with multiple start/stop cycles.""" + with patch("reachy_mini_conversation_app.vision.processors.cv2") as mock_cv2: + mock_cv2.imencode.return_value = (True, np.array([1, 2, 3], dtype=np.uint8)) + mock_cv2.IMWRITE_JPEG_QUALITY = 1 + + config = VisionConfig(vision_interval=0.05) + manager = VisionManager(mock_camera, config) + + # Multiple start/stop cycles + for _ in range(3): + manager.start() + time.sleep(0.1) + manager.stop() + time.sleep(0.05) + + # Should not crash or leave dangling threads + assert manager._stop_event.is_set() From 03cc74d687893a36aff05561a53e10019893f259 Mon Sep 17 00:00:00 2001 From: Johnny Greco Date: Wed, 24 Jun 2026 17:50:36 -0400 Subject: [PATCH 05/45] Expand root gitignore --- .gitignore | 112 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 110 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index b7080d0e..f1304db4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,115 @@ +# OS and editor noise .DS_Store +Thumbs.db +*.swp +*.swo +*~ +.idea/ +.vscode/ +!.vscode/extensions.json +!.vscode/settings.json + +# Secrets and local environment +.env +.env.* +!.env.example +*.local +*.key +*.pem +*.crt +*.csr + +# Logs +*.log +logs/ +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + +# Temporary and cache directories .cache/ -.venv/ -.venv-docs/ +.uv-cache/ +.tmp/ +tmp/ +temp/ + +# Python __pycache__/ +*.py[cod] +*$py.class +*.so +.Python +.venv/ +.venv-*/ +venv/ +ENV/ +env/ +pip-wheel-metadata/ +*.egg-info/ +.eggs/ +build/ +dist/ +htmlcov/ +.coverage +.coverage.* +coverage.xml +.pytest_cache/ +.mypy_cache/ +.ruff_cache/ +.pyre/ +.pytype/ +.hypothesis/ +.tox/ +.nox/ +.dmypy.json +dmypy.json +.ipynb_checkpoints/ + +# Rust +target/ +**/*.rs.bk + +# JavaScript and TypeScript +node_modules/ +.npm/ +.pnpm-store/ +.yarn/cache/ +.yarn/unplugged/ +.yarn/build-state.yml +.yarn/install-state.gz +dist/ +build/ +coverage/ +.nyc_output/ +*.tsbuildinfo +*.eslintcache +.vite/ +.turbo/ +.parcel-cache/ +.angular/cache/ +.next/ +.nuxt/ +.svelte-kit/ +.output/ +.vercel/ +.netlify/ +.serverless/ +out/ + +# Static site and docs output public/ site/ +.docusaurus/ +.vitepress/cache/ +.vitepress/dist/ + +# Runtime artifacts +*.pid +*.seed +*.pid.lock + +# Package artifacts +*.tgz +*.tar.gz +*.zip From c5cb9ae369e97f574588076ab54eff021113dd7c Mon Sep 17 00:00:00 2001 From: Johnny Greco Date: Wed, 24 Jun 2026 18:33:49 -0400 Subject: [PATCH 06/45] Fix Reachy Mini dependency sync --- README.md | 2 +- projects/README.md | 2 +- projects/reachy-mini-openshell/README.md | 236 +- projects/reachy-mini-openshell/pyproject.toml | 9 +- projects/reachy-mini-openshell/uv.lock | 2949 +++++++++++++++++ 5 files changed, 3179 insertions(+), 19 deletions(-) create mode 100644 projects/reachy-mini-openshell/uv.lock diff --git a/README.md b/README.md index f54acf22..314544dc 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ OpenShell as the runtime. build logs worth sharing. - `docs/dev-notes/authors.json` contains reusable Dev Notes author metadata. - `projects/` contains self-contained research project folders, including the - Reachy Mini OpenShell simulator/backend scaffold. + Reachy OpenShell fork of the Reachy Mini conversation app. - `scripts/render-dev-notes.py` renders Dev Notes cards, post bylines, and navigation entries from post front matter. - `zensical.toml` configures the documentation site. diff --git a/projects/README.md b/projects/README.md index 998778ed..21bd5190 100644 --- a/projects/README.md +++ b/projects/README.md @@ -4,4 +4,4 @@ This directory contains self-contained research projects. Each project should li Current projects: -- `reachy-mini-openshell`: Reachy Mini simulator/backend research for running the backend inside an OpenShell runtime. +- `reachy-mini-openshell`: OpenShell-oriented fork of the Reachy Mini conversation app. diff --git a/projects/reachy-mini-openshell/README.md b/projects/reachy-mini-openshell/README.md index de3e35db..ef70d72e 100644 --- a/projects/reachy-mini-openshell/README.md +++ b/projects/reachy-mini-openshell/README.md @@ -10,44 +10,250 @@ tags: - reachy_mini_python_app --- -# Reachy OpenShell +# 🤖 Reachy OpenShell -Reachy OpenShell is a locked-profile fork of the Reachy Mini conversation app -for OpenShell research. +Reachy OpenShell is an OpenShell-oriented fork of the Reachy Mini conversation +app. The repository now uses the default Reachy conversation-app package shape +generated by: -## Customize +```bash +reachy-mini-app-assistant create --template conversation +``` -The app is locked to: +The Python package and command names intentionally match that template: -```text -src/reachy_mini_conversation_app/profiles/_reachy_mini_conversation_app_locked_profile +- package: `reachy_mini_conversation_app` +- module entry point: `python -m reachy_mini_conversation_app` +- console script: `reachy-mini-conversation-app` +- Reachy Mini Apps entry point: `reachy_mini_conversation_app` + +The app is no longer the old `reachy_openshell` smoke/backend scaffold. There is +no standalone backend server on port `8080`, no `reachy_openshell.backend`, and +no `reachy_openshell.smoke` module. Runtime communication goes through the +Reachy Mini SDK and daemon, while the conversation UI is provided by Gradio or +the Reachy Mini app shell. + +## What Is Here + +This project contains: + +- a forked Reachy Mini voice conversation app +- OpenAI Realtime audio conversation support +- Reachy Mini movement, dance, emotion, and look-around tools +- a locked OpenShell profile for instructions and tool selection +- optional camera, local vision, YOLO head-tracking, and MediaPipe head-tracking + integrations + +## Requirements + +- Python 3.10, 3.11, or 3.12. The recommended local version is Python 3.12. +- `uv` for the recommended local workflow +- Reachy Mini SDK 1.8.0, installed through this project. This is pinned to the + version compatible with the forked conversation-app dependency stack. +- a running Reachy Mini daemon, either connected to hardware or started in + simulator mode +- an OpenAI API key for conversation + +## Install + +From the repository root: + +```bash +cd projects/reachy-mini-openshell +uv venv --python 3.12 +source .venv/bin/activate +uv sync +cp .env.example .env ``` -That folder is the customization surface: +Then edit `.env` and set: + +```bash +OPENAI_API_KEY=your_api_key_here +``` + +If you are not using `uv`, install the app in editable mode from the project +directory: + +```bash +python -m venv .venv +source .venv/bin/activate +python -m pip install -e . +``` -- `instructions.txt`: system prompt for the assistant -- `tools.txt`: explicit tool allow-list -- Python files in that folder: profile-local tools +For development tools and tests: + +```bash +uv sync --group dev +``` + +The checked-in uv resolution currently targets macOS/Darwin development. If the +app is later deployed from this repo on Linux, revisit `[tool.uv].environments` +and regenerate `uv.lock` for that platform. + +## Optional Dependencies + +The active optional dependency groups are vision-related only: + +```bash +uv sync --extra local_vision +uv sync --extra yolo_vision +uv sync --extra mediapipe_vision +uv sync --extra all_vision +``` + +With `pip`, use the equivalent editable installs: + +```bash +python -m pip install -e '.[local_vision]' +python -m pip install -e '.[yolo_vision]' +python -m pip install -e '.[mediapipe_vision]' +python -m pip install -e '.[all_vision]' +``` + +There are no `backend` or `sim` extras anymore. The previous backend extra +belonged to the deleted scaffold, and simulator support is provided by the +Reachy Mini daemon/runtime rather than a project extra. + +## Configuration + +The app loads `.env` from the current directory or a parent directory unless +`REACHY_MINI_SKIP_DOTENV=1` is set. + +Supported environment variables: + +- `OPENAI_API_KEY`: API key used by OpenAI Realtime. +- `MODEL_NAME`: Realtime model name. Defaults to `gpt-realtime`. +- `LOCAL_VISION_MODEL`: Hugging Face model used with `--local-vision`. +- `HF_HOME`: Hugging Face cache directory. Defaults to `./cache`. +- `HF_TOKEN`: optional Hugging Face token for gated models. + +When running with Gradio, the UI also includes an OpenAI API key field. The +bundled Reachy Mini settings UI can store and validate the key when the app is +run through the Reachy Mini app shell. ## Run Locally -Start the Reachy Mini daemon first. For the simulator baseline: +Start the Reachy Mini daemon first. For the local simulator baseline: ```bash reachy-mini-daemon --sim --scene minimal --headless --no-media --fastapi-host 127.0.0.1 --fastapi-port 8000 --dataset-update-interval 0 ``` +You can verify the daemon separately at: + +```text +http://127.0.0.1:8000/api/daemon/status +``` + Then run the conversation app: ```bash python -m reachy_mini_conversation_app --gradio --no-camera ``` -The app also installs a console script: +The installed console script is equivalent: ```bash reachy-mini-conversation-app --gradio --no-camera ``` -Simulation mode auto-enables Gradio; `--gradio` is included here so the expected -browser interface is explicit. +In simulator mode, the app auto-enables Gradio. The examples still pass +`--gradio` so the expected browser interface is explicit. Gradio usually opens +at: + +```text +http://127.0.0.1:7860/ +``` + +If port `7860` is busy, Gradio may choose another available local port and print +that URL in the terminal. + +## Runtime Flags + +Useful app flags: + +- `--gradio`: launch the browser conversation UI. +- `--no-camera`: disable camera usage. This is the recommended simulator + baseline. +- `--head-tracker yolo`: enable YOLO head tracking. Requires the `yolo_vision` + extra. +- `--head-tracker mediapipe`: enable MediaPipe head tracking. Requires the + `mediapipe_vision` extra. +- `--local-vision`: use a local vision model instead of Realtime vision. + Requires the `local_vision` extra. +- `--robot-name `: connect to a daemon started with the same + `--robot-name`. +- `--debug`: enable debug logging. + +Examples: + +```bash +python -m reachy_mini_conversation_app --gradio --no-camera +python -m reachy_mini_conversation_app --gradio --head-tracker yolo +python -m reachy_mini_conversation_app --gradio --local-vision +python -m reachy_mini_conversation_app --gradio --robot-name reachy-mini-a +``` + +## Locked Profile + +OpenShell customization lives in the locked profile: + +```text +src/reachy_mini_conversation_app/profiles/_reachy_mini_conversation_app_locked_profile +``` + +That folder is the customization surface: + +- `instructions.txt`: the system prompt for the assistant +- `tools.txt`: the explicit allow-list of profile tools +- Python files in the folder: profile-local tool implementations + +The current profile allows: + +```text +dance +stop_dance +play_emotion +stop_emotion +sweep_look +``` + +`sweep_look` is implemented in the locked profile. The other allowed tools come +from the app's built-in tool set. The tool loader also includes required system +tools automatically. + +## Validate Changes + +Useful local checks: + +```bash +python -m compileall src tests +python -m reachy_mini_conversation_app --help +reachy-mini-app-assistant check . +``` + +Tests require the development dependency group: + +```bash +uv sync --group dev +python -m pytest -q +``` + +## Troubleshooting + +If the app cannot connect, make sure the daemon is running before launching the +conversation app. If the daemon was started with `--robot-name`, pass the same +name to the app with `--robot-name`. + +If `--local-vision`, `--head-tracker yolo`, or `--head-tracker mediapipe` fails +with an import error, install the matching optional dependency group. + +If `uv sync` tries to build `pygobject` or `pycairo` on macOS, the resolver is +including a Linux media dependency path. This project scopes uv resolution to +Darwin for the current local workflow; rerun `uv sync`, and if uv is still using +old metadata, clear the package cache with `uv cache clean reachy-mini pygobject +pycairo`. + +If you are running the simulator with `--no-media`, keep `--no-camera` on the +conversation app. diff --git a/projects/reachy-mini-openshell/pyproject.toml b/projects/reachy-mini-openshell/pyproject.toml index 6ddc6313..800679d8 100644 --- a/projects/reachy-mini-openshell/pyproject.toml +++ b/projects/reachy-mini-openshell/pyproject.toml @@ -7,8 +7,8 @@ name = "reachy_mini_conversation_app" version = "0.3.0" description = "OpenShell-oriented fork of the Reachy Mini conversation app." readme = "README.md" -requires-python = ">=3.10" -dependencies = [ "aiortc>=1.13.0", "fastrtc>=0.0.34", "gradio==5.50.1.dev1", "huggingface-hub==1.3.0", "opencv-python>=4.12.0.88", "python-dotenv", "openai>=2.1", "reachy_mini_dances_library", "reachy_mini_toolbox", "reachy-mini>=1.5.0", "eclipse-zenoh~=1.7.0", "gradio_client>=1.13.3",] +requires-python = ">=3.10,<3.13" +dependencies = [ "aiortc>=1.13.0", "fastrtc>=0.0.34", "gradio==5.50.1.dev1", "huggingface-hub==1.3.0", "opencv-python>=4.12.0.88", "python-dotenv", "openai>=2.1", "reachy_mini_dances_library", "reachy_mini_toolbox", "reachy-mini==1.8.0", "eclipse-zenoh~=1.7.0", "gradio_client>=1.13.3",] [[project.authors]] name = "Pollen Robotics" email = "contact@pollen-robotics.com" @@ -16,6 +16,11 @@ email = "contact@pollen-robotics.com" [dependency-groups] dev = [ "pytest", "pytest-asyncio", "ruff==0.12.0", "mypy==1.18.2", "pre-commit", "types-requests", "python-semantic-release>=10.5.3",] +[tool.uv] +environments = [ + "sys_platform == 'darwin'", +] + [project.optional-dependencies] local_vision = [ "torch>=2.1", "transformers==5.0.0rc2", "num2words",] yolo_vision = [ "ultralytics", "supervision",] diff --git a/projects/reachy-mini-openshell/uv.lock b/projects/reachy-mini-openshell/uv.lock new file mode 100644 index 00000000..a7ff8ddf --- /dev/null +++ b/projects/reachy-mini-openshell/uv.lock @@ -0,0 +1,2949 @@ +version = 1 +revision = 3 +requires-python = ">=3.10, <3.13" +resolution-markers = [ + "python_full_version >= '3.12' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and sys_platform == 'darwin'", + "python_full_version < '3.11' and sys_platform == 'darwin'", +] +supported-markers = [ + "sys_platform == 'darwin'", +] + +[[package]] +name = "absl-py" +version = "2.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/64/c7/8de93764ad66968d19329a7e0c147a2bb3c7054c554d4a119111b8f9440f/absl_py-2.4.0.tar.gz", hash = "sha256:8c6af82722b35cf71e0f4d1d47dcaebfff286e27110a99fc359349b247dfb5d4", size = 116543, upload-time = "2026-01-28T10:17:05.322Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/18/a6/907a406bb7d359e6a63f99c313846d9eec4f7e6f7437809e03aa00fa3074/absl_py-2.4.0-py3-none-any.whl", hash = "sha256:88476fd881ca8aab94ffa78b7b6c632a782ab3ba1cd19c9bd423abc4fb4cd28d", size = 135750, upload-time = "2026-01-28T10:17:04.19Z" }, +] + +[[package]] +name = "aiofiles" +version = "24.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0b/03/a88171e277e8caa88a4c77808c20ebb04ba74cc4681bf1e9416c862de237/aiofiles-24.1.0.tar.gz", hash = "sha256:22a075c9e5a3810f0c2e48f3008c94d68c65d763b9b03857924c99e57355166c", size = 30247, upload-time = "2024-06-24T11:02:03.584Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a5/45/30bb92d442636f570cb5651bc661f52b610e2eec3f891a5dc3a4c3667db0/aiofiles-24.1.0-py3-none-any.whl", hash = "sha256:b4ec55f4195e3eb5d7abd1bf7e061763e864dd4954231fb8539a0ef8bb8260e5", size = 15896, upload-time = "2024-06-24T11:02:01.529Z" }, +] + +[[package]] +name = "aiohappyeyeballs" +version = "2.6.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/33/c6/61a2d7b7572279226bb2e7f61d7a19ca7c90da0329c93fa0d560cbf288d8/aiohappyeyeballs-2.6.2.tar.gz", hash = "sha256:e202810ee718bd01fc6ef49e8ea53d023d5cb6b581076d7925aa499fa55dbe64", size = 22591, upload-time = "2026-05-20T15:12:24.631Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5f/fc/a7bf5b6e4e617b45f90f2d9d2a68519c249c81dd4fc2658c7a2a61c4f4b7/aiohappyeyeballs-2.6.2-py3-none-any.whl", hash = "sha256:4708045e2d7a6c6bdf8aafa8ed39649eaf926a4543b54560659129e3365953c4", size = 15062, upload-time = "2026-05-20T15:12:23.328Z" }, +] + +[[package]] +name = "aiohttp" +version = "3.14.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiohappyeyeballs", marker = "sys_platform == 'darwin'" }, + { name = "aiosignal", marker = "sys_platform == 'darwin'" }, + { name = "async-timeout", marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "attrs", marker = "sys_platform == 'darwin'" }, + { name = "frozenlist", marker = "sys_platform == 'darwin'" }, + { name = "multidict", marker = "sys_platform == 'darwin'" }, + { name = "propcache", marker = "sys_platform == 'darwin'" }, + { name = "typing-extensions", marker = "sys_platform == 'darwin'" }, + { name = "yarl", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/82/78/8ea7308cac6934de8c74a14f3d5f65d1c89287426688be79538d0e5c013d/aiohttp-3.14.1.tar.gz", hash = "sha256:307f2cff90a764d329e77040603fa032db89c5c24fdad50c4c15334cba744035", size = 7955794, upload-time = "2026-06-07T21:09:35.529Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6d/67/58ded4b3f2e10f94972d8928050c85330e249a31dd45a0e5f3c0e9c3fa05/aiohttp-3.14.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8f6bb621e5863cfe8fe5ff5468002d200ec31f30f1280b259dc505b02595099e", size = 766140, upload-time = "2026-06-07T21:05:37.471Z" }, + { url = "https://files.pythonhosted.org/packages/18/68/4ae5b4e08943f316594bb68da89957d3baf5760588fa09509594bd777e4b/aiohttp-3.14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4f7215cb3933784f79ed20e5f050e15984f390424339b22375d5a53c933a0491", size = 519430, upload-time = "2026-06-07T21:05:40.751Z" }, + { url = "https://files.pythonhosted.org/packages/cb/c1/316c8f3549dbe5245f92bfd523ec6f32dd4d98cafe21df3f6a19b1184c75/aiohttp-3.14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d9d4e294455b23a68c9b8f042d0e8e377a265bcb15332753695f6e5b6819e0ce", size = 514406, upload-time = "2026-06-07T21:05:42.111Z" }, + { url = "https://files.pythonhosted.org/packages/26/dd/bf526e6f0a1120dd6f2df2e97bacfe4d358f13d17a0ff5847301a1375a51/aiohttp-3.14.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:aa00140699487bd435fde4342d85c94cb256b7cd3a5b9c3396c67f19922afda2", size = 765225, upload-time = "2026-06-07T21:06:07.957Z" }, + { url = "https://files.pythonhosted.org/packages/8f/e1/a2872aa55495a70f61310d411541c6ee23812d9a884e000c716e1bc3edbf/aiohttp-3.14.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1c1af67559445498b502030c35c59db59966f47041ca9de5b4e707f86bd10b5f", size = 518743, upload-time = "2026-06-07T21:06:09.749Z" }, + { url = "https://files.pythonhosted.org/packages/5b/e7/c60c7b209e509cc787de3cea0550a518538cfc08003e1c1e14c1c63fff71/aiohttp-3.14.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d44ec478e713ee7f29b439f7eb8dc2b9d4079e11ae114d2c2ac3d5daf30516c8", size = 514139, upload-time = "2026-06-07T21:06:11.26Z" }, + { url = "https://files.pythonhosted.org/packages/1d/21/151624b51cd92553d95424daf4bf19f19ce9be9002d19253e7e7ce67197b/aiohttp-3.14.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d35143e27778b4bb0fb189562d7f275bff79c62ab8e98459717c0ea617ff2480", size = 757402, upload-time = "2026-06-07T21:06:40.311Z" }, + { url = "https://files.pythonhosted.org/packages/c2/82/280619e0bd7bf2454987e19282616e84762255dd9c8468f62382e8c191f1/aiohttp-3.14.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:bcfb80a2cc36fba2534e5e5b5264dc7ae6fcd9bf15256da3e53d2f499e6fa29d", size = 512310, upload-time = "2026-06-07T21:06:42.207Z" }, + { url = "https://files.pythonhosted.org/packages/55/b2/2aac325583aaa1353045f96dffa586d8a34e8322e14a7ba49cffeb103ab4/aiohttp-3.14.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:27fd7c91e51729b4f7e1577865fa6d34c9adccbc39aabe9000285b48af9f0ec2", size = 512448, upload-time = "2026-06-07T21:06:43.813Z" }, +] + +[[package]] +name = "aioice" +version = "0.10.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "dnspython", marker = "sys_platform == 'darwin'" }, + { name = "ifaddr", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/67/04/df7286233f468e19e9bedff023b6b246182f0b2ccb04ceeb69b2994021c6/aioice-0.10.2.tar.gz", hash = "sha256:bf236c6829ee33c8e540535d31cd5a066b531cb56de2be94c46be76d68b1a806", size = 44307, upload-time = "2025-11-28T15:56:48.836Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/e3/0d23b1f930c17d371ce1ec36ee529f22fd19ebc2a07fe3418e3d1d884ce2/aioice-0.10.2-py3-none-any.whl", hash = "sha256:14911c15ab12d096dd14d372ebb4aecbb7420b52c9b76fdfcf54375dec17fcbf", size = 24875, upload-time = "2025-11-28T15:56:47.847Z" }, +] + +[[package]] +name = "aiortc" +version = "1.14.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aioice", marker = "sys_platform == 'darwin'" }, + { name = "av", marker = "sys_platform == 'darwin'" }, + { name = "cryptography", marker = "sys_platform == 'darwin'" }, + { name = "google-crc32c", marker = "sys_platform == 'darwin'" }, + { name = "pyee", marker = "sys_platform == 'darwin'" }, + { name = "pylibsrtp", marker = "sys_platform == 'darwin'" }, + { name = "pyopenssl", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/51/9c/4e027bfe0195de0442da301e2389329496745d40ae44d2d7c4571c4290ce/aiortc-1.14.0.tar.gz", hash = "sha256:adc8a67ace10a085721e588e06a00358ed8eaf5f6b62f0a95358ff45628dd762", size = 1180864, upload-time = "2025-10-13T21:40:37.905Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/57/ab/31646a49209568cde3b97eeade0d28bb78b400e6645c56422c101df68932/aiortc-1.14.0-py3-none-any.whl", hash = "sha256:4b244d7e482f4e1f67e685b3468269628eca1ec91fa5b329ab517738cfca086e", size = 93183, upload-time = "2025-10-13T21:40:36.59Z" }, +] + +[[package]] +name = "aiosignal" +version = "1.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "frozenlist", marker = "sys_platform == 'darwin'" }, + { name = "typing-extensions", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/61/62/06741b579156360248d1ec624842ad0edf697050bbaf7c3e46394e106ad1/aiosignal-1.4.0.tar.gz", hash = "sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7", size = 25007, upload-time = "2025-07-03T22:54:43.528Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl", hash = "sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e", size = 7490, upload-time = "2025-07-03T22:54:42.156Z" }, +] + +[[package]] +name = "annotated-doc" +version = "0.0.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/57/ba/046ceea27344560984e26a590f90bc7f4a75b06701f653222458922b558c/annotated_doc-0.0.4.tar.gz", hash = "sha256:fbcda96e87e9c92ad167c2e53839e57503ecfda18804ea28102353485033faa4", size = 7288, upload-time = "2025-11-10T22:07:42.062Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl", hash = "sha256:571ac1dc6991c450b25a9c2d84a3705e2ae7a53467b5d111c24fa8baabbed320", size = 5303, upload-time = "2025-11-10T22:07:40.673Z" }, +] + +[[package]] +name = "annotated-types" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081, upload-time = "2024-05-20T21:33:25.928Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643, upload-time = "2024-05-20T21:33:24.1Z" }, +] + +[[package]] +name = "anyio" +version = "4.14.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "exceptiongroup", marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "idna", marker = "sys_platform == 'darwin'" }, + { name = "typing-extensions", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3b/72/5562aabb8dd7181e8e860622a38bea08d17842b99ecd4c91f84ac95251b0/anyio-4.14.1.tar.gz", hash = "sha256:8d648a3544c1a700e3ff78615cd679e4c5c3f149904287e73687b2596963629e", size = 254831, upload-time = "2026-06-24T20:56:06.017Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b0/7b/90df4a0a816d98d6ea26f559d87836d494a2cf1fcf063be67df50a7bcc30/anyio-4.14.1-py3-none-any.whl", hash = "sha256:4e5533c5b8ff0a24f5d7a176cbe6877129cd183893f66b537f8f227d10527d72", size = 124875, upload-time = "2026-06-24T20:56:04.413Z" }, +] + +[[package]] +name = "asgiref" +version = "3.11.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/63/40/f03da1264ae8f7cfdbf9146542e5e7e8100a4c66ab48e791df9a03d3f6c0/asgiref-3.11.1.tar.gz", hash = "sha256:5f184dc43b7e763efe848065441eac62229c9f7b0475f41f80e207a114eda4ce", size = 38550, upload-time = "2026-02-03T13:30:14.33Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5c/0a/a72d10ed65068e115044937873362e6e32fab1b7dce0046aeb224682c989/asgiref-3.11.1-py3-none-any.whl", hash = "sha256:e8667a091e69529631969fd45dc268fa79b99c92c5fcdda727757e52146ec133", size = 24345, upload-time = "2026-02-03T13:30:13.039Z" }, +] + +[[package]] +name = "async-timeout" +version = "5.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a5/ae/136395dfbfe00dfc94da3f3e136d0b13f394cba8f4841120e34226265780/async_timeout-5.0.1.tar.gz", hash = "sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3", size = 9274, upload-time = "2024-11-06T16:41:39.6Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fe/ba/e2081de779ca30d473f21f5b30e0e737c438205440784c7dfc81efc2b029/async_timeout-5.0.1-py3-none-any.whl", hash = "sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c", size = 6233, upload-time = "2024-11-06T16:41:37.9Z" }, +] + +[[package]] +name = "attrs" +version = "26.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9a/8e/82a0fe20a541c03148528be8cac2408564a6c9a0cc7e9171802bc1d26985/attrs-26.1.0.tar.gz", hash = "sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32", size = 952055, upload-time = "2026-03-19T14:22:25.026Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl", hash = "sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309", size = 67548, upload-time = "2026-03-19T14:22:23.645Z" }, +] + +[[package]] +name = "audioread" +version = "3.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a1/4a/874ecf9b472f998130c2b5e145dcdb9f6131e84786111489103b66772143/audioread-3.1.0.tar.gz", hash = "sha256:1c4ab2f2972764c896a8ac61ac53e261c8d29f0c6ccd652f84e18f08a4cab190", size = 20082, upload-time = "2025-10-26T19:44:13.484Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/16/fbe8e1e185a45042f7cd3a282def5bb8d95bb69ab9e9ef6a5368aa17e426/audioread-3.1.0-py3-none-any.whl", hash = "sha256:b30d1df6c5d3de5dcef0fb0e256f6ea17bdcf5f979408df0297d8a408e2971b4", size = 23143, upload-time = "2025-10-26T19:44:12.016Z" }, +] + +[[package]] +name = "av" +version = "16.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/78/cd/3a83ffbc3cc25b39721d174487fb0d51a76582f4a1703f98e46170ce83d4/av-16.1.0.tar.gz", hash = "sha256:a094b4fd87a3721dacf02794d3d2c82b8d712c85b9534437e82a8a978c175ffd", size = 4285203, upload-time = "2026-01-11T07:31:33.772Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/97/51/2217a9249409d2e88e16e3f16f7c0def9fd3e7ffc4238b2ec211f9935bdb/av-16.1.0-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:2395748b0c34fe3a150a1721e4f3d4487b939520991b13e7b36f8926b3b12295", size = 26942590, upload-time = "2026-01-09T20:17:58.588Z" }, + { url = "https://files.pythonhosted.org/packages/bf/cd/a7070f4febc76a327c38808e01e2ff6b94531fe0b321af54ea3915165338/av-16.1.0-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:72d7ac832710a158eeb7a93242370aa024a7646516291c562ee7f14a7ea881fd", size = 21507910, upload-time = "2026-01-09T20:18:02.309Z" }, + { url = "https://files.pythonhosted.org/packages/48/d0/b71b65d1b36520dcb8291a2307d98b7fc12329a45614a303ff92ada4d723/av-16.1.0-cp311-cp311-macosx_11_0_x86_64.whl", hash = "sha256:e88ad64ee9d2b9c4c5d891f16c22ae78e725188b8926eb88187538d9dd0b232f", size = 26927747, upload-time = "2026-01-09T20:18:16.976Z" }, + { url = "https://files.pythonhosted.org/packages/2f/79/720a5a6ccdee06eafa211b945b0a450e3a0b8fc3d12922f0f3c454d870d2/av-16.1.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:cb296073fa6935724de72593800ba86ae49ed48af03960a4aee34f8a611f442b", size = 21492232, upload-time = "2026-01-09T20:18:19.266Z" }, + { url = "https://files.pythonhosted.org/packages/9c/84/2535f55edcd426cebec02eb37b811b1b0c163f26b8d3f53b059e2ec32665/av-16.1.0-cp312-cp312-macosx_11_0_x86_64.whl", hash = "sha256:640f57b93f927fba8689f6966c956737ee95388a91bd0b8c8b5e0481f73513d6", size = 26945785, upload-time = "2026-01-09T20:18:34.486Z" }, + { url = "https://files.pythonhosted.org/packages/b6/17/ffb940c9e490bf42e86db4db1ff426ee1559cd355a69609ec1efe4d3a9eb/av-16.1.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:ae3fb658eec00852ebd7412fdc141f17f3ddce8afee2d2e1cf366263ad2a3b35", size = 21481147, upload-time = "2026-01-09T20:18:36.716Z" }, +] + +[[package]] +name = "backports-asyncio-runner" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8e/ff/70dca7d7cb1cbc0edb2c6cc0c38b65cba36cccc491eca64cabd5fe7f8670/backports_asyncio_runner-1.2.0.tar.gz", hash = "sha256:a5aa7b2b7d8f8bfcaa2b57313f70792df84e32a2a746f585213373f900b42162", size = 69893, upload-time = "2025-07-02T02:27:15.685Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/59/76ab57e3fe74484f48a53f8e337171b4a2349e506eabe136d7e01d059086/backports_asyncio_runner-1.2.0-py3-none-any.whl", hash = "sha256:0da0a936a8aeb554eccb426dc55af3ba63bcdc69fa1a600b5bb305413a4477b5", size = 12313, upload-time = "2025-07-02T02:27:14.263Z" }, +] + +[[package]] +name = "brotli" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f7/16/c92ca344d646e71a43b8bb353f0a6490d7f6e06210f8554c8f874e454285/brotli-1.2.0.tar.gz", hash = "sha256:e310f77e41941c13340a95976fe66a8a95b01e783d430eeaf7a2f87e0a57dd0a", size = 7388632, upload-time = "2025-11-05T18:39:42.86Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/64/10/a090475284fc4a71aed40a96f32e44a7fe5bda39687353dd977720b211b6/brotli-1.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3b90b767916ac44e93a8e28ce6adf8d551e43affb512f2377c732d486ac6514e", size = 863089, upload-time = "2025-11-05T18:38:01.181Z" }, + { url = "https://files.pythonhosted.org/packages/03/41/17416630e46c07ac21e378c3464815dd2e120b441e641bc516ac32cc51d2/brotli-1.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6be67c19e0b0c56365c6a76e393b932fb0e78b3b56b711d180dd7013cb1fd984", size = 445442, upload-time = "2025-11-05T18:38:02.434Z" }, + { url = "https://files.pythonhosted.org/packages/7a/ef/f285668811a9e1ddb47a18cb0b437d5fc2760d537a2fe8a57875ad6f8448/brotli-1.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:15b33fe93cedc4caaff8a0bd1eb7e3dab1c61bb22a0bf5bdfdfd97cd7da79744", size = 863110, upload-time = "2025-11-05T18:38:12.978Z" }, + { url = "https://files.pythonhosted.org/packages/50/62/a3b77593587010c789a9d6eaa527c79e0848b7b860402cc64bc0bc28a86c/brotli-1.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:898be2be399c221d2671d29eed26b6b2713a02c2119168ed914e7d00ceadb56f", size = 445438, upload-time = "2025-11-05T18:38:14.208Z" }, + { url = "https://files.pythonhosted.org/packages/11/ee/b0a11ab2315c69bb9b45a2aaed022499c9c24a205c3a49c3513b541a7967/brotli-1.2.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:35d382625778834a7f3061b15423919aa03e4f5da34ac8e02c074e4b75ab4f84", size = 861543, upload-time = "2025-11-05T18:38:24.183Z" }, + { url = "https://files.pythonhosted.org/packages/e1/2f/29c1459513cd35828e25531ebfcbf3e92a5e49f560b1777a9af7203eb46e/brotli-1.2.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7a61c06b334bd99bc5ae84f1eeb36bfe01400264b3c352f968c6e30a10f9d08b", size = 444288, upload-time = "2025-11-05T18:38:25.139Z" }, +] + +[[package]] +name = "certifi" +version = "2026.6.17" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c9/c7/424b75da314c1045981bd9777432fad05a9e0c69daa4ed7e308bbaffe405/certifi-2026.6.17.tar.gz", hash = "sha256:024c88eeec92ca068db80f02b8b07c9cef7b9fe261d1d535abfd5abd6f6af432", size = 134594, upload-time = "2026-06-17T10:31:07.894Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/2f/c5464532e965badff2f4c4c1a3a83f5697f0d7c407ed0cda44aaa99bb451/certifi-2026.6.17-py3-none-any.whl", hash = "sha256:2227dcbaafe0d2f59279d1762ddddc37783ed4354594f194ffc31d20f41fc3db", size = 133289, upload-time = "2026-06-17T10:31:06.348Z" }, +] + +[[package]] +name = "cffi" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pycparser", marker = "implementation_name != 'PyPy' and sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/eb/56/b1ba7935a17738ae8453301356628e8147c79dbb825bcbc73dc7401f9846/cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529", size = 523588, upload-time = "2025-09-08T23:24:04.541Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/93/d7/516d984057745a6cd96575eea814fe1edd6646ee6efd552fb7b0921dec83/cffi-2.0.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44", size = 184283, upload-time = "2025-09-08T23:22:08.01Z" }, + { url = "https://files.pythonhosted.org/packages/9e/84/ad6a0b408daa859246f57c03efd28e5dd1b33c21737c2db84cae8c237aa5/cffi-2.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49", size = 180504, upload-time = "2025-09-08T23:22:10.637Z" }, + { url = "https://files.pythonhosted.org/packages/12/4a/3dfd5f7850cbf0d06dc84ba9aa00db766b52ca38d8b86e3a38314d52498c/cffi-2.0.0-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe", size = 184344, upload-time = "2025-09-08T23:22:26.456Z" }, + { url = "https://files.pythonhosted.org/packages/4f/8b/f0e4c441227ba756aafbe78f117485b25bb26b1c059d01f137fa6d14896b/cffi-2.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c", size = 180560, upload-time = "2025-09-08T23:22:28.197Z" }, + { url = "https://files.pythonhosted.org/packages/ea/47/4f61023ea636104d4f16ab488e268b93008c3d0bb76893b1b31db1f96802/cffi-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d", size = 185271, upload-time = "2025-09-08T23:22:44.795Z" }, + { url = "https://files.pythonhosted.org/packages/df/a2/781b623f57358e360d62cdd7a8c681f074a71d445418a776eef0aadb4ab4/cffi-2.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c", size = 181048, upload-time = "2025-09-08T23:22:45.938Z" }, +] + +[[package]] +name = "cfgv" +version = "3.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4e/b5/721b8799b04bf9afe054a3899c6cf4e880fcf8563cc71c15610242490a0c/cfgv-3.5.0.tar.gz", hash = "sha256:d5b1034354820651caa73ede66a6294d6e95c1b00acc5e9b098e917404669132", size = 7334, upload-time = "2025-11-19T20:55:51.612Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl", hash = "sha256:a8dc6b26ad22ff227d2634a65cb388215ce6cc96bbcc5cfde7641ae87e8dacc0", size = 7445, upload-time = "2025-11-19T20:55:50.744Z" }, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e7/a1/67fe25fac3c7642725500a3f6cfe5821ad557c3abb11c9d20d12c7008d3e/charset_normalizer-3.4.7.tar.gz", hash = "sha256:ae89db9e5f98a11a4bf50407d4363e7b09b31e55bc117b4f7d80aab97ba009e5", size = 144271, upload-time = "2026-04-02T09:28:39.342Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/26/08/0f303cb0b529e456bb116f2d50565a482694fbb94340bf56d44677e7ed03/charset_normalizer-3.4.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cdd68a1fb318e290a2077696b7eb7a21a49163c455979c639bf5a5dcdc46617d", size = 315182, upload-time = "2026-04-02T09:25:40.673Z" }, + { url = "https://files.pythonhosted.org/packages/c2/d7/b5b7020a0565c2e9fa8c09f4b5fa6232feb326b8c20081ccded47ea368fd/charset_normalizer-3.4.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7641bb8895e77f921102f72833904dcd9901df5d6d72a2ab8f31d04b7e51e4e7", size = 309705, upload-time = "2026-04-02T09:26:02.191Z" }, + { url = "https://files.pythonhosted.org/packages/0c/eb/4fc8d0a7110eb5fc9cc161723a34a8a6c200ce3b4fbf681bc86feee22308/charset_normalizer-3.4.7-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:eca9705049ad3c7345d574e3510665cb2cf844c2f2dcfe675332677f081cbd46", size = 311328, upload-time = "2026-04-02T09:26:24.331Z" }, + { url = "https://files.pythonhosted.org/packages/db/8f/61959034484a4a7c527811f4721e75d02d653a35afb0b6054474d8185d4c/charset_normalizer-3.4.7-py3-none-any.whl", hash = "sha256:3dce51d0f5e7951f8bb4900c257dad282f49190fdbebecd4ba99bcc41fef404d", size = 61958, upload-time = "2026-04-02T09:28:37.794Z" }, +] + +[[package]] +name = "click" +version = "8.1.8" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b9/2e/0090cbf739cee7d23781ad4b89a9894a41538e4fcf4c31dcdd705b78eb8b/click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a", size = 226593, upload-time = "2024-12-21T18:38:44.339Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2", size = 98188, upload-time = "2024-12-21T18:38:41.666Z" }, +] + +[[package]] +name = "click-option-group" +version = "0.5.9" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ef/ff/d291d66595b30b83d1cb9e314b2c9be7cfc7327d4a0d40a15da2416ea97b/click_option_group-0.5.9.tar.gz", hash = "sha256:f94ed2bc4cf69052e0f29592bd1e771a1789bd7bfc482dd0bc482134aff95823", size = 22222, upload-time = "2025-10-09T09:38:01.474Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/75/45/54bb2d8d4138964a94bef6e9afe48b0be4705ba66ac442ae7d8a8dc4ffef/click_option_group-0.5.9-py3-none-any.whl", hash = "sha256:ad2599248bd373e2e19bec5407967c3eec1d0d4fc4a5e77b08a0481e75991080", size = 11553, upload-time = "2025-10-09T09:38:00.066Z" }, +] + +[[package]] +name = "contourpy" +version = "1.3.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and sys_platform == 'darwin'", +] +dependencies = [ + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/54/eb9bfc647b19f2009dd5c7f5ec51c4e6ca831725f1aea7a993034f483147/contourpy-1.3.2.tar.gz", hash = "sha256:b6945942715a034c671b7fc54f9588126b0b8bf23db2696e3ca8328f3ff0ab54", size = 13466130, upload-time = "2025-04-15T17:47:53.79Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/12/a3/da4153ec8fe25d263aa48c1a4cbde7f49b59af86f0b6f7862788c60da737/contourpy-1.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ba38e3f9f330af820c4b27ceb4b9c7feee5fe0493ea53a8720f4792667465934", size = 268551, upload-time = "2025-04-15T17:34:46.581Z" }, + { url = "https://files.pythonhosted.org/packages/2f/6c/330de89ae1087eb622bfca0177d32a7ece50c3ef07b28002de4757d9d875/contourpy-1.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:dc41ba0714aa2968d1f8674ec97504a8f7e334f48eeacebcaa6256213acb0989", size = 253399, upload-time = "2025-04-15T17:34:51.427Z" }, + { url = "https://files.pythonhosted.org/packages/b3/b9/ede788a0b56fc5b071639d06c33cb893f68b1178938f3425debebe2dab78/contourpy-1.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6a37a2fb93d4df3fc4c0e363ea4d16f83195fc09c891bc8ce072b9d084853445", size = 269636, upload-time = "2025-04-15T17:35:54.473Z" }, + { url = "https://files.pythonhosted.org/packages/e6/75/3469f011d64b8bbfa04f709bfc23e1dd71be54d05b1b083be9f5b22750d1/contourpy-1.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b7cd50c38f500bbcc9b6a46643a40e0913673f869315d8e70de0438817cb7773", size = 254636, upload-time = "2025-04-15T17:35:58.283Z" }, + { url = "https://files.pythonhosted.org/packages/34/f7/44785876384eff370c251d58fd65f6ad7f39adce4a093c934d4a67a7c6b6/contourpy-1.3.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4caf2bcd2969402bf77edc4cb6034c7dd7c0803213b3523f111eb7460a51b8d2", size = 271580, upload-time = "2025-04-15T17:37:03.105Z" }, + { url = "https://files.pythonhosted.org/packages/93/3b/0004767622a9826ea3d95f0e9d98cd8729015768075d61f9fea8eeca42a8/contourpy-1.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:82199cb78276249796419fe36b7386bd8d2cc3f28b3bc19fe2454fe2e26c4c15", size = 255530, upload-time = "2025-04-15T17:37:07.026Z" }, + { url = "https://files.pythonhosted.org/packages/33/05/b26e3c6ecc05f349ee0013f0bb850a761016d89cec528a98193a48c34033/contourpy-1.3.2-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:fd93cc7f3139b6dd7aab2f26a90dde0aa9fc264dbf70f6740d498a70b860b82c", size = 265681, upload-time = "2025-04-15T17:44:59.314Z" }, + { url = "https://files.pythonhosted.org/packages/ff/c0/91f1215d0d9f9f343e4773ba6c9b89e8c0cc7a64a6263f21139da639d848/contourpy-1.3.2-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:5f5964cdad279256c084b69c3f412b7801e15356b16efa9d78aa974041903da0", size = 266807, upload-time = "2025-04-15T17:45:15.535Z" }, +] + +[[package]] +name = "contourpy" +version = "1.3.3" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.12' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and sys_platform == 'darwin'", +] +dependencies = [ + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/58/01/1253e6698a07380cd31a736d248a3f2a50a7c88779a1813da27503cadc2a/contourpy-1.3.3.tar.gz", hash = "sha256:083e12155b210502d0bca491432bb04d56dc3432f95a979b429f2848c3dbe880", size = 13466174, upload-time = "2025-07-26T12:03:12.549Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/91/2e/c4390a31919d8a78b90e8ecf87cd4b4c4f05a5b48d05ec17db8e5404c6f4/contourpy-1.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:709a48ef9a690e1343202916450bc48b9e51c049b089c7f79a267b46cffcdaa1", size = 288773, upload-time = "2025-07-26T12:01:02.277Z" }, + { url = "https://files.pythonhosted.org/packages/0d/44/c4b0b6095fef4dc9c420e041799591e3b63e9619e3044f7f4f6c21c0ab24/contourpy-1.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:23416f38bfd74d5d28ab8429cc4d63fa67d5068bd711a85edb1c3fb0c3e2f381", size = 270149, upload-time = "2025-07-26T12:01:04.072Z" }, + { url = "https://files.pythonhosted.org/packages/be/45/adfee365d9ea3d853550b2e735f9d66366701c65db7855cd07621732ccfc/contourpy-1.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b08a32ea2f8e42cf1d4be3169a98dd4be32bafe4f22b6c4cb4ba810fa9e5d2cb", size = 293419, upload-time = "2025-07-26T12:01:21.16Z" }, + { url = "https://files.pythonhosted.org/packages/53/3e/405b59cfa13021a56bba395a6b3aca8cec012b45bf177b0eaf7a202cde2c/contourpy-1.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:556dba8fb6f5d8742f2923fe9457dbdd51e1049c4a43fd3986a0b14a1d815fc6", size = 273979, upload-time = "2025-07-26T12:01:22.448Z" }, + { url = "https://files.pythonhosted.org/packages/a5/29/8dcfe16f0107943fa92388c23f6e05cff0ba58058c4c95b00280d4c75a14/contourpy-1.3.3-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:cd5dfcaeb10f7b7f9dc8941717c6c2ade08f587be2226222c12b25f0483ed497", size = 278809, upload-time = "2025-07-26T12:02:52.74Z" }, + { url = "https://files.pythonhosted.org/packages/85/a9/8b37ef4f7dafeb335daee3c8254645ef5725be4d9c6aa70b50ec46ef2f7e/contourpy-1.3.3-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:0c1fc238306b35f246d61a1d416a627348b5cf0648648a031e14bb8705fcdfe8", size = 261593, upload-time = "2025-07-26T12:02:54.037Z" }, +] + +[[package]] +name = "cryptography" +version = "49.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "platform_python_implementation != 'PyPy' and sys_platform == 'darwin'" }, + { name = "typing-extensions", marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1f/99/d1c90d6041656cc6ee229dc99cd67fd0cd5aec3c5f7d72fffc27cc750054/cryptography-49.0.0.tar.gz", hash = "sha256:f89660a348f4f78a92366240a61404e337586ef7f5909a2fef59ca88ef505493", size = 854345, upload-time = "2026-06-12T20:02:30.512Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9b/22/adf66990e63584a68dfb50c24f48a125c07b1699899381c8151e63ed458c/cryptography-49.0.0-cp311-abi3-macosx_11_0_arm64.whl", hash = "sha256:966fe0e9c67490071f14c0d2b1cb2dfb3023c5ce39457343931415f08382f2db", size = 4032100, upload-time = "2026-06-12T20:02:32.143Z" }, + { url = "https://files.pythonhosted.org/packages/19/2a/5bb823f5bedcf80718cea7fbc95ec5515cca3769633c4b01a32be7f30e7c/cryptography-49.0.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:ec5e529fb80935c94fe7b729f9972b50e351a0e6b50aa294fd5cabb109fcc29a", size = 4025947, upload-time = "2026-06-12T20:01:25.745Z" }, + { url = "https://files.pythonhosted.org/packages/63/d3/4a83af35d65e3fad632c926fad684c193ea4398569ccb0bbbc7fe8f5dc9a/cryptography-49.0.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:fc1e275c2f1d97b1a6450b8b0ea3ebfa6e087a611c2b26cb2404d48588abab7b", size = 3993685, upload-time = "2026-06-12T20:02:14.883Z" }, +] + +[[package]] +name = "cycler" +version = "0.12.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a9/95/a3dbbb5028f35eafb79008e7522a75244477d2838f38cbb722248dabc2a8/cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c", size = 7615, upload-time = "2023-10-07T05:32:18.335Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30", size = 8321, upload-time = "2023-10-07T05:32:16.783Z" }, +] + +[[package]] +name = "decorator" +version = "5.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/60/8b/32f9823da46cde7df2087faa08cd98d01b908f8dcab982cdba9c84e85355/decorator-5.3.1.tar.gz", hash = "sha256:4cbcdd55a6efadb9dbea26b858f4fb3264567b52d69ca0d25b721b553f60ea82", size = 58084, upload-time = "2026-05-18T06:03:28.057Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/05/7f/798705f5296a58ca505d600456748d1be48078eac8a7050d8a98bc9edb89/decorator-5.3.1-py3-none-any.whl", hash = "sha256:f47fe6fdbd2edd623ecfe36875d37aba411624e2670dd395dddae1358689bb3c", size = 10365, upload-time = "2026-05-18T06:03:26.517Z" }, +] + +[[package]] +name = "defusedxml" +version = "0.7.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0f/d5/c66da9b79e5bdb124974bfe172b4daf3c984ebd9c2a06e2b8a4dc7331c72/defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69", size = 75520, upload-time = "2021-03-08T10:59:26.269Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61", size = 25604, upload-time = "2021-03-08T10:59:24.45Z" }, +] + +[[package]] +name = "deprecated" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "wrapt", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/49/85/12f0a49a7c4ffb70572b6c2ef13c90c88fd190debda93b23f026b25f9634/deprecated-1.3.1.tar.gz", hash = "sha256:b1b50e0ff0c1fddaa5708a2c6b0a6588bb09b892825ab2b214ac9ea9d92a5223", size = 2932523, upload-time = "2025-10-30T08:19:02.757Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/84/d0/205d54408c08b13550c733c4b85429e7ead111c7f0014309637425520a9a/deprecated-1.3.1-py2.py3-none-any.whl", hash = "sha256:597bfef186b6f60181535a29fbe44865ce137a5079f295b479886c82729d5f3f", size = 11298, upload-time = "2025-10-30T08:19:00.758Z" }, +] + +[[package]] +name = "distlib" +version = "0.4.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c9/02/bd72be9134d25ed783ecbbc38a539ffaefbf90c78418c7fb7229600dbac7/distlib-0.4.3.tar.gz", hash = "sha256:f152097224a0ae24be5a0f6bae1b9359af82133bce63f98a95f86cae1aede9ed", size = 615141, upload-time = "2026-06-12T08:04:52.847Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/02/08/9c41fb51ab5b43eb21674aff13df270e8ba6c4b29c8624e328dc7a9482af/distlib-0.4.3-py2.py3-none-any.whl", hash = "sha256:4b0ce306c966eb73bc3a7b6abad017c556dadd92c44701562cd528ac7fde4d5b", size = 470628, upload-time = "2026-06-12T08:04:50.506Z" }, +] + +[[package]] +name = "distro" +version = "1.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fc/f8/98eea607f65de6527f8a2e8885fc8015d3e6f5775df186e443e0964a11c3/distro-1.9.0.tar.gz", hash = "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed", size = 60722, upload-time = "2023-12-24T09:54:32.31Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/12/b3/231ffd4ab1fc9d679809f356cebee130ac7daa00d6d6f3206dd4fd137e9e/distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2", size = 20277, upload-time = "2023-12-24T09:54:30.421Z" }, +] + +[[package]] +name = "dnspython" +version = "2.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8c/8b/57666417c0f90f08bcafa776861060426765fdb422eb10212086fb811d26/dnspython-2.8.0.tar.gz", hash = "sha256:181d3c6996452cb1189c4046c61599b84a5a86e099562ffde77d26984ff26d0f", size = 368251, upload-time = "2025-09-07T18:58:00.022Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ba/5a/18ad964b0086c6e62e2e7500f7edc89e3faa45033c71c1893d34eed2b2de/dnspython-2.8.0-py3-none-any.whl", hash = "sha256:01d9bbc4a2d76bf0db7c1f729812ded6d912bd318d3b1cf81d30c0f845dbf3af", size = 331094, upload-time = "2025-09-07T18:57:58.071Z" }, +] + +[[package]] +name = "docopt" +version = "0.6.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/55/8f8cab2afd404cf578136ef2cc5dfb50baa1761b68c9da1fb1e4eed343c9/docopt-0.6.2.tar.gz", hash = "sha256:49b3a825280bd66b3aa83585ef59c4a8c82f2c8a522dbe754a8bc8d08c85c491", size = 25901, upload-time = "2014-06-16T11:18:57.406Z" } + +[[package]] +name = "dotty-dict" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6a/ab/88d67f02024700b48cd8232579ad1316aa9df2272c63049c27cc094229d6/dotty_dict-1.3.1.tar.gz", hash = "sha256:4b016e03b8ae265539757a53eba24b9bfda506fb94fbce0bee843c6f05541a15", size = 7699, upload-time = "2022-07-09T18:50:57.727Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1a/91/e0d457ee03ec33d79ee2cd8d212debb1bc21dfb99728ae35efdb5832dc22/dotty_dict-1.3.1-py3-none-any.whl", hash = "sha256:5022d234d9922f13aa711b4950372a06a6d64cb6d6db9ba43d0ba133ebfce31f", size = 7014, upload-time = "2022-07-09T18:50:55.058Z" }, +] + +[[package]] +name = "eclipse-zenoh" +version = "1.7.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/75/09/9534eea23b59cee13b5430c7874f71c5e800d412ac04572517733812b8f3/eclipse_zenoh-1.7.2.tar.gz", hash = "sha256:cfcbc3fc9eb001be2b7adc303f34ae22570ff2e0f942d51973bfd30f4ac37d6a", size = 160083, upload-time = "2026-01-08T17:42:38.711Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/76/91/484df5bdfd42102f9b5d99654c67f318d4967f3828dfd297d88c1262e143/eclipse_zenoh-1.7.2-cp39-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:d068c7ce2cb4f5ffe965f2d103f7173de732733a5102b6968313cedea1704694", size = 17458869, upload-time = "2026-01-08T17:42:10.264Z" }, + { url = "https://files.pythonhosted.org/packages/06/8a/6bb29455e16f119ec9db996d50f5ce40fdd7e1369fcfb6665144b50a0b7b/eclipse_zenoh-1.7.2-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:7d0429933d9abeb70939a2cb02e32b8c8929651fd1762f1308b5fbd4ae41c3d9", size = 8871746, upload-time = "2026-01-08T17:42:12.587Z" }, +] + +[[package]] +name = "exceptiongroup" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, +] +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 = [ + { url = "https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598", size = 16740, upload-time = "2025-11-21T23:01:53.443Z" }, +] + +[[package]] +name = "fastapi" +version = "0.138.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "annotated-doc", marker = "sys_platform == 'darwin'" }, + { name = "pydantic", marker = "sys_platform == 'darwin'" }, + { name = "starlette", marker = "sys_platform == 'darwin'" }, + { name = "typing-extensions", marker = "sys_platform == 'darwin'" }, + { name = "typing-inspection", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5b/58/ff455d9fe47c60abadb34b9e05a304b1f05f5ab8000ac01565156b6f5e43/fastapi-0.138.0.tar.gz", hash = "sha256:d445a4877636ad191e7053e08c9bf98cb921a6756776848400bb773d1740c061", size = 419240, upload-time = "2026-06-20T01:18:05.259Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6c/ff/8496d9847a5fedae775eb49460722d3efaa80487854273e9647ae876218c/fastapi-0.138.0-py3-none-any.whl", hash = "sha256:b6f54fd1bd72c80b0f899f172c61a600f6f7af9b43d4d772a018f35624048cb0", size = 126779, upload-time = "2026-06-20T01:18:03.483Z" }, +] + +[[package]] +name = "fastrtc" +version = "0.0.34" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aioice", marker = "sys_platform == 'darwin'" }, + { name = "aiortc", marker = "sys_platform == 'darwin'" }, + { name = "gradio", marker = "sys_platform == 'darwin'" }, + { name = "librosa", marker = "sys_platform == 'darwin'" }, + { name = "numba", marker = "sys_platform == 'darwin'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/af/e1/ea3968b064a183d9ac595dcbde0e6c67033afe01852d5854a0001f7c9faa/fastrtc-0.0.34-py3-none-any.whl", hash = "sha256:6da3831da9c2257810b6c5e5fd7cdd4f1636d716f47ab49d8bb3f2d5d9e499ac", size = 2806078, upload-time = "2025-11-24T17:14:12.68Z" }, +] + +[[package]] +name = "ffmpy" +version = "1.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/d2/1c4c582d71bcc65c76fa69fab85de6257d50fdf6fd4a2317c53917e9a581/ffmpy-1.0.0.tar.gz", hash = "sha256:b12932e95435c8820f1cd041024402765f821971e4bae753b327fc02a6e12f8b", size = 5101, upload-time = "2025-11-11T06:24:23.856Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/55/56/dd3669eccebb6d8ac81e624542ebd53fe6f08e1b8f2f8d50aeb7e3b83f99/ffmpy-1.0.0-py3-none-any.whl", hash = "sha256:5640e5f0fd03fb6236d0e119b16ccf6522db1c826fdf35dcb87087b60fd7504f", size = 5614, upload-time = "2025-11-11T06:24:22.818Z" }, +] + +[[package]] +name = "filelock" +version = "3.29.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e6/dc/be6cbe99670cd6e4ad387123647cb08e0c32975e223f82551e914c5568a6/filelock-3.29.4.tar.gz", hash = "sha256:10cdb3656fc44541cdf30652a93fb10ec6b05325620eb316bd26893e4201538a", size = 63028, upload-time = "2026-06-13T16:12:00.744Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/13/37/a065dc3bd6e49423a6532c642ca7378d3f467b1ef44c2800c937af7f9739/filelock-3.29.4-py3-none-any.whl", hash = "sha256:dac1648087d5115554850d113e7dd8c83ab2d38e3435dde2d4f163847e57b767", size = 42757, upload-time = "2026-06-13T16:11:59.582Z" }, +] + +[[package]] +name = "flatbuffers" +version = "25.12.19" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e8/2d/d2a548598be01649e2d46231d151a6c56d10b964d94043a335ae56ea2d92/flatbuffers-25.12.19-py2.py3-none-any.whl", hash = "sha256:7634f50c427838bb021c2d66a3d1168e9d199b0607e6329399f04846d42e20b4", size = 26661, upload-time = "2025-12-19T23:16:13.622Z" }, +] + +[[package]] +name = "fonttools" +version = "4.63.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/84/69/c97f2c18e0db87d2c7b15da1974dace76ae938f1cfa22e2727a648b7ed43/fonttools-4.63.0.tar.gz", hash = "sha256:caeb583deeb5168e694b65cda8b4ee62abedfa66cf88488734466f2366b9c4e0", size = 3597189, upload-time = "2026-05-14T12:04:30.958Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f2/c9/4141c90a90db20f807c7e10bfd689fe53eb8f7f4caff58ee4d4dfe46919f/fonttools-4.63.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e3297a6a4059b4acc3a1e9a8b04741f240a80044eef08ebd32e8b5bcdddce75b", size = 2884632, upload-time = "2026-05-14T12:02:38.56Z" }, + { url = "https://files.pythonhosted.org/packages/b8/46/ad12b5c10eae602d7ef814b02afa08aacbf89da917fed5b071282b7eadc2/fonttools-4.63.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b1cd75a03ad8cb5bc40c90bfde68c0c47de423aa19e5c0f362b43520645eea94", size = 2429441, upload-time = "2026-05-14T12:02:41.162Z" }, + { url = "https://files.pythonhosted.org/packages/75/2b/a7f1545bdf5da69c4bda0cea2a5781f0ad2a6623e0277267672db43c5fe6/fonttools-4.63.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2b8ae05d9eacf6081414d759c0a352769ac28ce31280d6bb8e77b03f9e3c449f", size = 2881793, upload-time = "2026-05-14T12:02:56.645Z" }, + { url = "https://files.pythonhosted.org/packages/49/50/965308c703f085f225db2886813b27e015b8b3438c350b22dd65b52c2a2c/fonttools-4.63.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:79cdc9f567aec74a72918fd060283911406750cbc9fd28c1316023deb6ce31a9", size = 2428130, upload-time = "2026-05-14T12:02:58.891Z" }, + { url = "https://files.pythonhosted.org/packages/08/ef/b3c6b9b5be2f82416d73fe2ed2e96e2793cd80e7510bd6a17ca79cdd88ec/fonttools-4.63.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:37dd23e621e3b0aef1baa70a303b80aaf38449632cfc8fd2a55fb285bbccfc02", size = 2881131, upload-time = "2026-05-14T12:03:13.386Z" }, + { url = "https://files.pythonhosted.org/packages/44/a0/c815bea63117fa63e4e1c01f8a1110d2112fa003f838e6467094ec2432ce/fonttools-4.63.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:a9faff9e0c1f76f9fd55899d2ce785832efebab37eb8ae13995853aef178bef0", size = 2426704, upload-time = "2026-05-14T12:03:15.801Z" }, + { url = "https://files.pythonhosted.org/packages/2c/47/c99d5268f354002ce80f8d029cd9d7d872969da1de8b93d32de4dc56d6f4/fonttools-4.63.0-py3-none-any.whl", hash = "sha256:445af2eab030a16b9171ea8bdda7ebf7d96bda2df88ee182a464252f6e05e20d", size = 1164562, upload-time = "2026-05-14T12:04:29.092Z" }, +] + +[[package]] +name = "frozenlist" +version = "1.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2d/f5/c831fac6cc817d26fd54c7eaccd04ef7e0288806943f7cc5bbf69f3ac1f0/frozenlist-1.8.0.tar.gz", hash = "sha256:3ede829ed8d842f6cd48fc7081d7a41001a56f1f38603f9d49bf3020d59a31ad", size = 45875, upload-time = "2025-10-06T05:38:17.865Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/83/4a/557715d5047da48d54e659203b9335be7bfaafda2c3f627b7c47e0b3aaf3/frozenlist-1.8.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b37f6d31b3dcea7deb5e9696e529a6aa4a898adc33db82da12e4c60a7c4d2011", size = 86230, upload-time = "2025-10-06T05:35:23.699Z" }, + { url = "https://files.pythonhosted.org/packages/a2/fb/c85f9fed3ea8fe8740e5b46a59cc141c23b842eca617da8876cfce5f760e/frozenlist-1.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ef2b7b394f208233e471abc541cc6991f907ffd47dc72584acee3147899d6565", size = 49621, upload-time = "2025-10-06T05:35:25.341Z" }, + { url = "https://files.pythonhosted.org/packages/63/70/26ca3f06aace16f2352796b08704338d74b6d1a24ca38f2771afbb7ed915/frozenlist-1.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a88f062f072d1589b7b46e951698950e7da00442fc1cacbe17e19e025dc327ad", size = 49889, upload-time = "2025-10-06T05:35:26.797Z" }, + { url = "https://files.pythonhosted.org/packages/bc/03/077f869d540370db12165c0aa51640a873fb661d8b315d1d4d67b284d7ac/frozenlist-1.8.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:09474e9831bc2b2199fad6da3c14c7b0fbdd377cce9d3d77131be28906cb7d84", size = 86912, upload-time = "2025-10-06T05:35:45.98Z" }, + { url = "https://files.pythonhosted.org/packages/df/b5/7610b6bd13e4ae77b96ba85abea1c8cb249683217ef09ac9e0ae93f25a91/frozenlist-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:17c883ab0ab67200b5f964d2b9ed6b00971917d5d8a92df149dc2c9779208ee9", size = 50046, upload-time = "2025-10-06T05:35:47.009Z" }, + { url = "https://files.pythonhosted.org/packages/6e/ef/0e8f1fe32f8a53dd26bdd1f9347efe0778b0fddf62789ea683f4cc7d787d/frozenlist-1.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fa47e444b8ba08fffd1c18e8cdb9a75db1b6a27f17507522834ad13ed5922b93", size = 50119, upload-time = "2025-10-06T05:35:48.38Z" }, + { url = "https://files.pythonhosted.org/packages/69/29/948b9aa87e75820a38650af445d2ef2b6b8a6fab1a23b6bb9e4ef0be2d59/frozenlist-1.8.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:78f7b9e5d6f2fdb88cdde9440dc147259b62b9d3b019924def9f6478be254ac1", size = 87782, upload-time = "2025-10-06T05:36:06.649Z" }, + { url = "https://files.pythonhosted.org/packages/64/80/4f6e318ee2a7c0750ed724fa33a4bdf1eacdc5a39a7a24e818a773cd91af/frozenlist-1.8.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:229bf37d2e4acdaf808fd3f06e854a4a7a3661e871b10dc1f8f1896a3b05f18b", size = 50594, upload-time = "2025-10-06T05:36:07.69Z" }, + { url = "https://files.pythonhosted.org/packages/2b/94/5c8a2b50a496b11dd519f4a24cb5496cf125681dd99e94c604ccdea9419a/frozenlist-1.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f833670942247a14eafbb675458b4e61c82e002a148f49e68257b79296e865c4", size = 50448, upload-time = "2025-10-06T05:36:08.78Z" }, + { url = "https://files.pythonhosted.org/packages/9a/9a/e35b4a917281c0b8419d4207f4334c8e8c5dbf4f3f5f9ada73958d937dcc/frozenlist-1.8.0-py3-none-any.whl", hash = "sha256:0c18a16eab41e82c295618a77502e17b195883241c563b00f0aa5106fc4eaa0d", size = 13409, upload-time = "2025-10-06T05:38:16.721Z" }, +] + +[[package]] +name = "fsspec" +version = "2026.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/10/a1/ae4e3e5003468d6391d2c77b6fa1cd73bd5d13511d81c642d7b28ac90ed4/fsspec-2026.6.0.tar.gz", hash = "sha256:f5bac145310fe30e16e1471bd6840b2d990d609e872251d7e674241822abf01a", size = 313646, upload-time = "2026-06-16T01:57:28.105Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e5/22/4222d7ddf3da30f363edaa98e329c2bce6c65497c9cb2810931c8b2c0fbc/fsspec-2026.6.0-py3-none-any.whl", hash = "sha256:02e0b71817df9b2169dc30a16832045764def1191b43dcff5bb85bdee212d2a1", size = 203949, upload-time = "2026-06-16T01:57:26.358Z" }, +] + +[[package]] +name = "gitdb" +version = "4.0.12" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "smmap", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/72/94/63b0fc47eb32792c7ba1fe1b694daec9a63620db1e313033d18140c2320a/gitdb-4.0.12.tar.gz", hash = "sha256:5ef71f855d191a3326fcfbc0d5da835f26b13fbcba60c32c21091c349ffdb571", size = 394684, upload-time = "2025-01-02T07:20:46.413Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl", hash = "sha256:67073e15955400952c6565cc3e707c554a4eea2e428946f7a4c162fab9bd9bcf", size = 62794, upload-time = "2025-01-02T07:20:43.624Z" }, +] + +[[package]] +name = "gitpython" +version = "3.1.50" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "gitdb", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/33/f6/354ae6491228b5eb40e10d89c4d13c651fe1cf7556e35ebdded50cff57ce/gitpython-3.1.50.tar.gz", hash = "sha256:80da2d12504d52e1f998772dc5baf6e553f8d2fcfe1fcc226c9d9a2ee3372dcc", size = 219798, upload-time = "2026-05-06T04:01:26.571Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/20/7a/1c6e3562dfd8950adbb11ffbc65d21e7c89d01a6e4f137fa981056de25c5/gitpython-3.1.50-py3-none-any.whl", hash = "sha256:d352abe2908d07355014abdd21ddf798c2a961469239afec4962e9da884858f9", size = 212507, upload-time = "2026-05-06T04:01:23.799Z" }, +] + +[[package]] +name = "google-crc32c" +version = "1.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/03/41/4b9c02f99e4c5fb477122cd5437403b552873f014616ac1d19ac8221a58d/google_crc32c-1.8.0.tar.gz", hash = "sha256:a428e25fb7691024de47fecfbff7ff957214da51eddded0da0ae0e0f03a2cf79", size = 14192, upload-time = "2025-12-16T00:35:25.142Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/95/ac/6f7bc93886a823ab545948c2dd48143027b2355ad1944c7cf852b338dc91/google_crc32c-1.8.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:0470b8c3d73b5f4e3300165498e4cf25221c7eb37f1159e221d1825b6df8a7ff", size = 31296, upload-time = "2025-12-16T00:19:07.261Z" }, + { url = "https://files.pythonhosted.org/packages/f7/97/a5accde175dee985311d949cfcb1249dcbb290f5ec83c994ea733311948f/google_crc32c-1.8.0-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:119fcd90c57c89f30040b47c211acee231b25a45d225e3225294386f5d258288", size = 30870, upload-time = "2025-12-16T00:29:17.669Z" }, + { url = "https://files.pythonhosted.org/packages/5d/ef/21ccfaab3d5078d41efe8612e0ed0bfc9ce22475de074162a91a25f7980d/google_crc32c-1.8.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:014a7e68d623e9a4222d663931febc3033c5c7c9730785727de2a81f87d5bab8", size = 31298, upload-time = "2025-12-16T00:20:32.241Z" }, + { url = "https://files.pythonhosted.org/packages/c5/b8/f8413d3f4b676136e965e764ceedec904fe38ae8de0cdc52a12d8eb1096e/google_crc32c-1.8.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:86cfc00fe45a0ac7359e5214a1704e51a99e757d0272554874f419f79838c5f7", size = 30872, upload-time = "2025-12-16T00:33:58.785Z" }, + { url = "https://files.pythonhosted.org/packages/e9/5f/7307325b1198b59324c0fa9807cafb551afb65e831699f2ce211ad5c8240/google_crc32c-1.8.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:4b8286b659c1335172e39563ab0a768b8015e88e08329fa5321f774275fc3113", size = 31300, upload-time = "2025-12-16T00:21:56.723Z" }, + { url = "https://files.pythonhosted.org/packages/21/8e/58c0d5d86e2220e6a37befe7e6a94dd2f6006044b1a33edf1ff6d9f7e319/google_crc32c-1.8.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:2a3dc3318507de089c5384cc74d54318401410f82aa65b2d9cdde9d297aca7cb", size = 30867, upload-time = "2025-12-16T00:38:31.302Z" }, +] + +[[package]] +name = "gradio" +version = "5.50.1.dev1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiofiles", marker = "sys_platform == 'darwin'" }, + { name = "anyio", marker = "sys_platform == 'darwin'" }, + { name = "brotli", marker = "sys_platform == 'darwin'" }, + { name = "fastapi", marker = "sys_platform == 'darwin'" }, + { name = "ffmpy", marker = "sys_platform == 'darwin'" }, + { name = "gradio-client", marker = "sys_platform == 'darwin'" }, + { name = "groovy", marker = "sys_platform == 'darwin'" }, + { name = "httpx", marker = "sys_platform == 'darwin'" }, + { name = "huggingface-hub", marker = "sys_platform == 'darwin'" }, + { name = "jinja2", marker = "sys_platform == 'darwin'" }, + { name = "markupsafe", marker = "sys_platform == 'darwin'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, + { name = "orjson", marker = "sys_platform == 'darwin'" }, + { name = "packaging", marker = "sys_platform == 'darwin'" }, + { name = "pandas", marker = "sys_platform == 'darwin'" }, + { name = "pillow", marker = "sys_platform == 'darwin'" }, + { name = "pydantic", marker = "sys_platform == 'darwin'" }, + { name = "pydub", marker = "sys_platform == 'darwin'" }, + { name = "python-multipart", marker = "sys_platform == 'darwin'" }, + { name = "pyyaml", marker = "sys_platform == 'darwin'" }, + { name = "ruff", marker = "sys_platform == 'darwin'" }, + { name = "safehttpx", marker = "sys_platform == 'darwin'" }, + { name = "semantic-version", marker = "sys_platform == 'darwin'" }, + { name = "starlette", marker = "sys_platform == 'darwin'" }, + { name = "tomlkit", marker = "sys_platform == 'darwin'" }, + { name = "typer", marker = "sys_platform == 'darwin'" }, + { name = "typing-extensions", marker = "sys_platform == 'darwin'" }, + { name = "uvicorn", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/73/23/c6d28a7963e81e5b6cf658a745b448ae085111af62310f6ae68107d261c6/gradio-5.50.1.dev1.tar.gz", hash = "sha256:25255c2e86a2419b15e87d17263de30d87f967c0801d3a02a48008eb158334a3", size = 71671888, upload-time = "2025-12-03T15:20:12.836Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/23/9d/d895d1dc45592a9fde0bf9c6118e0087b340940aad0a621f113d25f90d80/gradio-5.50.1.dev1-py3-none-any.whl", hash = "sha256:517bb713f0f35e1d1fa40e1d279d70b6786ad5957e7e5a9f545ab61d6e12a04d", size = 63531040, upload-time = "2025-12-03T15:19:39.387Z" }, +] + +[[package]] +name = "gradio-client" +version = "1.14.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "fsspec", marker = "sys_platform == 'darwin'" }, + { name = "httpx", marker = "sys_platform == 'darwin'" }, + { name = "huggingface-hub", marker = "sys_platform == 'darwin'" }, + { name = "packaging", marker = "sys_platform == 'darwin'" }, + { name = "typing-extensions", marker = "sys_platform == 'darwin'" }, + { name = "websockets", marker = "sys_platform == 'darwin'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/be/8a/f2a47134c5b5a7f3bad27eae749589a80d81efaaad8f59af47c136712bf6/gradio_client-1.14.0-py3-none-any.whl", hash = "sha256:9a2f5151978411e0f8b55a2d38cddd0a94491851149d14db4af96f5a09774825", size = 325555, upload-time = "2025-11-21T18:04:21.834Z" }, +] + +[[package]] +name = "groovy" +version = "0.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/52/36/bbdede67400277bef33d3ec0e6a31750da972c469f75966b4930c753218f/groovy-0.1.2.tar.gz", hash = "sha256:25c1dc09b3f9d7e292458aa762c6beb96ea037071bf5e917fc81fb78d2231083", size = 17325, upload-time = "2025-02-28T20:24:56.068Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/28/27/3d6dcadc8a3214d8522c1e7f6a19554e33659be44546d44a2f7572ac7d2a/groovy-0.1.2-py3-none-any.whl", hash = "sha256:7f7975bab18c729a257a8b1ae9dcd70b7cafb1720481beae47719af57c35fa64", size = 14090, upload-time = "2025-02-28T20:24:55.152Z" }, +] + +[[package]] +name = "gstreamer-bundle" +version = "1.28.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "gstreamer-cli", marker = "sys_platform == 'darwin'" }, + { name = "gstreamer-gtk", marker = "sys_platform == 'darwin'" }, + { name = "gstreamer-libs", marker = "sys_platform == 'darwin'" }, + { name = "gstreamer-plugins", marker = "sys_platform == 'darwin'" }, + { name = "gstreamer-plugins-gpl", marker = "sys_platform == 'darwin'" }, + { name = "gstreamer-plugins-gpl-restricted", marker = "sys_platform == 'darwin'" }, + { name = "gstreamer-plugins-restricted", marker = "sys_platform == 'darwin'" }, + { name = "gstreamer-python", marker = "sys_platform == 'darwin'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/07/0f/0dedd5e30e6a7f553cddf850ee39dadbd729a40e9509976f85437a9aaf26/gstreamer_bundle-1.28.3-py3-none-any.whl", hash = "sha256:1270a2f84b4bdb72ecc76c20802d7fafc58a8af0c8540a8e25dbcff91e190b71", size = 2572, upload-time = "2026-05-16T00:03:25.433Z" }, +] + +[[package]] +name = "gstreamer-cli" +version = "1.28.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "gstreamer-libs", marker = "sys_platform == 'darwin'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/4c/2f/4479a3d4bf3493ed00467ddb2ed6d28a6c7116d5ae5671a3bca8420866ce/gstreamer_cli-1.28.4-cp39-abi3-macosx_10_13_universal2.whl", hash = "sha256:2db1cab8e7ab5b543fa7d8d75cd7fbc0783b3b8853313d2ad7e52051f43d81db", size = 15777538, upload-time = "2026-06-15T08:04:04.075Z" }, +] + +[[package]] +name = "gstreamer-ext-runtime" +version = "1.28.4" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/20/73/51a46056e49402f3662bc8e201e25e1d7caef6b65db69930b385b0fa4c9e/gstreamer_ext_runtime-1.28.4-cp39-abi3-macosx_10_13_universal2.whl", hash = "sha256:ee47805dded543346e738eba4c1ce449850f63dcf6d3ead301f2163e8cec229b", size = 2375, upload-time = "2026-06-15T08:07:36.628Z" }, +] + +[[package]] +name = "gstreamer-gtk" +version = "1.28.4" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b8/7c/67d0c83d03308e7fb5de2565c6108d94a5a4822b03747f865ef135b36d24/gstreamer_gtk-1.28.4-cp39-abi3-macosx_10_15_universal2.whl", hash = "sha256:bfd1f745d1760ac2dd6d64fa542f61cd193df0c251b67d99891cd5aace55504d", size = 20498261, upload-time = "2026-06-15T08:08:13.533Z" }, +] + +[[package]] +name = "gstreamer-libs" +version = "1.28.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "gstreamer-ext-runtime", marker = "sys_platform == 'darwin'" }, + { name = "setuptools", marker = "sys_platform == 'darwin'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/d7/dc/dd954a6f6ccc5d081b03fc11c70f22e4cb6caba4255c114dc6c820514e83/gstreamer_libs-1.28.4-cp39-abi3-macosx_10_13_universal2.whl", hash = "sha256:050679ec56676f5c549aa834b233d81367942214d3d3149761f498eb48ef5642", size = 96281413, upload-time = "2026-06-15T08:10:48.293Z" }, +] + +[[package]] +name = "gstreamer-plugins" +version = "1.28.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "gstreamer-plugins-libs", marker = "sys_platform == 'darwin'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/28/88/f57f3a1cf57e794cda7af6fbe46993afed37af7fc858ae115dfc705243e4/gstreamer_plugins-1.28.4-cp39-abi3-macosx_10_13_universal2.whl", hash = "sha256:96401e0eca66e03e675b2c9ba6f29a29bcbb1e9ced11679abe8993e1e4301761", size = 101492264, upload-time = "2026-06-15T08:12:05.281Z" }, +] + +[[package]] +name = "gstreamer-plugins-gpl" +version = "1.28.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "gstreamer-plugins-libs", marker = "sys_platform == 'darwin'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/75/a5/b8ba6f06f49dd20e9dd52abb1a5f32eb59d0d239228c19e4598319e438f0/gstreamer_plugins_gpl-1.28.4-cp39-abi3-macosx_10_13_universal2.whl", hash = "sha256:16e6f442124007690ef467093b5aa22d27e3d89b101f11c76d57089002206ba5", size = 1049786, upload-time = "2026-06-15T08:12:12.451Z" }, +] + +[[package]] +name = "gstreamer-plugins-gpl-restricted" +version = "1.28.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "gstreamer-plugins-libs", marker = "sys_platform == 'darwin'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/aa/e6/814df679c32822109c26ae26a5673abbc33d639afe3ebc0a93b23ee0ec00/gstreamer_plugins_gpl_restricted-1.28.4-cp39-abi3-macosx_10_13_universal2.whl", hash = "sha256:e81ee50d88059d0b8fc42f8dbadbb136e1cc16c73254a5907981403183d01e91", size = 13453376, upload-time = "2026-06-15T08:12:22.956Z" }, +] + +[[package]] +name = "gstreamer-plugins-libs" +version = "1.28.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "gstreamer-libs", marker = "sys_platform == 'darwin'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/06/03/2f71e1c322eed79b8ddaf831351cf8f6215c433d9babc182a3b0f0a9e637/gstreamer_plugins_libs-1.28.4-cp39-abi3-macosx_10_13_universal2.whl", hash = "sha256:1bd17be5cf37b6ca8378a181e074928d94a4934fb7f874dcf271e858d29684e8", size = 83518063, upload-time = "2026-06-15T08:12:49.084Z" }, +] + +[[package]] +name = "gstreamer-plugins-restricted" +version = "1.28.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "gstreamer-plugins-libs", marker = "sys_platform == 'darwin'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/29/a2/1bed33c875782e1c041b160479136cac8a612bfd794b7989ea18af3ddd56/gstreamer_plugins_restricted-1.28.4-cp39-abi3-macosx_10_13_universal2.whl", hash = "sha256:751d12daf9652d4c45c5a8548dbec9b5c46ab48bdababf37a8bc9831a382ac3d", size = 6103261, upload-time = "2026-06-15T08:12:54.29Z" }, +] + +[[package]] +name = "gstreamer-python" +version = "1.28.4" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d5/cf/f1f7eaed33780d221fe7b43e8852f2b29432c5203ec626e852b1428e5696/gstreamer_python-1.28.4-cp310-cp310-macosx_10_13_universal2.whl", hash = "sha256:cff66ddd230dc0a671713949c2f221441b3eaf3443f9a1e5952868d0c80070f1", size = 1187303, upload-time = "2026-06-15T08:13:11.781Z" }, + { url = "https://files.pythonhosted.org/packages/f4/88/0d7861ef4b18f131e0c2a7371c1ee9d62ea05bf3e50f74c2beb5d96bd3be/gstreamer_python-1.28.4-cp311-cp311-macosx_10_13_universal2.whl", hash = "sha256:a562f5892193cc240326cb93220c56f90852def3c8a64ecbba528790ed28bd4d", size = 1187642, upload-time = "2026-06-15T08:13:15.389Z" }, + { url = "https://files.pythonhosted.org/packages/a7/54/d852200d2c14bd742b2781a107cb1f09eda29c1653e43065b75bc6e2fa49/gstreamer_python-1.28.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:479f39fbe817af7796a3ef5cd5d66119cef0b1f7dd4e06858f05d65b07028e0e", size = 1196719, upload-time = "2026-06-15T08:13:18.494Z" }, +] + +[[package]] +name = "h11" +version = "0.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250, upload-time = "2025-04-24T03:35:25.427Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515, upload-time = "2025-04-24T03:35:24.344Z" }, +] + +[[package]] +name = "hf-xet" +version = "1.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4b/2d/57fd21d84d93efb4bd0b962383790e19dd1bc053501b4264c97903b4e83e/hf_xet-1.5.1.tar.gz", hash = "sha256:51ef4500dab3764b41135ee1381a4b62ce56fc54d4c92b719b59e597d6df5bf6", size = 876636, upload-time = "2026-06-08T23:02:53.897Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7a/d8/5e54cf37434759d1f4f2ba9b66077ff9d4c4e1f37b6bd7975da5c40d94ab/hf_xet-1.5.1-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:6abd35c3221eff63836618ddfb954dcf84798603f71d8e33e3ed7b04acfdbe6e", size = 4077794, upload-time = "2026-06-08T23:02:40.656Z" }, + { url = "https://files.pythonhosted.org/packages/35/94/4b2ecfbad8f8b04701a23aefb62f540b9137d058b7e1dbef16a32676f0e9/hf_xet-1.5.1-cp37-abi3-macosx_11_0_arm64.whl", hash = "sha256:94e761bbd266bf4c03cee73753916062665ce8365aa40ed321f45afcb934b41e", size = 3845354, upload-time = "2026-06-08T23:02:42.702Z" }, +] + +[[package]] +name = "httpcore" +version = "1.0.9" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi", marker = "sys_platform == 'darwin'" }, + { name = "h11", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8", size = 85484, upload-time = "2025-04-24T22:06:22.219Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55", size = 78784, upload-time = "2025-04-24T22:06:20.566Z" }, +] + +[[package]] +name = "httptools" +version = "0.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/43/e5/d471fcb0e14523fe1c3f4ba58ca52480e7bd70ad7109a3846bc75892f7fb/httptools-0.8.0.tar.gz", hash = "sha256:6b2a32f18d97e16e90827d7a819ffa8dbd8cc245fc4e1fa9d1095b54ef4bd999", size = 271342, upload-time = "2026-05-25T22:17:48.841Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/40/b9/be66eb0decd730d89b9c94f930e4b8d87787b05724bb84af98bfd825f72c/httptools-0.8.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:bf3b6f807c8541503cecfbb8a8dffb385640d0d96102f3d112aa8740f9b7c826", size = 208805, upload-time = "2026-05-25T22:16:50.434Z" }, + { url = "https://files.pythonhosted.org/packages/9d/f7/b4d41eaae2869d31356bc4bbf546f44fae83ff298af0a043ca0625b06773/httptools-0.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:da684f2e1aa2ee9bdcb083f3f3a68c5956750b375bc5df864d3a5f0c42a40b77", size = 113527, upload-time = "2026-05-25T22:16:51.672Z" }, + { url = "https://files.pythonhosted.org/packages/f8/d2/c3eedaef57de65c3cc5f8dc244cf12d09c84ad258a479055aad6db23206c/httptools-0.8.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ed377e64805bdba4943c82717333f8f8603a13b09aff9cead2717c6c817fb168", size = 208428, upload-time = "2026-05-25T22:16:59.717Z" }, + { url = "https://files.pythonhosted.org/packages/f1/94/dfe435d90d0ef61ec0f2cc3d480eef78c59727c6c2ce039f433882f6131a/httptools-0.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9518c406d7b310f05adb1a37f80acabac40504a575d7c0da6d3e365c695ac20d", size = 113366, upload-time = "2026-05-25T22:17:00.795Z" }, + { url = "https://files.pythonhosted.org/packages/14/88/1d21a36da8f5cb0fa49eafd4b169eba5608d57e75bbcf61845cbc6243216/httptools-0.8.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:880490234c10f70a9830743097e8958d6e4b9f5a0ffc24515023afeef984054d", size = 208247, upload-time = "2026-05-25T22:17:07.843Z" }, + { url = "https://files.pythonhosted.org/packages/a5/42/cc4feea2945cb3051038f090c9b36bd5b8a9d7f5a894a506a8983e33fd1c/httptools-0.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5931891fb7b441b8a3853cf1b85c82c903defce084dd5f6771ca46e31bf862c5", size = 113064, upload-time = "2026-05-25T22:17:09.136Z" }, +] + +[[package]] +name = "httpx" +version = "0.28.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio", marker = "sys_platform == 'darwin'" }, + { name = "certifi", marker = "sys_platform == 'darwin'" }, + { name = "httpcore", marker = "sys_platform == 'darwin'" }, + { name = "idna", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406, upload-time = "2024-12-06T15:37:23.222Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517, upload-time = "2024-12-06T15:37:21.509Z" }, +] + +[[package]] +name = "huggingface-hub" +version = "1.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "filelock", marker = "sys_platform == 'darwin'" }, + { name = "fsspec", marker = "sys_platform == 'darwin'" }, + { name = "hf-xet", marker = "(platform_machine == 'AMD64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'darwin') or (platform_machine == 'amd64' and sys_platform == 'darwin') or (platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'x86_64' and sys_platform == 'darwin')" }, + { name = "httpx", marker = "sys_platform == 'darwin'" }, + { name = "packaging", marker = "sys_platform == 'darwin'" }, + { name = "pyyaml", marker = "sys_platform == 'darwin'" }, + { name = "shellingham", marker = "sys_platform == 'darwin'" }, + { name = "tqdm", marker = "sys_platform == 'darwin'" }, + { name = "typer-slim", marker = "sys_platform == 'darwin'" }, + { name = "typing-extensions", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c1/c9/d42b5cfa0a50b77cf9165e13edfaf2e3bd4e0def9cb67b6b8a07224a52ab/huggingface_hub-1.3.0.tar.gz", hash = "sha256:289e2a3586fdf01e35882944eaa06fbd57436de24b6e653d1fab248584acd66b", size = 622092, upload-time = "2026-01-09T09:54:44.663Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b1/5b/c5fde1f56b1f072b3028ec5413f3f5bf472c5891ebb34589cddb1689609f/huggingface_hub-1.3.0-py3-none-any.whl", hash = "sha256:763f450169bb05ea3867990e9d3ba9464eb617b874791301dc81be2c6ffb0bf5", size = 533092, upload-time = "2026-01-09T09:54:43.228Z" }, +] + +[[package]] +name = "identify" +version = "2.6.19" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/52/63/51723b5f116cc04b061cb6f5a561790abf249d25931d515cd375e063e0f4/identify-2.6.19.tar.gz", hash = "sha256:6be5020c38fcb07da56c53733538a3081ea5aa70d36a156f83044bfbf9173842", size = 99567, upload-time = "2026-04-17T18:39:50.265Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/94/84/d9273cd09688070a6523c4aee4663a8538721b2b755c4962aafae0011e72/identify-2.6.19-py2.py3-none-any.whl", hash = "sha256:20e6a87f786f768c092a721ad107fc9df0eb89347be9396cadf3f4abbd1fb78a", size = 99397, upload-time = "2026-04-17T18:39:49.221Z" }, +] + +[[package]] +name = "idna" +version = "3.18" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/63/9496c57188a2ee585e0f1db071d75089a11e98aa86eb99d9d7618fc1edce/idna-3.18.tar.gz", hash = "sha256:ffb385a7e039654cef1ab9ef32c6fafe283c0c0467bba1d9029738ce4a14a848", size = 196711, upload-time = "2026-06-02T14:34:07.794Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl", hash = "sha256:7f952cbe720b688055e3f87de14f5c3e5fdaa8bc3928985c4077ca689de849a2", size = 65455, upload-time = "2026-06-02T14:34:06.319Z" }, +] + +[[package]] +name = "ifaddr" +version = "0.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e8/ac/fb4c578f4a3256561548cd825646680edcadb9440f3f68add95ade1eb791/ifaddr-0.2.0.tar.gz", hash = "sha256:cc0cbfcaabf765d44595825fb96a99bb12c79716b73b44330ea38ee2b0c4aed4", size = 10485, upload-time = "2022-06-15T21:40:27.561Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9c/1f/19ebc343cc71a7ffa78f17018535adc5cbdd87afb31d7c34874680148b32/ifaddr-0.2.0-py3-none-any.whl", hash = "sha256:085e0305cfe6f16ab12d72e2024030f5d52674afad6911bb1eee207177b8a748", size = 12314, upload-time = "2022-06-15T21:40:25.756Z" }, +] + +[[package]] +name = "importlib-resources" +version = "6.5.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cf/8c/f834fbf984f691b4f7ff60f50b514cc3de5cc08abfc3295564dd89c5e2e7/importlib_resources-6.5.2.tar.gz", hash = "sha256:185f87adef5bcc288449d98fb4fba07cea78bc036455dd44c5fc4a2fe78fed2c", size = 44693, upload-time = "2025-01-03T18:51:56.698Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a4/ed/1f1afb2e9e7f38a545d628f864d562a5ae64fe6f7a10e28ffb9b185b4e89/importlib_resources-6.5.2-py3-none-any.whl", hash = "sha256:789cfdc3ed28c78b67a06acb8126751ced69a3d5f79c095a98298cd8a760ccec", size = 37461, upload-time = "2025-01-03T18:51:54.306Z" }, +] + +[[package]] +name = "iniconfig" +version = "2.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20503, upload-time = "2025-10-18T21:55:43.219Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" }, +] + +[[package]] +name = "jax" +version = "0.6.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and sys_platform == 'darwin'", +] +dependencies = [ + { name = "jaxlib", version = "0.6.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "ml-dtypes", marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "opt-einsum", marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/cf/1e/267f59c8fb7f143c3f778c76cb7ef1389db3fd7e4540f04b9f42ca90764d/jax-0.6.2.tar.gz", hash = "sha256:a437d29038cbc8300334119692744704ca7941490867b9665406b7f90665cd96", size = 2334091, upload-time = "2025-06-17T23:10:27.186Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/31/a8/97ef0cbb7a17143ace2643d600a7b80d6705b2266fc31078229e406bdef2/jax-0.6.2-py3-none-any.whl", hash = "sha256:bb24a82dc60ccf704dcaf6dbd07d04957f68a6c686db19630dd75260d1fb788c", size = 2722396, upload-time = "2025-06-17T23:10:25.293Z" }, +] + +[[package]] +name = "jax" +version = "0.10.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.12' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and sys_platform == 'darwin'", +] +dependencies = [ + { name = "jaxlib", version = "0.10.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, + { name = "ml-dtypes", marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, + { name = "opt-einsum", marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, + { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*' and sys_platform == 'darwin'" }, + { name = "scipy", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12' and sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d2/73/eb91d98fcadfa2cbcfdd4e417ab116e47eb20882acc5ee678e47c35d6b57/jax-0.10.2.tar.gz", hash = "sha256:bf77428a8c2e6904c4f46d5ab12aa5cfc6cad2179f07f7e4c0fc75ac86ef0639", size = 2775110, upload-time = "2026-06-17T23:44:57.818Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/89/82/5ab5211079a151b6f661529369c0c8e98ec64cabf5c0cf22a0a05af124d8/jax-0.10.2-py3-none-any.whl", hash = "sha256:724d73c4678d8b06f6a6ab4db1b8a2fea8cd4f1e2c2564f99601634ec7b8d1c6", size = 3219515, upload-time = "2026-06-17T23:42:41.259Z" }, +] + +[[package]] +name = "jaxlib" +version = "0.6.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and sys_platform == 'darwin'", +] +dependencies = [ + { name = "ml-dtypes", marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/15/c5/41598634c99cbebba46e6777286fb76abc449d33d50aeae5d36128ca8803/jaxlib-0.6.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:da4601b2b5dc8c23d6afb293eacfb9aec4e1d1871cb2f29c5a151d103e73b0f8", size = 54298019, upload-time = "2025-06-17T23:10:36.916Z" }, + { url = "https://files.pythonhosted.org/packages/a4/ee/6899b0aed36a4acc51319465ddd83c7c300a062a9e236cceee00984ffe0b/jaxlib-0.6.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a208ff61c58128d306bb4e5ad0858bd2b0960f2c1c10ad42c548f74a60c0020e", size = 54300346, upload-time = "2025-06-17T23:10:54.591Z" }, + { url = "https://files.pythonhosted.org/packages/ac/db/05e702d2534e87abf606b1067b46a273b120e6adc7d459696e3ce7399317/jaxlib-0.6.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:34d8a684a8be949dd87dd4acc97101b4106a0dc9ad151ec891da072319a57b99", size = 54301644, upload-time = "2025-06-17T23:11:10.977Z" }, +] + +[[package]] +name = "jaxlib" +version = "0.10.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.12' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and sys_platform == 'darwin'", +] +dependencies = [ + { name = "ml-dtypes", marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, + { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*' and sys_platform == 'darwin'" }, + { name = "scipy", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12' and sys_platform == 'darwin'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/b2/2c/7038fc73154307389631b5b2dbe5ac529e1918eecc19a27e6644ad114bbf/jaxlib-0.10.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5a98873fc867623b81f2bee15d554b8edd6588a183d01fa50d21b1e3db96ff2b", size = 61429039, upload-time = "2026-06-17T23:43:44.858Z" }, + { url = "https://files.pythonhosted.org/packages/ca/93/ee9cc8743191544f65d26ab7eeb82d65968fe60905662d1a5554d056654b/jaxlib-0.10.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:47bb7c011515ea862be7e8313f40f9c56cbec09dc98a0fcb5016785fcd454c01", size = 61434612, upload-time = "2026-06-17T23:43:57.808Z" }, +] + +[[package]] +name = "jinja2" +version = "3.1.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115, upload-time = "2025-03-05T20:05:02.478Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload-time = "2025-03-05T20:05:00.369Z" }, +] + +[[package]] +name = "jiter" +version = "0.15.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/66/b5/55f06bb281d92fb3cc86d14e1def2bd908bb77693183e7cb1f5a3c388b0c/jiter-0.15.0.tar.gz", hash = "sha256:4251acc80e2b7c9b7b8823456ea0fceeb0734dac2df7636d3c711b38476b5a76", size = 166640, upload-time = "2026-05-19T10:09:48.361Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1d/da/76a2c7e510ba15fe323d9509c223ab272da79ea59f54488f4a78da6426db/jiter-0.15.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:edebcf7d1f601199084bb6e844d7dc67e03e04f6ac786b0332d616635c4ff7a4", size = 310849, upload-time = "2026-05-19T10:06:51.944Z" }, + { url = "https://files.pythonhosted.org/packages/5d/8e/827be942883a4dc0862c48626ff41af3320b1902d136a0bf4b9041f2c567/jiter-0.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9f924585cdacf631cd382b657966847bb537bf9ed0a6f9b991da5f05a631480f", size = 314991, upload-time = "2026-05-19T10:06:53.522Z" }, + { url = "https://files.pythonhosted.org/packages/e4/13/daa722f5765c393576f466378f9dfd29d77c9bed939e0688f96afa3601ea/jiter-0.15.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:0f862193b8696249d22ec433e85fd2ab0ad9596bc3e45e6c0bc55e8aeba97be2", size = 310899, upload-time = "2026-05-19T10:07:12.89Z" }, + { url = "https://files.pythonhosted.org/packages/7f/82/2d2551829b082f4b6d82b9f939b031fb808a10aab1ec0664f82e150bb9a2/jiter-0.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1303d4d68a9b051ea90502402063ecf3807da00ad2affa19ca1ae3b90b3c5f67", size = 314963, upload-time = "2026-05-19T10:07:14.539Z" }, + { url = "https://files.pythonhosted.org/packages/44/53/4f6bddbcde3c71e56d0aa1337ec95950f3d27dd4153e25aadf0feac71751/jiter-0.15.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:0e90a1c315a0226ec822d973817967f9223b7701546c8c2a7913e7ab0926294d", size = 308793, upload-time = "2026-05-19T10:07:35.25Z" }, + { url = "https://files.pythonhosted.org/packages/01/84/c01099b59a285a1ebba64ae93f62bfa036675340fd1b0045ae65890a0442/jiter-0.15.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8c9004af7c8d67cce7f1aae1026fb55607f4aa600710d08ede3a3ce4aeefe7e0", size = 309570, upload-time = "2026-05-19T10:07:36.919Z" }, + { url = "https://files.pythonhosted.org/packages/65/43/1fc62172aa98b50a7de9a25554060db510f85c89cfbed0dfe13e1907a139/jiter-0.15.0-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:411fa4dfa5a7ae3d11491027ffb9beadec3996010a986862db70d91abba1c750", size = 305585, upload-time = "2026-05-19T10:09:35.995Z" }, + { url = "https://files.pythonhosted.org/packages/e8/c4/dd58fcd9e2df83666e5c1c1347bef58ce919cd8efc3ffa38aeea62ce493b/jiter-0.15.0-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:2b0074e2f56eb2dacca1689760fd2852a068f85a0547a157b82cb4cafeb6768b", size = 306936, upload-time = "2026-05-19T10:09:37.435Z" }, + { url = "https://files.pythonhosted.org/packages/73/38/505941b2b092fd5bbbd60a52a880db1173f1690ae6751bed3af1c9ddcb4e/jiter-0.15.0-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:631f13a3d04e97d4e083993b10f4b99530e3a10d953e2eb5e196b7dc7f812ce0", size = 303769, upload-time = "2026-05-19T10:09:42.203Z" }, + { url = "https://files.pythonhosted.org/packages/e7/95/a06692b29e77473f286e1ec1f426d3ca44d7b5843be8ad21d7a5f3fcdcc0/jiter-0.15.0-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:b6c0ffae686c39bf3737be60793783267628783ea42545632c10b291105aee45", size = 305128, upload-time = "2026-05-19T10:09:43.657Z" }, +] + +[[package]] +name = "joblib" +version = "1.5.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/41/f2/d34e8b3a08a9cc79a50b2208a93dce981fe615b64d5a4d4abee421d898df/joblib-1.5.3.tar.gz", hash = "sha256:8561a3269e6801106863fd0d6d84bb737be9e7631e33aaed3fb9ce5953688da3", size = 331603, upload-time = "2025-12-15T08:41:46.427Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7b/91/984aca2ec129e2757d1e4e3c81c3fcda9d0f85b74670a094cc443d9ee949/joblib-1.5.3-py3-none-any.whl", hash = "sha256:5fc3c5039fc5ca8c0276333a188bbd59d6b7ab37fe6632daa76bc7f9ec18e713", size = 309071, upload-time = "2025-12-15T08:41:44.973Z" }, +] + +[[package]] +name = "kiwisolver" +version = "1.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d0/67/9c61eccb13f0bdca9307614e782fec49ffdde0f7a2314935d489fa93cd9c/kiwisolver-1.5.0.tar.gz", hash = "sha256:d4193f3d9dc3f6f79aaed0e5637f45d98850ebf01f7ca20e69457f3e8946b66a", size = 103482, upload-time = "2026-03-09T13:15:53.382Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ac/f8/06549565caa026e540b7e7bab5c5a90eb7ca986015f4c48dace243cd24d9/kiwisolver-1.5.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:32cc0a5365239a6ea0c6ed461e8838d053b57e397443c0ca894dcc8e388d4374", size = 122802, upload-time = "2026-03-09T13:12:37.515Z" }, + { url = "https://files.pythonhosted.org/packages/84/eb/8476a0818850c563ff343ea7c9c05dcdcbd689a38e01aa31657df01f91fa/kiwisolver-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:cc0b66c1eec9021353a4b4483afb12dfd50e3669ffbb9152d6842eb34c7e29fd", size = 66216, upload-time = "2026-03-09T13:12:38.812Z" }, + { url = "https://files.pythonhosted.org/packages/f3/c4/f9c8a6b4c21aed4198566e45923512986d6cef530e7263b3a5f823546561/kiwisolver-1.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:86e0287879f75621ae85197b0877ed2f8b7aa57b511c7331dce2eb6f4de7d476", size = 63917, upload-time = "2026-03-09T13:12:40.053Z" }, + { url = "https://files.pythonhosted.org/packages/12/dd/a495a9c104be1c476f0386e714252caf2b7eca883915422a64c50b88c6f5/kiwisolver-1.5.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9eed0f7edbb274413b6ee781cca50541c8c0facd3d6fd289779e494340a2b85c", size = 122798, upload-time = "2026-03-09T13:12:58.963Z" }, + { url = "https://files.pythonhosted.org/packages/11/60/37b4047a2af0cf5ef6d8b4b26e91829ae6fc6a2d1f74524bcb0e7cd28a32/kiwisolver-1.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c4923e404d6bcd91b6779c009542e5647fef32e4a5d75e115e3bbac6f2335eb", size = 66216, upload-time = "2026-03-09T13:13:00.155Z" }, + { url = "https://files.pythonhosted.org/packages/0a/aa/510dc933d87767584abfe03efa445889996c70c2990f6f87c3ebaa0a18c5/kiwisolver-1.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0df54df7e686afa55e6f21fb86195224a6d9beb71d637e8d7920c95cf0f89aac", size = 63911, upload-time = "2026-03-09T13:13:01.671Z" }, + { url = "https://files.pythonhosted.org/packages/4d/b2/818b74ebea34dabe6d0c51cb1c572e046730e64844da6ed646d5298c40ce/kiwisolver-1.5.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:4e9750bc21b886308024f8a54ccb9a2cc38ac9fa813bf4348434e3d54f337ff9", size = 123158, upload-time = "2026-03-09T13:13:23.127Z" }, + { url = "https://files.pythonhosted.org/packages/bf/d9/405320f8077e8e1c5c4bd6adc45e1e6edf6d727b6da7f2e2533cf58bff71/kiwisolver-1.5.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:72ec46b7eba5b395e0a7b63025490d3214c11013f4aacb4f5e8d6c3041829588", size = 66388, upload-time = "2026-03-09T13:13:24.765Z" }, + { url = "https://files.pythonhosted.org/packages/99/9f/795fedf35634f746151ca8839d05681ceb6287fbed6cc1c9bf235f7887c2/kiwisolver-1.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ed3a984b31da7481b103f68776f7128a89ef26ed40f4dc41a2223cda7fb24819", size = 64068, upload-time = "2026-03-09T13:13:25.878Z" }, + { url = "https://files.pythonhosted.org/packages/1c/fa/2910df836372d8761bb6eff7d8bdcb1613b5c2e03f260efe7abe34d388a7/kiwisolver-1.5.0-graalpy312-graalpy250_312_native-macosx_10_13_x86_64.whl", hash = "sha256:5ae8e62c147495b01a0f4765c878e9bfdf843412446a247e28df59936e99e797", size = 130262, upload-time = "2026-03-09T13:15:35.629Z" }, + { url = "https://files.pythonhosted.org/packages/0f/41/c5f71f9f00aabcc71fee8b7475e3f64747282580c2fe748961ba29b18385/kiwisolver-1.5.0-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:f6764a4ccab3078db14a632420930f6186058750df066b8ea2a7106df91d3203", size = 138036, upload-time = "2026-03-09T13:15:36.894Z" }, + { url = "https://files.pythonhosted.org/packages/17/6f/6fd4f690a40c2582fa34b97d2678f718acf3706b91d270c65ecb455d0a06/kiwisolver-1.5.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:295d9ffe712caa9f8a3081de8d32fc60191b4b51c76f02f951fd8407253528f4", size = 59606, upload-time = "2026-03-09T13:15:40.81Z" }, + { url = "https://files.pythonhosted.org/packages/82/a0/2355d5e3b338f13ce63f361abb181e3b6ea5fffdb73f739b3e80efa76159/kiwisolver-1.5.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:51e8c4084897de9f05898c2c2a39af6318044ae969d46ff7a34ed3f96274adca", size = 57537, upload-time = "2026-03-09T13:15:42.071Z" }, + { url = "https://files.pythonhosted.org/packages/e9/eb/5fcbbbf9a0e2c3a35effb88831a483345326bbc3a030a3b5b69aee647f84/kiwisolver-1.5.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:ec4c85dc4b687c7f7f15f553ff26a98bfe8c58f5f7f0ac8905f0ba4c7be60232", size = 59532, upload-time = "2026-03-09T13:15:47.047Z" }, + { url = "https://files.pythonhosted.org/packages/c3/9b/e17104555bb4db148fd52327feea1e96be4b88e8e008b029002c281a21ab/kiwisolver-1.5.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:12e91c215a96e39f57989c8912ae761286ac5a9584d04030ceb3368a357f017a", size = 57420, upload-time = "2026-03-09T13:15:48.199Z" }, +] + +[[package]] +name = "lazy-loader" +version = "0.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/49/ac/21a1f8aa3777f5658576777ea76bfb124b702c520bbe90edf4ae9915eafa/lazy_loader-0.5.tar.gz", hash = "sha256:717f9179a0dbed357012ddad50a5ad3d5e4d9a0b8712680d4e687f5e6e6ed9b3", size = 15294, upload-time = "2026-03-06T15:45:09.054Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8a/a1/8d812e53a5da1687abb10445275d41a8b13adb781bbf7196ddbcf8d88505/lazy_loader-0.5-py3-none-any.whl", hash = "sha256:ab0ea149e9c554d4ffeeb21105ac60bed7f3b4fd69b1d2360a4add51b170b005", size = 8044, upload-time = "2026-03-06T15:45:07.668Z" }, +] + +[[package]] +name = "librosa" +version = "0.11.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "audioread", marker = "sys_platform == 'darwin'" }, + { name = "decorator", marker = "sys_platform == 'darwin'" }, + { name = "joblib", marker = "sys_platform == 'darwin'" }, + { name = "lazy-loader", marker = "sys_platform == 'darwin'" }, + { name = "msgpack", marker = "sys_platform == 'darwin'" }, + { name = "numba", marker = "sys_platform == 'darwin'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, + { name = "pooch", marker = "sys_platform == 'darwin'" }, + { name = "scikit-learn", version = "1.7.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "scikit-learn", version = "1.9.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, + { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*' and sys_platform == 'darwin'" }, + { name = "scipy", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12' and sys_platform == 'darwin'" }, + { name = "soundfile", marker = "sys_platform == 'darwin'" }, + { name = "soxr", marker = "sys_platform == 'darwin'" }, + { name = "typing-extensions", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/64/36/360b5aafa0238e29758729e9486c6ed92a6f37fa403b7875e06c115cdf4a/librosa-0.11.0.tar.gz", hash = "sha256:f5ed951ca189b375bbe2e33b2abd7e040ceeee302b9bbaeeffdfddb8d0ace908", size = 327001, upload-time = "2025-03-11T15:09:54.884Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b5/ba/c63c5786dfee4c3417094c4b00966e61e4a63efecee22cb7b4c0387dda83/librosa-0.11.0-py3-none-any.whl", hash = "sha256:0b6415c4fd68bff4c29288abe67c6d80b587e0e1e2cfb0aad23e4559504a7fa1", size = 260749, upload-time = "2025-03-11T15:09:52.982Z" }, +] + +[[package]] +name = "libusb-package" +version = "1.0.26.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "importlib-resources", marker = "sys_platform == 'darwin'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/01/34/fd042950325366cb8f01e1873cd87f8aa99e773586377a8e670d6127dc8e/libusb_package-1.0.26.4-py3-none-macosx_10_9_x86_64.whl", hash = "sha256:ce3711a82a2b4b9936a6268c9cbad794c34ae3b1b2c5cc9aeced8340db678668", size = 63859, upload-time = "2026-06-19T11:04:23.822Z" }, + { url = "https://files.pythonhosted.org/packages/4e/49/bcc1e79a0d86f3da7cc3494093b4973cb1c74852d7356ce533bb1bd58342/libusb_package-1.0.26.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:4ef4accbadd40f8a054b0298604555d8175ebd376a87978302a83d0311a0b116", size = 58009, upload-time = "2026-06-19T11:04:25.013Z" }, +] + +[[package]] +name = "llvmlite" +version = "0.47.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/01/88/a8952b6d5c21e74cbf158515b779666f692846502623e9e3c39d8e8ba25f/llvmlite-0.47.0.tar.gz", hash = "sha256:62031ce968ec74e95092184d4b0e857e444f8fdff0b8f9213707699570c33ccc", size = 193614, upload-time = "2026-03-31T18:29:53.497Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/f5/a1bde3aa8c43524b0acaf3f72fb3d80a32dd29dbb42d7dc434f84584cdcc/llvmlite-0.47.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:41270b0b1310717f717cf6f2a9c68d3c43bd7905c33f003825aebc361d0d1b17", size = 37232772, upload-time = "2026-03-31T18:28:12.198Z" }, + { url = "https://files.pythonhosted.org/packages/34/0b/b9d1911cfefa61399821dfb37f486d83e0f42630a8d12f7194270c417002/llvmlite-0.47.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:74090f0dcfd6f24ebbef3f21f11e38111c4d7e6919b54c4416e1e357c3446b07", size = 37232770, upload-time = "2026-03-31T18:28:26.765Z" }, + { url = "https://files.pythonhosted.org/packages/fa/48/4b7fe0e34c169fa2f12532916133e0b219d2823b540733651b34fdac509a/llvmlite-0.47.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:306a265f408c259067257a732c8e159284334018b4083a9e35f67d19792b164f", size = 37232769, upload-time = "2026-03-31T18:28:43.735Z" }, +] + +[[package]] +name = "log-throttling" +version = "0.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/76/be/09fda383d82a7b91f12ff5002bc909e101769c802ff3b1d2cb9f533d1a2f/log-throttling-0.0.3.tar.gz", hash = "sha256:df714e1448cd9cb4c916cf668ab88323032e61ece733548708d996ecf63190b9", size = 3533, upload-time = "2022-03-08T16:29:23.674Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b1/6e/995ebad4ab08250b4afe1d91fe3086b863ed9bb74539d90485250a50f08a/log_throttling-0.0.3-py3-none-any.whl", hash = "sha256:a82508f489dd44a60b737a0339c784dd8ee2b9db16bdcf587a8ae1012a7f6ffc", size = 4081, upload-time = "2022-03-08T16:29:21.443Z" }, +] + +[[package]] +name = "markdown-it-py" +version = "4.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mdurl", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/ff/7841249c247aa650a76b9ee4bbaeae59370dc8bfd2f6c01f3630c35eb134/markdown_it_py-4.2.0.tar.gz", hash = "sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49", size = 82454, upload-time = "2026-05-07T12:08:28.36Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl", hash = "sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a", size = 91687, upload-time = "2026-05-07T12:08:27.182Z" }, +] + +[[package]] +name = "markupsafe" +version = "3.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7e/99/7690b6d4034fffd95959cbe0c02de8deb3098cc577c67bb6a24fe5d7caa7/markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698", size = 80313, upload-time = "2025-09-27T18:37:40.426Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e8/4b/3541d44f3937ba468b75da9eebcae497dcf67adb65caa16760b0a6807ebb/markupsafe-3.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559", size = 11631, upload-time = "2025-09-27T18:36:05.558Z" }, + { url = "https://files.pythonhosted.org/packages/98/1b/fbd8eed11021cabd9226c37342fa6ca4e8a98d8188a8d9b66740494960e4/markupsafe-3.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419", size = 12057, upload-time = "2025-09-27T18:36:07.165Z" }, + { url = "https://files.pythonhosted.org/packages/08/db/fefacb2136439fc8dd20e797950e749aa1f4997ed584c62cfb8ef7c2be0e/markupsafe-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1cc7ea17a6824959616c525620e387f6dd30fec8cb44f649e31712db02123dad", size = 11631, upload-time = "2025-09-27T18:36:18.185Z" }, + { url = "https://files.pythonhosted.org/packages/e1/2e/5898933336b61975ce9dc04decbc0a7f2fee78c30353c5efba7f2d6ff27a/markupsafe-3.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4bd4cd07944443f5a265608cc6aab442e4f74dff8088b0dfc8238647b8f6ae9a", size = 12058, upload-time = "2025-09-27T18:36:19.444Z" }, + { url = "https://files.pythonhosted.org/packages/5a/72/147da192e38635ada20e0a2e1a51cf8823d2119ce8883f7053879c2199b5/markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e", size = 11615, upload-time = "2025-09-27T18:36:30.854Z" }, + { url = "https://files.pythonhosted.org/packages/9a/81/7e4e08678a1f98521201c3079f77db69fb552acd56067661f8c2f534a718/markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce", size = 12020, upload-time = "2025-09-27T18:36:31.971Z" }, +] + +[[package]] +name = "matplotlib" +version = "3.10.9" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and sys_platform == 'darwin'", +] +dependencies = [ + { name = "contourpy", version = "1.3.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "cycler", marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "fonttools", marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "kiwisolver", marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "packaging", marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "pillow", marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "pyparsing", marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "python-dateutil", marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/63/1b/4be5be87d43d327a0cf4de1a56e86f7f84c89312452406cf122efe2839e6/matplotlib-3.10.9.tar.gz", hash = "sha256:fd66508e8c6877d98e586654b608a0456db8d7e8a546eb1e2600efd957302358", size = 34811233, upload-time = "2026-04-24T00:14:13.539Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/18/6f/340b04986e67aac6f66c5145ce68bf72c64bed30f92c8913499a6e6b8f99/matplotlib-3.10.9-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:77210dce9cb8153dffc967efaae990543392563d5a376d4dd8539bebcb0ed217", size = 8296625, upload-time = "2026-04-24T00:11:43.376Z" }, + { url = "https://files.pythonhosted.org/packages/bb/2f/127081eb83162053ebb9678ceac64220b93a663e0167432566e9c7c82aab/matplotlib-3.10.9-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1e7698ac9868428e84d2c967424803b2472ff7167d9d6590d4204ed775343c3b", size = 8188790, upload-time = "2026-04-24T00:11:46.556Z" }, + { url = "https://files.pythonhosted.org/packages/4c/8c/290f021104741fea63769c31494f5324c0cd249bf536a65a4350767b1f22/matplotlib-3.10.9-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:68cfdcede415f7c8f5577b03303dd94526cdb6d11036cecdc205e08733b2d2bb", size = 8306860, upload-time = "2026-04-24T00:12:01.207Z" }, + { url = "https://files.pythonhosted.org/packages/51/18/325cd32ece1120d1da51cc4e4294c6580190699490183fc2fe8cb6d61ec5/matplotlib-3.10.9-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dfca0129678bd56379db26c52b5d77ed7de314c047492fbdc763aa7501710cfb", size = 8199254, upload-time = "2026-04-24T00:12:04.239Z" }, + { url = "https://files.pythonhosted.org/packages/35/c6/5581e26c72233ebb2a2a6fed2d24fb7c66b4700120b813f51b0555acf0b6/matplotlib-3.10.9-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f0c3c28d9fbcc1fe7a03be236d73430cf6409c41fb2383a7ac52fe932b072cb1", size = 8319908, upload-time = "2026-04-24T00:12:21.323Z" }, + { url = "https://files.pythonhosted.org/packages/b7/18/4880dd762e40cd360c1bf06e890c5a97b997e91cb324602b1a19950ad5ce/matplotlib-3.10.9-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:41cb28c2bd769aa3e98322c6ab09854cbcc52ab69d2759d681bba3e327b2b320", size = 8216016, upload-time = "2026-04-24T00:12:23.4Z" }, + { url = "https://files.pythonhosted.org/packages/2c/2b/0e92ad0ac446633f928a1563db4aa8add407e1924faf0ded5b95b35afb27/matplotlib-3.10.9-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:1872fb212a05b729e649754a72d5da61d03e0554d76e80303b6f83d1d2c0552b", size = 8293058, upload-time = "2026-04-24T00:13:56.339Z" }, + { url = "https://files.pythonhosted.org/packages/4b/23/74682fd369f5299ceda438fea2a0662e6383b85c9383fb9cdfcf04713e07/matplotlib-3.10.9-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:985f2238880e2e69093f588f5fe2e46771747febf0649f3cf7f7b7480875317f", size = 8186627, upload-time = "2026-04-24T00:13:58.623Z" }, + { url = "https://files.pythonhosted.org/packages/63/e2/9f66ca6a651a52abfe0d4964ce01439ed34f3f1e119de10ff3a07f403043/matplotlib-3.10.9-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:42fb814efabe95c06c1994d8ab5a8385f43a249e23badd3ba931d4308e5bca20", size = 8304420, upload-time = "2026-04-24T00:14:04.57Z" }, + { url = "https://files.pythonhosted.org/packages/e8/e8/467c03568218792906aa87b5e7bb379b605e056ed0c74fe00c051786d925/matplotlib-3.10.9-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:f76e640a5268850bfda54b5131b1b1941cc685e42c5fa98ed9f2d64038308cba", size = 8197981, upload-time = "2026-04-24T00:14:07.233Z" }, +] + +[[package]] +name = "matplotlib" +version = "3.11.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.12' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and sys_platform == 'darwin'", +] +dependencies = [ + { name = "contourpy", version = "1.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, + { name = "cycler", marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, + { name = "fonttools", marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, + { name = "kiwisolver", marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, + { name = "packaging", marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, + { name = "pillow", marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, + { name = "pyparsing", marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, + { name = "python-dateutil", marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1f/24/080c99d223d158d3a8902769269ab6da5b50f7a0e6e072513907e02b7a6c/matplotlib-3.11.0.tar.gz", hash = "sha256:68c0c7be01b30dcca3638934f7f591df73401235cbdbf0d1ab1c71e7db7f8b57", size = 33251176, upload-time = "2026-06-12T02:29:15.508Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ce/a2/78f662f1b18968531f67d3fcde1b7ea8496920bacd4f16ddb5b79d112e46/matplotlib-3.11.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:f857524b442f0f36e641868ce2171aafa88cb0bc0644f4e1d8a5df9b32649fef", size = 9436261, upload-time = "2026-06-12T02:27:34.161Z" }, + { url = "https://files.pythonhosted.org/packages/5e/92/044f1de43901310202f4c79acf4f141be53b2ca8d8380e2fcefb3d523a75/matplotlib-3.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:57baa92fdc82948ed716eae6d2579d4d6f40965cd8d2f416755b4a72580a3233", size = 9264669, upload-time = "2026-06-12T02:27:37.413Z" }, + { url = "https://files.pythonhosted.org/packages/da/17/f5276b496c61477a6c4fc5e7401f4bfe1c2e5ef7c6cd67896f2ade3809cb/matplotlib-3.11.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:06b5872e9cf11adc8f589ded3ce11bc3e1061ad498259664fabc1f6615beb918", size = 9449976, upload-time = "2026-06-12T02:27:50.989Z" }, + { url = "https://files.pythonhosted.org/packages/82/34/bdd77418adb2178a1d59f044bd67bfebb115896e91b840b8a197eb3f4f4e/matplotlib-3.11.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0515d495124be3124340e59f164d901ed4484e2246a5b74cfa483cac3b80bd97", size = 9279307, upload-time = "2026-06-12T02:27:53.247Z" }, + { url = "https://files.pythonhosted.org/packages/0f/c2/f5da6cd37ed6871f5c9b3c0507ddb69f14d6c36fac4541e4e0c60cb8cdfc/matplotlib-3.11.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:81ae77077a1e16d37a5b61096ccb07c8d90a99b518fa8256b8f21578932f2f62", size = 9434094, upload-time = "2026-06-12T02:29:09.135Z" }, + { url = "https://files.pythonhosted.org/packages/f8/07/56f66906e0f87a0c6d0d0acbd34dbc9432b1931d8f26ef618bd6f92932a9/matplotlib-3.11.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:ddef37840695f5eef65f9f070fe2d2f510f584c2156203f9f622a5b0584efffd", size = 9262183, upload-time = "2026-06-12T02:29:11.283Z" }, +] + +[[package]] +name = "mdurl" +version = "0.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload-time = "2022-08-14T12:40:10.846Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" }, +] + +[[package]] +name = "mediapipe" +version = "0.10.14" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "absl-py", marker = "sys_platform == 'darwin'" }, + { name = "attrs", marker = "sys_platform == 'darwin'" }, + { name = "flatbuffers", marker = "sys_platform == 'darwin'" }, + { name = "jax", version = "0.6.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "jax", version = "0.10.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, + { name = "jaxlib", version = "0.6.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "jaxlib", version = "0.10.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, + { name = "matplotlib", version = "3.10.9", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "matplotlib", version = "3.11.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, + { name = "opencv-contrib-python", marker = "sys_platform == 'darwin'" }, + { name = "protobuf", marker = "sys_platform == 'darwin'" }, + { name = "sounddevice", marker = "sys_platform == 'darwin'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/ab/25/f42edb738eb1af21b5638b353d29ba8bb9d4c9a3907c9db211a10c779690/mediapipe-0.10.14-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:1166935be26df23f6c6f6369dd7a79f0337ce882364acb986a377c4951bf7c34", size = 50189211, upload-time = "2024-05-08T17:24:04.992Z" }, + { url = "https://files.pythonhosted.org/packages/d3/b0/f0a449b548dc8e7056b8968fa0305614f69eba42e00a4023f2e45bf8d587/mediapipe-0.10.14-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:113e264c38616ff23ff261b70cbcad2a2ae34b8335d055787b10bc09b2175adf", size = 50099364, upload-time = "2024-05-08T17:24:13.084Z" }, + { url = "https://files.pythonhosted.org/packages/31/fb/09fde872bd3c92720860adc25ffee605f18d3a5165320ae8cd2d71da7003/mediapipe-0.10.14-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:4737fce6107bd21e420a6b2aad2c721fbc4cc318f1258b68f0665f10225bde1d", size = 50187308, upload-time = "2024-05-08T17:24:53.339Z" }, + { url = "https://files.pythonhosted.org/packages/b0/17/8e0ca5c867fe9b9943945b3a0033158fd89ae031c0a2e7dd3dd9101b2f3f/mediapipe-0.10.14-cp311-cp311-macosx_11_0_x86_64.whl", hash = "sha256:e5f8fdf512da074c225219f4e09723f612cdd3449c4793693fd360dc817c9261", size = 50098859, upload-time = "2024-05-08T17:30:21.737Z" }, + { url = "https://files.pythonhosted.org/packages/2d/df/be410905b9757de4b00891dd34236d96e6db150b624f28cc27cd90c74564/mediapipe-0.10.14-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:aa2298c1886716cde6bd7ce96aba1505d67d52edaba856f6c2e1ab905de52b0d", size = 50203567, upload-time = "2024-05-08T17:30:50.451Z" }, + { url = "https://files.pythonhosted.org/packages/32/40/b6a2a50593e8753bf12e2dbfd130dee588eb2fc50ce74939cf6485af2756/mediapipe-0.10.14-cp312-cp312-macosx_11_0_x86_64.whl", hash = "sha256:5c97e32cbb9e9d72b78a33f011257b3cdb55b60fef70a8a864c5d2a4b6652425", size = 50117879, upload-time = "2024-05-08T17:30:58.154Z" }, +] + +[[package]] +name = "ml-dtypes" +version = "0.5.4" +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' and sys_platform == 'darwin'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0e/4a/c27b42ed9b1c7d13d9ba8b6905dece787d6259152f2309338aed29b2447b/ml_dtypes-0.5.4.tar.gz", hash = "sha256:8ab06a50fb9bf9666dd0fe5dfb4676fa2b0ac0f31ecff72a6c3af8e22c063453", size = 692314, upload-time = "2025-11-17T22:32:31.031Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fe/3a/c5b855752a70267ff729c349e650263adb3c206c29d28cc8ea7ace30a1d5/ml_dtypes-0.5.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b95e97e470fe60ed493fd9ae3911d8da4ebac16bd21f87ffa2b7c588bf22ea2c", size = 679735, upload-time = "2025-11-17T22:31:31.367Z" }, + { url = "https://files.pythonhosted.org/packages/c6/5e/712092cfe7e5eb667b8ad9ca7c54442f21ed7ca8979745f1000e24cf8737/ml_dtypes-0.5.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6c7ecb74c4bd71db68a6bea1edf8da8c34f3d9fe218f038814fd1d310ac76c90", size = 679734, upload-time = "2025-11-17T22:31:39.223Z" }, + { url = "https://files.pythonhosted.org/packages/a8/b8/3c70881695e056f8a32f8b941126cf78775d9a4d7feba8abcb52cb7b04f2/ml_dtypes-0.5.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:a174837a64f5b16cab6f368171a1a03a27936b31699d167684073ff1c4237dac", size = 676927, upload-time = "2025-11-17T22:31:48.182Z" }, +] + +[[package]] +name = "mpmath" +version = "1.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e0/47/dd32fa426cc72114383ac549964eecb20ecfd886d1e5ccf5340b55b02f57/mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f", size = 508106, upload-time = "2023-03-07T16:47:11.061Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c", size = 536198, upload-time = "2023-03-07T16:47:09.197Z" }, +] + +[[package]] +name = "msgpack" +version = "1.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/31/f9/c0a1c127f9049db9155afc316952ea571720dd01833ff5e4d7e8e6352dbb/msgpack-1.2.1.tar.gz", hash = "sha256:04c721c2c7448767e9e3f2520a475663d8ee0f09c31890f6d2bd70fd636a9647", size = 183960, upload-time = "2026-06-18T16:13:52.594Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5b/16/f70100614b69feb3ade7285f08c9c52d6cda0a5c03f3f5e2facd63acb211/msgpack-1.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8c7b398c56ff125feae96c2737abfec5595f1fa0aa186df60c56040b8accb95c", size = 82926, upload-time = "2026-06-18T16:12:31.531Z" }, + { url = "https://files.pythonhosted.org/packages/e4/3c/08ecd5cdfe4e2de43aec79062028ad0f7b2d9b1fea5430068c198ba570da/msgpack-1.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1548006a91aa93c5da81f3bdcebc1a0d10cea2d25969754fbe848da622b2b895", size = 82730, upload-time = "2026-06-18T16:12:32.894Z" }, + { url = "https://files.pythonhosted.org/packages/f4/6b/e9b1cdc042c4458801d2545ed782a95f3d6ba8e270cce8745b8603c7f748/msgpack-1.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:29a3f6e9667868429d8240dfd063ea5ffdc1321c13d783aa23827a38de0dcb22", size = 82812, upload-time = "2026-06-18T16:12:45.022Z" }, + { url = "https://files.pythonhosted.org/packages/0c/3a/dd518a1bf78ed1e9ad8afe57307c079a00eafe4b3068932a27ca1ea56b4f/msgpack-1.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:aded5bdf32609dc7987a49bbbd15a8ef096193f96dd8bbeb791de729e650acf5", size = 82739, upload-time = "2026-06-18T16:12:46.025Z" }, + { url = "https://files.pythonhosted.org/packages/bc/dd/9e8cbd8f5582ca4b590336f2b91ee5662f6a6ca562b565abaf696a0f81ff/msgpack-1.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2ef59c659f289eddf8aa6623823f19fa2f40a4029266889eac7a2505dd210c35", size = 83531, upload-time = "2026-06-18T16:12:58.249Z" }, + { url = "https://files.pythonhosted.org/packages/50/2e/ebdb85a8da151397a2790363676b7ed7c125924fe618e4c6d8befb0cc62c/msgpack-1.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d3567748a5107cb40cdf66a275430c2f87c07777698f4bfd25c35f44d533258c", size = 82657, upload-time = "2026-06-18T16:12:59.396Z" }, +] + +[[package]] +name = "multidict" +version = "6.7.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1a/c2/c2d94cbe6ac1753f3fc980da97b3d930efe1da3af3c9f5125354436c073d/multidict-6.7.1.tar.gz", hash = "sha256:ec6652a1bee61c53a3e5776b6049172c53b6aaba34f18c9ad04f82712bac623d", size = 102010, upload-time = "2026-01-26T02:46:45.979Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/84/0b/19348d4c98980c4851d2f943f8ebafdece2ae7ef737adcfa5994ce8e5f10/multidict-6.7.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:c93c3db7ea657dd4637d57e74ab73de31bccefe144d3d4ce370052035bc85fb5", size = 77176, upload-time = "2026-01-26T02:42:59.784Z" }, + { url = "https://files.pythonhosted.org/packages/ef/04/9de3f8077852e3d438215c81e9b691244532d2e05b4270e89ce67b7d103c/multidict-6.7.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:974e72a2474600827abaeda71af0c53d9ebbc3c2eb7da37b37d7829ae31232d8", size = 44996, upload-time = "2026-01-26T02:43:01.674Z" }, + { url = "https://files.pythonhosted.org/packages/31/5c/08c7f7fe311f32e83f7621cd3f99d805f45519cd06fafb247628b861da7d/multidict-6.7.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cdea2e7b2456cfb6694fb113066fd0ec7ea4d67e3a35e1f4cbeea0b448bf5872", size = 44631, upload-time = "2026-01-26T02:43:03.169Z" }, + { url = "https://files.pythonhosted.org/packages/ce/f1/a90635c4f88fb913fbf4ce660b83b7445b7a02615bda034b2f8eb38fd597/multidict-6.7.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7ff981b266af91d7b4b3793ca3382e53229088d193a85dfad6f5f4c27fc73e5d", size = 76626, upload-time = "2026-01-26T02:43:26.485Z" }, + { url = "https://files.pythonhosted.org/packages/a6/9b/267e64eaf6fc637a15b35f5de31a566634a2740f97d8d094a69d34f524a4/multidict-6.7.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:844c5bca0b5444adb44a623fb0a1310c2f4cd41f402126bb269cd44c9b3f3e1e", size = 44706, upload-time = "2026-01-26T02:43:27.607Z" }, + { url = "https://files.pythonhosted.org/packages/dd/a4/d45caf2b97b035c57267791ecfaafbd59c68212004b3842830954bb4b02e/multidict-6.7.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f2a0a924d4c2e9afcd7ec64f9de35fcd96915149b2216e1cb2c10a56df483855", size = 44356, upload-time = "2026-01-26T02:43:28.661Z" }, + { url = "https://files.pythonhosted.org/packages/8d/9c/f20e0e2cf80e4b2e4b1c365bf5fe104ee633c751a724246262db8f1a0b13/multidict-6.7.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:a90f75c956e32891a4eda3639ce6dd86e87105271f43d43442a3aedf3cddf172", size = 76893, upload-time = "2026-01-26T02:43:52.754Z" }, + { url = "https://files.pythonhosted.org/packages/fe/cf/18ef143a81610136d3da8193da9d80bfe1cb548a1e2d1c775f26b23d024a/multidict-6.7.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3fccb473e87eaa1382689053e4a4618e7ba7b9b9b8d6adf2027ee474597128cd", size = 45456, upload-time = "2026-01-26T02:43:53.893Z" }, + { url = "https://files.pythonhosted.org/packages/a9/65/1caac9d4cd32e8433908683446eebc953e82d22b03d10d41a5f0fefe991b/multidict-6.7.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b0fa96985700739c4c7853a43c0b3e169360d6855780021bfc6d0f1ce7c123e7", size = 43872, upload-time = "2026-01-26T02:43:55.041Z" }, + { url = "https://files.pythonhosted.org/packages/81/08/7036c080d7117f28a4af526d794aab6a84463126db031b007717c1a6676e/multidict-6.7.1-py3-none-any.whl", hash = "sha256:55d97cc6dae627efa6a6e548885712d4864b81110ac76fa4e534c03819fa4a56", size = 12319, upload-time = "2026-01-26T02:46:44.004Z" }, +] + +[[package]] +name = "mypy" +version = "1.18.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mypy-extensions", marker = "sys_platform == 'darwin'" }, + { name = "pathspec", marker = "sys_platform == 'darwin'" }, + { name = "tomli", marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "typing-extensions", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c0/77/8f0d0001ffad290cef2f7f216f96c814866248a0b92a722365ed54648e7e/mypy-1.18.2.tar.gz", hash = "sha256:06a398102a5f203d7477b2923dda3634c36727fa5c237d8f859ef90c42a9924b", size = 3448846, upload-time = "2025-09-19T00:11:10.519Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/03/6f/657961a0743cff32e6c0611b63ff1c1970a0b482ace35b069203bf705187/mypy-1.18.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c1eab0cf6294dafe397c261a75f96dc2c31bffe3b944faa24db5def4e2b0f77c", size = 12807973, upload-time = "2025-09-19T00:10:35.282Z" }, + { url = "https://files.pythonhosted.org/packages/10/e9/420822d4f661f13ca8900f5fa239b40ee3be8b62b32f3357df9a3045a08b/mypy-1.18.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7a780ca61fc239e4865968ebc5240bb3bf610ef59ac398de9a7421b54e4a207e", size = 11896527, upload-time = "2025-09-19T00:10:55.791Z" }, + { url = "https://files.pythonhosted.org/packages/88/87/cafd3ae563f88f94eec33f35ff722d043e09832ea8530ef149ec1efbaf08/mypy-1.18.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:807d9315ab9d464125aa9fcf6d84fde6e1dc67da0b6f80e7405506b8ac72bc7f", size = 12731198, upload-time = "2025-09-19T00:09:44.857Z" }, + { url = "https://files.pythonhosted.org/packages/0f/e0/1e96c3d4266a06d4b0197ace5356d67d937d8358e2ee3ffac71faa843724/mypy-1.18.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:776bb00de1778caf4db739c6e83919c1d85a448f71979b6a0edd774ea8399341", size = 11817879, upload-time = "2025-09-19T00:09:47.131Z" }, + { url = "https://files.pythonhosted.org/packages/07/06/dfdd2bc60c66611dd8335f463818514733bc763e4760dee289dcc33df709/mypy-1.18.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:33eca32dd124b29400c31d7cf784e795b050ace0e1f91b8dc035672725617e34", size = 12908273, upload-time = "2025-09-19T00:10:58.321Z" }, + { url = "https://files.pythonhosted.org/packages/81/14/6a9de6d13a122d5608e1a04130724caf9170333ac5a924e10f670687d3eb/mypy-1.18.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a3c47adf30d65e89b2dcd2fa32f3aeb5e94ca970d2c15fcb25e297871c8e4764", size = 11920910, upload-time = "2025-09-19T00:10:20.043Z" }, + { url = "https://files.pythonhosted.org/packages/87/e3/be76d87158ebafa0309946c4a73831974d4d6ab4f4ef40c3b53a385a66fd/mypy-1.18.2-py3-none-any.whl", hash = "sha256:22a1748707dd62b58d2ae53562ffc4d7f8bcc727e8ac7cbc69c053ddc874d47e", size = 2352367, upload-time = "2025-09-19T00:10:15.489Z" }, +] + +[[package]] +name = "mypy-extensions" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/6e/371856a3fb9d31ca8dac321cda606860fa4548858c0cc45d9d1d4ca2628b/mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558", size = 6343, upload-time = "2025-04-22T14:54:24.164Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505", size = 4963, upload-time = "2025-04-22T14:54:22.983Z" }, +] + +[[package]] +name = "narwhals" +version = "2.22.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/62/3c/c4ef2164a71c1a63d7f1ae411c4082c5fa872405106db60a4b7114989ad7/narwhals-2.22.1.tar.gz", hash = "sha256:d62920805a0a43b7ff8b54b0c0d3142d796f8a9301836ada37e573d6a33cbcd9", size = 647493, upload-time = "2026-06-05T12:34:34.051Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/48/ca/36339329c4604adbcc99c899b7eb1ce1a555c499b6a6860757dc9bfed36d/narwhals-2.22.1-py3-none-any.whl", hash = "sha256:60567d774edf77db53906f89d9fbd164e66e56d66d388e1e6990f17ac33cfb53", size = 454815, upload-time = "2026-06-05T12:34:32.289Z" }, +] + +[[package]] +name = "networkx" +version = "3.4.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and sys_platform == 'darwin'", +] +sdist = { url = "https://files.pythonhosted.org/packages/fd/1d/06475e1cd5264c0b870ea2cc6fdb3e37177c1e565c43f56ff17a10e3937f/networkx-3.4.2.tar.gz", hash = "sha256:307c3669428c5362aab27c8a1260aa8f47c4e91d3891f48be0141738d8d053e1", size = 2151368, upload-time = "2024-10-21T12:39:38.695Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b9/54/dd730b32ea14ea797530a4479b2ed46a6fb250f682a9cfb997e968bf0261/networkx-3.4.2-py3-none-any.whl", hash = "sha256:df5d4365b724cf81b8c6a7312509d0c22386097011ad1abe274afd5e9d3bbc5f", size = 1723263, upload-time = "2024-10-21T12:39:36.247Z" }, +] + +[[package]] +name = "networkx" +version = "3.6.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.12' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and sys_platform == 'darwin'", +] +sdist = { url = "https://files.pythonhosted.org/packages/6a/51/63fe664f3908c97be9d2e4f1158eb633317598cfa6e1fc14af5383f17512/networkx-3.6.1.tar.gz", hash = "sha256:26b7c357accc0c8cde558ad486283728b65b6a95d85ee1cd66bafab4c8168509", size = 2517025, upload-time = "2025-12-08T17:02:39.908Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl", hash = "sha256:d47fbf302e7d9cbbb9e2555a0d267983d2aa476bac30e90dfbe5669bd57f3762", size = 2068504, upload-time = "2025-12-08T17:02:38.159Z" }, +] + +[[package]] +name = "nodeenv" +version = "1.10.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/24/bf/d1bda4f6168e0b2e9e5958945e01910052158313224ada5ce1fb2e1113b8/nodeenv-1.10.0.tar.gz", hash = "sha256:996c191ad80897d076bdfba80a41994c2b47c68e224c542b48feba42ba00f8bb", size = 55611, upload-time = "2025-12-20T14:08:54.006Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl", hash = "sha256:5bb13e3eed2923615535339b3c620e76779af4cb4c6a90deccc9e36b274d3827", size = 23438, upload-time = "2025-12-20T14:08:52.782Z" }, +] + +[[package]] +name = "num2words" +version = "0.5.14" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "docopt", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f6/58/ad645bd38b4b648eb2fc2ba1b909398e54eb0cbb6a7dbd2b4953e38c9621/num2words-0.5.14.tar.gz", hash = "sha256:b066ec18e56b6616a3b38086b5747daafbaa8868b226a36127e0451c0cf379c6", size = 218213, upload-time = "2024-12-17T20:17:10.191Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d6/5b/545e9267a1cc080c8a1be2746113a063e34bcdd0f5173fd665a5c13cb234/num2words-0.5.14-py3-none-any.whl", hash = "sha256:1c8e5b00142fc2966fd8d685001e36c4a9911e070d1b120e1beb721fa1edb33d", size = 163525, upload-time = "2024-12-17T20:17:06.074Z" }, +] + +[[package]] +name = "numba" +version = "0.65.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "llvmlite", marker = "sys_platform == 'darwin'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f6/c5/db2ac3685833d626c0dcae6bd2330cd68433e1fd248d15f70998160d3ad7/numba-0.65.1.tar.gz", hash = "sha256:19357146c32fe9ed25059ab915e8465fb13951cf6b0aace3826b76886373ab23", size = 2765600, upload-time = "2026-04-24T02:02:56.551Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/de/1b/3c5a7daf683a95465bf23504bcd1a2d5db8cd5e5e276ca87505d020dffe9/numba-0.65.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:9d993ed0a257aa4116e6f553f114004bcfdee540c7276ab8ea48f650d514c452", size = 2680870, upload-time = "2026-04-24T02:02:10.623Z" }, + { url = "https://files.pythonhosted.org/packages/96/b3/650500c2eab4534d98e9166f4298e0f3c69c742afdf24e6eabccd1f16ad8/numba-0.65.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:7020d74b19cdb8cff16506542fdd510756e28c5e7f3bd0b7f574f0f42272fcd9", size = 2680563, upload-time = "2026-04-24T02:02:18.414Z" }, + { url = "https://files.pythonhosted.org/packages/57/bc/76f8f8c5cf9adee47fdb7bbb03be8900f76f902d451d7477cf12b845e1de/numba-0.65.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:ac3f1e77c352dd0ea9712732c2d8f9ca507717435eec5b5013bf138ac33c4a08", size = 2681371, upload-time = "2026-04-24T02:02:26.105Z" }, +] + +[[package]] +name = "numpy" +version = "2.2.6" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and sys_platform == 'darwin'", +] +sdist = { url = "https://files.pythonhosted.org/packages/76/21/7d2a95e4bba9dc13d043ee156a356c0a8f0c6309dff6b21b4d71a073b8a8/numpy-2.2.6.tar.gz", hash = "sha256:e29554e2bef54a90aa5cc07da6ce955accb83f21ab5de01a62c8478897b264fd", size = 20276440, upload-time = "2025-05-17T22:38:04.611Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/3e/ed6db5be21ce87955c0cbd3009f2803f59fa08df21b5df06862e2d8e2bdd/numpy-2.2.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b412caa66f72040e6d268491a59f2c43bf03eb6c96dd8f0307829feb7fa2b6fb", size = 21165245, upload-time = "2025-05-17T21:27:58.555Z" }, + { url = "https://files.pythonhosted.org/packages/22/c2/4b9221495b2a132cc9d2eb862e21d42a009f5a60e45fc44b00118c174bff/numpy-2.2.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e41fd67c52b86603a91c1a505ebaef50b3314de0213461c7a6e99c9a3beff90", size = 14360048, upload-time = "2025-05-17T21:28:21.406Z" }, + { url = "https://files.pythonhosted.org/packages/fd/77/dc2fcfc66943c6410e2bf598062f5959372735ffda175b39906d54f02349/numpy-2.2.6-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:37e990a01ae6ec7fe7fa1c26c55ecb672dd98b19c3d0e1d1f326fa13cb38d163", size = 5340542, upload-time = "2025-05-17T21:28:30.931Z" }, + { url = "https://files.pythonhosted.org/packages/7a/4f/1cb5fdc353a5f5cc7feb692db9b8ec2c3d6405453f982435efc52561df58/numpy-2.2.6-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:5a6429d4be8ca66d889b7cf70f536a397dc45ba6faeb5f8c5427935d9592e9cf", size = 6878301, upload-time = "2025-05-17T21:28:41.613Z" }, + { url = "https://files.pythonhosted.org/packages/da/a8/4f83e2aa666a9fbf56d6118faaaf5f1974d456b1823fda0a176eff722839/numpy-2.2.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f9f1adb22318e121c5c69a09142811a201ef17ab257a1e66ca3025065b7f53ae", size = 21176963, upload-time = "2025-05-17T21:31:19.36Z" }, + { url = "https://files.pythonhosted.org/packages/b3/2b/64e1affc7972decb74c9e29e5649fac940514910960ba25cd9af4488b66c/numpy-2.2.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c820a93b0255bc360f53eca31a0e676fd1101f673dda8da93454a12e23fc5f7a", size = 14406743, upload-time = "2025-05-17T21:31:41.087Z" }, + { url = "https://files.pythonhosted.org/packages/4a/9f/0121e375000b5e50ffdd8b25bf78d8e1a5aa4cca3f185d41265198c7b834/numpy-2.2.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3d70692235e759f260c3d837193090014aebdf026dfd167834bcba43e30c2a42", size = 5352616, upload-time = "2025-05-17T21:31:50.072Z" }, + { url = "https://files.pythonhosted.org/packages/31/0d/b48c405c91693635fbe2dcd7bc84a33a602add5f63286e024d3b6741411c/numpy-2.2.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:481b49095335f8eed42e39e8041327c05b0f6f4780488f61286ed3c01368d491", size = 6889579, upload-time = "2025-05-17T21:32:01.712Z" }, + { url = "https://files.pythonhosted.org/packages/82/5d/c00588b6cf18e1da539b45d3598d3557084990dcc4331960c15ee776ee41/numpy-2.2.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:41c5a21f4a04fa86436124d388f6ed60a9343a6f767fced1a8a71c3fbca038ff", size = 20875348, upload-time = "2025-05-17T21:34:39.648Z" }, + { url = "https://files.pythonhosted.org/packages/66/ee/560deadcdde6c2f90200450d5938f63a34b37e27ebff162810f716f6a230/numpy-2.2.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:de749064336d37e340f640b05f24e9e3dd678c57318c7289d222a8a2f543e90c", size = 14119362, upload-time = "2025-05-17T21:35:01.241Z" }, + { url = "https://files.pythonhosted.org/packages/3c/65/4baa99f1c53b30adf0acd9a5519078871ddde8d2339dc5a7fde80d9d87da/numpy-2.2.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:894b3a42502226a1cac872f840030665f33326fc3dac8e57c607905773cdcde3", size = 5084103, upload-time = "2025-05-17T21:35:10.622Z" }, + { url = "https://files.pythonhosted.org/packages/cc/89/e5a34c071a0570cc40c9a54eb472d113eea6d002e9ae12bb3a8407fb912e/numpy-2.2.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:71594f7c51a18e728451bb50cc60a3ce4e6538822731b2933209a1f3614e9282", size = 6625382, upload-time = "2025-05-17T21:35:21.414Z" }, + { url = "https://files.pythonhosted.org/packages/9e/3b/d94a75f4dbf1ef5d321523ecac21ef23a3cd2ac8b78ae2aac40873590229/numpy-2.2.6-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0b605b275d7bd0c640cad4e5d30fa701a8d59302e127e5f79138ad62762c3e3d", size = 21040391, upload-time = "2025-05-17T21:44:35.948Z" }, + { url = "https://files.pythonhosted.org/packages/17/f4/09b2fa1b58f0fb4f7c7963a1649c64c4d315752240377ed74d9cd878f7b5/numpy-2.2.6-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:7befc596a7dc9da8a337f79802ee8adb30a552a94f792b9c9d18c840055907db", size = 6786754, upload-time = "2025-05-17T21:44:47.446Z" }, +] + +[[package]] +name = "numpy" +version = "2.4.6" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.12' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and sys_platform == 'darwin'", +] +sdist = { url = "https://files.pythonhosted.org/packages/d0/ad/fed0499ce6a338d2a03ebae59cd15093910c8875328855781952abf6c2fe/numpy-2.4.6.tar.gz", hash = "sha256:f3a3570c4a2a16746ac2c31a7c7c7b0c186b95ce902e33db6f28094ed7387dda", size = 20735807, upload-time = "2026-05-18T23:37:14.07Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/49/ec46835a70be8fa6446c495126ac84fdb28cb2558e1620ffb87a10c8b64c/numpy-2.4.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0280e0356c0829a18d9de1cb7eee50ec22ca639878d7240307ca0943d73cd2c4", size = 16969194, upload-time = "2026-05-18T23:33:13.503Z" }, + { url = "https://files.pythonhosted.org/packages/0e/0d/f5957185c0ee2f3e12f78715aa9e3b353fd83633316c8532b38faa37e3f6/numpy-2.4.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:110f8b71aacb688ec69062bb7f6938a0f8acb01b7c1c4beb453c65b6d234584d", size = 14964111, upload-time = "2026-05-18T23:33:17.795Z" }, + { url = "https://files.pythonhosted.org/packages/ad/40/40a40ee0ddf7ceb782c49af278894b686e586d65d8c1889c8b5da01a3d7d/numpy-2.4.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:4cfe66903cc32a9921a6733d96b19bb6abf310397581bbad89c228f5abaf0ee8", size = 5469159, upload-time = "2026-05-18T23:33:20.654Z" }, + { url = "https://files.pythonhosted.org/packages/63/13/f9a8046535cb21deae82f8d03de9617e08882d274fad2539630761888228/numpy-2.4.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8155154c7c691289fe18f510b5d4657c68c67989f293f0535a91360392ff6538", size = 6798936, upload-time = "2026-05-18T23:33:22.987Z" }, + { url = "https://files.pythonhosted.org/packages/95/2a/3d7b5ac8aac24feaf9ad7ed58f45b0bbc06d37e4338ae84c9f2298b570f9/numpy-2.4.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:001fbb8e08d942dd57599e781f2472269ee7f2755fae407b4f67b2f0b17da3f1", size = 16689119, upload-time = "2026-05-18T23:33:54.065Z" }, + { url = "https://files.pythonhosted.org/packages/ea/12/92c4c131527599e8288d6918e888d88726f84d805d784b771f32408aeaef/numpy-2.4.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ebfb099f8dcf083deef3ac1ca4c1503f387cf76296fcb3816b66f5ecb5f54fdb", size = 14699246, upload-time = "2026-05-18T23:33:57.621Z" }, + { url = "https://files.pythonhosted.org/packages/ad/fe/c0a6b7b2ca128a8fb228575147073b660656734b8ebe4d76c8fd748dcc79/numpy-2.4.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:3213d622a0283a39a93d188f3cf72b26862df52fbb4ca3697f51705016523d41", size = 5204410, upload-time = "2026-05-18T23:34:00.302Z" }, + { url = "https://files.pythonhosted.org/packages/f3/d4/9770d14ba719432bb90a421bfd443872ed0f70f7264b64bec12ea363d5fd/numpy-2.4.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:357cc07a6d7b0b182ff02249616a03742827ebb1277546b5c7cd7f7620a45698", size = 6551240, upload-time = "2026-05-18T23:34:02.852Z" }, + { url = "https://files.pythonhosted.org/packages/de/12/b422cc84439adc0d00de605bf4a308890ae5c26f2c71fbd73e5d08fbb0dd/numpy-2.4.6-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:55cced7c52e981362f708ad635198e97a752dfba412cc03c23bbf3bd8d5cd662", size = 16847511, upload-time = "2026-05-18T23:36:50.673Z" }, + { url = "https://files.pythonhosted.org/packages/44/53/f481bef68011740f8849418d82db07230e825013f31f4eef5ba5b805316a/numpy-2.4.6-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d6da64deb6b8ed903e7560180a92f2d804ee1ba5eeb849ac2748b8c1aba1f6d7", size = 14889064, upload-time = "2026-05-18T23:36:53.879Z" }, + { url = "https://files.pythonhosted.org/packages/7f/57/42ed575c10ced8af951d426bc4e1f8aff16fd851db33f067036215a7f860/numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:68a5124b13fa6cc2086764a20005d30bc0548146f7f5322f02fce212ca14317f", size = 5394157, upload-time = "2026-05-18T23:36:57.194Z" }, + { url = "https://files.pythonhosted.org/packages/6a/ef/f66cc724fcc36c1e364c67f51ae9146090b8b584f27d58b97fdae3edd737/numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:948424b06129ce883307e8cff868c31396d8dc7630a59c61d70d98dbe70f222c", size = 6708728, upload-time = "2026-05-18T23:36:59.575Z" }, +] + +[[package]] +name = "nvidia-ml-py" +version = "13.610.43" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f0/b5/a8fbc356f768fa5c9cfd646668fd7d34bf55bdd1c6e20754642a64d930d4/nvidia_ml_py-13.610.43.tar.gz", hash = "sha256:65437eb73d68d0c62c931ca4d45038472faff03bd0b8729abba4b899f70d60f2", size = 52109, upload-time = "2026-06-01T18:54:08.829Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/23/45/caa600acfab94560807a20a64b5830d2cd3c3202b7f1328644d70b7d6bd8/nvidia_ml_py-13.610.43-py3-none-any.whl", hash = "sha256:f13c72698edef492f985cc225f14faafe68ae065a2e407f45bdf6f4b9b43fde8", size = 53163, upload-time = "2026-06-01T18:54:07.704Z" }, +] + +[[package]] +name = "openai" +version = "2.44.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio", marker = "sys_platform == 'darwin'" }, + { name = "distro", marker = "sys_platform == 'darwin'" }, + { name = "httpx", marker = "sys_platform == 'darwin'" }, + { name = "jiter", marker = "sys_platform == 'darwin'" }, + { name = "pydantic", marker = "sys_platform == 'darwin'" }, + { name = "sniffio", marker = "sys_platform == 'darwin'" }, + { name = "tqdm", marker = "sys_platform == 'darwin'" }, + { name = "typing-extensions", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/49/f5/7c7cb955305cb41f7f3c5fd7e0e38bf6bbf2658468863d4b7b868a5cb8df/openai-2.44.0.tar.gz", hash = "sha256:68a5a5ffad82b8ff7d451c437529fb64f7c3b8123aaf0c021966a882d9e3947d", size = 988753, upload-time = "2026-06-24T20:56:02.293Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ae/f4/561ed79fd94876160018a5e75254cfcb9b0e62d4dded9dcb20072e86d623/openai-2.44.0-py3-none-any.whl", hash = "sha256:0a2a3ab2e29aeda368700f662ff9ba0f9df17ba4c54577a64e08b8115a3cc0ad", size = 1366216, upload-time = "2026-06-24T20:55:58.882Z" }, +] + +[[package]] +name = "opencv-contrib-python" +version = "4.13.0.92" +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' and sys_platform == 'darwin'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/4c/a45c96b9fe90b2c48ee604f5176eb7deb46ce7c2e87c8d819d2945dbcab6/opencv_contrib_python-4.13.0.92-cp37-abi3-macosx_13_0_arm64.whl", hash = "sha256:53c8ab81376210dda5836307eb6bda7266f39a3820a9a070c7131510ba815fe1", size = 52041546, upload-time = "2026-02-05T07:01:29.918Z" }, + { url = "https://files.pythonhosted.org/packages/8b/6c/ba1f3177927deeb3002b62fb8db89daea3b5dc732d61de5bf4c73ed6ebf7/opencv_contrib_python-4.13.0.92-cp37-abi3-macosx_14_0_x86_64.whl", hash = "sha256:1973d0fc773873f9d1b5bf0d1b65895da2f47b06ba033b7d58393f5c28ba0778", size = 38830319, upload-time = "2026-02-05T07:01:47.222Z" }, +] + +[[package]] +name = "opencv-python" +version = "4.13.0.92" +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' and sys_platform == 'darwin'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/fc/6f/5a28fef4c4a382be06afe3938c64cc168223016fa520c5abaf37e8862aa5/opencv_python-4.13.0.92-cp37-abi3-macosx_13_0_arm64.whl", hash = "sha256:caf60c071ec391ba51ed00a4a920f996d0b64e3e46068aac1f646b5de0326a19", size = 46247052, upload-time = "2026-02-05T07:01:25.046Z" }, + { url = "https://files.pythonhosted.org/packages/08/ac/6c98c44c650b8114a0fb901691351cfb3956d502e8e9b5cd27f4ee7fbf2f/opencv_python-4.13.0.92-cp37-abi3-macosx_14_0_x86_64.whl", hash = "sha256:5868a8c028a0b37561579bfb8ac1875babdc69546d236249fff296a8c010ccf9", size = 32568781, upload-time = "2026-02-05T07:01:41.379Z" }, +] + +[[package]] +name = "opt-einsum" +version = "3.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8c/b9/2ac072041e899a52f20cf9510850ff58295003aa75525e58343591b0cbfb/opt_einsum-3.4.0.tar.gz", hash = "sha256:96ca72f1b886d148241348783498194c577fa30a8faac108586b14f1ba4473ac", size = 63004, upload-time = "2024-09-26T14:33:24.483Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl", hash = "sha256:69bb92469f86a1565195ece4ac0323943e83477171b91d24c35afe028a90d7cd", size = 71932, upload-time = "2024-09-26T14:33:23.039Z" }, +] + +[[package]] +name = "orjson" +version = "3.11.9" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7e/0c/964746fcafbd16f8ff53219ad9f6b412b34f345c75f384ad434ceaadb538/orjson-3.11.9.tar.gz", hash = "sha256:4fef17e1f8722c11587a6ef18e35902450221da0028e65dbaaa543619e68e48f", size = 5599163, upload-time = "2026-05-06T15:11:08.309Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/10/5d/b95ca542a001135cc250a49370f282f578c8f4e46cc8617d73775297eea8/orjson-3.11.9-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:135869ef917b8704ea0a94e01620e0c05021c15c52036e4663baffe75e72f8ce", size = 228986, upload-time = "2026-05-06T15:09:14.765Z" }, + { url = "https://files.pythonhosted.org/packages/1e/51/3fb9e65ae76ee97bd611869a503fa3fc0a6e81dd8b737cf3003f682df7ff/orjson-3.11.9-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:f01c4818b3fc9b0da8e096722a84318071eaa118df35f6ed2344da0e73a5444f", size = 228522, upload-time = "2026-05-06T15:09:35.362Z" }, + { url = "https://files.pythonhosted.org/packages/16/fa/9d54b07cb3f3b0bfd57841478e42d7a0ece4a9f49f9907eecf5a45461687/orjson-3.11.9-cp311-cp311-macosx_15_0_arm64.whl", hash = "sha256:3ebca4179031ee716ed076ffadc29428e900512f6fccee8614c9983157fcf19c", size = 128463, upload-time = "2026-05-06T15:09:37.063Z" }, + { url = "https://files.pythonhosted.org/packages/16/6d/11867a3ffa3a3608d84a4de51ef4dd0896d6b5cc9132fbe1daf593e677bc/orjson-3.11.9-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:9ef6fe90aadef185c7b128859f40beb24720b4ecea95379fc9000931179c3a49", size = 228515, upload-time = "2026-05-06T15:09:57.265Z" }, + { url = "https://files.pythonhosted.org/packages/24/75/05912954c8b288f34fcf5cd4b9b071cb4f6e77b9961e175e56ebb258089f/orjson-3.11.9-cp312-cp312-macosx_15_0_arm64.whl", hash = "sha256:e5c9b8f28e726e97d97696c826bc7bea5d71cecd63576dba92924a32c1961291", size = 128409, upload-time = "2026-05-06T15:09:59.063Z" }, +] + +[[package]] +name = "packaging" +version = "26.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/f1/e7a6dd94a8d4a5626c03e4e99c87f241ba9e350cd9e6d75123f992427270/packaging-26.2.tar.gz", hash = "sha256:ff452ff5a3e828ce110190feff1178bb1f2ea2281fa2075aadb987c2fb221661", size = 228134, upload-time = "2026-04-24T20:15:23.917Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl", hash = "sha256:5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e", size = 100195, upload-time = "2026-04-24T20:15:22.081Z" }, +] + +[[package]] +name = "pandas" +version = "2.3.3" +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' and sys_platform == 'darwin'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, + { name = "python-dateutil", marker = "sys_platform == 'darwin'" }, + { name = "pytz", marker = "sys_platform == 'darwin'" }, + { name = "tzdata", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/33/01/d40b85317f86cf08d853a4f495195c73815fdf205eef3993821720274518/pandas-2.3.3.tar.gz", hash = "sha256:e05e1af93b977f7eafa636d043f9f94c7ee3ac81af99c13508215942e64c993b", size = 4495223, upload-time = "2025-09-29T23:34:51.853Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3d/f7/f425a00df4fcc22b292c6895c6831c0c8ae1d9fac1e024d16f98a9ce8749/pandas-2.3.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:376c6446ae31770764215a6c937f72d917f214b43560603cd60da6408f183b6c", size = 11555763, upload-time = "2025-09-29T23:16:53.287Z" }, + { url = "https://files.pythonhosted.org/packages/13/4f/66d99628ff8ce7857aca52fed8f0066ce209f96be2fede6cef9f84e8d04f/pandas-2.3.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e19d192383eab2f4ceb30b412b22ea30690c9e618f78870357ae1d682912015a", size = 10801217, upload-time = "2025-09-29T23:17:04.522Z" }, + { url = "https://files.pythonhosted.org/packages/c1/fa/7ac648108144a095b4fb6aa3de1954689f7af60a14cf25583f4960ecb878/pandas-2.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:602b8615ebcc4a0c1751e71840428ddebeb142ec02c786e8ad6b1ce3c8dec523", size = 11578790, upload-time = "2025-09-29T23:18:30.065Z" }, + { url = "https://files.pythonhosted.org/packages/9b/35/74442388c6cf008882d4d4bdfc4109be87e9b8b7ccd097ad1e7f006e2e95/pandas-2.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8fe25fc7b623b0ef6b5009149627e34d2a4657e880948ec3c840e9402e5c1b45", size = 10833831, upload-time = "2025-09-29T23:38:56.071Z" }, + { url = "https://files.pythonhosted.org/packages/9c/fb/231d89e8637c808b997d172b18e9d4a4bc7bf31296196c260526055d1ea0/pandas-2.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d21f6d74eb1725c2efaa71a2bfc661a0689579b58e9c0ca58a739ff0b002b53", size = 11597846, upload-time = "2025-09-29T23:19:48.856Z" }, + { url = "https://files.pythonhosted.org/packages/5c/bd/bf8064d9cfa214294356c2d6702b716d3cf3bb24be59287a6a21e24cae6b/pandas-2.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3fd2f887589c7aa868e02632612ba39acb0b8948faf5cc58f0850e165bd46f35", size = 10729618, upload-time = "2025-09-29T23:39:08.659Z" }, +] + +[[package]] +name = "pathspec" +version = "1.1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5a/82/42f767fc1c1143d6fd36efb827202a2d997a375e160a71eb2888a925aac1/pathspec-1.1.1.tar.gz", hash = "sha256:17db5ecd524104a120e173814c90367a96a98d07c45b2e10c2f3919fff91bf5a", size = 135180, upload-time = "2026-04-27T01:46:08.907Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f1/d9/7fb5aa316bc299258e68c73ba3bddbc499654a07f151cba08f6153988714/pathspec-1.1.1-py3-none-any.whl", hash = "sha256:a00ce642f577bf7f473932318056212bc4f8bfdf53128c78bbd5af0b9b20b189", size = 57328, upload-time = "2026-04-27T01:46:07.06Z" }, +] + +[[package]] +name = "pillow" +version = "11.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/0d/d0d6dea55cd152ce3d6767bb38a8fc10e33796ba4ba210cbab9354b6d238/pillow-11.3.0.tar.gz", hash = "sha256:3828ee7586cd0b2091b6209e5ad53e20d0649bbe87164a459d0676e035e8f523", size = 47113069, upload-time = "2025-07-01T09:16:30.666Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4c/5d/45a3553a253ac8763f3561371432a90bdbe6000fbdcf1397ffe502aa206c/pillow-11.3.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:1b9c17fd4ace828b3003dfd1e30bff24863e0eb59b535e8f80194d9cc7ecf860", size = 5316554, upload-time = "2025-07-01T09:13:39.342Z" }, + { url = "https://files.pythonhosted.org/packages/7c/c8/67c12ab069ef586a25a4a79ced553586748fad100c77c0ce59bb4983ac98/pillow-11.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:65dc69160114cdd0ca0f35cb434633c75e8e7fad4cf855177a05bf38678f73ad", size = 4686548, upload-time = "2025-07-01T09:13:41.835Z" }, + { url = "https://files.pythonhosted.org/packages/db/26/77f8ed17ca4ffd60e1dcd220a6ec6d71210ba398cfa33a13a1cd614c5613/pillow-11.3.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:1cd110edf822773368b396281a2293aeb91c90a2db00d78ea43e7e861631b722", size = 5316531, upload-time = "2025-07-01T09:13:59.203Z" }, + { url = "https://files.pythonhosted.org/packages/cb/39/ee475903197ce709322a17a866892efb560f57900d9af2e55f86db51b0a5/pillow-11.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9c412fddd1b77a75aa904615ebaa6001f169b26fd467b4be93aded278266b288", size = 4686560, upload-time = "2025-07-01T09:14:01.101Z" }, + { url = "https://files.pythonhosted.org/packages/40/fe/1bc9b3ee13f68487a99ac9529968035cca2f0a51ec36892060edcc51d06a/pillow-11.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fdae223722da47b024b867c1ea0be64e0df702c5e0a60e27daad39bf960dd1e4", size = 5278800, upload-time = "2025-07-01T09:14:17.648Z" }, + { url = "https://files.pythonhosted.org/packages/2c/32/7e2ac19b5713657384cec55f89065fb306b06af008cfd87e572035b27119/pillow-11.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:921bd305b10e82b4d1f5e802b6850677f965d8394203d182f078873851dada69", size = 4686296, upload-time = "2025-07-01T09:14:19.828Z" }, + { url = "https://files.pythonhosted.org/packages/6f/8b/209bd6b62ce8367f47e68a218bffac88888fdf2c9fcf1ecadc6c3ec1ebc7/pillow-11.3.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:3cee80663f29e3843b68199b9d6f4f54bd1d4a6b59bdd91bceefc51238bcb967", size = 5270556, upload-time = "2025-07-01T09:16:09.961Z" }, + { url = "https://files.pythonhosted.org/packages/2e/e6/231a0b76070c2cfd9e260a7a5b504fb72da0a95279410fa7afd99d9751d6/pillow-11.3.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:b5f56c3f344f2ccaf0dd875d3e180f631dc60a51b314295a3e681fe8cf851fbe", size = 4654625, upload-time = "2025-07-01T09:16:11.913Z" }, + { url = "https://files.pythonhosted.org/packages/9e/e3/6fa84033758276fb31da12e5fb66ad747ae83b93c67af17f8c6ff4cc8f34/pillow-11.3.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7c8ec7a017ad1bd562f93dbd8505763e688d388cde6e4a010ae1486916e713e6", size = 5270566, upload-time = "2025-07-01T09:16:19.801Z" }, + { url = "https://files.pythonhosted.org/packages/5b/ee/e8d2e1ab4892970b561e1ba96cbd59c0d28cf66737fc44abb2aec3795a4e/pillow-11.3.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:9ab6ae226de48019caa8074894544af5b53a117ccb9d3b3dcb2871464c829438", size = 4654618, upload-time = "2025-07-01T09:16:21.818Z" }, +] + +[[package]] +name = "pip" +version = "26.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/01/91/47e7d486260f618783899587af63ccf7980fb60245c3e63dd4571c6b57ad/pip-26.1.2.tar.gz", hash = "sha256:f49cd134c61cf2fd75e0ce2676db03e4054504a5a4986d00f8299ae632dc4605", size = 1840799, upload-time = "2026-05-31T17:33:58.56Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5d/95/6b5cb3461ea5673ba0995989746db58eb18b91b54dbf331e72f569540946/pip-26.1.2-py3-none-any.whl", hash = "sha256:382ff9f685ee3bc25864f820aa50505825f10f5458ffff07e30a6d96e5715cab", size = 1813144, upload-time = "2026-05-31T17:33:56.772Z" }, +] + +[[package]] +name = "platformdirs" +version = "4.10.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/47/e4501f49c178ae1d9f4a75073fda4204f52647993f075a9db4d14930e0c5/platformdirs-4.10.0.tar.gz", hash = "sha256:31e761a6a0ca04faf7353ea759bdba55652be214725111e5aac52dfa29d4bef7", size = 31224, upload-time = "2026-05-28T03:32:53.587Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/e6/cd9575ac904136b3cbf7aa7ee819ef86eedb7274e46f230e94ea4342e729/platformdirs-4.10.0-py3-none-any.whl", hash = "sha256:fb516cdb12eb0d857d0cd85a7c57cea4d060bee4578d6cf5a14dfdf8cbf8784a", size = 22743, upload-time = "2026-05-28T03:32:52.175Z" }, +] + +[[package]] +name = "pluggy" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload-time = "2025-05-15T12:30:07.975Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, +] + +[[package]] +name = "polars" +version = "1.42.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "polars-runtime-32", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/cb/91/a1d7809a6d399f0aa78d4d3a4f4daf411cb97ccfe7f236c08a01be5fc8a5/polars-1.42.0.tar.gz", hash = "sha256:283ddc923e47857924fbef36580d2e98d984a47c962bae4cbce9c0ebcc98989c", size = 740984, upload-time = "2026-06-24T05:20:13.727Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/08/4d/094819d251f2248999cb722125fd4e44ee79b753fe535338cbf442fbf45d/polars-1.42.0-py3-none-any.whl", hash = "sha256:ab10cac3f2d28a6e22e22bcac69c0e51fb33cd25aee1f45105782d4fe55a3e6a", size = 836855, upload-time = "2026-06-24T05:18:18.204Z" }, +] + +[[package]] +name = "polars-runtime-32" +version = "1.42.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/05/67/20759e9abbc61910cf948f5c28986ab25ef9e8009099b469d64d6a34a478/polars_runtime_32-1.42.0.tar.gz", hash = "sha256:c927e1930881fe0bf9629d12e5d44ebd4ecef2bfa02374dfc79feaa24054394f", size = 3042711, upload-time = "2026-06-24T05:20:15.715Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1c/62/8b83fca67d478e4a2b88cbba2fbff4d533052938ff96d598b7915fd9d235/polars_runtime_32-1.42.0-cp310-abi3-macosx_10_12_x86_64.whl", hash = "sha256:d235a5e8349797c16b70ad573fb9ddbd7f162796884bcbd25260908f8408affc", size = 53112358, upload-time = "2026-06-24T05:18:22.275Z" }, + { url = "https://files.pythonhosted.org/packages/cf/72/06d3d78b7e8e8d3c72ea9eee310950334d50986462b3c1d40f82972495a5/polars_runtime_32-1.42.0-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:e7923db3bcb57e0edecde3be28629e0411414a15ef1a4c10c783ac5eadab2e1e", size = 47443757, upload-time = "2026-06-24T05:18:26.326Z" }, +] + +[[package]] +name = "pooch" +version = "1.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging", marker = "sys_platform == 'darwin'" }, + { name = "platformdirs", marker = "sys_platform == 'darwin'" }, + { name = "requests", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/83/43/85ef45e8b36c6a48546af7b266592dc32d7f67837a6514d111bced6d7d75/pooch-1.9.0.tar.gz", hash = "sha256:de46729579b9857ffd3e741987a2f6d5e0e03219892c167c6578c0091fb511ed", size = 61788, upload-time = "2026-01-30T19:15:09.649Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/2d/d4bf65e47cea8ff2c794a600c4fd1273a7902f268757c531e0ee9f18aa58/pooch-1.9.0-py3-none-any.whl", hash = "sha256:f265597baa9f760d25ceb29d0beb8186c243d6607b0f60b83ecf14078dbc703b", size = 67175, upload-time = "2026-01-30T19:15:08.36Z" }, +] + +[[package]] +name = "pre-commit" +version = "4.6.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cfgv", marker = "sys_platform == 'darwin'" }, + { name = "identify", marker = "sys_platform == 'darwin'" }, + { name = "nodeenv", marker = "sys_platform == 'darwin'" }, + { name = "pyyaml", marker = "sys_platform == 'darwin'" }, + { name = "virtualenv", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8e/22/2de9408ac81acbb8a7d05d4cc064a152ccf33b3d480ebe0cd292153db239/pre_commit-4.6.0.tar.gz", hash = "sha256:718d2208cef53fdc38206e40524a6d4d9576d103eb16f0fec11c875e7716e9d9", size = 198525, upload-time = "2026-04-21T20:31:41.613Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/80/6e/4b28b62ecb6aae56769c34a8ff1d661473ec1e9519e2d5f8b2c150086b26/pre_commit-4.6.0-py2.py3-none-any.whl", hash = "sha256:e2cf246f7299edcabcf15f9b0571fdce06058527f0a06535068a86d38089f29b", size = 226472, upload-time = "2026-04-21T20:31:40.092Z" }, +] + +[[package]] +name = "prompt-toolkit" +version = "3.0.52" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "wcwidth", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a1/96/06e01a7b38dce6fe1db213e061a4602dd6032a8a97ef6c1a862537732421/prompt_toolkit-3.0.52.tar.gz", hash = "sha256:28cde192929c8e7321de85de1ddbe736f1375148b02f2e17edd840042b1be855", size = 434198, upload-time = "2025-08-27T15:24:02.057Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/84/03/0d3ce49e2505ae70cf43bc5bb3033955d2fc9f932163e84dc0779cc47f48/prompt_toolkit-3.0.52-py3-none-any.whl", hash = "sha256:9aac639a3bbd33284347de5ad8d68ecc044b91a762dc39b7c21095fcd6a19955", size = 391431, upload-time = "2025-08-27T15:23:59.498Z" }, +] + +[[package]] +name = "propcache" +version = "0.5.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ec/44/c87281c333769159c50594f22610f77398a47ccbfbbf23074e744e86f87c/propcache-0.5.2.tar.gz", hash = "sha256:01c4fc7480cd0598bb4b57022df55b9ca296da7fc5a8760bd8451a7e63a7d427", size = 50208, upload-time = "2026-05-08T21:02:12.199Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5b/56/030b7b4719d53085722893e0009dffb9236aa10bca1b12121bdc5626ef16/propcache-0.5.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d5a81be28596d6559f6131ef33e10200de6e17643b3c74ce03f9eb103be6ae8b", size = 93417, upload-time = "2026-05-08T20:59:15.597Z" }, + { url = "https://files.pythonhosted.org/packages/1a/55/1140a8e067b8ec093a18a4ae7bb0045d9db65da38a08618ddc5e2f1994aa/propcache-0.5.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:29cbaac5ea0212663e6845e04b5e188d5a6ae6dd919810ac835bf1d3b42c3f4c", size = 53847, upload-time = "2026-05-08T20:59:17.096Z" }, + { url = "https://files.pythonhosted.org/packages/20/42/0e7443c90310498561addf346e7d57fe3c6ba1914e1ba938b5464c7bbfd2/propcache-0.5.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6bf3be92233808fcd338eba0fb4d0b59ec5772af4f4ecfcec450d1bfc0f8b5eb", size = 53512, upload-time = "2026-05-08T20:59:18.64Z" }, + { url = "https://files.pythonhosted.org/packages/e7/f1/8a8cc1c2c7e7934ab77e0163414f736fadbc0f5e8dd9673b952355ac175b/propcache-0.5.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:74b70780220e2dd89175ca24b81b68b67c83db499ae611e7f2313cb329801c78", size = 90744, upload-time = "2026-05-08T20:59:45.799Z" }, + { url = "https://files.pythonhosted.org/packages/c2/f4/651b1225e976bd1a2ba5cfba0c29d096581c2636b437e3a9a7ab6276270a/propcache-0.5.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a4840ab0ae0216d952f4b53dc6d0b992bfc2bedbfe360bdd9b548bc184c08959", size = 52033, upload-time = "2026-05-08T20:59:47.408Z" }, + { url = "https://files.pythonhosted.org/packages/15/a8/8ede85d6aa1f79fc7dc2f8fd2c8d65920b8272c3892903c8a1affde48cfb/propcache-0.5.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c6844ba6364fb12f403928a82cfd295ab103a2b315c77c747b2dbe4a41894ea7", size = 52754, upload-time = "2026-05-08T20:59:49.202Z" }, + { url = "https://files.pythonhosted.org/packages/4a/cb/e27bc2b2737a0bb49962b275efa051e8f1c35a936df7d5139b6b658b7dc9/propcache-0.5.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:806719138ecd720339a12410fb9614ac9b2b2d3a5fdf8235d56981c36f4039ba", size = 95887, upload-time = "2026-05-08T21:00:11.277Z" }, + { url = "https://files.pythonhosted.org/packages/e6/13/b8ae04c59392f8d11c6cd9fb4011d1dc7c86b81225c770280300e259ffe1/propcache-0.5.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:db2b80ea58eab4f86b2beec3cc8b39e8ff9276ac20e96b7cce43c8ae84cd6b5a", size = 54654, upload-time = "2026-05-08T21:00:12.604Z" }, + { url = "https://files.pythonhosted.org/packages/2c/7d/49777a3e20b55863d4794384a38acd460c04157b0a00f8602b0d508b8431/propcache-0.5.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e5cbfac9f61484f7e9f3597775500cd3ebe8274e9b050c38f9525c77c97520bf", size = 55190, upload-time = "2026-05-08T21:00:13.935Z" }, + { url = "https://files.pythonhosted.org/packages/3a/ed/1cdcab6ba3d6ab7feca11fc14f0eeea80755bb53ef4e892079f31b10a25f/propcache-0.5.2-py3-none-any.whl", hash = "sha256:be1ddfcbb376e3de5d2e2db1d58d6d67463e6b4f9f040c000de8e300295465fe", size = 14036, upload-time = "2026-05-08T21:02:10.673Z" }, +] + +[[package]] +name = "protobuf" +version = "4.25.9" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d9/8e/d08c41a8c004e1d437ef467e7c4f9c3295cd784eba48ed5d1d01f94b1dad/protobuf-4.25.9.tar.gz", hash = "sha256:b0dc7e7c68de8b1ce831dacb12fb407e838edbb8b6cc0dc3a2a6b4cbf6de9cff", size = 381040, upload-time = "2026-03-25T23:09:36.423Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/56/5b/0074a0a9eb01f3d1c4648ca5e81b22090c811b210b61df9018ac6d6c5cda/protobuf-4.25.9-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:9560813560e6ee72c11ca8873878bdb7ee003c96a57ebb013245fe84e2540904", size = 394826, upload-time = "2026-03-25T23:09:25.194Z" }, + { url = "https://files.pythonhosted.org/packages/16/28/d5065b212685875d3924bcdb3201cbf467cb4d58a18aa19a8dfd99ea80a9/protobuf-4.25.9-py3-none-any.whl", hash = "sha256:d49b615e7c935194ac161f0965699ac84df6112c378e05ec53da65d2e4cbb6d4", size = 156822, upload-time = "2026-03-25T23:09:34.957Z" }, +] + +[[package]] +name = "psutil" +version = "7.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/aa/c6/d1ddf4abb55e93cebc4f2ed8b5d6dbad109ecb8d63748dd2b20ab5e57ebe/psutil-7.2.2.tar.gz", hash = "sha256:0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372", size = 493740, upload-time = "2026-01-28T18:14:54.428Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/36/5ee6e05c9bd427237b11b3937ad82bb8ad2752d72c6969314590dd0c2f6e/psutil-7.2.2-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ed0cace939114f62738d808fdcecd4c869222507e266e574799e9c0faa17d486", size = 129090, upload-time = "2026-01-28T18:15:22.168Z" }, + { url = "https://files.pythonhosted.org/packages/80/c4/f5af4c1ca8c1eeb2e92ccca14ce8effdeec651d5ab6053c589b074eda6e1/psutil-7.2.2-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979", size = 129859, upload-time = "2026-01-28T18:15:23.795Z" }, +] + +[[package]] +name = "pycparser" +version = "3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1b/7d/92392ff7815c21062bea51aa7b87d45576f649f16458d78b7cf94b9ab2e6/pycparser-3.0.tar.gz", hash = "sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29", size = 103492, upload-time = "2026-01-21T14:26:51.89Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl", hash = "sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992", size = 48172, upload-time = "2026-01-21T14:26:50.693Z" }, +] + +[[package]] +name = "pydantic" +version = "2.12.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "annotated-types", marker = "sys_platform == 'darwin'" }, + { name = "pydantic-core", marker = "sys_platform == 'darwin'" }, + { name = "typing-extensions", marker = "sys_platform == 'darwin'" }, + { name = "typing-inspection", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f3/1e/4f0a3233767010308f2fd6bd0814597e3f63f1dc98304a9112b8759df4ff/pydantic-2.12.3.tar.gz", hash = "sha256:1da1c82b0fc140bb0103bc1441ffe062154c8d38491189751ee00fd8ca65ce74", size = 819383, upload-time = "2025-10-17T15:04:21.222Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a1/6b/83661fa77dcefa195ad5f8cd9af3d1a7450fd57cc883ad04d65446ac2029/pydantic-2.12.3-py3-none-any.whl", hash = "sha256:6986454a854bc3bc6e5443e1369e06a3a456af9d339eda45510f517d9ea5c6bf", size = 462431, upload-time = "2025-10-17T15:04:19.346Z" }, +] + +[[package]] +name = "pydantic-core" +version = "2.41.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/df/18/d0944e8eaaa3efd0a91b0f1fc537d3be55ad35091b6a87638211ba691964/pydantic_core-2.41.4.tar.gz", hash = "sha256:70e47929a9d4a1905a67e4b687d5946026390568a8e952b92824118063cee4d5", size = 457557, upload-time = "2025-10-14T10:23:47.909Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a7/3d/9b8ca77b0f76fcdbf8bc6b72474e264283f461284ca84ac3fde570c6c49a/pydantic_core-2.41.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2442d9a4d38f3411f22eb9dd0912b7cbf4b7d5b6c92c4173b75d3e1ccd84e36e", size = 2111197, upload-time = "2025-10-14T10:19:43.303Z" }, + { url = "https://files.pythonhosted.org/packages/59/92/b7b0fe6ed4781642232755cb7e56a86e2041e1292f16d9ae410a0ccee5ac/pydantic_core-2.41.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:30a9876226dda131a741afeab2702e2d127209bde3c65a2b8133f428bc5d006b", size = 1917909, upload-time = "2025-10-14T10:19:45.194Z" }, + { url = "https://files.pythonhosted.org/packages/62/4c/f6cbfa1e8efacd00b846764e8484fe173d25b8dab881e277a619177f3384/pydantic_core-2.41.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:28ff11666443a1a8cf2a044d6a545ebffa8382b5f7973f22c36109205e65dc80", size = 2109062, upload-time = "2025-10-14T10:20:04.486Z" }, + { url = "https://files.pythonhosted.org/packages/21/f8/40b72d3868896bfcd410e1bd7e516e762d326201c48e5b4a06446f6cf9e8/pydantic_core-2.41.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:61760c3925d4633290292bad462e0f737b840508b4f722247d8729684f6539ae", size = 1916301, upload-time = "2025-10-14T10:20:06.857Z" }, + { url = "https://files.pythonhosted.org/packages/e9/81/d3b3e95929c4369d30b2a66a91db63c8ed0a98381ae55a45da2cd1cc1288/pydantic_core-2.41.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:ab06d77e053d660a6faaf04894446df7b0a7e7aba70c2797465a0a1af00fc887", size = 2099043, upload-time = "2025-10-14T10:20:28.561Z" }, + { url = "https://files.pythonhosted.org/packages/58/da/46fdac49e6717e3a94fc9201403e08d9d61aa7a770fab6190b8740749047/pydantic_core-2.41.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c53ff33e603a9c1179a9364b0a24694f183717b2e0da2b5ad43c316c956901b2", size = 1910699, upload-time = "2025-10-14T10:20:30.217Z" }, + { url = "https://files.pythonhosted.org/packages/b0/12/5ba58daa7f453454464f92b3ca7b9d7c657d8641c48e370c3ebc9a82dd78/pydantic_core-2.41.4-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:a1b2cfec3879afb742a7b0bcfa53e4f22ba96571c9e54d6a3afe1052d17d843b", size = 2122139, upload-time = "2025-10-14T10:22:47.288Z" }, + { url = "https://files.pythonhosted.org/packages/21/fb/6860126a77725c3108baecd10fd3d75fec25191d6381b6eb2ac660228eac/pydantic_core-2.41.4-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:d175600d975b7c244af6eb9c9041f10059f20b8bbffec9e33fdd5ee3f67cdc42", size = 1936674, upload-time = "2025-10-14T10:22:49.555Z" }, + { url = "https://files.pythonhosted.org/packages/c4/48/ae937e5a831b7c0dc646b2ef788c27cd003894882415300ed21927c21efa/pydantic_core-2.41.4-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:4f5d640aeebb438517150fdeec097739614421900e4a08db4a3ef38898798537", size = 2112087, upload-time = "2025-10-14T10:22:56.818Z" }, + { url = "https://files.pythonhosted.org/packages/5e/db/6db8073e3d32dae017da7e0d16a9ecb897d0a4d92e00634916e486097961/pydantic_core-2.41.4-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:4a9ab037b71927babc6d9e7fc01aea9e66dc2a4a34dff06ef0724a4049629f94", size = 1920387, upload-time = "2025-10-14T10:22:59.342Z" }, + { url = "https://files.pythonhosted.org/packages/5d/d4/912e976a2dd0b49f31c98a060ca90b353f3b73ee3ea2fd0030412f6ac5ec/pydantic_core-2.41.4-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:1e5ab4fc177dd41536b3c32b2ea11380dd3d4619a385860621478ac2d25ceb00", size = 2106739, upload-time = "2025-10-14T10:23:06.934Z" }, + { url = "https://files.pythonhosted.org/packages/71/f0/66ec5a626c81eba326072d6ee2b127f8c139543f1bf609b4842978d37833/pydantic_core-2.41.4-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:3d88d0054d3fa11ce936184896bed3c1c5441d6fa483b498fac6a5d0dd6f64a9", size = 1932549, upload-time = "2025-10-14T10:23:09.24Z" }, + { url = "https://files.pythonhosted.org/packages/7e/7d/138e902ed6399b866f7cfe4435d22445e16fff888a1c00560d9dc79a780f/pydantic_core-2.41.4-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:491535d45cd7ad7e4a2af4a5169b0d07bebf1adfd164b0368da8aa41e19907a5", size = 2104721, upload-time = "2025-10-14T10:23:26.906Z" }, + { url = "https://files.pythonhosted.org/packages/47/13/0525623cf94627f7b53b4c2034c81edc8491cbfc7c28d5447fa318791479/pydantic_core-2.41.4-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:54d86c0cada6aba4ec4c047d0e348cbad7063b87ae0f005d9f8c9ad04d4a92a2", size = 1931608, upload-time = "2025-10-14T10:23:29.306Z" }, +] + +[[package]] +name = "pydeprecate" +version = "0.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d4/1e/b069ea704e42fefeb523835ba3d712347ff672743e5fa9428f4201525328/pydeprecate-0.9.0.tar.gz", hash = "sha256:ed49a36506f63a8d4ae84ffedff1e2879733d536c7a6aaafdf8bfcd39520059b", size = 151667, upload-time = "2026-06-05T19:51:17.43Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/47/87/a155f16c1c17adccaa2ed2256484fe1c6ad37b925e8e39695ed8860bc0b5/pydeprecate-0.9.0-py3-none-any.whl", hash = "sha256:c9501dae1a2567a3c7f7b04221ad5a97d1ad972a02ddb729a04299b435fedd7c", size = 102725, upload-time = "2026-06-05T19:51:16.235Z" }, +] + +[[package]] +name = "pydub" +version = "0.25.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fe/9a/e6bca0eed82db26562c73b5076539a4a08d3cffd19c3cc5913a3e61145fd/pydub-0.25.1.tar.gz", hash = "sha256:980a33ce9949cab2a569606b65674d748ecbca4f0796887fd6f46173a7b0d30f", size = 38326, upload-time = "2021-03-10T02:09:54.659Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a6/53/d78dc063216e62fc55f6b2eebb447f6a4b0a59f55c8406376f76bf959b08/pydub-0.25.1-py2.py3-none-any.whl", hash = "sha256:65617e33033874b59d87db603aa1ed450633288aefead953b30bded59cb599a6", size = 32327, upload-time = "2021-03-10T02:09:53.503Z" }, +] + +[[package]] +name = "pyee" +version = "13.0.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8b/04/e7c1fe4dc78a6fdbfd6c337b1c3732ff543b8a397683ab38378447baa331/pyee-13.0.1.tar.gz", hash = "sha256:0b931f7c14535667ed4c7e0d531716368715e860b988770fc7eb8578d1f67fc8", size = 31655, upload-time = "2026-02-14T21:12:28.044Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/c4/b4d4827c93ef43c01f599ef31453ccc1c132b353284fc6c87d535c233129/pyee-13.0.1-py3-none-any.whl", hash = "sha256:af2f8fede4171ef667dfded53f96e2ed0d6e6bd7ee3bb46437f77e3b57689228", size = 15659, upload-time = "2026-02-14T21:12:26.263Z" }, +] + +[[package]] +name = "pygments" +version = "2.20.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c3/b2/bc9c9196916376152d655522fdcebac55e66de6603a76a02bca1b6414f6c/pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f", size = 4955991, upload-time = "2026-03-29T13:29:33.898Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176", size = 1231151, upload-time = "2026-03-29T13:29:30.038Z" }, +] + +[[package]] +name = "pylibsrtp" +version = "1.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0d/a6/6e532bec974aaecbf9fe4e12538489fb1c28456e65088a50f305aeab9f89/pylibsrtp-1.0.0.tar.gz", hash = "sha256:b39dff075b263a8ded5377f2490c60d2af452c9f06c4d061c7a2b640612b34d4", size = 10858, upload-time = "2025-10-13T16:12:31.552Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/aa/af/89e61a62fa3567f1b7883feb4d19e19564066c2fcd41c37e08d317b51881/pylibsrtp-1.0.0-cp310-abi3-macosx_10_9_x86_64.whl", hash = "sha256:822c30ea9e759b333dc1f56ceac778707c51546e97eb874de98d7d378c000122", size = 1865017, upload-time = "2025-10-13T16:12:15.62Z" }, + { url = "https://files.pythonhosted.org/packages/8d/0e/8d215484a9877adcf2459a8b28165fc89668b034565277fd55d666edd247/pylibsrtp-1.0.0-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:aaad74e5c8cbc1c32056c3767fea494c1e62b3aea2c908eda2a1051389fdad76", size = 2182739, upload-time = "2025-10-13T16:12:17.121Z" }, +] + +[[package]] +name = "pyopenssl" +version = "26.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cryptography", marker = "sys_platform == 'darwin'" }, + { name = "typing-extensions", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/74/b7/da07bae88f5a9506b4def6f2f4903cf4c3b8831e560dba8fa18ca08f758f/pyopenssl-26.3.0.tar.gz", hash = "sha256:589de7fae1c9ea670d18422ed00fc04da787bbde8e1454aea872aa57b49ad341", size = 182024, upload-time = "2026-06-12T20:28:07.458Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/54/18/1dd71c9b43192ab83f1d531ad6002dc81108ac36c475f79fb7a295abe2f4/pyopenssl-26.3.0-py3-none-any.whl", hash = "sha256:46367f8f66b92271e6d218da9c87607e1ef5a0bc5c8dea5bb3db82f395c385a3", size = 56008, upload-time = "2026-06-12T20:28:05.999Z" }, +] + +[[package]] +name = "pyparsing" +version = "3.3.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/91/9c6ee907786a473bf81c5f53cf703ba0957b23ab84c264080fb5a450416f/pyparsing-3.3.2.tar.gz", hash = "sha256:c777f4d763f140633dcb6d8a3eda953bf7a214dc4eff598413c070bcdc117cbc", size = 6851574, upload-time = "2026-01-21T03:57:59.36Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl", hash = "sha256:850ba148bd908d7e2411587e247a1e4f0327839c40e2e5e6d05a007ecc69911d", size = 122781, upload-time = "2026-01-21T03:57:55.912Z" }, +] + +[[package]] +name = "pyserial" +version = "3.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1e/7d/ae3f0a63f41e4d2f6cb66a5b57197850f919f59e558159a4dd3a818f5082/pyserial-3.5.tar.gz", hash = "sha256:3c77e014170dfffbd816e6ffc205e9842efb10be9f58ec16d3e8675b4925cddb", size = 159125, upload-time = "2020-11-23T03:59:15.045Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/07/bc/587a445451b253b285629263eb51c2d8e9bcea4fc97826266d186f96f558/pyserial-3.5-py2.py3-none-any.whl", hash = "sha256:c4451db6ba391ca6ca299fb3ec7bae67a5c55dde170964c7a14ceefec02f2cf0", size = 90585, upload-time = "2020-11-23T03:59:13.41Z" }, +] + +[[package]] +name = "pytest" +version = "9.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "exceptiongroup", marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "iniconfig", marker = "sys_platform == 'darwin'" }, + { name = "packaging", marker = "sys_platform == 'darwin'" }, + { name = "pluggy", marker = "sys_platform == 'darwin'" }, + { name = "pygments", marker = "sys_platform == 'darwin'" }, + { name = "tomli", marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e4/47/b9efed96c114afcfa3c9d3fe98a76a1d14c74a9e266d397cf6eb64be5e01/pytest-9.1.1.tar.gz", hash = "sha256:1088fbde8f2b49d95a549a195707afa7a76a3ce9bcadc26b6d71f0ffda5fe313", size = 1636369, upload-time = "2026-06-19T10:58:32.857Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl", hash = "sha256:37a86b45efb9a47a61a36449063e8e18d0cab3161329fc099eb21783169c4f0c", size = 386536, upload-time = "2026-06-19T10:58:31.347Z" }, +] + +[[package]] +name = "pytest-asyncio" +version = "1.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "backports-asyncio-runner", marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "pytest", marker = "sys_platform == 'darwin'" }, + { name = "typing-extensions", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/43/7c/d36d04db312ecf4298932ef77e6e4a9e8ad017906e24e34f0b0c361a2473/pytest_asyncio-1.4.0.tar.gz", hash = "sha256:c6c0d2259945122819f171a32ecea2c349ead889ee28176caaf492143424be42", size = 58514, upload-time = "2026-05-26T09:56:04.083Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/03/e2/08a497ef684b88559c9cc5f4ad53a37e7b99e727094a86d6ea32536d5d3c/pytest_asyncio-1.4.0-py3-none-any.whl", hash = "sha256:933ca923a23075a87fb7070c0ec272a6848489824d887c85c812670932835aa1", size = 16930, upload-time = "2026-05-26T09:56:02.576Z" }, +] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" }, +] + +[[package]] +name = "python-discovery" +version = "1.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "filelock", marker = "sys_platform == 'darwin'" }, + { name = "platformdirs", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0b/1a/cbbaf13b730abb0a16b964d984e19f2fe520c21a4dc664051359a3f5a9e7/python_discovery-1.4.2.tar.gz", hash = "sha256:8f3746c4b4968d22afbb97d36e1a0e5b66e6c0f297290f2e95f05b9b8bf18690", size = 70277, upload-time = "2026-06-11T16:10:42.383Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1a/82/a70006589557f267f15bd384c0642ad49f0d97b690c3a05b166b9dcbad3b/python_discovery-1.4.2-py3-none-any.whl", hash = "sha256:475803f53b7b2ed6e490e27373f9d8340f7d2eebf9acdaf645d7d714c97bb500", size = 33886, upload-time = "2026-06-11T16:10:41.192Z" }, +] + +[[package]] +name = "python-dotenv" +version = "1.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/82/ed/0301aeeac3e5353ef3d94b6ec08bbcabd04a72018415dcb29e588514bba8/python_dotenv-1.2.2.tar.gz", hash = "sha256:2c371a91fbd7ba082c2c1dc1f8bf89ca22564a087c2c287cd9b662adde799cf3", size = 50135, upload-time = "2026-03-01T16:00:26.196Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0b/d7/1959b9648791274998a9c3526f6d0ec8fd2233e4d4acce81bbae76b44b2a/python_dotenv-1.2.2-py3-none-any.whl", hash = "sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a", size = 22101, upload-time = "2026-03-01T16:00:25.09Z" }, +] + +[[package]] +name = "python-gitlab" +version = "6.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "requests", marker = "sys_platform == 'darwin'" }, + { name = "requests-toolbelt", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9a/bd/b30f1d3b303cb5d3c72e2d57a847d699e8573cbdfd67ece5f1795e49da1c/python_gitlab-6.5.0.tar.gz", hash = "sha256:97553652d94b02de343e9ca92782239aa2b5f6594c5482331a9490d9d5e8737d", size = 400591, upload-time = "2025-10-17T21:40:02.89Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/34/bd/b0d440685fbcafee462bed793a74aea88541887c4c30556a55ac64914b8d/python_gitlab-6.5.0-py3-none-any.whl", hash = "sha256:494e1e8e5edd15286eaf7c286f3a06652688f1ee20a49e2a0218ddc5cc475e32", size = 144419, upload-time = "2025-10-17T21:40:01.233Z" }, +] + +[[package]] +name = "python-multipart" +version = "0.0.32" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5b/42/55c32bb9b12693c092ad250a0e82edb5b31ddeda6eb772de5f308b3804ad/python_multipart-0.0.32.tar.gz", hash = "sha256:be54b7f3fa167bb83e4fcd936b887b708f4e57fe75911c02aebf53efaf8d938e", size = 46881, upload-time = "2026-06-04T16:18:58.647Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e1/04/e8135ebd1ad02c56ec633277529b2602ff99ff634be76cdba5744cf554fd/python_multipart-0.0.32-py3-none-any.whl", hash = "sha256:ff6d3f776f16878c894e52e107296ffc890e913c611b1a4ec6c44e2821fe2e23", size = 30042, upload-time = "2026-06-04T16:18:57.319Z" }, +] + +[[package]] +name = "python-semantic-release" +version = "10.5.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click", marker = "sys_platform == 'darwin'" }, + { name = "click-option-group", marker = "sys_platform == 'darwin'" }, + { name = "deprecated", marker = "sys_platform == 'darwin'" }, + { name = "dotty-dict", marker = "sys_platform == 'darwin'" }, + { name = "gitpython", marker = "sys_platform == 'darwin'" }, + { name = "importlib-resources", marker = "sys_platform == 'darwin'" }, + { name = "jinja2", marker = "sys_platform == 'darwin'" }, + { name = "pydantic", marker = "sys_platform == 'darwin'" }, + { name = "python-gitlab", marker = "sys_platform == 'darwin'" }, + { name = "requests", marker = "sys_platform == 'darwin'" }, + { name = "rich", marker = "sys_platform == 'darwin'" }, + { name = "shellingham", marker = "sys_platform == 'darwin'" }, + { name = "tomlkit", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/19/3a/7332b822825ed0e902c6e950e0d1e90e8f666fd12eb27855d1c8b6677eff/python_semantic_release-10.5.3.tar.gz", hash = "sha256:de4da78635fa666e5774caaca2be32063cae72431eb75e2ac23b9f2dfd190785", size = 618034, upload-time = "2025-12-14T22:37:29.782Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6b/01/ada29a1215df601bded0a2efd3b6d53864a0a9e0a9ea52aeaebe14fd03fd/python_semantic_release-10.5.3-py3-none-any.whl", hash = "sha256:1be0e07c36fa1f1ec9da4f438c1f6bbd7bc10eb0d6ac0089b0643103708c2823", size = 152716, upload-time = "2025-12-14T22:37:28.089Z" }, +] + +[[package]] +name = "pytz" +version = "2026.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ff/46/dd499ec9038423421951e4fad73051febaa13d2df82b4064f87af8b8c0c3/pytz-2026.2.tar.gz", hash = "sha256:0e60b47b29f21574376f218fe21abc009894a2321ea16c6754f3cad6eb7cdd6a", size = 320861, upload-time = "2026-05-04T01:35:29.667Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/dd/96da98f892250475bdf2328112d7468abdd4acc7b902b6af23f4ed958ea0/pytz-2026.2-py2.py3-none-any.whl", hash = "sha256:04156e608bee23d3792fd45c94ae47fae1036688e75032eea2e3bf0323d1f126", size = 510141, upload-time = "2026-05-04T01:35:27.408Z" }, +] + +[[package]] +name = "pyusb" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/00/6b/ce3727395e52b7b76dfcf0c665e37d223b680b9becc60710d4bc08b7b7cb/pyusb-1.3.1.tar.gz", hash = "sha256:3af070b607467c1c164f49d5b0caabe8ac78dbed9298d703a8dbf9df4052d17e", size = 77281, upload-time = "2025-01-08T23:45:01.866Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/28/b8/27e6312e86408a44fe16bd28ee12dd98608b39f7e7e57884a24e8f29b573/pyusb-1.3.1-py3-none-any.whl", hash = "sha256:bf9b754557af4717fe80c2b07cc2b923a9151f5c08d17bdb5345dac09d6a0430", size = 58465, upload-time = "2025-01-08T23:45:00.029Z" }, +] + +[[package]] +name = "pyyaml" +version = "6.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/a0/39350dd17dd6d6c6507025c0e53aef67a9293a6d37d3511f23ea510d5800/pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b", size = 184227, upload-time = "2025-09-25T21:31:46.04Z" }, + { url = "https://files.pythonhosted.org/packages/05/14/52d505b5c59ce73244f59c7a50ecf47093ce4765f116cdb98286a71eeca2/pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956", size = 174019, upload-time = "2025-09-25T21:31:47.706Z" }, + { url = "https://files.pythonhosted.org/packages/6d/16/a95b6757765b7b031c9374925bb718d55e0a9ba8a1b6a12d25962ea44347/pyyaml-6.0.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e", size = 185826, upload-time = "2025-09-25T21:31:58.655Z" }, + { url = "https://files.pythonhosted.org/packages/16/19/13de8e4377ed53079ee996e1ab0a9c33ec2faf808a4647b7b4c0d46dd239/pyyaml-6.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824", size = 175577, upload-time = "2025-09-25T21:32:00.088Z" }, + { url = "https://files.pythonhosted.org/packages/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196", size = 182063, upload-time = "2025-09-25T21:32:11.445Z" }, + { url = "https://files.pythonhosted.org/packages/89/a0/6cf41a19a1f2f3feab0e9c0b74134aa2ce6849093d5517a0c550fe37a648/pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0", size = 173973, upload-time = "2025-09-25T21:32:12.492Z" }, +] + +[[package]] +name = "questionary" +version = "2.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "prompt-toolkit", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f6/45/eafb0bba0f9988f6a2520f9ca2df2c82ddfa8d67c95d6625452e97b204a5/questionary-2.1.1.tar.gz", hash = "sha256:3d7e980292bb0107abaa79c68dd3eee3c561b83a0f89ae482860b181c8bd412d", size = 25845, upload-time = "2025-08-28T19:00:20.851Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3c/26/1062c7ec1b053db9e499b4d2d5bc231743201b74051c973dadeac80a8f43/questionary-2.1.1-py3-none-any.whl", hash = "sha256:a51af13f345f1cdea62347589fbb6df3b290306ab8930713bfae4d475a7d4a59", size = 36753, upload-time = "2025-08-28T19:00:19.56Z" }, +] + +[[package]] +name = "reachy-mini" +version = "1.8.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiohttp", marker = "sys_platform == 'darwin'" }, + { name = "asgiref", marker = "sys_platform == 'darwin'" }, + { name = "fastapi", marker = "sys_platform == 'darwin'" }, + { name = "gstreamer-bundle", marker = "sys_platform == 'darwin'" }, + { name = "huggingface-hub", marker = "sys_platform == 'darwin'" }, + { name = "jinja2", marker = "sys_platform == 'darwin'" }, + { name = "libusb-package", marker = "sys_platform == 'darwin'" }, + { name = "log-throttling", marker = "sys_platform == 'darwin'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, + { name = "pip", marker = "sys_platform == 'darwin'" }, + { name = "psutil", marker = "sys_platform == 'darwin'" }, + { name = "pyserial", marker = "sys_platform == 'darwin'" }, + { name = "python-multipart", marker = "sys_platform == 'darwin'" }, + { name = "pyusb", marker = "sys_platform == 'darwin'" }, + { name = "pyyaml", marker = "sys_platform == 'darwin'" }, + { name = "questionary", marker = "sys_platform == 'darwin'" }, + { name = "reachy-mini-motor-controller", marker = "sys_platform == 'darwin'" }, + { name = "reachy-mini-rust-kinematics", marker = "sys_platform == 'darwin'" }, + { name = "requests", marker = "sys_platform == 'darwin'" }, + { name = "rich", marker = "sys_platform == 'darwin'" }, + { name = "rustypot", marker = "sys_platform == 'darwin'" }, + { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*' and sys_platform == 'darwin'" }, + { name = "scipy", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12' and sys_platform == 'darwin'" }, + { name = "starlette", marker = "sys_platform == 'darwin'" }, + { name = "toml", marker = "sys_platform == 'darwin'" }, + { name = "tornado", marker = "sys_platform == 'darwin'" }, + { name = "uvicorn", extra = ["standard"], marker = "sys_platform == 'darwin'" }, + { name = "websockets", marker = "sys_platform == 'darwin'" }, + { name = "zeroconf", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f9/20/a82cc900cef998cd8e9eff8bf6bf5a642e841b7daee12d74e184842a0d7d/reachy_mini-1.8.0.tar.gz", hash = "sha256:9c587f2386f1e11fe2f1fbfbcbffd191ee8dcf5cb1cd5fcd7621c2ab416a0dce", size = 24763681, upload-time = "2026-06-01T08:54:13.244Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2e/45/5a54ca987529754ddef55e9bd03cf2a553f79dc2e1bcf4262e661cc4bdae/reachy_mini-1.8.0-py3-none-any.whl", hash = "sha256:5dd686e77c158fe54528b706a0d51feb3c9d2d7b4a09f762a36cb24472254fd8", size = 24864618, upload-time = "2026-06-01T08:54:09.518Z" }, +] + +[[package]] +name = "reachy-mini-conversation-app" +version = "0.3.0" +source = { editable = "." } +dependencies = [ + { name = "aiortc", marker = "sys_platform == 'darwin'" }, + { name = "eclipse-zenoh", marker = "sys_platform == 'darwin'" }, + { name = "fastrtc", marker = "sys_platform == 'darwin'" }, + { name = "gradio", marker = "sys_platform == 'darwin'" }, + { name = "gradio-client", marker = "sys_platform == 'darwin'" }, + { name = "huggingface-hub", marker = "sys_platform == 'darwin'" }, + { name = "openai", marker = "sys_platform == 'darwin'" }, + { name = "opencv-python", marker = "sys_platform == 'darwin'" }, + { name = "python-dotenv", marker = "sys_platform == 'darwin'" }, + { name = "reachy-mini", marker = "sys_platform == 'darwin'" }, + { name = "reachy-mini-dances-library", marker = "sys_platform == 'darwin'" }, + { name = "reachy-mini-toolbox", marker = "sys_platform == 'darwin'" }, +] + +[package.optional-dependencies] +all-vision = [ + { name = "mediapipe", marker = "sys_platform == 'darwin'" }, + { name = "num2words", marker = "sys_platform == 'darwin'" }, + { name = "supervision", marker = "sys_platform == 'darwin'" }, + { name = "torch", marker = "sys_platform == 'darwin'" }, + { name = "transformers", marker = "sys_platform == 'darwin'" }, + { name = "ultralytics", marker = "sys_platform == 'darwin'" }, +] +local-vision = [ + { name = "num2words", marker = "sys_platform == 'darwin'" }, + { name = "torch", marker = "sys_platform == 'darwin'" }, + { name = "transformers", marker = "sys_platform == 'darwin'" }, +] +mediapipe-vision = [ + { name = "mediapipe", marker = "sys_platform == 'darwin'" }, +] +yolo-vision = [ + { name = "supervision", marker = "sys_platform == 'darwin'" }, + { name = "ultralytics", marker = "sys_platform == 'darwin'" }, +] + +[package.dev-dependencies] +dev = [ + { name = "mypy", marker = "sys_platform == 'darwin'" }, + { name = "pre-commit", marker = "sys_platform == 'darwin'" }, + { name = "pytest", marker = "sys_platform == 'darwin'" }, + { name = "pytest-asyncio", marker = "sys_platform == 'darwin'" }, + { name = "python-semantic-release", marker = "sys_platform == 'darwin'" }, + { name = "ruff", marker = "sys_platform == 'darwin'" }, + { name = "types-requests", marker = "sys_platform == 'darwin'" }, +] + +[package.metadata] +requires-dist = [ + { name = "aiortc", specifier = ">=1.13.0" }, + { name = "eclipse-zenoh", specifier = "~=1.7.0" }, + { name = "fastrtc", specifier = ">=0.0.34" }, + { name = "gradio", specifier = "==5.50.1.dev1" }, + { name = "gradio-client", specifier = ">=1.13.3" }, + { name = "huggingface-hub", specifier = "==1.3.0" }, + { name = "mediapipe", marker = "extra == 'all-vision'", specifier = "==0.10.14" }, + { name = "mediapipe", marker = "extra == 'mediapipe-vision'", specifier = "==0.10.14" }, + { name = "num2words", marker = "extra == 'all-vision'" }, + { name = "num2words", marker = "extra == 'local-vision'" }, + { name = "openai", specifier = ">=2.1" }, + { name = "opencv-python", specifier = ">=4.12.0.88" }, + { name = "python-dotenv" }, + { name = "reachy-mini", specifier = "==1.8.0" }, + { name = "reachy-mini-dances-library" }, + { name = "reachy-mini-toolbox" }, + { name = "supervision", marker = "extra == 'all-vision'" }, + { name = "supervision", marker = "extra == 'yolo-vision'" }, + { name = "torch", marker = "extra == 'all-vision'", specifier = ">=2.1" }, + { name = "torch", marker = "extra == 'local-vision'", specifier = ">=2.1" }, + { name = "transformers", marker = "extra == 'all-vision'", specifier = "==5.0.0rc2" }, + { name = "transformers", marker = "extra == 'local-vision'", specifier = "==5.0.0rc2" }, + { name = "ultralytics", marker = "extra == 'all-vision'" }, + { name = "ultralytics", marker = "extra == 'yolo-vision'" }, +] +provides-extras = ["local-vision", "yolo-vision", "mediapipe-vision", "all-vision"] + +[package.metadata.requires-dev] +dev = [ + { name = "mypy", specifier = "==1.18.2" }, + { name = "pre-commit" }, + { name = "pytest" }, + { name = "pytest-asyncio" }, + { name = "python-semantic-release", specifier = ">=10.5.3" }, + { name = "ruff", specifier = "==0.12.0" }, + { name = "types-requests" }, +] + +[[package]] +name = "reachy-mini-dances-library" +version = "0.2.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "reachy-mini", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5f/0e/7b26c96caf905e8e0cedff57251da4f953b1c2b97a611c86aee76318f5d1/reachy_mini_dances_library-0.2.1.tar.gz", hash = "sha256:f63fbb0e27f97c547f4e4487e8491495365b24c6f0d063780ef1da9fa5b1daf1", size = 14022, upload-time = "2025-10-15T16:09:00.965Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e2/52/69d2d0434019e72811f77bfe408e6781a8bee10639e480d9d6ac1b745f81/reachy_mini_dances_library-0.2.1-py3-none-any.whl", hash = "sha256:b3b2028dd92648b70c262535e9b77aa481a0a3dcf6f2ceece84c08b725cbbddf", size = 16159, upload-time = "2025-10-15T16:08:59.673Z" }, +] + +[[package]] +name = "reachy-mini-motor-controller" +version = "1.5.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0a/d6/56ea0dc75f8d578cb7522df6e662a5efce32308276c16db1ac65b63228cc/reachy_mini_motor_controller-1.5.6.tar.gz", hash = "sha256:98cb6e9e48dbcb3e4c3649aef418ca8cafea9056a00501c35dea7e86a3a3ec65", size = 29494, upload-time = "2026-06-12T09:31:10.783Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/77/1b/2833fdedeefd2964571ed28a1655cc7edf30b7335db28c3d80168e125392/reachy_mini_motor_controller-1.5.6-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:862a35a819408f0fde403b8054e65cda414d2e60798806772ae118a70c76c239", size = 572333, upload-time = "2026-06-12T09:30:38.784Z" }, + { url = "https://files.pythonhosted.org/packages/95/5f/0ec2b1a5857110223ec1d1b043fd3dd7289c56e5265d895aa479d4fcf19b/reachy_mini_motor_controller-1.5.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9c713d0ea4cc81bb19fcf324fdb618230b75f0a828bdc364f7adff63273d3863", size = 561945, upload-time = "2026-06-12T09:30:32.683Z" }, + { url = "https://files.pythonhosted.org/packages/aa/8b/6bbaa215425fb55619c6ff679c4d4ec6a407ea9304036c5829264c2275f4/reachy_mini_motor_controller-1.5.6-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:6c88e37ab920e8a69a06986e97ef4ed34f850160277262f041968a857c231ada", size = 571868, upload-time = "2026-06-12T09:30:39.978Z" }, + { url = "https://files.pythonhosted.org/packages/46/43/e0ec7fe9ba338acd971592b5296b837b3b5f1182334dcc4fff26f87a07c0/reachy_mini_motor_controller-1.5.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3d89f1c20873c6d6799d6795b8e743ad39901c9411b6c05698b5c4076fea6a84", size = 562693, upload-time = "2026-06-12T09:30:33.995Z" }, + { url = "https://files.pythonhosted.org/packages/74/a3/16a365e978d844eb7e5e07343959fe62052c5d898d41a43b4925116e0549/reachy_mini_motor_controller-1.5.6-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:5b30fb45b5068d9bf119bdd39aa475e64dc41e9a1fb229fc70b4a4fdf7d48374", size = 570893, upload-time = "2026-06-12T09:30:41.107Z" }, + { url = "https://files.pythonhosted.org/packages/31/99/d7b704e513735f55f1e0ba8022e310cdd1a660240cb8959eb9fc6034efe6/reachy_mini_motor_controller-1.5.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2a0fa22b0ac5ba40556c6b94f886fd9128735b009725d082efa7728a6d12bc76", size = 558962, upload-time = "2026-06-12T09:30:35.274Z" }, +] + +[[package]] +name = "reachy-mini-rust-kinematics" +version = "1.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/80/c6/3eb42a0d760ab3c9289963b8d08c1214bd84048ffb098f1ef1cb769e24c1/reachy_mini_rust_kinematics-1.0.3.tar.gz", hash = "sha256:9a01d8335854f308e88ab621bc50e0d2437f56e84c0f1e31f9aa93ae2dfcd15c", size = 16814, upload-time = "2025-12-04T11:53:46.816Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/17/a2/3b1070b8b549cb2c7418cb98e46174e385c4e7ea4e60fcfd5e971a945f9f/reachy_mini_rust_kinematics-1.0.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:42531fd9ab6a60e41d2b44369b403c5132e10859ac52913e9dcd1e25ee38a1f1", size = 308210, upload-time = "2025-12-04T11:52:39.234Z" }, + { url = "https://files.pythonhosted.org/packages/82/ab/ddede49a951a21b6ed881dfc740c6a145c0bc629504f9e94e719e52dfad4/reachy_mini_rust_kinematics-1.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c92e0d60e6babf46a30fc74201287237a73e310735b64439e891883574d79c30", size = 287226, upload-time = "2025-12-04T11:52:32.075Z" }, + { url = "https://files.pythonhosted.org/packages/47/8c/b4fe36c6e757dde53106560a9b48f06750ba574b0b17c882bf0cb760ae19/reachy_mini_rust_kinematics-1.0.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:c9099ea546c2606d6d5631cd2575cdd7f59195eed46357dad32ea7e56bd98bae", size = 307764, upload-time = "2025-12-04T11:52:40.252Z" }, + { url = "https://files.pythonhosted.org/packages/69/67/0f6f8c25ace6cbf45548be0a6ed5f120d873ef7126924e5482c7117e0eb3/reachy_mini_rust_kinematics-1.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b0b51036747541de5699b5babce1f80410f9ecec761001bc6d458bf9e9132695", size = 286761, upload-time = "2025-12-04T11:52:33.126Z" }, + { url = "https://files.pythonhosted.org/packages/6c/db/66dfefea6cbac47eca53c098f4cc473cd6b39b9138f85a5e3f327f51e2da/reachy_mini_rust_kinematics-1.0.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:72db0e164ca6d208feb451c71cfb3dbcaf796ac6e337f1c744c0a168a0334014", size = 304146, upload-time = "2025-12-04T11:52:41.235Z" }, + { url = "https://files.pythonhosted.org/packages/71/1e/8ce70d974aed942a6c18dacdc574eba4962e85d70373cd004fc4ee3f9de7/reachy_mini_rust_kinematics-1.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:02f2e94ffae1d4d6ebfe40f80fd332fa7d9d6c28db78ee431aeeabd022ba51d7", size = 284209, upload-time = "2025-12-04T11:52:34.253Z" }, +] + +[[package]] +name = "reachy-mini-toolbox" +version = "1.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/25/30/b18ab0771b276ab9ba4e0071f5f8f81818b362574644e95bacd9eae2a4c2/reachy_mini_toolbox-1.1.2.tar.gz", hash = "sha256:0f9d7591e40cc9a5a19e01a32301b67a04e7dcc5af49e7b45adb85065ec37e56", size = 9789, upload-time = "2025-12-07T09:34:26.154Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e5/74/3507b27191937b013184e2e4bfc7868c8ab0d91e1578d22a0243b19754bc/reachy_mini_toolbox-1.1.2-py3-none-any.whl", hash = "sha256:ee9c4de4428292e19a90e02cc2d3b6e36c26538ef4dfccbfb7cbbd89a656071b", size = 10601, upload-time = "2025-12-07T09:34:24.824Z" }, +] + +[[package]] +name = "regex" +version = "2026.5.9" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/dc/0e/49aee608ad09480e7fd276898c99ec6192985fa331abe4eb3a986094490b/regex-2026.5.9.tar.gz", hash = "sha256:a8234aa23ec39894bfe4a3f1b85616a7032481964a13ac6fc9f10de4f6fca270", size = 416074, upload-time = "2026-05-09T23:15:19.37Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fe/ed/0ad2c8edf634918eb4484365d3819fa7bd7f58daf807fe7fb21812c316e5/regex-2026.5.9-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a9e1328e17c84c1a5d22ec9f785ecef4a967fab9a42b6a8dc3bcbebd0a0c9e44", size = 489438, upload-time = "2026-05-09T23:11:29.374Z" }, + { url = "https://files.pythonhosted.org/packages/89/a9/4ed972ad263963b860b7c3e86e0e1bcc791def47b43b8c8efe57e710f139/regex-2026.5.9-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bfe1ce50cbfb569d74e1e4337da6468961f31dbea55fd85aa5de59c0947a805a", size = 291270, upload-time = "2026-05-09T23:11:33.254Z" }, + { url = "https://files.pythonhosted.org/packages/16/81/075930d9fa28c4ea1f53398dd015ee7c882f623539759113cda1257f4b82/regex-2026.5.9-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:15ee42209947f4ca045412eae98416317238163618ace2a8e54f99586a466733", size = 289198, upload-time = "2026-05-09T23:11:35.769Z" }, + { url = "https://files.pythonhosted.org/packages/c2/dc/c1f2df4027e82fc54b5a473e4b250f5139faca49a0fbe29a48668d228f34/regex-2026.5.9-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ccf5249114cc3e772ecdd88a98a86eca0fd74c61ce32a94743758c083fc05d48", size = 489445, upload-time = "2026-05-09T23:12:06.111Z" }, + { url = "https://files.pythonhosted.org/packages/03/d2/59f01110660081cce9c0bc30ebd0b5ee250dacf658e3248ed92f01e0e8ee/regex-2026.5.9-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46f1326ca6e65b0879d23ca302c0f2415aad42ff0309b9c818e7949fe19a41d8", size = 291271, upload-time = "2026-05-09T23:12:07.731Z" }, + { url = "https://files.pythonhosted.org/packages/58/b6/14b2c84ff90ddb370c81d27503f4a0fcf071496416f4855f6cc8c5d81c35/regex-2026.5.9-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ef31cbfe458e21c6122ba8150ff060e0c7789ed0d26eb423f25472584920b555", size = 289212, upload-time = "2026-05-09T23:12:09.266Z" }, + { url = "https://files.pythonhosted.org/packages/50/9b/6550044bc44e17c84d312c031c2ec42fbdb6a4ec4e29093be3a172d08772/regex-2026.5.9-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:57eeeb05db7979413dec5438f2db21d7ecbba787cde7a711df1a6f6df672aa06", size = 490451, upload-time = "2026-05-09T23:12:34.72Z" }, + { url = "https://files.pythonhosted.org/packages/1e/95/fc7ba4303b5a0f92446a12ee6778ef2c6c799233f5060042a31bf390cfe9/regex-2026.5.9-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:398c521292f4c7fb807001dcd54694d3a1fcafc179a36ad9cc56f98df85930b6", size = 292112, upload-time = "2026-05-09T23:12:36.285Z" }, + { url = "https://files.pythonhosted.org/packages/54/4b/ee27938d1b2c443e89a9a10e00d2d19aa5ee300cd3d61140644e93bb083e/regex-2026.5.9-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f7a7c26137296beba7784de6eba69c6a93a63ccebc385e4962fe67e267a91225", size = 289599, upload-time = "2026-05-09T23:12:38.089Z" }, +] + +[[package]] +name = "requests" +version = "2.34.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi", marker = "sys_platform == 'darwin'" }, + { name = "charset-normalizer", marker = "sys_platform == 'darwin'" }, + { name = "idna", marker = "sys_platform == 'darwin'" }, + { name = "urllib3", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ac/c3/e2a2b89f2d3e2179abd6d00ebd70bff6273f37fb3e0cc209f48b39d00cbf/requests-2.34.2.tar.gz", hash = "sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed", size = 142856, upload-time = "2026-05-14T19:25:27.735Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl", hash = "sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0", size = 73075, upload-time = "2026-05-14T19:25:26.443Z" }, +] + +[[package]] +name = "requests-toolbelt" +version = "1.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "requests", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f3/61/d7545dafb7ac2230c70d38d31cbfe4cc64f7144dc41f6e4e4b78ecd9f5bb/requests-toolbelt-1.0.0.tar.gz", hash = "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6", size = 206888, upload-time = "2023-05-01T04:11:33.229Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl", hash = "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06", size = 54481, upload-time = "2023-05-01T04:11:28.427Z" }, +] + +[[package]] +name = "rich" +version = "14.3.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown-it-py", marker = "sys_platform == 'darwin'" }, + { name = "pygments", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e9/67/cae617f1351490c25a4b8ac3b8b63a4dda609295d8222bad12242dfdc629/rich-14.3.4.tar.gz", hash = "sha256:817e02727f2b25b40ef56f5aa2217f400c8489f79ca8f46ea2b70dd5e14558a9", size = 230524, upload-time = "2026-04-11T02:57:45.419Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/76/6d163cfac87b632216f71879e6b2cf17163f773ff59c00b5ff4900a80fa3/rich-14.3.4-py3-none-any.whl", hash = "sha256:07e7adb4690f68864777b1450859253bed81a99a31ac321ac1817b2313558952", size = 310480, upload-time = "2026-04-11T02:57:47.484Z" }, +] + +[[package]] +name = "ruff" +version = "0.12.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/24/90/5255432602c0b196a0da6720f6f76b93eb50baef46d3c9b0025e2f9acbf3/ruff-0.12.0.tar.gz", hash = "sha256:4d047db3662418d4a848a3fdbfaf17488b34b62f527ed6f10cb8afd78135bc5c", size = 4376101, upload-time = "2025-06-17T15:19:26.217Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/d3/021dde5a988fa3e25d2468d1dadeea0ae89dc4bc67d0140c6e68818a12a1/ruff-0.12.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:05ed0c914fabc602fc1f3b42c53aa219e5736cb030cdd85640c32dbc73da74a6", size = 11118435, upload-time = "2025-06-17T15:18:49.064Z" }, + { url = "https://files.pythonhosted.org/packages/07/a2/01a5acf495265c667686ec418f19fd5c32bcc326d4c79ac28824aecd6a32/ruff-0.12.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:07a7aa9b69ac3fcfda3c507916d5d1bca10821fe3797d46bad10f2c6de1edda0", size = 10466010, upload-time = "2025-06-17T15:18:51.341Z" }, +] + +[[package]] +name = "rustypot" +version = "1.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/98/5d/dec9f5fc87bc0dc10f851e8d26ad27dc7680a69d1b69024f8091ddc4ebb3/rustypot-1.5.0.tar.gz", hash = "sha256:8e2a49c6d5562c8e5fb05b032a48f11afcf20fd244d42c956294d3b4bbdd6c91", size = 61436, upload-time = "2026-05-27T08:43:43.271Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e6/20/bc1d04e4007fa8b4269a54da3433a0a4a8a587f3137d6840fe49ae35edc0/rustypot-1.5.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:d5bea66838a27fc97b325441f2b134aa1770221aab9667e3adbe37c247e3170b", size = 1811820, upload-time = "2026-05-27T08:43:06.102Z" }, + { url = "https://files.pythonhosted.org/packages/73/aa/d1aead4ba8442e4f9025e2d44e1693b702921a0c1b015cb303da83594a82/rustypot-1.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1b3bd37574ad37de6e27d4a42a16d8e2d14d98d2a9c4956ada490bc3d0e4cb68", size = 1633195, upload-time = "2026-05-27T08:42:57.569Z" }, + { url = "https://files.pythonhosted.org/packages/86/75/e02d49d393c66641a6d70d0460e3234aa1bc22c2ed67c1c442058eeada56/rustypot-1.5.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:81dac7c9d5f1a59aa903ca97c5d9a3537feb196904877a755c786c88db4bed65", size = 1811930, upload-time = "2026-05-27T08:43:08.171Z" }, + { url = "https://files.pythonhosted.org/packages/9b/00/10af39f4847995aa88c7de87c801cf62ab4e619f742b1ea9991932db4c6a/rustypot-1.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4ff7f191f744104ec74f75b77ca8605bf70c392388b5423168a23b2af87ceef1", size = 1634144, upload-time = "2026-05-27T08:42:59.394Z" }, + { url = "https://files.pythonhosted.org/packages/c5/d3/5462bda708c9c53ca472a5add4a0f3bf73f986081031077e277344ff2c42/rustypot-1.5.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:e975ccfd0023db621ad5d828ba55ccdd0e3f36dc480ffefbc98bc1cbe2ddfed3", size = 1778207, upload-time = "2026-05-27T08:43:09.762Z" }, + { url = "https://files.pythonhosted.org/packages/09/18/fc8d16fa7aca3167edbf866f84eb45f1896a4a7235d8f3861bf05be1236e/rustypot-1.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5a799242f606d7635e4bf9668e1a149dede6ff16f4534ee3909bcb6ae9edf704", size = 1624935, upload-time = "2026-05-27T08:43:01.293Z" }, +] + +[[package]] +name = "safehttpx" +version = "0.1.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "httpx", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/89/d1/4282284d9cf1ee873607a46442da977fc3c985059315ab23610be31d5885/safehttpx-0.1.7.tar.gz", hash = "sha256:db201c0978c41eddb8bb480f3eee59dd67304fdd91646035e9d9a720049a9d23", size = 10385, upload-time = "2025-10-24T18:30:09.783Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2e/a3/0f0b7d78e2f1eb9e8e1afbff1d2bff8d60144aee17aca51c065b516743dd/safehttpx-0.1.7-py3-none-any.whl", hash = "sha256:c4f4a162db6993464d7ca3d7cc4af0ffc6515a606dfd220b9f82c6945d869cde", size = 8959, upload-time = "2025-10-24T18:30:08.733Z" }, +] + +[[package]] +name = "safetensors" +version = "0.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/45/06/f955dbbb1859e3bd23c8ac6141af5106e7ad5fedec4a3a6e3d60f94b7001/safetensors-0.8.0.tar.gz", hash = "sha256:fabaf3e0f18a6618d9b36560682562157f77c2b71fcffc7b432be2baed9d753d", size = 325846, upload-time = "2026-06-09T07:52:25.563Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/39/a0/f718cda65b05407d228f97602cf60dca269c979867aa5beb25410de26cd3/safetensors-0.8.0-cp310-abi3-macosx_10_12_x86_64.whl", hash = "sha256:c554f85858e05226d3c2828e32395e677434685d6d94594a41643361c5e837f0", size = 473568, upload-time = "2026-06-09T07:52:18.829Z" }, + { url = "https://files.pythonhosted.org/packages/f5/b1/fa7c600e7dceae12e9606c7578cbc9ff1e1ed55844883ee5c92205e86226/safetensors-0.8.0-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:c80201d22cbf405b80647a60ada77bba06c8fba2da2743ba1e89cdcc39a81f25", size = 484562, upload-time = "2026-06-09T07:52:17.518Z" }, +] + +[[package]] +name = "scikit-learn" +version = "1.7.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and sys_platform == 'darwin'", +] +dependencies = [ + { name = "joblib", marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "threadpoolctl", marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/98/c2/a7855e41c9d285dfe86dc50b250978105dce513d6e459ea66a6aeb0e1e0c/scikit_learn-1.7.2.tar.gz", hash = "sha256:20e9e49ecd130598f1ca38a1d85090e1a600147b9c02fa6f15d69cb53d968fda", size = 7193136, upload-time = "2025-09-09T08:21:29.075Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ba/3e/daed796fd69cce768b8788401cc464ea90b306fb196ae1ffed0b98182859/scikit_learn-1.7.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6b33579c10a3081d076ab403df4a4190da4f4432d443521674637677dc91e61f", size = 9336221, upload-time = "2025-09-09T08:20:19.328Z" }, + { url = "https://files.pythonhosted.org/packages/1c/ce/af9d99533b24c55ff4e18d9b7b4d9919bbc6cd8f22fe7a7be01519a347d5/scikit_learn-1.7.2-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:36749fb62b3d961b1ce4fedf08fa57a1986cd409eff2d783bca5d4b9b5fce51c", size = 8653834, upload-time = "2025-09-09T08:20:22.073Z" }, + { url = "https://files.pythonhosted.org/packages/43/83/564e141eef908a5863a54da8ca342a137f45a0bfb71d1d79704c9894c9d1/scikit_learn-1.7.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c7509693451651cd7361d30ce4e86a1347493554f172b1c72a39300fa2aea79e", size = 9331967, upload-time = "2025-09-09T08:20:32.421Z" }, + { url = "https://files.pythonhosted.org/packages/18/d6/ba863a4171ac9d7314c4d3fc251f015704a2caeee41ced89f321c049ed83/scikit_learn-1.7.2-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:0486c8f827c2e7b64837c731c8feff72c0bd2b998067a8a9cbc10643c31f0fe1", size = 8648645, upload-time = "2025-09-09T08:20:34.436Z" }, + { url = "https://files.pythonhosted.org/packages/a7/aa/3996e2196075689afb9fce0410ebdb4a09099d7964d061d7213700204409/scikit_learn-1.7.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:8d91a97fa2b706943822398ab943cde71858a50245e31bc71dba62aab1d60a96", size = 9259818, upload-time = "2025-09-09T08:20:43.19Z" }, + { url = "https://files.pythonhosted.org/packages/43/5d/779320063e88af9c4a7c2cf463ff11c21ac9c8bd730c4a294b0000b666c9/scikit_learn-1.7.2-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:acbc0f5fd2edd3432a22c69bed78e837c70cf896cd7993d71d51ba6708507476", size = 8636997, upload-time = "2025-09-09T08:20:45.468Z" }, +] + +[[package]] +name = "scikit-learn" +version = "1.9.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.12' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and sys_platform == 'darwin'", +] +dependencies = [ + { name = "joblib", marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, + { name = "narwhals", marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, + { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*' and sys_platform == 'darwin'" }, + { name = "scipy", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12' and sys_platform == 'darwin'" }, + { name = "threadpoolctl", marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fa/6f/37092bdb25f712817231799fc5674d8e704066a8a70c1d2d40517e18b4ab/scikit_learn-1.9.0.tar.gz", hash = "sha256:8833266989d3a5110178a9fae30783675460724d0e1efb13b14901d2c660c557", size = 7750767, upload-time = "2026-06-02T11:54:32.706Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f5/be/e844fd9586e66540a15b71924d17a6cbc1bb749e81ddd0a796bcdba4c055/scikit_learn-1.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9db6f4d34e68c8899e4cab27fdf8eafe6ed21f2ba52ceb25ea250cd237f8e47b", size = 8789686, upload-time = "2026-06-02T11:53:05.439Z" }, + { url = "https://files.pythonhosted.org/packages/42/e2/ff880f62677a17d035817d543cb0fc8727d01eccbee81c5f7fc733a9d856/scikit_learn-1.9.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:f401448645a3e7bc115aa3c094097865155b34bff1cba8101857d9104e99074c", size = 8256782, upload-time = "2026-06-02T11:53:08.904Z" }, + { url = "https://files.pythonhosted.org/packages/ac/20/75f915ff375d6249e6550ac740fdbbd66159a068fd3af1400ff62036b07a/scikit_learn-1.9.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2bd41b0d201bc81575531b96b713d3eb5e5f50fb0b82101ff0f92294fdc236ac", size = 8741122, upload-time = "2026-06-02T11:53:24.08Z" }, + { url = "https://files.pythonhosted.org/packages/cc/d5/2b5148f2279196775e1db2aeb85d14b70ac80e7e32b3b28e7ebeafb0901d/scikit_learn-1.9.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:5be45aa4a42a68a533913a6ed736cf309de2226411c79ef8d609a5456f1939b1", size = 8261512, upload-time = "2026-06-02T11:53:27.183Z" }, +] + +[[package]] +name = "scipy" +version = "1.15.3" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and sys_platform == 'darwin'", +] +dependencies = [ + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0f/37/6964b830433e654ec7485e45a00fc9a27cf868d622838f6b6d9c5ec0d532/scipy-1.15.3.tar.gz", hash = "sha256:eae3cf522bc7df64b42cad3925c876e1b0b6c35c1337c93e12c0f366f55b0eaf", size = 59419214, upload-time = "2025-05-08T16:13:05.955Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/78/2f/4966032c5f8cc7e6a60f1b2e0ad686293b9474b65246b0c642e3ef3badd0/scipy-1.15.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:a345928c86d535060c9c2b25e71e87c39ab2f22fc96e9636bd74d1dbf9de448c", size = 38702770, upload-time = "2025-05-08T16:04:20.849Z" }, + { url = "https://files.pythonhosted.org/packages/a0/6e/0c3bf90fae0e910c274db43304ebe25a6b391327f3f10b5dcc638c090795/scipy-1.15.3-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:ad3432cb0f9ed87477a8d97f03b763fd1d57709f1bbde3c9369b1dff5503b253", size = 30094511, upload-time = "2025-05-08T16:04:27.103Z" }, + { url = "https://files.pythonhosted.org/packages/ea/b1/4deb37252311c1acff7f101f6453f0440794f51b6eacb1aad4459a134081/scipy-1.15.3-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:aef683a9ae6eb00728a542b796f52a5477b78252edede72b8327a886ab63293f", size = 22368151, upload-time = "2025-05-08T16:04:31.731Z" }, + { url = "https://files.pythonhosted.org/packages/38/7d/f457626e3cd3c29b3a49ca115a304cebb8cc6f31b04678f03b216899d3c6/scipy-1.15.3-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:1c832e1bd78dea67d5c16f786681b28dd695a8cb1fb90af2e27580d3d0967e92", size = 25121732, upload-time = "2025-05-08T16:04:36.596Z" }, + { url = "https://files.pythonhosted.org/packages/96/ab/5cc9f80f28f6a7dff646c5756e559823614a42b1939d86dd0ed550470210/scipy-1.15.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:993439ce220d25e3696d1b23b233dd010169b62f6456488567e830654ee37a6b", size = 38714255, upload-time = "2025-05-08T16:05:14.596Z" }, + { url = "https://files.pythonhosted.org/packages/4a/4a/66ba30abe5ad1a3ad15bfb0b59d22174012e8056ff448cb1644deccbfed2/scipy-1.15.3-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:34716e281f181a02341ddeaad584205bd2fd3c242063bd3423d61ac259ca7eba", size = 30111035, upload-time = "2025-05-08T16:05:20.152Z" }, + { url = "https://files.pythonhosted.org/packages/4b/fa/a7e5b95afd80d24313307f03624acc65801846fa75599034f8ceb9e2cbf6/scipy-1.15.3-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3b0334816afb8b91dab859281b1b9786934392aa3d527cd847e41bb6f45bee65", size = 22384499, upload-time = "2025-05-08T16:05:24.494Z" }, + { url = "https://files.pythonhosted.org/packages/17/99/f3aaddccf3588bb4aea70ba35328c204cadd89517a1612ecfda5b2dd9d7a/scipy-1.15.3-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:6db907c7368e3092e24919b5e31c76998b0ce1684d51a90943cb0ed1b4ffd6c1", size = 25152602, upload-time = "2025-05-08T16:05:29.313Z" }, + { url = "https://files.pythonhosted.org/packages/37/4b/683aa044c4162e10ed7a7ea30527f2cbd92e6999c10a8ed8edb253836e9c/scipy-1.15.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6ac6310fdbfb7aa6612408bd2f07295bcbd3fda00d2d702178434751fe48e019", size = 38766735, upload-time = "2025-05-08T16:06:06.471Z" }, + { url = "https://files.pythonhosted.org/packages/7b/7e/f30be3d03de07f25dc0ec926d1681fed5c732d759ac8f51079708c79e680/scipy-1.15.3-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:185cd3d6d05ca4b44a8f1595af87f9c372bb6acf9c808e99aa3e9aa03bd98cf6", size = 30173284, upload-time = "2025-05-08T16:06:11.686Z" }, + { url = "https://files.pythonhosted.org/packages/07/9c/0ddb0d0abdabe0d181c1793db51f02cd59e4901da6f9f7848e1f96759f0d/scipy-1.15.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:05dc6abcd105e1a29f95eada46d4a3f251743cfd7d3ae8ddb4088047f24ea477", size = 22446958, upload-time = "2025-05-08T16:06:15.97Z" }, + { url = "https://files.pythonhosted.org/packages/af/43/0bce905a965f36c58ff80d8bea33f1f9351b05fad4beaad4eae34699b7a1/scipy-1.15.3-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:06efcba926324df1696931a57a176c80848ccd67ce6ad020c810736bfd58eb1c", size = 25242454, upload-time = "2025-05-08T16:06:20.394Z" }, +] + +[[package]] +name = "scipy" +version = "1.17.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version == '3.11.*' and sys_platform == 'darwin'", +] +dependencies = [ + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*' and sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7a/97/5a3609c4f8d58b039179648e62dd220f89864f56f7357f5d4f45c29eb2cc/scipy-1.17.1.tar.gz", hash = "sha256:95d8e012d8cb8816c226aef832200b1d45109ed4464303e997c5b13122b297c0", size = 30573822, upload-time = "2026-02-23T00:26:24.851Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/df/75/b4ce781849931fef6fd529afa6b63711d5a733065722d0c3e2724af9e40a/scipy-1.17.1-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:1f95b894f13729334fb990162e911c9e5dc1ab390c58aa6cbecb389c5b5e28ec", size = 31613675, upload-time = "2026-02-23T00:16:00.13Z" }, + { url = "https://files.pythonhosted.org/packages/f7/58/bccc2861b305abdd1b8663d6130c0b3d7cc22e8d86663edbc8401bfd40d4/scipy-1.17.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:e18f12c6b0bc5a592ed23d3f7b891f68fd7f8241d69b7883769eb5d5dfb52696", size = 28162057, upload-time = "2026-02-23T00:16:09.456Z" }, + { url = "https://files.pythonhosted.org/packages/6d/ee/18146b7757ed4976276b9c9819108adbc73c5aad636e5353e20746b73069/scipy-1.17.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:a3472cfbca0a54177d0faa68f697d8ba4c80bbdc19908c3465556d9f7efce9ee", size = 20334032, upload-time = "2026-02-23T00:16:17.358Z" }, + { url = "https://files.pythonhosted.org/packages/ec/e6/cef1cf3557f0c54954198554a10016b6a03b2ec9e22a4e1df734936bd99c/scipy-1.17.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:766e0dc5a616d026a3a1cffa379af959671729083882f50307e18175797b3dfd", size = 22709533, upload-time = "2026-02-23T00:16:25.791Z" }, + { url = "https://files.pythonhosted.org/packages/35/48/b992b488d6f299dbe3f11a20b24d3dda3d46f1a635ede1c46b5b17a7b163/scipy-1.17.1-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:35c3a56d2ef83efc372eaec584314bd0ef2e2f0d2adb21c55e6ad5b344c0dcb8", size = 31610954, upload-time = "2026-02-23T00:17:49.855Z" }, + { url = "https://files.pythonhosted.org/packages/b2/02/cf107b01494c19dc100f1d0b7ac3cc08666e96ba2d64db7626066cee895e/scipy-1.17.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:fcb310ddb270a06114bb64bbe53c94926b943f5b7f0842194d585c65eb4edd76", size = 28172662, upload-time = "2026-02-23T00:18:01.64Z" }, + { url = "https://files.pythonhosted.org/packages/cf/a9/599c28631bad314d219cf9ffd40e985b24d603fc8a2f4ccc5ae8419a535b/scipy-1.17.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:cc90d2e9c7e5c7f1a482c9875007c095c3194b1cfedca3c2f3291cdc2bc7c086", size = 20344366, upload-time = "2026-02-23T00:18:12.015Z" }, + { url = "https://files.pythonhosted.org/packages/35/f5/906eda513271c8deb5af284e5ef0206d17a96239af79f9fa0aebfe0e36b4/scipy-1.17.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:c80be5ede8f3f8eded4eff73cc99a25c388ce98e555b17d31da05287015ffa5b", size = 22704017, upload-time = "2026-02-23T00:18:21.502Z" }, +] + +[[package]] +name = "scipy" +version = "1.18.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.12' and sys_platform == 'darwin'", +] +dependencies = [ + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12' and sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a7/25/c2700dfaf6442b4effaa91af24ebce5dc9d31bb4a69706313aae70d72cd0/scipy-1.18.0.tar.gz", hash = "sha256:67b2ad2ad54c72ca6d04975a9b2df8c3638c34ddd5b28738e94fc2b57929d378", size = 30774447, upload-time = "2026-06-19T15:01:43.456Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6a/19/ca10ead60b0acc80b2b833c2c4a4f2ff753d0f58b811f70d911c7e94a25c/scipy-1.18.0-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:7bd21faaf5a1a3b2eff922d02db5f191b99a6518db9078a8fb23169f6d22259a", size = 31056519, upload-time = "2026-06-19T14:59:45.203Z" }, + { url = "https://files.pythonhosted.org/packages/96/72/1e6442a00cd2924d361aa1b642ab6373ec35c6fabf311a760be9f76e0f13/scipy-1.18.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:265915e79107de9f946b855e50d7470d5893ec3f54b342e1aa6201cbdcd8bb6b", size = 28681889, upload-time = "2026-06-19T14:59:48.103Z" }, + { url = "https://files.pythonhosted.org/packages/9b/2d/11dd93d21e147a73ba22bd75c0b9208d3a2e0ec76d53170ce7d9029b1015/scipy-1.18.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:9ab7b758be6940954a713ee466e2043e9f6e2ed965c1fce5c91039f4be3d90a9", size = 20423580, upload-time = "2026-06-19T14:59:50.665Z" }, + { url = "https://files.pythonhosted.org/packages/9c/01/93552f75e0d2a7dd115a45e59209c51e8d514daff02fc887d2623be06fe1/scipy-1.18.0-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:97b6cddaaee0a779ef6b5ca83c9604b27cc16b2b8fc22c142652df8793319fb8", size = 23054441, upload-time = "2026-06-19T14:59:53.564Z" }, +] + +[[package]] +name = "semantic-version" +version = "2.10.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/31/f2289ce78b9b473d582568c234e104d2a342fd658cc288a7553d83bb8595/semantic_version-2.10.0.tar.gz", hash = "sha256:bdabb6d336998cbb378d4b9db3a4b56a1e3235701dc05ea2690d9a997ed5041c", size = 52289, upload-time = "2022-05-26T13:35:23.454Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6a/23/8146aad7d88f4fcb3a6218f41a60f6c2d4e3a72de72da1825dc7c8f7877c/semantic_version-2.10.0-py2.py3-none-any.whl", hash = "sha256:de78a3b8e0feda74cabc54aab2da702113e33ac9d9eb9d2389bcf1f58b7d9177", size = 15552, upload-time = "2022-05-26T13:35:21.206Z" }, +] + +[[package]] +name = "setuptools" +version = "81.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0d/1c/73e719955c59b8e424d015ab450f51c0af856ae46ea2da83eba51cc88de1/setuptools-81.0.0.tar.gz", hash = "sha256:487b53915f52501f0a79ccfd0c02c165ffe06631443a886740b91af4b7a5845a", size = 1198299, upload-time = "2026-02-06T21:10:39.601Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e1/e3/c164c88b2e5ce7b24d667b9bd83589cf4f3520d97cad01534cd3c4f55fdb/setuptools-81.0.0-py3-none-any.whl", hash = "sha256:fdd925d5c5d9f62e4b74b30d6dd7828ce236fd6ed998a08d81de62ce5a6310d6", size = 1062021, upload-time = "2026-02-06T21:10:37.175Z" }, +] + +[[package]] +name = "shellingham" +version = "1.5.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de", size = 10310, upload-time = "2023-10-24T04:13:40.426Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755, upload-time = "2023-10-24T04:13:38.866Z" }, +] + +[[package]] +name = "six" +version = "1.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" }, +] + +[[package]] +name = "smmap" +version = "5.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1f/ea/49c993d6dfdd7338c9b1000a0f36817ed7ec84577ae2e52f890d1a4ff909/smmap-5.0.3.tar.gz", hash = "sha256:4d9debb8b99007ae47165abc08670bd74cb74b5227dda7f643eccc4e9eb5642c", size = 22506, upload-time = "2026-03-09T03:43:26.1Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/d4/59e74daffcb57a07668852eeeb6035af9f32cbfd7a1d2511f17d2fe6a738/smmap-5.0.3-py3-none-any.whl", hash = "sha256:c106e05d5a61449cf6ba9a1e650227ecfb141590d2a98412103ff35d89fc7b2f", size = 24390, upload-time = "2026-03-09T03:43:24.361Z" }, +] + +[[package]] +name = "sniffio" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/87/a6771e1546d97e7e041b6ae58d80074f81b7d5121207425c964ddf5cfdbd/sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc", size = 20372, upload-time = "2024-02-25T23:20:04.057Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235, upload-time = "2024-02-25T23:20:01.196Z" }, +] + +[[package]] +name = "sounddevice" +version = "0.5.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2a/f9/2592608737553638fca98e21e54bfec40bf577bb98a61b2770c912aab25e/sounddevice-0.5.5.tar.gz", hash = "sha256:22487b65198cb5bf2208755105b524f78ad173e5ab6b445bdab1c989f6698df3", size = 143191, upload-time = "2026-01-23T18:36:43.529Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/0a/478e441fd049002cf308520c0d62dd8333e7c6cc8d997f0dda07b9fbcc46/sounddevice-0.5.5-py3-none-any.whl", hash = "sha256:30ff99f6c107f49d25ad16a45cacd8d91c25a1bcdd3e81a206b921a3a6405b1f", size = 32807, upload-time = "2026-01-23T18:36:35.649Z" }, + { url = "https://files.pythonhosted.org/packages/56/f9/c037c35f6d0b6bc3bc7bfb314f1d6f1f9a341328ef47cd63fc4f850a7b27/sounddevice-0.5.5-py3-none-macosx_10_6_x86_64.macosx_10_6_universal2.whl", hash = "sha256:05eb9fd6c54c38d67741441c19164c0dae8ce80453af2d8c4ad2e7823d15b722", size = 108557, upload-time = "2026-01-23T18:36:37.41Z" }, +] + +[[package]] +name = "soundfile" +version = "0.14.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "sys_platform == 'darwin'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, + { name = "typing-extensions", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d2/db/949331952a6fb1c5b12e9de80fd08747966c2039d1a61db4764fbd3981c2/soundfile-0.14.0.tar.gz", hash = "sha256:ba1c1a2d618bca5c406647c83b89f07cc8810fa506a50622a6993ba130c1de11", size = 47842, upload-time = "2026-06-06T08:58:47.869Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b1/d1/5e338af9ca6ed0786cd5bb03f6d60de1c325728c1189014f3b59aae7403c/soundfile-0.14.0-py2.py3-none-any.whl", hash = "sha256:8ba81ae3a89fd5ab3bef8a8eb481fbbe794e806309675a89b4df48b8d31908a8", size = 26799, upload-time = "2026-06-06T08:58:33.269Z" }, + { url = "https://files.pythonhosted.org/packages/7e/72/c6b21e58d3113596e7e8de0a08d6f1d95173492cfbca0a4db14148cbba2a/soundfile-0.14.0-py2.py3-none-macosx_10_9_x86_64.whl", hash = "sha256:19be05428da76ed61a4cad29b8e4bcf43a3e5c100089d2ec81dc961eed1b0dd4", size = 1144568, upload-time = "2026-06-06T08:58:35.231Z" }, + { url = "https://files.pythonhosted.org/packages/63/7a/dfdd6f8c748988427119f75eb860a3cedd858d1aea1fe28f39ad8559ef22/soundfile-0.14.0-py2.py3-none-macosx_11_0_arm64.whl", hash = "sha256:d828d35a059626da52f1415b5faee610aeab393319cb3fc4a9aef47b619fc14c", size = 1103726, upload-time = "2026-06-06T08:58:37.948Z" }, +] + +[[package]] +name = "soxr" +version = "1.1.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' and sys_platform == 'darwin'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ed/11/27cebce4a108f77afea7c80545115536b45e3f11ebfb914f638fdd9ba847/soxr-1.1.0.tar.gz", hash = "sha256:9f228ae21c78fa9359ca98d8a5e8e91f30639e438e574133dace62c5b5309e44", size = 173067, upload-time = "2026-05-03T00:15:18.214Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/75/96/6b335638dd3ef4e5d50b9a0a7497e8433ab10fb45457497010074dd3c734/soxr-1.1.0-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:9564d82f7fa6bf548e5f18bb86235dff20eea8bd30727b64d49783c95c34fb8d", size = 205270, upload-time = "2026-05-03T00:14:38.391Z" }, + { url = "https://files.pythonhosted.org/packages/d5/0e/79e479b38f014757af877755c6eeea10c8750f66ef1e2231709f1d5dc7ab/soxr-1.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9443e5eb82152d8952422b7285692192cc7dcffa5218bb511b096203018bc273", size = 167049, upload-time = "2026-05-03T00:14:40.226Z" }, + { url = "https://files.pythonhosted.org/packages/8e/49/3e6bc84f87439f222f40b616e9a29a170f41fb564710ea510df19dc26907/soxr-1.1.0-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:34cc92208c3c412c046813e69da639c04a792c6a41fbfd7d909d359cd3e97a2d", size = 205699, upload-time = "2026-05-03T00:14:46.67Z" }, + { url = "https://files.pythonhosted.org/packages/2f/94/216f46096a85b07d1e6ba7fd44491402e912a3d688cd4f36f0a600ca155f/soxr-1.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bd30f7201eac896ebf5db7b09156e6f1a1b82601900d29d9c8449bdad8365b11", size = 167381, upload-time = "2026-05-03T00:14:48.012Z" }, + { url = "https://files.pythonhosted.org/packages/06/8a/f3da7973b5f1b05d2d7e94d5376b881dcbc05297900cae6c3d33d95b209b/soxr-1.1.0-cp312-abi3-macosx_10_14_x86_64.whl", hash = "sha256:e0e09fa633ce2e67df08b298afced4d184f6e753fc330f241022250f1d0d61da", size = 204124, upload-time = "2026-05-03T00:14:54.505Z" }, + { url = "https://files.pythonhosted.org/packages/03/dc/200013a74641f8774664bbcd2346c695c05c2e300ea792adcb40a293eed0/soxr-1.1.0-cp312-abi3-macosx_11_0_arm64.whl", hash = "sha256:d6a7ad82b8d5f3fcc04b1d2ca055562b96af571e1d4fa7c6c61d0fb509ac43b4", size = 165457, upload-time = "2026-05-03T00:14:56.007Z" }, +] + +[[package]] +name = "starlette" +version = "0.52.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio", marker = "sys_platform == 'darwin'" }, + { name = "typing-extensions", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c4/68/79977123bb7be889ad680d79a40f339082c1978b5cfcf62c2d8d196873ac/starlette-0.52.1.tar.gz", hash = "sha256:834edd1b0a23167694292e94f597773bc3f89f362be6effee198165a35d62933", size = 2653702, upload-time = "2026-01-18T13:34:11.062Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/0d/13d1d239a25cbfb19e740db83143e95c772a1fe10202dda4b76792b114dd/starlette-0.52.1-py3-none-any.whl", hash = "sha256:0029d43eb3d273bc4f83a08720b4912ea4b071087a3b48db01b7c839f7954d74", size = 74272, upload-time = "2026-01-18T13:34:09.188Z" }, +] + +[[package]] +name = "supervision" +version = "0.29.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "defusedxml", marker = "sys_platform == 'darwin'" }, + { name = "matplotlib", version = "3.10.9", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "matplotlib", version = "3.11.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, + { name = "opencv-python", marker = "sys_platform == 'darwin'" }, + { name = "pillow", marker = "sys_platform == 'darwin'" }, + { name = "pydeprecate", marker = "sys_platform == 'darwin'" }, + { name = "pyyaml", marker = "sys_platform == 'darwin'" }, + { name = "requests", marker = "sys_platform == 'darwin'" }, + { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*' and sys_platform == 'darwin'" }, + { name = "scipy", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12' and sys_platform == 'darwin'" }, + { name = "tqdm", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/dc/ec/293e5693ef5f32b54533b680b909a96976925adbb5c3bbfbf53b199182e0/supervision-0.29.1.tar.gz", hash = "sha256:2db9f968a3253e6778573c39bbb8a8e3fa586ece6c98fbdc41d8fd8508eda5af", size = 246950, upload-time = "2026-06-23T19:55:37.717Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/7c/ed95842ac2e323f6a0fcaf5a5bb56b62c0596a4b177872da9f7605ca1ceb/supervision-0.29.1-py3-none-any.whl", hash = "sha256:8518f6bad0d19ff7a959d1b9eb1b54517aded814aa7f237598fed0e3a772c281", size = 280218, upload-time = "2026-06-23T19:55:36.114Z" }, +] + +[[package]] +name = "sympy" +version = "1.14.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mpmath", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/83/d3/803453b36afefb7c2bb238361cd4ae6125a569b4db67cd9e79846ba2d68c/sympy-1.14.0.tar.gz", hash = "sha256:d3d3fe8df1e5a0b42f0e7bdf50541697dbe7d23746e894990c030e2b05e72517", size = 7793921, upload-time = "2025-04-27T18:05:01.611Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", hash = "sha256:e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5", size = 6299353, upload-time = "2025-04-27T18:04:59.103Z" }, +] + +[[package]] +name = "threadpoolctl" +version = "3.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b7/4d/08c89e34946fce2aec4fbb45c9016efd5f4d7f24af8e5d93296e935631d8/threadpoolctl-3.6.0.tar.gz", hash = "sha256:8ab8b4aa3491d812b623328249fab5302a68d2d71745c8a4c719a2fcaba9f44e", size = 21274, upload-time = "2025-03-13T13:49:23.031Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl", hash = "sha256:43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb", size = 18638, upload-time = "2025-03-13T13:49:21.846Z" }, +] + +[[package]] +name = "tokenizers" +version = "0.22.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "huggingface-hub", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/73/6f/f80cfef4a312e1fb34baf7d85c72d4411afde10978d4657f8cdd811d3ccc/tokenizers-0.22.2.tar.gz", hash = "sha256:473b83b915e547aa366d1eee11806deaf419e17be16310ac0a14077f1e28f917", size = 372115, upload-time = "2026-01-05T10:45:15.988Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/92/97/5dbfabf04c7e348e655e907ed27913e03db0923abb5dfdd120d7b25630e1/tokenizers-0.22.2-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:544dd704ae7238755d790de45ba8da072e9af3eea688f698b137915ae959281c", size = 3100275, upload-time = "2026-01-05T10:41:02.158Z" }, + { url = "https://files.pythonhosted.org/packages/2e/47/174dca0502ef88b28f1c9e06b73ce33500eedfac7a7692108aec220464e7/tokenizers-0.22.2-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:1e418a55456beedca4621dbab65a318981467a2b188e982a23e117f115ce5001", size = 2981472, upload-time = "2026-01-05T10:41:00.276Z" }, +] + +[[package]] +name = "toml" +version = "0.10.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/be/ba/1f744cdc819428fc6b5084ec34d9b30660f6f9daaf70eead706e3203ec3c/toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f", size = 22253, upload-time = "2020-11-01T01:40:22.204Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/44/6f/7120676b6d73228c96e17f1f794d8ab046fc910d781c8d151120c3f1569e/toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b", size = 16588, upload-time = "2020-11-01T01:40:20.672Z" }, +] + +[[package]] +name = "tomli" +version = "2.4.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/22/de/48c59722572767841493b26183a0d1cc411d54fd759c5607c4590b6563a6/tomli-2.4.1.tar.gz", hash = "sha256:7c7e1a961a0b2f2472c1ac5b69affa0ae1132c39adcb67aba98568702b9cc23f", size = 17543, upload-time = "2026-03-25T20:22:03.828Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/11/db3d5885d8528263d8adc260bb2d28ebf1270b96e98f0e0268d32b8d9900/tomli-2.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f8f0fc26ec2cc2b965b7a3b87cd19c5c6b8c5e5f436b984e85f486d652285c30", size = 154704, upload-time = "2026-03-25T20:21:10.473Z" }, + { url = "https://files.pythonhosted.org/packages/6d/f7/675db52c7e46064a9aa928885a9b20f4124ecb9bc2e1ce74c9106648d202/tomli-2.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4ab97e64ccda8756376892c53a72bd1f964e519c77236368527f758fbc36a53a", size = 149454, upload-time = "2026-03-25T20:21:12.036Z" }, + { url = "https://files.pythonhosted.org/packages/c1/ba/42f134a3fe2b370f555f44b1d72feebb94debcab01676bf918d0cb70e9aa/tomli-2.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c742f741d58a28940ce01d58f0ab2ea3ced8b12402f162f4d534dfe18ba1cd6a", size = 155924, upload-time = "2026-03-25T20:21:21.626Z" }, + { url = "https://files.pythonhosted.org/packages/dc/c7/62d7a17c26487ade21c5422b646110f2162f1fcc95980ef7f63e73c68f14/tomli-2.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7f86fd587c4ed9dd76f318225e7d9b29cfc5a9d43de44e5754db8d1128487085", size = 150018, upload-time = "2026-03-25T20:21:23.002Z" }, + { url = "https://files.pythonhosted.org/packages/7b/61/cceae43728b7de99d9b847560c262873a1f6c98202171fd5ed62640b494b/tomli-2.4.1-py3-none-any.whl", hash = "sha256:0d85819802132122da43cb86656f8d1f8c6587d54ae7dcaf30e90533028b49fe", size = 14583, upload-time = "2026-03-25T20:22:03.012Z" }, +] + +[[package]] +name = "tomlkit" +version = "0.13.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cc/18/0bbf3884e9eaa38819ebe46a7bd25dcd56b67434402b66a58c4b8e552575/tomlkit-0.13.3.tar.gz", hash = "sha256:430cf247ee57df2b94ee3fbe588e71d362a941ebb545dec29b53961d61add2a1", size = 185207, upload-time = "2025-06-05T07:13:44.947Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bd/75/8539d011f6be8e29f339c42e633aae3cb73bffa95dd0f9adec09b9c58e85/tomlkit-0.13.3-py3-none-any.whl", hash = "sha256:c89c649d79ee40629a9fda55f8ace8c6a1b42deb912b2a8fd8d942ddadb606b0", size = 38901, upload-time = "2025-06-05T07:13:43.546Z" }, +] + +[[package]] +name = "torch" +version = "2.12.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "filelock", marker = "sys_platform == 'darwin'" }, + { name = "fsspec", marker = "sys_platform == 'darwin'" }, + { name = "jinja2", marker = "sys_platform == 'darwin'" }, + { name = "networkx", version = "3.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "networkx", version = "3.6.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, + { name = "setuptools", marker = "sys_platform == 'darwin'" }, + { name = "sympy", marker = "sys_platform == 'darwin'" }, + { name = "typing-extensions", marker = "sys_platform == 'darwin'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/db/ed/ff0c4f8cef63977a646dc80e40c05cae873f4097b12dc87e1cd7e1cecf42/torch-2.12.1-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:ec56e82be6a8b0c036771a77f7d32ad3c299770571af9815b3dafe61434389d5", size = 87967927, upload-time = "2026-06-17T21:08:43.16Z" }, + { url = "https://files.pythonhosted.org/packages/59/38/7028d3be540f1dcdf41660a2b01d0c51d2cb73915fe370d84e4d277a6d47/torch-2.12.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:ef81f503912effea2ce3d9b12a2e3a6ed488943e91271c90c7a829f60baf6aa2", size = 87975425, upload-time = "2026-06-17T21:08:34.094Z" }, + { url = "https://files.pythonhosted.org/packages/f0/54/efb7ebca77970012b0cc21687a55d70eb2ba514b2c2b8e18d9fb1222f3be/torch-2.12.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:d2dd0f2c5f7ccbddaf34cade0deaf476808368f902b9cdb7f36a2ab42301bc0e", size = 87991951, upload-time = "2026-06-17T21:07:49.309Z" }, +] + +[[package]] +name = "torchvision" +version = "0.27.1" +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' and sys_platform == 'darwin'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, + { name = "pillow", marker = "sys_platform == 'darwin'" }, + { name = "torch", marker = "sys_platform == 'darwin'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/c9/10/8e3e5a70dded1f86368bc987d93fa0436e73a79060aead75a8783b040ebd/torchvision-0.27.1-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:68ba63b48af92f06db995adb23d8411993dba1dee705a4e92411b83a00930b7f", size = 1852109, upload-time = "2026-06-17T21:09:34.966Z" }, + { url = "https://files.pythonhosted.org/packages/64/46/bc0ebd93282aeedc1759f054a252c6fadf14b42a0535db3233c85cce4ae5/torchvision-0.27.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:ad8743a9c12c8c124ad0a1491e54c3ca0c749e91e374e3d92136060b22c9e0f4", size = 1852118, upload-time = "2026-06-17T21:09:32.448Z" }, + { url = "https://files.pythonhosted.org/packages/88/82/2e8fdc19e4f0bbe31d403a55d78318bcea4afcd3083e1e4700ef61ebb893/torchvision-0.27.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:448abfc3baba984da4577f737209e445da6be93e3b5f4799d90162bf61e3f485", size = 1852105, upload-time = "2026-06-17T21:09:33.695Z" }, +] + +[[package]] +name = "tornado" +version = "6.5.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/64/24/95ec527ad67b76d59299e5465b3935d05e4294b7e0290a3924b7487df30b/tornado-6.5.7.tar.gz", hash = "sha256:66c513a76cda70d53907bc27cf1447557699c2e95aa48ba27a442ff61c3ddfc2", size = 519252, upload-time = "2026-06-08T17:34:51.232Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/02/dc/c7043cab6fed8ae159fc1923ce829ada35c4dbd797d408a43858ffaf9639/tornado-6.5.7-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:148b2eb15c2c765a50796172c1e499649b35f30d2e3c3d3e15913cfa56bfb163", size = 448543, upload-time = "2026-06-08T17:34:38.052Z" }, + { url = "https://files.pythonhosted.org/packages/92/4f/090b1431e5a43df696feceffc268c5383cc079ecb5f08ce58f917109aafe/tornado-6.5.7-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:9da38de27f1da3b78a966f0dae12b5a1ea9afe72ca805d84ff06508272ddf100", size = 446707, upload-time = "2026-06-08T17:34:39.594Z" }, +] + +[[package]] +name = "tqdm" +version = "4.68.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/87/d7/0535a28b1f5f24f6612fb3ff1e89fb1a8d160fee0f976e0aa6803862134b/tqdm-4.68.3.tar.gz", hash = "sha256:00dfa48452b6b6cfae3dd9885636c23d3422d1ec97c66d96818cbd5e0821d482", size = 170596, upload-time = "2026-06-17T07:36:52.105Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d8/8e/bb97bb0c71802080bfc8952937d174e49cfc50de5c951dd47b2496f0dcdb/tqdm-4.68.3-py3-none-any.whl", hash = "sha256:39832cc2def2789a6f29df83f172db7416cea70052c0907a57801c5f2fdccb03", size = 78337, upload-time = "2026-06-17T07:36:50.132Z" }, +] + +[[package]] +name = "transformers" +version = "5.0.0rc2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "filelock", marker = "sys_platform == 'darwin'" }, + { name = "huggingface-hub", marker = "sys_platform == 'darwin'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, + { name = "packaging", marker = "sys_platform == 'darwin'" }, + { name = "pyyaml", marker = "sys_platform == 'darwin'" }, + { name = "regex", marker = "sys_platform == 'darwin'" }, + { name = "requests", marker = "sys_platform == 'darwin'" }, + { name = "safetensors", marker = "sys_platform == 'darwin'" }, + { name = "tokenizers", marker = "sys_platform == 'darwin'" }, + { name = "tqdm", marker = "sys_platform == 'darwin'" }, + { name = "typer-slim", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/94/e2/86b1bd5264272953370a5e50a91da38d7a53a87c5faf3fd3ff62d7353879/transformers-5.0.0rc2.tar.gz", hash = "sha256:9f2fa5e132433dd7eb910dc224b32de0baf758f3b6ffc918dbb632e0af85c07a", size = 8362532, upload-time = "2026-01-07T16:58:02.603Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b4/eb/9526a77354a2126f5b220f4792dc8494d573773c098dac6a5ad1fc7a5f17/transformers-5.0.0rc2-py3-none-any.whl", hash = "sha256:f8f2a14060ab11f20a0eec39d827af54c1589c327c5799d82808ae3f4167418a", size = 10067329, upload-time = "2026-01-07T16:57:59.617Z" }, +] + +[[package]] +name = "typer" +version = "0.26.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "annotated-doc", marker = "sys_platform == 'darwin'" }, + { name = "rich", marker = "sys_platform == 'darwin'" }, + { name = "shellingham", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5e/ed/ef06584ccdd5c410df0837951ecd7e15d9a6144ea1bd4c73cecab1a89891/typer-0.26.7.tar.gz", hash = "sha256:e314a34c617e419c091b2830dda3ea1f257134ff593061a8f5b9717ab8dddb3a", size = 201709, upload-time = "2026-06-03T07:18:06.843Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/24/25/2201973529af2c954de0bb725323c3aaed6d7f0ceee8f550dec9185df013/typer-0.26.7-py3-none-any.whl", hash = "sha256:5c87cfbc5d34491c5346ebf49c23e18d56ccb863268d3a8d592b26087c2f5e58", size = 122456, upload-time = "2026-06-03T07:18:05.732Z" }, +] + +[[package]] +name = "typer-slim" +version = "0.24.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typer", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a7/a7/e6aecc4b4eb59598829a3b5076a93aff291b4fdaa2ded25efc4e1f4d219c/typer_slim-0.24.0.tar.gz", hash = "sha256:f0ed36127183f52ae6ced2ecb2521789995992c521a46083bfcdbb652d22ad34", size = 4776, upload-time = "2026-02-16T22:08:51.2Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a7/24/5480c20380dfd18cf33d14784096dca45a24eae6102e91d49a718d3b6855/typer_slim-0.24.0-py3-none-any.whl", hash = "sha256:d5d7ee1ee2834d5020c7c616ed5e0d0f29b9a4b1dd283bdebae198ec09778d0e", size = 3394, upload-time = "2026-02-16T22:08:49.92Z" }, +] + +[[package]] +name = "types-requests" +version = "2.33.0.20260518" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "urllib3", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e0/01/c5a19253fe1ac159159ddf9a3a07cec8bb5e486ec4d9002ad2821da0e5d2/types_requests-2.33.0.20260518.tar.gz", hash = "sha256:df7bd3bfe0ca8402dfb841e7d9be714bb5578203283d66d7dc4ef69343449a5e", size = 24752, upload-time = "2026-05-18T06:07:37.966Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1c/bc/b139710a3b6018f7fb2b9508b35c8af564e61bf2bf4fa619d088f3e16f85/types_requests-2.33.0.20260518-py3-none-any.whl", hash = "sha256:626d697d1adaaff76e2044dc8c5c051d8f21abc157bdfe204a75558076fe0bf0", size = 21391, upload-time = "2026-05-18T06:07:37.044Z" }, +] + +[[package]] +name = "typing-extensions" +version = "4.15.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466", size = 109391, upload-time = "2025-08-25T13:49:26.313Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614, upload-time = "2025-08-25T13:49:24.86Z" }, +] + +[[package]] +name = "typing-inspection" +version = "0.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/55/e3/70399cb7dd41c10ac53367ae42139cf4b1ca5f36bb3dc6c9d33acdb43655/typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464", size = 75949, upload-time = "2025-10-01T02:14:41.687Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7", size = 14611, upload-time = "2025-10-01T02:14:40.154Z" }, +] + +[[package]] +name = "tzdata" +version = "2026.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ba/19/1b9b0e29f30c6d35cb345486df41110984ea67ae69dddbc0e8a100999493/tzdata-2026.2.tar.gz", hash = "sha256:9173fde7d80d9018e02a662e168e5a2d04f87c41ea174b139fbef642eda62d10", size = 198254, upload-time = "2026-04-24T15:22:08.651Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ce/e4/dccd7f47c4b64213ac01ef921a1337ee6e30e8c6466046018326977efd95/tzdata-2026.2-py2.py3-none-any.whl", hash = "sha256:bbe9af844f658da81a5f95019480da3a89415801f6cc966806612cc7169bffe7", size = 349321, upload-time = "2026-04-24T15:22:05.876Z" }, +] + +[[package]] +name = "ultralytics" +version = "8.4.76" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "matplotlib", version = "3.10.9", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "matplotlib", version = "3.11.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, + { name = "nvidia-ml-py", marker = "sys_platform == 'darwin'" }, + { name = "opencv-python", marker = "sys_platform == 'darwin'" }, + { name = "pillow", marker = "sys_platform == 'darwin'" }, + { name = "polars", marker = "sys_platform == 'darwin'" }, + { name = "psutil", marker = "sys_platform == 'darwin'" }, + { name = "pyyaml", marker = "sys_platform == 'darwin'" }, + { name = "requests", marker = "sys_platform == 'darwin'" }, + { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*' and sys_platform == 'darwin'" }, + { name = "scipy", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12' and sys_platform == 'darwin'" }, + { name = "torch", marker = "sys_platform == 'darwin'" }, + { name = "torchvision", marker = "sys_platform == 'darwin'" }, + { name = "ultralytics-thop", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5d/0b/d6b82fe3115ddc9d44c3819555b66112c0940bbb8a5cd39dd2ab6b42acc6/ultralytics-8.4.76.tar.gz", hash = "sha256:332382999ed31cec039cae216ef877fb2af67babf1d3e8a3d3e267c5e51fca3a", size = 1109784, upload-time = "2026-06-24T14:13:30.449Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fe/b2/22624bd9e988a022e41b8ab51fb54e9413bffefdbc9902a90ead4d4823f6/ultralytics-8.4.76-py3-none-any.whl", hash = "sha256:a402f884c230ad3ad2bff6cfb8383737406dbdb5021775f61d8af4b89a6a015e", size = 1319242, upload-time = "2026-06-24T14:13:26.8Z" }, +] + +[[package]] +name = "ultralytics-thop" +version = "2.0.20" +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' and sys_platform == 'darwin'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, + { name = "torch", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/98/c6/d25cb53e141242f74950744179c21b8798bb09b9e7161465ecda4f577ddf/ultralytics_thop-2.0.20.tar.gz", hash = "sha256:f3595e0d8c6fd0b9f62fc2cd9be921755e2649a05c34f1fabaea0bff7295d641", size = 34682, upload-time = "2026-06-06T11:42:42.184Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0e/a9/5441a28af447c0ffe193f1f42dfebe2a518ab3e160e9e0d164e8901edead/ultralytics_thop-2.0.20-py3-none-any.whl", hash = "sha256:ef1b326404aeb10954f50db58982ec8dcab5946ee04a9b10e1107ec7ba4d5c22", size = 28954, upload-time = "2026-06-06T11:42:40.796Z" }, +] + +[[package]] +name = "urllib3" +version = "2.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/53/0c/06f8b233b8fd13b9e5ee11424ef85419ba0d8ba0b3138bf360be2ff56953/urllib3-2.7.0.tar.gz", hash = "sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c", size = 433602, upload-time = "2026-05-07T16:13:18.596Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl", hash = "sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897", size = 131087, upload-time = "2026-05-07T16:13:17.151Z" }, +] + +[[package]] +name = "uvicorn" +version = "0.49.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click", marker = "sys_platform == 'darwin'" }, + { name = "h11", marker = "sys_platform == 'darwin'" }, + { name = "typing-extensions", marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c4/1f/fa18009dea8469069cca78a4e877a008ab78f08b064bfc9ab891579077ff/uvicorn-0.49.0.tar.gz", hash = "sha256:ebf4271aa580d9de97f93192d4595176df6e91f9aae919ca73e4fc07df1e66a3", size = 91284, upload-time = "2026-06-03T22:01:30.448Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/fa/e1388bbcf24ef3274f45c0c1c7b501fd14971037c1b6ee23610553307497/uvicorn-0.49.0-py3-none-any.whl", hash = "sha256:ba3d14c3ee7e41c6c654c46c9eb489d33213cdd30aa1696eab1374337c13f68f", size = 71376, upload-time = "2026-06-03T22:01:29.037Z" }, +] + +[package.optional-dependencies] +standard = [ + { name = "httptools", marker = "sys_platform == 'darwin'" }, + { name = "python-dotenv", marker = "sys_platform == 'darwin'" }, + { name = "pyyaml", marker = "sys_platform == 'darwin'" }, + { name = "uvloop", marker = "platform_python_implementation != 'PyPy' and sys_platform == 'darwin'" }, + { name = "watchfiles", marker = "sys_platform == 'darwin'" }, + { name = "websockets", marker = "sys_platform == 'darwin'" }, +] + +[[package]] +name = "uvloop" +version = "0.22.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/06/f0/18d39dbd1971d6d62c4629cc7fa67f74821b0dc1f5a77af43719de7936a7/uvloop-0.22.1.tar.gz", hash = "sha256:6c84bae345b9147082b17371e3dd5d42775bddce91f885499017f4607fdaf39f", size = 2443250, upload-time = "2025-10-16T22:17:19.342Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/eb/14/ecceb239b65adaaf7fde510aa8bd534075695d1e5f8dadfa32b5723d9cfb/uvloop-0.22.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ef6f0d4cc8a9fa1f6a910230cd53545d9a14479311e87e3cb225495952eb672c", size = 1343335, upload-time = "2025-10-16T22:16:11.43Z" }, + { url = "https://files.pythonhosted.org/packages/ba/ae/6f6f9af7f590b319c94532b9567409ba11f4fa71af1148cab1bf48a07048/uvloop-0.22.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7cd375a12b71d33d46af85a3343b35d98e8116134ba404bd657b3b1d15988792", size = 742903, upload-time = "2025-10-16T22:16:12.979Z" }, + { url = "https://files.pythonhosted.org/packages/c7/d5/69900f7883235562f1f50d8184bb7dd84a2fb61e9ec63f3782546fdbd057/uvloop-0.22.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c60ebcd36f7b240b30788554b6f0782454826a0ed765d8430652621b5de674b9", size = 1352420, upload-time = "2025-10-16T22:16:21.187Z" }, + { url = "https://files.pythonhosted.org/packages/a8/73/c4e271b3bce59724e291465cc936c37758886a4868787da0278b3b56b905/uvloop-0.22.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3b7f102bf3cb1995cfeaee9321105e8f5da76fdb104cdad8986f85461a1b7b77", size = 748677, upload-time = "2025-10-16T22:16:22.558Z" }, + { url = "https://files.pythonhosted.org/packages/3d/ff/7f72e8170be527b4977b033239a83a68d5c881cc4775fca255c677f7ac5d/uvloop-0.22.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:fe94b4564e865d968414598eea1a6de60adba0c040ba4ed05ac1300de402cd42", size = 1359936, upload-time = "2025-10-16T22:16:29.436Z" }, + { url = "https://files.pythonhosted.org/packages/c3/c6/e5d433f88fd54d81ef4be58b2b7b0cea13c442454a1db703a1eea0db1a59/uvloop-0.22.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:51eb9bd88391483410daad430813d982010f9c9c89512321f5b60e2cddbdddd6", size = 752769, upload-time = "2025-10-16T22:16:30.493Z" }, +] + +[[package]] +name = "virtualenv" +version = "21.5.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "distlib", marker = "sys_platform == 'darwin'" }, + { name = "filelock", marker = "sys_platform == 'darwin'" }, + { name = "platformdirs", marker = "sys_platform == 'darwin'" }, + { name = "python-discovery", marker = "sys_platform == 'darwin'" }, + { name = "typing-extensions", marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f1/a5/81f987504738e6defeed61ec1c47e2aefab3c35d8eeb87e1b3f38cf28254/virtualenv-21.5.1.tar.gz", hash = "sha256:dca3bf98275a59c652b69d68e73433e597d977c2da9198882479d1a7188009c8", size = 4578798, upload-time = "2026-06-16T16:23:58.603Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/02/3623e6169bed617ed1e2d372f7c69f92ec28d54c4dfc997055c8578ec148/virtualenv-21.5.1-py3-none-any.whl", hash = "sha256:55aa670b67bbfb991b03fda39bd3276d92c419d702376e98c5df1c9989a26783", size = 4558820, upload-time = "2026-06-16T16:23:56.963Z" }, +] + +[[package]] +name = "watchfiles" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/cd/41/5e1a4bb12aac5f1493fa1bdc11154eca3b258ca4eba65d39c473fe19d8e9/watchfiles-1.2.0.tar.gz", hash = "sha256:c995fba777f1ea992f090f9236e9284cf7a5d1a0130dd5a3d82c598cacd76838", size = 108252, upload-time = "2026-05-18T04:32:04.251Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0d/5a/2bf22ecb24916983bf1cc0095e7dea2741d14d6553b0d6a2ac8bc96eca93/watchfiles-1.2.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:bb68bf4df85abebe5efddc53cf2075520f243a59868d9b3973278b23e76962a9", size = 400471, upload-time = "2026-05-18T04:31:08.908Z" }, + { url = "https://files.pythonhosted.org/packages/55/70/dea1f6a0e76607841a60fb51af150e70124864673f61704abb62b90cdcc7/watchfiles-1.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c16cb06dd17d43b9d185094268459eac92c9538356f050e55b54e82cf700e1d4", size = 394599, upload-time = "2026-05-18T04:30:19.845Z" }, + { url = "https://files.pythonhosted.org/packages/fc/3d/8024c801df84d1587740d0359e7fdd80afeae3d159011f3d5376dd82f18e/watchfiles-1.2.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:704fd259e332e01f9b9c178f4bce9e49027e5587cc2600eeeaf8e76e1c846201", size = 400242, upload-time = "2026-05-18T04:31:19.014Z" }, + { url = "https://files.pythonhosted.org/packages/87/5b/f4dfd45323e949984a3a7f9dc31d1cbb049921e7d98253488dda72ccdaa9/watchfiles-1.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6543cf55d170003296d185c0af981f3e1311564907e1f4e08671fc7693a890a5", size = 394562, upload-time = "2026-05-18T04:30:08.46Z" }, + { url = "https://files.pythonhosted.org/packages/b8/2f/e42c992d2afda3108ea1c02acecc991b9f31d05c14adc2a7cee9ee211fc4/watchfiles-1.2.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:bc13eb17538be00c874699dc0abe4ee2bc8d50bb1166a6b9e175ef3fd7eb8f26", size = 400115, upload-time = "2026-05-18T04:32:02.06Z" }, + { url = "https://files.pythonhosted.org/packages/5f/8f/6af2ea19065c91d8b0ea3516fdfc8c0d349f407e8e9fbf4e5a17360de8ad/watchfiles-1.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2d95ddc1eb6914154253d239089900813f6a767e174b8e6a50e7fdacb7e4236c", size = 393659, upload-time = "2026-05-18T04:30:50.951Z" }, + { url = "https://files.pythonhosted.org/packages/23/f4/7513ef1e85fc4c6331b59479d6d72661fc391fbe543678052ac72c8b6c19/watchfiles-1.2.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:4674d49eb94706dfe666c069fc0a1b646ffcf920473492e209f6d5f60d3f0cc2", size = 403050, upload-time = "2026-05-18T04:30:36.753Z" }, + { url = "https://files.pythonhosted.org/packages/27/0b/a54103cfd732bb703c7a749222011a0483ef3705948dae3b203158601119/watchfiles-1.2.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:094b9b70103d4e963499bdea001ee3c2697b144cd9ae6218a62c0f89ec9e31db", size = 396629, upload-time = "2026-05-18T04:32:03.268Z" }, +] + +[[package]] +name = "wcwidth" +version = "0.8.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/49/b4/51fe890511f0f242d07cb1ebe6a5b6db417262b9d2568b460347c57d95cc/wcwidth-0.8.1.tar.gz", hash = "sha256:faf5b4a5366a72dc49cad48cdf21f52bdf63bdda995178e483ba247ff79089b9", size = 1466072, upload-time = "2026-06-08T05:57:23.146Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bd/6e/95b0e537de1f4d4301f76f944642c6da50d1511cc7b3d64dc418a66c7509/wcwidth-0.8.1-py3-none-any.whl", hash = "sha256:f453740b1e4a4f3291faa37944c555d71056c4da08d59809b307ef4feba695c8", size = 323092, upload-time = "2026-06-08T05:57:21.413Z" }, +] + +[[package]] +name = "websockets" +version = "15.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/21/e6/26d09fab466b7ca9c7737474c52be4f76a40301b08362eb2dbc19dcc16c1/websockets-15.0.1.tar.gz", hash = "sha256:82544de02076bafba038ce055ee6412d68da13ab47f0c60cab827346de828dee", size = 177016, upload-time = "2025-03-05T20:03:41.606Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/da/6462a9f510c0c49837bbc9345aca92d767a56c1fb2939e1579df1e1cdcf7/websockets-15.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d63efaa0cd96cf0c5fe4d581521d9fa87744540d4bc999ae6e08595a1014b45b", size = 175423, upload-time = "2025-03-05T20:01:35.363Z" }, + { url = "https://files.pythonhosted.org/packages/1c/9f/9d11c1a4eb046a9e106483b9ff69bce7ac880443f00e5ce64261b47b07e7/websockets-15.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ac60e3b188ec7574cb761b08d50fcedf9d77f1530352db4eef1707fe9dee7205", size = 173080, upload-time = "2025-03-05T20:01:37.304Z" }, + { url = "https://files.pythonhosted.org/packages/d5/4f/b462242432d93ea45f297b6179c7333dd0402b855a912a04e7fc61c0d71f/websockets-15.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5756779642579d902eed757b21b0164cd6fe338506a8083eb58af5c372e39d9a", size = 173329, upload-time = "2025-03-05T20:01:39.668Z" }, + { url = "https://files.pythonhosted.org/packages/9f/32/18fcd5919c293a398db67443acd33fde142f283853076049824fc58e6f75/websockets-15.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:823c248b690b2fd9303ba00c4f66cd5e2d8c3ba4aa968b2779be9532a4dad431", size = 175423, upload-time = "2025-03-05T20:01:56.276Z" }, + { url = "https://files.pythonhosted.org/packages/76/70/ba1ad96b07869275ef42e2ce21f07a5b0148936688c2baf7e4a1f60d5058/websockets-15.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678999709e68425ae2593acf2e3ebcbcf2e69885a5ee78f9eb80e6e371f1bf57", size = 173082, upload-time = "2025-03-05T20:01:57.563Z" }, + { url = "https://files.pythonhosted.org/packages/86/f2/10b55821dd40eb696ce4704a87d57774696f9451108cff0d2824c97e0f97/websockets-15.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d50fd1ee42388dcfb2b3676132c78116490976f1300da28eb629272d5d93e905", size = 173330, upload-time = "2025-03-05T20:01:59.063Z" }, + { url = "https://files.pythonhosted.org/packages/51/6b/4545a0d843594f5d0771e86463606a3988b5a09ca5123136f8a76580dd63/websockets-15.0.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:3e90baa811a5d73f3ca0bcbf32064d663ed81318ab225ee4f427ad4e26e5aff3", size = 175437, upload-time = "2025-03-05T20:02:16.706Z" }, + { url = "https://files.pythonhosted.org/packages/f4/71/809a0f5f6a06522af902e0f2ea2757f71ead94610010cf570ab5c98e99ed/websockets-15.0.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:592f1a9fe869c778694f0aa806ba0374e97648ab57936f092fd9d87f8bc03665", size = 173096, upload-time = "2025-03-05T20:02:18.832Z" }, + { url = "https://files.pythonhosted.org/packages/3d/69/1a681dd6f02180916f116894181eab8b2e25b31e484c5d0eae637ec01f7c/websockets-15.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0701bc3cfcb9164d04a14b149fd74be7347a530ad3bbf15ab2c678a2cd3dd9a2", size = 173332, upload-time = "2025-03-05T20:02:20.187Z" }, + { url = "https://files.pythonhosted.org/packages/02/9e/d40f779fa16f74d3468357197af8d6ad07e7c5a27ea1ca74ceb38986f77a/websockets-15.0.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0c9e74d766f2818bb95f84c25be4dea09841ac0f734d1966f415e4edfc4ef1c3", size = 173109, upload-time = "2025-03-05T20:03:17.769Z" }, + { url = "https://files.pythonhosted.org/packages/bc/cd/5b887b8585a593073fd92f7c23ecd3985cd2c3175025a91b0d69b0551372/websockets-15.0.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:1009ee0c7739c08a0cd59de430d6de452a55e42d6b522de7aa15e6f67db0b8e1", size = 173343, upload-time = "2025-03-05T20:03:19.094Z" }, + { url = "https://files.pythonhosted.org/packages/fa/a8/5b41e0da817d64113292ab1f8247140aac61cbf6cfd085d6a0fa77f4984f/websockets-15.0.1-py3-none-any.whl", hash = "sha256:f7a866fbc1e97b5c617ee4116daaa09b722101d4a3c170c787450ba409f9736f", size = 169743, upload-time = "2025-03-05T20:03:39.41Z" }, +] + +[[package]] +name = "wrapt" +version = "2.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fe/a4/282c8e64300a59fc834518a54bf0afabb4ff9218b5fa76958b450459a844/wrapt-2.2.2.tar.gz", hash = "sha256:0788e321027c999bf221b667bd4a54aaefd1a36283749a860ac3eb77daed0302", size = 129068, upload-time = "2026-06-20T23:49:44.49Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e1/8b/59781d0fe7b0adfbea37f600857de4be68921e454aeecf1a11bda35cdccc/wrapt-2.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:055e6fcfaa28e58c6a8c247d48b92be9d56f818b7068aa4f22b15b3343a09931", size = 80556, upload-time = "2026-06-20T23:47:28.473Z" }, + { url = "https://files.pythonhosted.org/packages/94/dc/66c61aca927230c9cf97a3cb005c803971a1076ff9f7d61085d035c20085/wrapt-2.2.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8374eb6b1a58809211e84ff835a182bb17ab2807a5bfef23204c8cff38178a00", size = 81648, upload-time = "2026-06-20T23:47:30.504Z" }, + { url = "https://files.pythonhosted.org/packages/27/15/0c2d55168707465abfc41f33c0b23d792a5fa9b65c26983606940900a120/wrapt-2.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f1a2ff355ece6a111ca7a20dc86df6659c9205d3fcee674ca34f2a2854fd4e73", size = 80782, upload-time = "2026-06-20T23:47:44.367Z" }, + { url = "https://files.pythonhosted.org/packages/7d/b5/5c0b093eb48f8a062ef6267d3cb36e9bb1b88440181f6545a383c60efdf8/wrapt-2.2.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:55b9a899e6fff5444f229d30aa6e9ac92d2216d9d60f33c771b5d76a760d5f8e", size = 81678, upload-time = "2026-06-20T23:47:45.857Z" }, + { url = "https://files.pythonhosted.org/packages/2a/85/180b40628b23772692a0c76e8030114e1c0ae068470ed531919f0a5f2a4a/wrapt-2.2.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:8417fd3c674d3c8023d080292d29301531a12daf8bd938dd419710dd2f464f2b", size = 81484, upload-time = "2026-06-20T23:47:59.924Z" }, + { url = "https://files.pythonhosted.org/packages/94/f2/21c90f2a16689702e2aaff45795b11018dff2c9b1242bac10d225483f676/wrapt-2.2.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0e7070c7472582e31af3dfc2622b2381a0df7435110a9388ed8db5ffbce67efb", size = 82151, upload-time = "2026-06-20T23:48:01.303Z" }, + { url = "https://files.pythonhosted.org/packages/6e/d2/6317eb6d4554855bbf12d61857774af34747bf88a42c19bf306de67e2fa3/wrapt-2.2.2-py3-none-any.whl", hash = "sha256:5bad217350f19ce99ca5b5e71d406765ea86fe541628426772b657375ee1c048", size = 61460, upload-time = "2026-06-20T23:49:42.966Z" }, +] + +[[package]] +name = "yarl" +version = "1.24.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "idna", marker = "sys_platform == 'darwin'" }, + { name = "multidict", marker = "sys_platform == 'darwin'" }, + { name = "propcache", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/79/12/1e8f37460ea0f7eb59c221fdaf0ed75e7ac43e97f8093b9c6f411df50a78/yarl-1.24.2.tar.gz", hash = "sha256:9ac374123c6fd7abf64d1fec93962b0bd4ee2c19751755a762a72dd96c0378f8", size = 210798, upload-time = "2026-05-19T21:31:05.599Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3f/df/f1c7a3de0831cd83194f1a85c5bb431b13f81e6b45079314c86d1c4ef3f2/yarl-1.24.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5249a113065c2b7a958bc699759e359cd61cfc81e3069662208f48f191b7ed12", size = 129057, upload-time = "2026-05-19T21:27:47.564Z" }, + { url = "https://files.pythonhosted.org/packages/48/41/7daafb32dd7562bf45b1ce56562e7e1a9146f6479b6456873eb8a3413c40/yarl-1.24.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7f4425fa244fbf530b006d0c5f79ce920114cfff5b4f5f6056e669f8e160fdc0", size = 91545, upload-time = "2026-05-19T21:27:50.089Z" }, + { url = "https://files.pythonhosted.org/packages/a8/8f/7b3ec212f1ea0683f55f978e3246bc313c38818664edfc97a9f349a4901e/yarl-1.24.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:15c0b5e49d3c44e2a0b93e6a49476c5edad0a7686b92c395765a7ea775572a75", size = 91380, upload-time = "2026-05-19T21:27:51.953Z" }, + { url = "https://files.pythonhosted.org/packages/c5/c5/1ce244152ff2839645e7cae92f90e7bafcb2c52bea7ff586ac714f14f5df/yarl-1.24.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:36348bebb147b83818b9d7e673ea4debc75970afc6ffdc7e3975ad05ce5a58c1", size = 128971, upload-time = "2026-05-19T21:28:20.543Z" }, + { url = "https://files.pythonhosted.org/packages/87/5a/00f36967203ed89cb3acd2c8ed526cc3fed9418eb70ce128160a911c8499/yarl-1.24.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1a97e42c8a2233f2f279ecadd9e4a037bcb5d813b78435e8eedd4db5a9e9708c", size = 91507, upload-time = "2026-05-19T21:28:22.556Z" }, + { url = "https://files.pythonhosted.org/packages/31/d0/1fb0c1cd27288f39f6974da4318c32768d72c9890984541fdf1e2e32a51d/yarl-1.24.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8d027d56f1035e339d1001ac33eceab5b2ec8e42e449787bb75e289fb9a5cd1d", size = 91343, upload-time = "2026-05-19T21:28:24.092Z" }, + { url = "https://files.pythonhosted.org/packages/f0/da/866bcb01076ba49d2b42b309867bed3826421f1c479655eb7a607b44f20b/yarl-1.24.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:b975866c184564c827e0877380f0dae57dcca7e52782128381b72feff6dfceb8", size = 129957, upload-time = "2026-05-19T21:28:51.695Z" }, + { url = "https://files.pythonhosted.org/packages/bf/1d/fcefb70922ea2268a8971d8e5874d9a8218644200fb8465f1dcad55e6851/yarl-1.24.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3b075301a2836a0e297b1b658cb6d6135df535d62efefdd60366bd589c2c82f2", size = 92164, upload-time = "2026-05-19T21:28:53.242Z" }, + { url = "https://files.pythonhosted.org/packages/29/b6/170e2b8d4e3bc30e6bfdcca53556537f5bf595e938632dfcb059311f3ff6/yarl-1.24.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8ae44649b00947634ab0dab2a374a638f52923a6e67083f2c156cd5cbd1a881d", size = 91688, upload-time = "2026-05-19T21:28:54.865Z" }, + { url = "https://files.pythonhosted.org/packages/fd/4d/4b880086bd0d3e034d25647be1d830afc3e3f610e98c4ab3490af6b1b6d5/yarl-1.24.2-py3-none-any.whl", hash = "sha256:2783d9226db8797636cd6896e4de81feed252d1db72265686c9558d97a4d94b9", size = 53576, upload-time = "2026-05-19T21:31:03.909Z" }, +] + +[[package]] +name = "zeroconf" +version = "0.150.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ifaddr", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/09/ea/34bb185645ecaa18d34e5883bffea71aa9bffbbb994634884e8b2f3ad0c4/zeroconf-0.150.0.tar.gz", hash = "sha256:a5fe7feab1de6ef5e541e0a3d07e534fd91629b813fc27281593584100f63164", size = 213634, upload-time = "2026-06-22T17:52:37.982Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/37/6ff505bc61353fb62e4dc766aa4f651dd6f07de18a82cc3d244953168c4a/zeroconf-0.150.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6d5cfe83cfa85bf8f9bc31b1b33c20ae708d9ca76cef3ae92333e13f4147b169", size = 1683914, upload-time = "2026-06-22T18:23:31.98Z" }, + { url = "https://files.pythonhosted.org/packages/d9/65/b58fa5361e90e8bfc1c5355af9fc7e5d4f28bc6ad15f1cab6c558269cd6e/zeroconf-0.150.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ad2e3e3062491f56fd16388f1abce6f6185bdc84f221698a38fa9df7b8664c95", size = 1680489, upload-time = "2026-06-22T18:23:50.772Z" }, + { url = "https://files.pythonhosted.org/packages/63/a4/49a46fcf1afe8f96bec6751e4fe761ce2cd9c124f0d01748f69fa5566013/zeroconf-0.150.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1aba87b6c1cdb6859d0c2291c67dc7d3ac06612250fddd95f68b7632e1e89a79", size = 1684292, upload-time = "2026-06-22T18:24:08.468Z" }, +] From 2a7a1497591f826c9088ace78478f6ba847c6acb Mon Sep 17 00:00:00 2001 From: Johnny Greco Date: Wed, 24 Jun 2026 21:13:01 -0400 Subject: [PATCH 07/45] Include Reachy Mini simulator backend --- projects/reachy-mini-openshell/README.md | 37 ++++--- projects/reachy-mini-openshell/pyproject.toml | 2 +- projects/reachy-mini-openshell/uv.lock | 104 +++++++++++++++++- 3 files changed, 122 insertions(+), 21 deletions(-) diff --git a/projects/reachy-mini-openshell/README.md b/projects/reachy-mini-openshell/README.md index ef70d72e..97c1c189 100644 --- a/projects/reachy-mini-openshell/README.md +++ b/projects/reachy-mini-openshell/README.md @@ -1,5 +1,6 @@ --- -title: Reachy OpenShell + +## title: Reachy OpenShell emoji: 🤖 colorFrom: purple colorTo: gray @@ -8,7 +9,6 @@ pinned: false tags: - reachy_mini - reachy_mini_python_app ---- # 🤖 Reachy OpenShell @@ -42,16 +42,17 @@ This project contains: - Reachy Mini movement, dance, emotion, and look-around tools - a locked OpenShell profile for instructions and tool selection - optional camera, local vision, YOLO head-tracking, and MediaPipe head-tracking - integrations +integrations ## Requirements - Python 3.10, 3.11, or 3.12. The recommended local version is Python 3.12. - `uv` for the recommended local workflow -- Reachy Mini SDK 1.8.0, installed through this project. This is pinned to the - version compatible with the forked conversation-app dependency stack. +- Reachy Mini SDK 1.8.0 with the MuJoCo simulator backend, installed through +this project. The SDK is pinned to the version compatible with the forked +conversation-app dependency stack. - a running Reachy Mini daemon, either connected to hardware or started in - simulator mode +simulator mode - an OpenAI API key for conversation ## Install @@ -111,9 +112,10 @@ python -m pip install -e '.[mediapipe_vision]' python -m pip install -e '.[all_vision]' ``` -There are no `backend` or `sim` extras anymore. The previous backend extra -belonged to the deleted scaffold, and simulator support is provided by the -Reachy Mini daemon/runtime rather than a project extra. +There are no project-level `backend` or `sim` extras anymore. The previous +backend extra belonged to the deleted scaffold. The default dependency set +includes Reachy Mini's MuJoCo simulator backend because the local development +workflow starts `reachy-mini-daemon --sim` from this environment. ## Configuration @@ -163,7 +165,7 @@ In simulator mode, the app auto-enables Gradio. The examples still pass at: ```text -http://127.0.0.1:7860/ +c ``` If port `7860` is busy, Gradio may choose another available local port and print @@ -175,15 +177,15 @@ Useful app flags: - `--gradio`: launch the browser conversation UI. - `--no-camera`: disable camera usage. This is the recommended simulator - baseline. +baseline. - `--head-tracker yolo`: enable YOLO head tracking. Requires the `yolo_vision` - extra. +extra. - `--head-tracker mediapipe`: enable MediaPipe head tracking. Requires the - `mediapipe_vision` extra. +`mediapipe_vision` extra. - `--local-vision`: use a local vision model instead of Realtime vision. - Requires the `local_vision` extra. +Requires the `local_vision` extra. - `--robot-name `: connect to a daemon started with the same - `--robot-name`. +`--robot-name`. - `--debug`: enable debug logging. Examples: @@ -252,8 +254,7 @@ with an import error, install the matching optional dependency group. If `uv sync` tries to build `pygobject` or `pycairo` on macOS, the resolver is including a Linux media dependency path. This project scopes uv resolution to Darwin for the current local workflow; rerun `uv sync`, and if uv is still using -old metadata, clear the package cache with `uv cache clean reachy-mini pygobject -pycairo`. +old metadata, clear the package cache with `uv cache clean reachy-mini pygobject pycairo`. If you are running the simulator with `--no-media`, keep `--no-camera` on the -conversation app. +conversation app. \ No newline at end of file diff --git a/projects/reachy-mini-openshell/pyproject.toml b/projects/reachy-mini-openshell/pyproject.toml index 800679d8..ffce601d 100644 --- a/projects/reachy-mini-openshell/pyproject.toml +++ b/projects/reachy-mini-openshell/pyproject.toml @@ -8,7 +8,7 @@ version = "0.3.0" description = "OpenShell-oriented fork of the Reachy Mini conversation app." readme = "README.md" requires-python = ">=3.10,<3.13" -dependencies = [ "aiortc>=1.13.0", "fastrtc>=0.0.34", "gradio==5.50.1.dev1", "huggingface-hub==1.3.0", "opencv-python>=4.12.0.88", "python-dotenv", "openai>=2.1", "reachy_mini_dances_library", "reachy_mini_toolbox", "reachy-mini==1.8.0", "eclipse-zenoh~=1.7.0", "gradio_client>=1.13.3",] +dependencies = [ "aiortc>=1.13.0", "fastrtc>=0.0.34", "gradio==5.50.1.dev1", "huggingface-hub==1.3.0", "opencv-python>=4.12.0.88", "python-dotenv", "openai>=2.1", "reachy_mini_dances_library", "reachy_mini_toolbox", "reachy-mini[mujoco]==1.8.0", "eclipse-zenoh~=1.7.0", "gradio_client>=1.13.3",] [[project.authors]] name = "Pollen Robotics" email = "contact@pollen-robotics.com" diff --git a/projects/reachy-mini-openshell/uv.lock b/projects/reachy-mini-openshell/uv.lock index a7ff8ddf..4438d67d 100644 --- a/projects/reachy-mini-openshell/uv.lock +++ b/projects/reachy-mini-openshell/uv.lock @@ -434,6 +434,46 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/06/8a/6bb29455e16f119ec9db996d50f5ce40fdd7e1369fcfb6665144b50a0b7b/eclipse_zenoh-1.7.2-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:7d0429933d9abeb70939a2cb02e32b8c8929651fd1762f1308b5fbd4ae41c3d9", size = 8871746, upload-time = "2026-01-08T17:42:12.587Z" }, ] +[[package]] +name = "etils" +version = "1.13.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and sys_platform == 'darwin'", +] +sdist = { url = "https://files.pythonhosted.org/packages/9b/a0/522bbff0f3cdd37968f90dd7f26c7aa801ed87f5ba335f156de7f2b88a48/etils-1.13.0.tar.gz", hash = "sha256:a5b60c71f95bcd2d43d4e9fb3dc3879120c1f60472bb5ce19f7a860b1d44f607", size = 106368, upload-time = "2025-07-15T10:29:10.563Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/98/87b5946356095738cb90a6df7b35ff69ac5750f6e783d5fbcc5cb3b6cbd7/etils-1.13.0-py3-none-any.whl", hash = "sha256:d9cd4f40fbe77ad6613b7348a18132cc511237b6c076dbb89105c0b520a4c6bb", size = 170603, upload-time = "2025-07-15T10:29:09.076Z" }, +] + +[package.optional-dependencies] +epath = [ + { name = "fsspec", marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "importlib-resources", marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "typing-extensions", marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "zipp", marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, +] + +[[package]] +name = "etils" +version = "1.14.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.12' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and sys_platform == 'darwin'", +] +sdist = { url = "https://files.pythonhosted.org/packages/26/ce/6e067242fde898841922ac6fc82b0bb2fe35c38e995880bdffdfbe30182a/etils-1.14.0.tar.gz", hash = "sha256:8136e7f4c4173cd0af0ca5481c4475152f0b8686192951eefa60ee8711e1ede4", size = 108127, upload-time = "2026-03-04T17:41:36.291Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5a/3d/589663aeeacd59bb2f3e8596bfd3e81cf0fb18d70bb433199041f469771b/etils-1.14.0-py3-none-any.whl", hash = "sha256:b5df7341f54dbe1405a4450b2741207b4a8c279780402b45f87202b94dfc52b4", size = 172934, upload-time = "2026-03-04T17:41:35.01Z" }, +] + +[package.optional-dependencies] +epath = [ + { name = "fsspec", marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, + { name = "typing-extensions", marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, + { name = "zipp", marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, +] + [[package]] name = "exceptiongroup" version = "1.3.1" @@ -571,6 +611,20 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/20/7a/1c6e3562dfd8950adbb11ffbc65d21e7c89d01a6e4f137fa981056de25c5/gitpython-3.1.50-py3-none-any.whl", hash = "sha256:d352abe2908d07355014abdd21ddf798c2a961469239afec4962e9da884858f9", size = 212507, upload-time = "2026-05-06T04:01:23.799Z" }, ] +[[package]] +name = "glfw" +version = "2.10.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/96/72/642d4f12f61816ac96777f7360d413e3977a7dd08237d196f02da681b186/glfw-2.10.0.tar.gz", hash = "sha256:801e55d8581b34df9aa2cfea43feb06ff617576e2a8cc5dac23ee75b26d10abe", size = 31475, upload-time = "2025-09-12T08:54:38.871Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3d/1f/a9ce08b1173b0ab625ee92f0c47a5278b3e76fd367699880d8ee7d56c338/glfw-2.10.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38.p39.p310.p311.p312.p313-none-macosx_10_6_intel.whl", hash = "sha256:5f365a8c94bcea71ec91327e7c16e7cf739128479a18b8c1241b004b40acc412", size = 105329, upload-time = "2025-09-12T08:54:27.938Z" }, + { url = "https://files.pythonhosted.org/packages/7c/96/5a2220abcbd027eebcf8bedd28207a2de168899e51be13ba01ebdd4147a1/glfw-2.10.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38.p39.p310.p311.p312.p313-none-macosx_11_0_arm64.whl", hash = "sha256:5328db1a92d07abd988730517ec02aa8390d3e6ef7ce98c8b57ecba2f43a39ba", size = 102179, upload-time = "2025-09-12T08:54:29.163Z" }, + { url = "https://files.pythonhosted.org/packages/b3/87/de0b33f6f00687499ca1371f22aa73396341b85bf88f1a284f9da8842493/glfw-2.10.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38.py39.py310.py311.py312.py313.py314-none-macosx_10_6_intel.whl", hash = "sha256:2aab89d2d9535635ba011fc7303390685169a1aa6731ad580d08d043524b8899", size = 105326, upload-time = "2026-01-28T05:57:56.083Z" }, + { url = "https://files.pythonhosted.org/packages/b6/a6/6ea2f73ad4474896d9e38b3ffbe6ffd5a802c738392269e99e8c6621a461/glfw-2.10.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38.py39.py310.py311.py312.py313.py314-none-macosx_11_0_arm64.whl", hash = "sha256:23936202a107039b5372f0b88ae1d11080746aa1c78910a45d4a0c4cf408cfaa", size = 102180, upload-time = "2026-01-28T05:57:57.787Z" }, + { url = "https://files.pythonhosted.org/packages/8c/a8/d4dab8a58fc2e6981fc7a58c4e56ba9d777fb24931cec6a22152edbb3540/glfw-2.10.0-py2.py3-none-macosx_10_6_intel.whl", hash = "sha256:a0d1f29f206219cc291edfb6cace663a86da2470632551c998e3db82d48ea177", size = 105288, upload-time = "2026-03-10T17:21:19.929Z" }, + { url = "https://files.pythonhosted.org/packages/14/61/68d35e001872a7705112418da236fa2418d4f2e5419f8b2837f9b81bb3da/glfw-2.10.0-py2.py3-none-macosx_11_0_arm64.whl", hash = "sha256:d28d6f3ef217e64e35dc6fd0a7acb4cec9bfe7cd14dd9b35a7228a87002de154", size = 102139, upload-time = "2026-03-10T17:21:21.645Z" }, +] + [[package]] name = "google-crc32c" version = "1.8.0" @@ -1273,6 +1327,29 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/50/2e/ebdb85a8da151397a2790363676b7ed7c125924fe618e4c6d8befb0cc62c/msgpack-1.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d3567748a5107cb40cdf66a275430c2f87c07777698f4bfd25c35f44d533258c", size = 82657, upload-time = "2026-06-18T16:12:59.396Z" }, ] +[[package]] +name = "mujoco" +version = "3.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "absl-py", marker = "sys_platform == 'darwin'" }, + { name = "etils", version = "1.13.0", source = { registry = "https://pypi.org/simple" }, extra = ["epath"], marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "etils", version = "1.14.0", source = { registry = "https://pypi.org/simple" }, extra = ["epath"], marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, + { name = "glfw", marker = "sys_platform == 'darwin'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, + { name = "pyopengl", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8a/c6/76716fd205ccd0afbaef8b355555ace70347bd02c921d14e05e68eab3dbb/mujoco-3.3.0.tar.gz", hash = "sha256:0fb12ab715bc2b6d2394a6330b8c3a1dd95b0f3ba812bfe4f6c91e0a1ca3ad0f", size = 801447, upload-time = "2025-02-27T19:16:18.748Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/f4/21ff1dc849ff6ab8f2fc29d6d6286ab5e03c25ac7cced3bcbbe052c257be/mujoco-3.3.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:676285e5a752e5b937fc79ff56cad6d62021992e6800d8085ab316c67d7b0ee4", size = 6484740, upload-time = "2025-02-27T19:14:36.642Z" }, + { url = "https://files.pythonhosted.org/packages/ca/3b/22acd7de2cf66839a3e49b57cc428ab6816764f128209a80578403eac83d/mujoco-3.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a6991fe6b255eabf5c62c8a3dffa2e04a51bd74d04de42869c322da1c4279562", size = 6512230, upload-time = "2025-02-27T19:14:40.481Z" }, + { url = "https://files.pythonhosted.org/packages/11/aa/a0b20e86e9944fdbdbea004974df1426f4bc532c9711112012e89a56a389/mujoco-3.3.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:d61157a53356c790ef73d4ec918288c2dd7d0da26eaa1de8f56cffbdcd1ca275", size = 6498398, upload-time = "2025-02-27T19:14:59.241Z" }, + { url = "https://files.pythonhosted.org/packages/b5/12/5a158a125114e35409e60dedeb694bf80d7e3a02c99edc8734ed352baff2/mujoco-3.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:60025a554e444a85d3183714115f48ea4582c5c654f120c5f7652e22260b0069", size = 6524031, upload-time = "2025-02-27T19:15:04.301Z" }, + { url = "https://files.pythonhosted.org/packages/11/6f/218bf9c8480340d640d4f8e09c0295bfd02cc08610bd6798fad12ebc9cc0/mujoco-3.3.0-cp312-cp312-macosx_10_16_x86_64.whl", hash = "sha256:32a7671069799e69f51bf515f6f97d8b2c852a0de065129033347e616fe4e9ed", size = 6588848, upload-time = "2025-02-27T19:15:22.124Z" }, + { url = "https://files.pythonhosted.org/packages/42/3b/f17690dee3f3f3771e9953ffe634d0a1649af44c609c8b201325b9a7fbe6/mujoco-3.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2f435f34ea8c41711e68c635ada89c7347e9d53a330c2ff748723a96495d8710", size = 6493393, upload-time = "2025-02-27T19:15:26.398Z" }, +] + [[package]] name = "multidict" version = "6.7.1" @@ -1807,6 +1884,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/8d/0e/8d215484a9877adcf2459a8b28165fc89668b034565277fd55d666edd247/pylibsrtp-1.0.0-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:aaad74e5c8cbc1c32056c3767fea494c1e62b3aea2c908eda2a1051389fdad76", size = 2182739, upload-time = "2025-10-13T16:12:17.121Z" }, ] +[[package]] +name = "pyopengl" +version = "3.1.10" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6f/16/912b7225d56284859cd9a672827f18be43f8012f8b7b932bc4bd959a298e/pyopengl-3.1.10.tar.gz", hash = "sha256:c4a02d6866b54eb119c8e9b3fb04fa835a95ab802dd96607ab4cdb0012df8335", size = 1915580, upload-time = "2025-08-18T02:33:01.76Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/de/e4/1ba6f44e491c4eece978685230dde56b14d51a0365bc1b774ddaa94d14cd/pyopengl-3.1.10-py3-none-any.whl", hash = "sha256:794a943daced39300879e4e47bd94525280685f42dbb5a998d336cfff151d74f", size = 3194996, upload-time = "2025-08-18T02:32:59.902Z" }, +] + [[package]] name = "pyopenssl" version = "26.3.0" @@ -2035,6 +2121,11 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/2e/45/5a54ca987529754ddef55e9bd03cf2a553f79dc2e1bcf4262e661cc4bdae/reachy_mini-1.8.0-py3-none-any.whl", hash = "sha256:5dd686e77c158fe54528b706a0d51feb3c9d2d7b4a09f762a36cb24472254fd8", size = 24864618, upload-time = "2026-06-01T08:54:09.518Z" }, ] +[package.optional-dependencies] +mujoco = [ + { name = "mujoco", marker = "sys_platform == 'darwin'" }, +] + [[package]] name = "reachy-mini-conversation-app" version = "0.3.0" @@ -2049,7 +2140,7 @@ dependencies = [ { name = "openai", marker = "sys_platform == 'darwin'" }, { name = "opencv-python", marker = "sys_platform == 'darwin'" }, { name = "python-dotenv", marker = "sys_platform == 'darwin'" }, - { name = "reachy-mini", marker = "sys_platform == 'darwin'" }, + { name = "reachy-mini", extra = ["mujoco"], marker = "sys_platform == 'darwin'" }, { name = "reachy-mini-dances-library", marker = "sys_platform == 'darwin'" }, { name = "reachy-mini-toolbox", marker = "sys_platform == 'darwin'" }, ] @@ -2102,7 +2193,7 @@ requires-dist = [ { name = "openai", specifier = ">=2.1" }, { name = "opencv-python", specifier = ">=4.12.0.88" }, { name = "python-dotenv" }, - { name = "reachy-mini", specifier = "==1.8.0" }, + { name = "reachy-mini", extras = ["mujoco"], specifier = "==1.8.0" }, { name = "reachy-mini-dances-library" }, { name = "reachy-mini-toolbox" }, { name = "supervision", marker = "extra == 'all-vision'" }, @@ -2947,3 +3038,12 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d9/65/b58fa5361e90e8bfc1c5355af9fc7e5d4f28bc6ad15f1cab6c558269cd6e/zeroconf-0.150.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ad2e3e3062491f56fd16388f1abce6f6185bdc84f221698a38fa9df7b8664c95", size = 1680489, upload-time = "2026-06-22T18:23:50.772Z" }, { url = "https://files.pythonhosted.org/packages/63/a4/49a46fcf1afe8f96bec6751e4fe761ce2cd9c124f0d01748f69fa5566013/zeroconf-0.150.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1aba87b6c1cdb6859d0c2291c67dc7d3ac06612250fddd95f68b7632e1e89a79", size = 1684292, upload-time = "2026-06-22T18:24:08.468Z" }, ] + +[[package]] +name = "zipp" +version = "4.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b9/d8/eab98a517c14134c0b2eb4e2387bc5f457334293ec5d2dd3857ec2966802/zipp-4.1.0.tar.gz", hash = "sha256:4cb57381f544315db7688e976e922a2b18cdb513d21cc194eb42232ba2a3e602", size = 26214, upload-time = "2026-05-18T20:08:57.967Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3a/13/547360d81e6d88d58492968ffda9f9542854f11310ee556fef14260cc886/zipp-4.1.0-py3-none-any.whl", hash = "sha256:25ad4e16390cd314347dd8f1de67a2ac538ae658ed4ab9db16029c07c188e97f", size = 10238, upload-time = "2026-05-18T20:08:57.045Z" }, +] From 03f4e30ddeab3441797890ab98d39a31a1768aa2 Mon Sep 17 00:00:00 2001 From: Johnny Greco Date: Wed, 24 Jun 2026 23:17:09 -0400 Subject: [PATCH 08/45] Support provider-routed text input --- projects/reachy-mini-openshell/.env.example | 5 +- .../reachy_mini_conversation_app/config.py | 29 +- .../reachy_mini_conversation_app/console.py | 261 +---------- .../src/reachy_mini_conversation_app/main.py | 60 ++- .../openai_realtime.py | 442 ++++++++++++++---- .../static/index.html | 54 --- .../static/main.js | 136 ------ .../static/style.css | 210 --------- .../tests/test_openai_realtime.py | 332 +++++++++++++ 9 files changed, 771 insertions(+), 758 deletions(-) delete mode 100644 projects/reachy-mini-openshell/src/reachy_mini_conversation_app/static/index.html delete mode 100644 projects/reachy-mini-openshell/src/reachy_mini_conversation_app/static/main.js delete mode 100644 projects/reachy-mini-openshell/src/reachy_mini_conversation_app/static/style.css diff --git a/projects/reachy-mini-openshell/.env.example b/projects/reachy-mini-openshell/.env.example index 12cf25b2..42515c10 100644 --- a/projects/reachy-mini-openshell/.env.example +++ b/projects/reachy-mini-openshell/.env.example @@ -1,5 +1,6 @@ -OPENAI_API_KEY= -MODEL_NAME="gpt-realtime" +OPENAI_API_KEY=${NVIDIA_API_KEY} +OPENAI_BASE_URL=https://inference-api.nvidia.com/v1 +MODEL_NAME=azure/anthropic/claude-opus-4-8 # Used only with --local-vision. LOCAL_VISION_MODEL=HuggingFaceTB/SmolVLM2-2.2B-Instruct diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/config.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/config.py index fe10c9fd..6cf01c4f 100644 --- a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/config.py +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/config.py @@ -3,7 +3,7 @@ import logging from pathlib import Path -from dotenv import find_dotenv, load_dotenv +from dotenv import find_dotenv, load_dotenv, dotenv_values LOCKED_PROFILE = "_reachy_mini_conversation_app_locked_profile" @@ -38,6 +38,8 @@ def _env_flag(name: str, default: bool = False) -> bool: sys.exit(1) _skip_dotenv = _env_flag("REACHY_MINI_SKIP_DOTENV", default=False) +_dotenv_path = "" +_dotenv_values: dict[str, str | None] = {} if _skip_dotenv: logger.info("Skipping .env loading because REACHY_MINI_SKIP_DOTENV is set") @@ -46,24 +48,43 @@ def _env_flag(name: str, default: bool = False) -> bool: dotenv_path = find_dotenv(usecwd=True) if dotenv_path: + _dotenv_path = dotenv_path + _dotenv_values = dict(dotenv_values(dotenv_path)) # Load .env and override environment variables load_dotenv(dotenv_path=dotenv_path, override=True) logger.info(f"Configuration loaded from {dotenv_path}") else: - logger.warning("No .env file found, using environment variables") + logger.warning("No .env file found") + + +def _dotenv_value(name: str, default: str | None = None) -> str | None: + """Return a value from the loaded .env file only.""" + value = _dotenv_values.get(name) + if value is None: + return default + value = value.strip() + return value if value else default class Config: """Configuration class for the conversation app.""" - OPENAI_API_KEY = os.getenv("OPENAI_API_KEY") + OPENAI_API_KEY = _dotenv_value("OPENAI_API_KEY") + OPENAI_BASE_URL = _dotenv_value("OPENAI_BASE_URL", "https://api.openai.com/v1") MODEL_NAME = os.getenv("MODEL_NAME", "gpt-realtime") HF_HOME = os.getenv("HF_HOME", "./cache") LOCAL_VISION_MODEL = os.getenv("LOCAL_VISION_MODEL", "HuggingFaceTB/SmolVLM2-2.2B-Instruct") HF_TOKEN = os.getenv("HF_TOKEN") - logger.debug(f"Model: {MODEL_NAME}, HF_HOME: {HF_HOME}, Vision Model: {LOCAL_VISION_MODEL}") + logger.debug( + "Model: %s, Base URL: %s, HF_HOME: %s, Vision Model: %s", + MODEL_NAME, + OPENAI_BASE_URL, + HF_HOME, + LOCAL_VISION_MODEL, + ) logger.debug(f"Locked profile: {LOCKED_PROFILE}") + logger.debug("Dotenv path: %s", _dotenv_path or "") def __init__(self) -> None: """Initialize the configuration.""" diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/console.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/console.py index 57103578..ff284fca 100644 --- a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/console.py +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/console.py @@ -1,20 +1,9 @@ -"""Bidirectional local audio stream with optional settings UI. +"""Bidirectional local audio stream for Reachy Mini audio.""" -In headless mode, there is no Gradio UI. If the OpenAI API key is not -available via environment/.env, we expose a minimal settings page via the -Reachy Mini Apps settings server to let non-technical users enter it. - -The settings UI is served from this package's ``static/`` folder and offers a -single password field to set ``OPENAI_API_KEY``. Once set, we persist it to the -app instance's ``.env`` file (if available) and proceed to start streaming. -""" - -import os -import sys import time import asyncio import logging -from typing import List, Optional +from typing import Any, List, Optional from pathlib import Path from fastrtc import AdditionalOutputs, audio_to_float32 @@ -26,20 +15,6 @@ from reachy_mini_conversation_app.openai_realtime import OpenaiRealtimeHandler -try: - # FastAPI is provided by the Reachy Mini Apps runtime - from fastapi import FastAPI, Response - from pydantic import BaseModel - from fastapi.responses import FileResponse, JSONResponse - from starlette.staticfiles import StaticFiles -except Exception: # pragma: no cover - only loaded when settings_app is used - FastAPI = object # type: ignore - FileResponse = object # type: ignore - JSONResponse = object # type: ignore - StaticFiles = object # type: ignore - BaseModel = object # type: ignore - - logger = logging.getLogger(__name__) @@ -51,12 +26,12 @@ def __init__( handler: OpenaiRealtimeHandler, robot: ReachyMini, *, - settings_app: Optional[FastAPI] = None, + settings_app: Optional[Any] = None, instance_path: Optional[str] = None, ): """Initialize the stream with an OpenAI realtime handler and pipelines. - - ``settings_app``: the Reachy Mini Apps FastAPI to attach settings endpoints. + - ``settings_app``: reserved for the Reachy Mini Apps runtime. - ``instance_path``: directory where per-instance ``.env`` should be stored. """ self.handler = handler @@ -65,240 +40,38 @@ def __init__( self._tasks: List[asyncio.Task[None]] = [] # Allow the handler to flush the player queue when appropriate. self.handler._clear_queue = self.clear_audio_queue - self._settings_app: Optional[FastAPI] = settings_app + self._settings_app: Optional[Any] = settings_app self._instance_path: Optional[str] = instance_path - self._settings_initialized = False self._asyncio_loop = None - # ---- Settings UI (only when API key is missing) ---- - def _read_env_lines(self, env_path: Path) -> list[str]: - """Load env file contents or a template as a list of lines.""" - inst = env_path.parent - try: - if env_path.exists(): - try: - return env_path.read_text(encoding="utf-8").splitlines() - except Exception: - return [] - template_text = None - ex = inst / ".env.example" - if ex.exists(): - try: - template_text = ex.read_text(encoding="utf-8") - except Exception: - template_text = None - if template_text is None: - try: - cwd_example = Path.cwd() / ".env.example" - if cwd_example.exists(): - template_text = cwd_example.read_text(encoding="utf-8") - except Exception: - template_text = None - if template_text is None: - packaged = Path(__file__).parent / ".env.example" - if packaged.exists(): - try: - template_text = packaged.read_text(encoding="utf-8") - except Exception: - template_text = None - return template_text.splitlines() if template_text else [] - except Exception: - return [] - - def _persist_api_key(self, key: str) -> None: - """Persist API key to environment and instance ``.env`` if possible. - - Behavior: - - Always sets ``OPENAI_API_KEY`` in process env and in-memory config. - - Writes/updates ``/.env``: - * If ``.env`` exists, replaces/append OPENAI_API_KEY line. - * Else, copies template from ``/.env.example`` when present, - otherwise falls back to the packaged template - ``reachy_mini_conversation_app/.env.example``. - * Ensures the resulting file contains the full template plus the key. - - Loads the written ``.env`` into the current process environment. - """ - k = (key or "").strip() - if not k: - return - # Update live process env and config so consumers see it immediately - try: - os.environ["OPENAI_API_KEY"] = k - except Exception: # best-effort - pass - try: - config.OPENAI_API_KEY = k - except Exception: - pass - - if not self._instance_path: - return - try: - inst = Path(self._instance_path) - env_path = inst / ".env" - lines = self._read_env_lines(env_path) - replaced = False - for i, ln in enumerate(lines): - if ln.strip().startswith("OPENAI_API_KEY="): - lines[i] = f"OPENAI_API_KEY={k}" - replaced = True - break - if not replaced: - lines.append(f"OPENAI_API_KEY={k}") - final_text = "\n".join(lines) + "\n" - env_path.write_text(final_text, encoding="utf-8") - logger.info("Persisted OPENAI_API_KEY to %s", env_path) - - # Load the newly written .env into this process to ensure downstream imports see it - try: - from dotenv import load_dotenv - - load_dotenv(dotenv_path=str(env_path), override=True) - except Exception: - pass - except Exception as e: - logger.warning("Failed to persist OPENAI_API_KEY: %s", e) - - def _init_settings_ui_if_needed(self) -> None: - """Attach minimal settings UI to the settings app. - - Always mounts the UI when a settings_app is provided so that users - see a confirmation message even if the API key is already configured. - """ - if self._settings_initialized: - return - if self._settings_app is None: - return - - static_dir = Path(__file__).parent / "static" - index_file = static_dir / "index.html" - - if hasattr(self._settings_app, "mount"): - try: - # Serve /static/* assets - self._settings_app.mount("/static", StaticFiles(directory=str(static_dir)), name="static") - except Exception: - pass - - class ApiKeyPayload(BaseModel): - openai_api_key: str - - # GET / -> index.html - @self._settings_app.get("/") - def _root() -> FileResponse: - return FileResponse(str(index_file)) - - # GET /favicon.ico -> optional, avoid noisy 404s on some browsers - @self._settings_app.get("/favicon.ico") - def _favicon() -> Response: - return Response(status_code=204) - - # GET /status -> whether key is set - @self._settings_app.get("/status") - def _status() -> JSONResponse: - has_key = bool(config.OPENAI_API_KEY and str(config.OPENAI_API_KEY).strip()) - return JSONResponse({"has_key": has_key}) - - # GET /ready -> whether backend finished loading tools - @self._settings_app.get("/ready") - def _ready() -> JSONResponse: - try: - mod = sys.modules.get("reachy_mini_conversation_app.tools.core_tools") - ready = bool(getattr(mod, "_TOOLS_INITIALIZED", False)) if mod else False - except Exception: - ready = False - return JSONResponse({"ready": ready}) - - # POST /openai_api_key -> set/persist key - @self._settings_app.post("/openai_api_key") - def _set_key(payload: ApiKeyPayload) -> JSONResponse: - key = (payload.openai_api_key or "").strip() - if not key: - return JSONResponse({"ok": False, "error": "empty_key"}, status_code=400) - self._persist_api_key(key) - return JSONResponse({"ok": True}) - - # POST /validate_api_key -> validate key without persisting it - @self._settings_app.post("/validate_api_key") - async def _validate_key(payload: ApiKeyPayload) -> JSONResponse: - key = (payload.openai_api_key or "").strip() - if not key: - return JSONResponse({"valid": False, "error": "empty_key"}, status_code=400) - - # Try to validate by checking if we can fetch the models - try: - import httpx - - headers = {"Authorization": f"Bearer {key}", "Content-Type": "application/json"} - async with httpx.AsyncClient(timeout=10.0) as client: - response = await client.get("https://api.openai.com/v1/models", headers=headers) - if response.status_code == 200: - return JSONResponse({"valid": True}) - elif response.status_code == 401: - return JSONResponse({"valid": False, "error": "invalid_api_key"}, status_code=401) - else: - return JSONResponse( - {"valid": False, "error": "validation_failed"}, status_code=response.status_code - ) - except Exception as e: - logger.warning(f"API key validation failed: {e}") - return JSONResponse({"valid": False, "error": "validation_error"}, status_code=500) - - self._settings_initialized = True - def launch(self) -> None: """Start the recorder/player and run the async processing loops. - If the OpenAI key is missing, expose a tiny settings UI via the - Reachy Mini settings server to collect it before starting streams. + Provider credentials are loaded from `.env` only. If `OPENAI_API_KEY` is + missing, startup stops before media is opened. """ self._stop_event.clear() - # Try to load an existing instance .env first (covers subsequent runs) + # Try to load an existing instance .env first for Reachy Mini app-shell runs. if self._instance_path: try: - from dotenv import load_dotenv + from dotenv import load_dotenv, dotenv_values env_path = Path(self._instance_path) / ".env" if env_path.exists(): load_dotenv(dotenv_path=str(env_path), override=True) - new_key = os.getenv("OPENAI_API_KEY", "").strip() - if new_key: - try: - config.OPENAI_API_KEY = new_key - except Exception: - pass + values = dotenv_values(env_path) + config.OPENAI_API_KEY = (values.get("OPENAI_API_KEY") or "").strip() or None + config.OPENAI_BASE_URL = ( + (values.get("OPENAI_BASE_URL") or "").strip() + or "https://api.openai.com/v1" + ) except Exception: pass # Instance .env loading is optional; continue with defaults - # If key is still missing, try to download one from HuggingFace if not (config.OPENAI_API_KEY and str(config.OPENAI_API_KEY).strip()): - logger.info("OPENAI_API_KEY not set, attempting to download from HuggingFace...") - try: - from gradio_client import Client - client = Client("HuggingFaceM4/gradium_setup", verbose=False) - key, status = client.predict(api_name="/claim_b_key") - if key and key.strip(): - logger.info("Successfully downloaded API key from HuggingFace") - # Persist it immediately - self._persist_api_key(key) - except Exception as e: - logger.warning(f"Failed to download API key from HuggingFace: {e}") - - # Always expose settings UI if a settings app is available - # (do this AFTER loading/downloading the key so status endpoint sees the right value) - self._init_settings_ui_if_needed() - - # If key is still missing -> wait until provided via the settings UI - if not (config.OPENAI_API_KEY and str(config.OPENAI_API_KEY).strip()): - logger.warning("OPENAI_API_KEY not found. Open the app settings page to enter it.") - # Poll until the key becomes available (set via the settings UI) - try: - while not (config.OPENAI_API_KEY and str(config.OPENAI_API_KEY).strip()): - time.sleep(0.2) - except KeyboardInterrupt: - logger.info("Interrupted while waiting for API key.") - return + logger.error("OPENAI_API_KEY is missing. Add it to .env and restart the conversation app.") + return # Start media after key is set/available self._robot.media.start_recording() diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/main.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/main.py index 6b809e8a..f618aef4 100644 --- a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/main.py +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/main.py @@ -31,7 +31,7 @@ def main() -> None: def run( args: argparse.Namespace, - robot: ReachyMini = None, + robot: ReachyMini | None = None, app_stop_event: Optional[threading.Event] = None, settings_app: Optional[Any] = None, instance_path: Optional[str] = None, @@ -41,7 +41,6 @@ def run( import gradio as gr from fastapi import FastAPI from fastrtc import Stream - from gradio.utils import get_space except ImportError as exc: raise RuntimeError( "Reachy OpenShell conversation dependencies are not installed. " @@ -144,25 +143,66 @@ def run( stream_manager: gr.Blocks | LocalStream | None = None if args.gradio: - api_key_textbox = gr.Textbox( - label="OPENAI API Key", - type="password", - value=os.getenv("OPENAI_API_KEY") if not get_space() else "", - ) - stream = Stream( handler=handler, mode="send-receive", modality="audio", additional_inputs=[ chatbot, - api_key_textbox, ], additional_outputs=[chatbot], additional_outputs_handler=update_chatbot, ui_args={"title": "Talk with Reachy Mini"}, ) stream_manager = stream.ui + + with stream_manager: + input_mode = gr.Radio( + choices=["Microphone", "Text"], + value="Microphone", + label="Input", + ) + with gr.Row(): + text_input = gr.Textbox( + label="Message", + lines=2, + max_lines=5, + visible=False, + ) + send_button = gr.Button("Send", variant="primary", visible=False) + + def switch_input_mode(mode: str) -> tuple[dict[str, Any], dict[str, Any], dict[str, Any]]: + text_mode = mode == "Text" + return ( + gr.update(visible=not text_mode), + gr.update(visible=text_mode), + gr.update(visible=text_mode), + ) + + async def send_text_message( + message: str, + chatbot_messages: List[Dict[str, Any]] | None, + ) -> tuple[List[Dict[str, Any]], str]: + updated_chatbot = list(chatbot_messages or []) + updated_chatbot.extend(await handler.send_text_message(message)) + return updated_chatbot, "" + + input_mode.change( + fn=switch_input_mode, + inputs=input_mode, + outputs=[stream.webrtc_component, text_input, send_button], + ) + text_input.submit( + fn=send_text_message, + inputs=[text_input, chatbot], + outputs=[chatbot, text_input], + ) + send_button.click( + fn=send_text_message, + inputs=[text_input, chatbot], + outputs=[chatbot, text_input], + ) + if not settings_app: app = FastAPI() else: @@ -243,7 +283,7 @@ def run(self, reachy_mini: ReachyMini, stop_event: threading.Event) -> None: robot=reachy_mini, app_stop_event=stop_event, settings_app=self.settings_app, - instance_path=instance_path, + instance_path=str(instance_path), ) diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/openai_realtime.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/openai_realtime.py index c43d6172..7e993157 100644 --- a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/openai_realtime.py +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/openai_realtime.py @@ -4,8 +4,7 @@ import random import asyncio import logging -from typing import Any, Final, Tuple, Literal, Optional -from pathlib import Path +from typing import Any, Final, Tuple, Literal, Optional, cast from datetime import datetime import cv2 @@ -22,6 +21,7 @@ from reachy_mini_conversation_app.tools.core_tools import ( ToolDependencies, get_tool_specs, + dispatch_tool_call_with_manager, ) from reachy_mini_conversation_app.tools.background_tool_manager import ( ToolCallRoutine, @@ -89,9 +89,6 @@ def __init__(self, deps: ToolDependencies, gradio_mode: bool = False, instance_p self.is_idle_tool_call = False self.gradio_mode = gradio_mode self.instance_path = instance_path - # Track how the API key was provided (env vs textbox) and its value - self._key_source: Literal["env", "textbox"] = "env" - self._provided_api_key: str | None = None # Debouncing for partial transcripts self.partial_transcript_task: asyncio.Task[None] | None = None @@ -101,6 +98,8 @@ def __init__(self, deps: ToolDependencies, gradio_mode: bool = False, instance_p # Internal lifecycle flags self._shutdown_requested: bool = False self._connected_event: asyncio.Event = asyncio.Event() + self._text_startup_task: asyncio.Task[None] | None = None + self._startup_error: str | None = None # Background tool manager self.tool_manager = BackgroundToolManager() @@ -120,6 +119,314 @@ def copy(self) -> "OpenaiRealtimeHandler": """Create a copy of the handler.""" return OpenaiRealtimeHandler(self.deps, self.gradio_mode, self.instance_path) + def _record_startup_error(self, message: str) -> None: + """Store a startup failure so the UI can show a useful error.""" + self._startup_error = message + try: + self._connected_event.set() + except Exception: + pass + + def _realtime_context(self) -> str: + """Return non-secret Realtime configuration for diagnostics.""" + return f"model={config.MODEL_NAME!r}, base_url={config.OPENAI_BASE_URL!r}" + + def _provider_realtime_hint(self) -> str: + """Return a provider-specific hint for common compatibility failures.""" + base_url = str(config.OPENAI_BASE_URL) + if "integrate.api.nvidia.com" in base_url or "inference-api.nvidia.com" in base_url: + return ( + " NVIDIA OpenAI-compatible chat endpoints use Chat Completions; " + "microphone mode requires an OpenAI-compatible Realtime API endpoint." + ) + return "" + + def _not_connected_message(self) -> str: + """Return the user-facing reason the Realtime session is unavailable.""" + if self._startup_error: + return f"[error] {self._startup_error}" + return ( + "[error] Realtime session is not connected. Check OPENAI_API_KEY, " + "OPENAI_BASE_URL, and MODEL_NAME in .env." + ) + + @staticmethod + def _text_model_uses_realtime() -> bool: + """Return whether typed messages should use the Realtime transport.""" + return "realtime" in str(config.MODEL_NAME).lower() + + @staticmethod + def _chat_completion_tool_specs() -> list[dict[str, Any]]: + """Convert Realtime-style tool specs to Chat Completions tool specs.""" + chat_tools: list[dict[str, Any]] = [] + for tool in get_tool_specs(): + if tool.get("type") != "function": + continue + chat_tools.append( + { + "type": "function", + "function": { + "name": tool.get("name"), + "description": tool.get("description", ""), + "parameters": tool.get("parameters", {}), + }, + } + ) + return chat_tools + + @staticmethod + def _tool_call_value(tool_call: Any, name: str) -> Any: + """Read a value from either an SDK model object or a dict.""" + if isinstance(tool_call, dict): + return tool_call.get(name) + return getattr(tool_call, name, None) + + @classmethod + def _tool_call_function_value(cls, tool_call: Any, name: str) -> Any: + """Read a function value from either an SDK tool-call object or a dict.""" + function = cls._tool_call_value(tool_call, "function") + if isinstance(function, dict): + return function.get(name) + return getattr(function, name, None) + + @staticmethod + def _serialize_tool_call(tool_call: Any) -> dict[str, Any]: + """Convert a tool call into the dict shape Chat Completions expects.""" + if hasattr(tool_call, "model_dump"): + return tool_call.model_dump() + if isinstance(tool_call, dict): + return tool_call + return { + "id": getattr(tool_call, "id", None), + "type": getattr(tool_call, "type", "function"), + "function": { + "name": getattr(getattr(tool_call, "function", None), "name", None), + "arguments": getattr(getattr(tool_call, "function", None), "arguments", "{}"), + }, + } + + def _openai_api_key_or_error(self) -> str | None: + """Return the configured API key or record a useful startup error.""" + openai_api_key = (config.OPENAI_API_KEY or "").strip() + if openai_api_key: + return openai_api_key + + message = ( + "OPENAI_API_KEY is missing or empty after reading .env. Add it to .env and restart the " + "conversation app. If .env uses OPENAI_API_KEY=${NVIDIA_API_KEY}, make sure " + "NVIDIA_API_KEY is exported in the shell that starts the app." + ) + self._record_startup_error(message) + logger.error(message) + return None + + async def _ensure_text_session(self) -> bool: + """Start a Realtime session for text-only Gradio input if needed.""" + if self.connection is not None: + return True + + if self._text_startup_task is None or self._text_startup_task.done(): + self._startup_error = None + try: + self._connected_event.clear() + except Exception: + pass + self._text_startup_task = asyncio.create_task(self.start_up(), name="openai-realtime-text") + + try: + await asyncio.wait_for(self._connected_event.wait(), timeout=10.0) + except asyncio.TimeoutError: + logger.warning("Timed out waiting for text Realtime session startup") + + return self.connection is not None + + @staticmethod + def _chat_message_from_output(output: AdditionalOutputs) -> dict[str, Any] | None: + """Convert a FastRTC AdditionalOutputs payload into a chatbot message.""" + if not output.args: + return None + candidate = output.args[0] + if not isinstance(candidate, dict): + return None + role = candidate.get("role") + content = candidate.get("content") + if role == "user_partial" or not isinstance(role, str) or content is None: + return None + return candidate + + async def send_text_message(self, message: str, timeout: float = 30.0) -> list[dict[str, Any]]: + """Send a typed user message and collect chat updates.""" + text = message.strip() + if not text: + return [] + + if not self._text_model_uses_realtime(): + return await self._send_chat_completion_text_message(text) + + if not await self._ensure_text_session(): + return [ + { + "role": "assistant", + "content": self._not_connected_message(), + }, + ] + + await self.connection.conversation.item.create( + item={ + "type": "message", + "role": "user", + "content": [{"type": "input_text", "text": text}], + }, + ) + await self._safe_response_create() + + messages: list[dict[str, Any]] = [{"role": "user", "content": text}] + saw_assistant_message = False + deadline = asyncio.get_event_loop().time() + timeout + + while asyncio.get_event_loop().time() < deadline: + try: + output = await asyncio.wait_for(self.output_queue.get(), timeout=0.5) + except asyncio.TimeoutError: + if saw_assistant_message and self._response_done_event.is_set(): + break + continue + + if not isinstance(output, AdditionalOutputs): + continue + + chat_message = self._chat_message_from_output(output) + if chat_message is None: + continue + + messages.append(chat_message) + if chat_message.get("role") == "assistant": + saw_assistant_message = True + + if saw_assistant_message and self._response_done_event.is_set(): + break + + if not saw_assistant_message: + messages.append({"role": "assistant", "content": "[error] Timed out waiting for a response."}) + + return messages + + async def _send_chat_completion_text_message(self, text: str) -> list[dict[str, Any]]: + """Send a typed message through Chat Completions for non-Realtime models.""" + openai_api_key = self._openai_api_key_or_error() + if openai_api_key is None: + return [{"role": "assistant", "content": self._not_connected_message()}] + + if getattr(self, "client", None) is None: + self.client = AsyncOpenAI( + api_key=openai_api_key, + base_url=config.OPENAI_BASE_URL, + ) + + chatbot_messages: list[dict[str, Any]] = [{"role": "user", "content": text}] + chat_messages: list[dict[str, Any]] = [ + {"role": "system", "content": get_session_instructions()}, + {"role": "user", "content": text}, + ] + chat_tools = self._chat_completion_tool_specs() + + try: + completion = await self.client.chat.completions.create( + model=config.MODEL_NAME, + messages=cast(Any, chat_messages), + tools=cast(Any, chat_tools), + tool_choice="auto", + ) + except Exception as e: + logger.exception("Chat Completions request failed") + return [ + *chatbot_messages, + { + "role": "assistant", + "content": ( + f"[error] Chat Completions request failed " + f"(model={config.MODEL_NAME!r}, base_url={config.OPENAI_BASE_URL!r}): " + f"{type(e).__name__}: {e}" + ), + }, + ] + + choice = completion.choices[0] if completion.choices else None + assistant_message = getattr(choice, "message", None) if choice else None + assistant_content = getattr(assistant_message, "content", None) or "" + tool_calls = getattr(assistant_message, "tool_calls", None) or [] + + if not tool_calls: + chatbot_messages.append({"role": "assistant", "content": assistant_content or "[no response]"}) + return chatbot_messages + + chat_messages.append( + { + "role": "assistant", + "content": assistant_content, + "tool_calls": [self._serialize_tool_call(tool_call) for tool_call in tool_calls], + } + ) + + for tool_call in tool_calls: + tool_call_id = self._tool_call_value(tool_call, "id") or str(uuid.uuid4()) + tool_name = self._tool_call_function_value(tool_call, "name") + args_json = self._tool_call_function_value(tool_call, "arguments") or "{}" + if not isinstance(tool_name, str): + tool_result = {"error": "tool call did not include a valid function name"} + else: + tool_result = await dispatch_tool_call_with_manager( + tool_name, + args_json, + self.deps, + self.tool_manager, + ) + + tool_result_json = json.dumps(tool_result) + chat_messages.append( + { + "role": "tool", + "tool_call_id": tool_call_id, + "content": tool_result_json, + } + ) + chatbot_messages.append( + { + "role": "assistant", + "content": tool_result_json, + "metadata": { + "title": f"Used tool {tool_name or 'unknown'}", + "status": "done", + }, + } + ) + + try: + follow_up = await self.client.chat.completions.create( + model=config.MODEL_NAME, + messages=cast(Any, chat_messages), + tools=cast(Any, chat_tools), + ) + except Exception as e: + logger.exception("Chat Completions tool follow-up failed") + chatbot_messages.append( + { + "role": "assistant", + "content": ( + f"[error] Chat Completions tool follow-up failed " + f"(model={config.MODEL_NAME!r}, base_url={config.OPENAI_BASE_URL!r}): " + f"{type(e).__name__}: {e}" + ), + } + ) + return chatbot_messages + + follow_up_choice = follow_up.choices[0] if follow_up.choices else None + follow_up_message = getattr(follow_up_choice, "message", None) if follow_up_choice else None + follow_up_content = getattr(follow_up_message, "content", None) or "Done." + chatbot_messages.append({"role": "assistant", "content": follow_up_content}) + return chatbot_messages + async def _emit_debounced_partial(self, transcript: str, sequence: int) -> None: """Emit partial transcript after debounce delay.""" try: @@ -134,27 +441,14 @@ async def _emit_debounced_partial(self, transcript: str, sequence: int) -> None: async def start_up(self) -> None: """Start the handler with minimal retries on unexpected websocket closure.""" - openai_api_key = config.OPENAI_API_KEY - if self.gradio_mode and not openai_api_key: - # api key was not found in .env or in the environment variables - await self.wait_for_args() # type: ignore[no-untyped-call] - args = list(self.latest_args) - textbox_api_key = args[3] if len(args[3]) > 0 else None - if textbox_api_key is not None: - openai_api_key = textbox_api_key - self._key_source = "textbox" - self._provided_api_key = textbox_api_key - else: - openai_api_key = config.OPENAI_API_KEY - else: - if not openai_api_key or not openai_api_key.strip(): - # In headless console mode, LocalStream now blocks startup until the key is provided. - # However, unit tests may invoke this handler directly with a stubbed client. - # To keep tests hermetic without requiring a real key, fall back to a placeholder. - logger.warning("OPENAI_API_KEY missing. Proceeding with a placeholder (tests/offline).") - openai_api_key = "DUMMY" + openai_api_key = self._openai_api_key_or_error() + if openai_api_key is None: + return - self.client = AsyncOpenAI(api_key=openai_api_key) + self.client = AsyncOpenAI( + api_key=openai_api_key, + base_url=config.OPENAI_BASE_URL, + ) max_attempts = 3 for attempt in range(1, max_attempts + 1): @@ -173,12 +467,29 @@ async def start_up(self) -> None: logger.info("Retrying in %.1f seconds...", delay) await asyncio.sleep(delay) continue - raise + message = ( + f"Realtime websocket closed before startup completed ({self._realtime_context()}): " + f"{type(e).__name__}: {e}.{self._provider_realtime_hint()}" + ) + self._record_startup_error(message) + logger.error(message) + return + except Exception as e: + message = ( + f"Realtime startup failed ({self._realtime_context()}): " + f"{type(e).__name__}: {e}.{self._provider_realtime_hint()}" + ) + self._record_startup_error(message) + logger.exception(message) + return finally: # never keep a stale reference self.connection = None try: - self._connected_event.clear() + if self._startup_error is None: + self._connected_event.clear() + else: + self._connected_event.set() except Exception: pass @@ -418,10 +729,12 @@ async def _run_realtime_session(self) -> None: LOCKED_PROFILE, get_session_voice(), ) - # If we reached here, the session update succeeded which implies the API key worked. - # Persist the key to a newly created .env (copied from .env.example) if needed. - self._persist_api_key_if_needed() - except Exception: + except Exception as e: + message = ( + f"Realtime session.update failed ({self._realtime_context()}): " + f"{type(e).__name__}: {e}.{self._provider_realtime_hint()}" + ) + self._record_startup_error(message) logger.exception("Realtime session.update failed; aborting startup") return @@ -742,70 +1055,3 @@ async def send_idle_signal(self, idle_duration: float) -> None: "tool_choice": "required", }, ) - - def _persist_api_key_if_needed(self) -> None: - """Persist the API key into `.env` inside `instance_path/` when appropriate. - - - Only runs in Gradio mode when key came from the textbox and is non-empty. - - Only saves if `self.instance_path` is not None. - - Writes `.env` to `instance_path/.env` (does not overwrite if it already exists). - - If `instance_path/.env.example` exists, copies its contents while overriding OPENAI_API_KEY. - """ - try: - if not self.gradio_mode: - logger.warning("Not in Gradio mode; skipping API key persistence.") - return - - if self._key_source != "textbox": - logger.info("API key not provided via textbox; skipping persistence.") - return - - key = (self._provided_api_key or "").strip() - if not key: - logger.warning("No API key provided via textbox; skipping persistence.") - return - if self.instance_path is None: - logger.warning("Instance path is None; cannot persist API key.") - return - - # Update the current process environment for downstream consumers - try: - import os - - os.environ["OPENAI_API_KEY"] = key - except Exception: # best-effort - pass - - target_dir = Path(self.instance_path) - env_path = target_dir / ".env" - if env_path.exists(): - # Respect existing user configuration - logger.info(".env already exists at %s; not overwriting.", env_path) - return - - example_path = target_dir / ".env.example" - content_lines: list[str] = [] - if example_path.exists(): - try: - content = example_path.read_text(encoding="utf-8") - content_lines = content.splitlines() - except Exception as e: - logger.warning("Failed to read .env.example at %s: %s", example_path, e) - - # Replace or append the OPENAI_API_KEY line - replaced = False - for i, line in enumerate(content_lines): - if line.strip().startswith("OPENAI_API_KEY="): - content_lines[i] = f"OPENAI_API_KEY={key}" - replaced = True - break - if not replaced: - content_lines.append(f"OPENAI_API_KEY={key}") - - # Ensure file ends with newline - final_text = "\n".join(content_lines) + "\n" - env_path.write_text(final_text, encoding="utf-8") - logger.info("Created %s and stored OPENAI_API_KEY for future runs.", env_path) - except Exception as e: - # Never crash the app for QoL persistence; just log. - logger.warning("Could not persist OPENAI_API_KEY to .env: %s", e) diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/static/index.html b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/static/index.html deleted file mode 100644 index 058cff29..00000000 --- a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/static/index.html +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - Reachy OpenShell - Settings - - - -
    -
    -
    -

    Loading…

    -
    -
    -
    -
    Headless control
    -

    Reachy OpenShell

    -

    Configure your OpenAI API key for the conversation app.

    -
    - - - - -
    - - - - diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/static/main.js b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/static/main.js deleted file mode 100644 index 4932fc8d..00000000 --- a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/static/main.js +++ /dev/null @@ -1,136 +0,0 @@ -const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); - -async function fetchWithTimeout(url, options = {}, timeoutMs = 2000) { - const controller = new AbortController(); - const id = setTimeout(() => controller.abort(), timeoutMs); - try { - return await fetch(url, { ...options, signal: controller.signal }); - } finally { - clearTimeout(id); - } -} - -async function waitForStatus(timeoutMs = 15000) { - const loadingText = document.querySelector("#loading p"); - let attempts = 0; - const deadline = Date.now() + timeoutMs; - while (true) { - attempts += 1; - try { - const url = new URL("/status", window.location.origin); - url.searchParams.set("_", Date.now().toString()); - const resp = await fetchWithTimeout(url, {}, 2000); - if (resp.ok) return await resp.json(); - } catch (e) {} - if (loadingText) { - loadingText.textContent = attempts > 8 ? "Starting backend…" : "Loading…"; - } - if (Date.now() >= deadline) return null; - await sleep(500); - } -} - -async function validateKey(key) { - const body = { openai_api_key: key }; - const resp = await fetch("/validate_api_key", { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify(body), - }); - const data = await resp.json().catch(() => ({})); - if (!resp.ok) { - throw new Error(data.error || "validation_failed"); - } - return data; -} - -async function saveKey(key) { - const body = { openai_api_key: key }; - const resp = await fetch("/openai_api_key", { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify(body), - }); - if (!resp.ok) { - const data = await resp.json().catch(() => ({})); - throw new Error(data.error || "save_failed"); - } - return await resp.json(); -} - -function show(el, flag) { - el.classList.toggle("hidden", !flag); -} - -async function init() { - const loading = document.getElementById("loading"); - const statusEl = document.getElementById("status"); - const formPanel = document.getElementById("form-panel"); - const configuredPanel = document.getElementById("configured"); - const saveBtn = document.getElementById("save-btn"); - const changeKeyBtn = document.getElementById("change-key-btn"); - const input = document.getElementById("api-key"); - - show(loading, true); - show(formPanel, false); - show(configuredPanel, false); - - const st = (await waitForStatus()) || { has_key: false }; - - if (st.has_key) { - show(configuredPanel, true); - } else { - show(formPanel, true); - } - show(loading, false); - - changeKeyBtn.addEventListener("click", () => { - show(configuredPanel, false); - show(formPanel, true); - input.value = ""; - statusEl.textContent = ""; - statusEl.className = "status"; - }); - - input.addEventListener("input", () => { - input.classList.remove("error"); - }); - - saveBtn.addEventListener("click", async () => { - const key = input.value.trim(); - if (!key) { - statusEl.textContent = "Please enter a valid key."; - statusEl.className = "status warn"; - input.classList.add("error"); - return; - } - statusEl.textContent = "Validating API key..."; - statusEl.className = "status"; - input.classList.remove("error"); - try { - const validation = await validateKey(key); - if (!validation.valid) { - statusEl.textContent = "Invalid API key. Please check your key and try again."; - statusEl.className = "status error"; - input.classList.add("error"); - return; - } - statusEl.textContent = "Key valid! Saving..."; - statusEl.className = "status ok"; - await saveKey(key); - statusEl.textContent = "Saved. Reloading…"; - statusEl.className = "status ok"; - window.location.reload(); - } catch (e) { - input.classList.add("error"); - if (e.message === "invalid_api_key") { - statusEl.textContent = "Invalid API key. Please check your key and try again."; - } else { - statusEl.textContent = "Failed to validate/save key. Please try again."; - } - statusEl.className = "status error"; - } - }); -} - -window.addEventListener("DOMContentLoaded", init); \ No newline at end of file diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/static/style.css b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/static/style.css deleted file mode 100644 index 1f8f0c8f..00000000 --- a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/static/style.css +++ /dev/null @@ -1,210 +0,0 @@ -:root { - --bg: #060b1a; - --bg-2: #071023; - --panel: rgba(11, 18, 36, 0.8); - --border: rgba(255, 255, 255, 0.08); - --text: #eaf2ff; - --muted: #9fb6d7; - --ok: #4ce0b3; - --warn: #ffb547; - --error: #ff5c70; - --accent: #45c4ff; - --accent-2: #5ef0c1; - --shadow: 0 20px 70px rgba(0, 0, 0, 0.45); -} - -* { box-sizing: border-box; } -body { - margin: 0; - min-height: 100vh; - font-family: "Space Grotesk", "Inter", "Segoe UI", sans-serif; - background: radial-gradient(circle at 20% 20%, rgba(69, 196, 255, 0.16), transparent 35%), - radial-gradient(circle at 80% 0%, rgba(94, 240, 193, 0.16), transparent 32%), - linear-gradient(135deg, var(--bg), var(--bg-2)); - color: var(--text); -} - -.ambient { - position: fixed; - inset: 0; - background: radial-gradient(circle at 30% 60%, rgba(255, 255, 255, 0.05), transparent 35%), - radial-gradient(circle at 75% 30%, rgba(69, 196, 255, 0.08), transparent 32%); - filter: blur(60px); - z-index: 0; - pointer-events: none; -} - -.loading { - position: fixed; - inset: 0; - background: rgba(5, 10, 24, 0.92); - backdrop-filter: blur(4px); - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - z-index: 9999; -} -.loading .spinner { - width: 46px; - height: 46px; - border: 4px solid rgba(255,255,255,0.15); - border-top-color: var(--accent); - border-radius: 50%; - animation: spin 1s linear infinite; - margin-bottom: 12px; -} -.loading p { color: var(--muted); margin: 0; letter-spacing: 0.4px; } -@keyframes spin { to { transform: rotate(360deg); } } - -.container { - position: relative; - max-width: 600px; - margin: 10vh auto; - padding: 0 24px 40px; - z-index: 1; -} - -.hero { - margin-bottom: 24px; -} -.hero h1 { - margin: 6px 0 6px; - font-size: 32px; - letter-spacing: -0.4px; -} -.subtitle { - margin: 0; - color: var(--muted); - line-height: 1.5; -} -.pill { - display: inline-flex; - align-items: center; - gap: 6px; - padding: 6px 12px; - border-radius: 999px; - background: rgba(94, 240, 193, 0.1); - color: var(--accent-2); - font-size: 12px; - letter-spacing: 0.3px; - border: 1px solid rgba(94, 240, 193, 0.25); -} - -.panel { - background: var(--panel); - border: 1px solid var(--border); - border-radius: 14px; - padding: 18px 18px 16px; - box-shadow: var(--shadow); - backdrop-filter: blur(10px); - margin-top: 16px; -} -.panel-heading { - display: flex; - align-items: center; - justify-content: space-between; - gap: 12px; - margin-bottom: 8px; -} -.panel-heading h2 { - margin: 2px 0; - font-size: 22px; -} -.eyebrow { - margin: 0; - text-transform: uppercase; - font-size: 11px; - letter-spacing: 0.5px; - color: var(--muted); -} -.muted { color: var(--muted); } -.chip { - display: inline-flex; - align-items: center; - padding: 6px 10px; - border-radius: 999px; - font-size: 12px; - color: var(--text); - background: rgba(255, 255, 255, 0.08); - border: 1px solid var(--border); -} -.chip-ok { - background: rgba(76, 224, 179, 0.15); - color: var(--ok); - border-color: rgba(76, 224, 179, 0.4); -} - -.hidden { display: none; } -label { - display: block; - margin: 8px 0 6px; - font-size: 13px; - color: var(--muted); - letter-spacing: 0.2px; -} -input[type="password"], -input[type="text"] { - width: 100%; - padding: 12px 14px; - border: 1px solid var(--border); - border-radius: 10px; - background: rgba(255, 255, 255, 0.04); - color: var(--text); - transition: border 0.15s ease, box-shadow 0.15s ease; -} -input:focus { - border-color: rgba(94, 240, 193, 0.7); - outline: none; - box-shadow: 0 0 0 3px rgba(94, 240, 193, 0.15); -} -input.error { - border-color: var(--error); - box-shadow: 0 0 0 3px rgba(255, 92, 112, 0.15); -} - -button { - display: inline-flex; - align-items: center; - justify-content: center; - margin-top: 12px; - padding: 11px 16px; - border: none; - border-radius: 10px; - background: linear-gradient(120deg, var(--accent), var(--accent-2)); - color: #031022; - cursor: pointer; - font-weight: 600; - letter-spacing: 0.2px; - box-shadow: 0 14px 40px rgba(69, 196, 255, 0.25); - transition: transform 0.12s ease, filter 0.12s ease, box-shadow 0.12s ease; -} -button:hover { filter: brightness(1.06); transform: translateY(-1px); } -button:active { transform: translateY(0); } -button.ghost { - background: rgba(255, 255, 255, 0.05); - color: var(--text); - box-shadow: none; - border: 1px solid var(--border); -} -button.ghost:hover { border-color: rgba(94, 240, 193, 0.4); } -.actions { - display: flex; - align-items: center; - gap: 12px; - flex-wrap: wrap; -} -.status { - margin: 0; - color: var(--muted); - font-size: 13px; -} -.status.ok { color: var(--ok); } -.status.warn { color: var(--warn); } -.status.error { color: var(--error); } - -@media (max-width: 760px) { - .hero h1 { font-size: 26px; } - button { width: 100%; justify-content: center; } - .actions { flex-direction: column; align-items: flex-start; } -} \ No newline at end of file diff --git a/projects/reachy-mini-openshell/tests/test_openai_realtime.py b/projects/reachy-mini-openshell/tests/test_openai_realtime.py index 39a82e3e..4a014ab4 100644 --- a/projects/reachy-mini-openshell/tests/test_openai_realtime.py +++ b/projects/reachy-mini-openshell/tests/test_openai_realtime.py @@ -20,6 +20,12 @@ def _build_handler(loop: asyncio.AbstractEventLoop) -> OpenaiRealtimeHandler: return OpenaiRealtimeHandler(deps) +def _set_openai_test_config(monkeypatch: Any) -> None: + monkeypatch.setattr(rt_mod.config, "OPENAI_API_KEY", "test-key") + monkeypatch.setattr(rt_mod.config, "OPENAI_BASE_URL", "https://example.test/v1") + monkeypatch.setattr(rt_mod.config, "MODEL_NAME", "test-realtime-model") + + def test_format_timestamp_uses_wall_clock() -> None: """Test that format_timestamp uses wall clock time.""" loop = asyncio.new_event_loop() @@ -44,6 +50,7 @@ async def test_start_up_retries_on_abrupt_close(monkeypatch: Any, caplog: Any) - Ensures handler clears self.connection at the end. """ caplog.set_level(logging.WARNING) + _set_openai_test_config(monkeypatch) # Use a local Exception as the module's ConnectionClosedError to avoid ws dependency FakeCCE = type("FakeCCE", (Exception,), {}) @@ -120,6 +127,330 @@ def __init__(self, **_kw: Any) -> None: self.realtime = FakeRealtime() warnings = [r for r in caplog.records if r.levelname == "WARNING" and "closed unexpectedly" in r.msg] assert len(warnings) == 1 + +@pytest.mark.asyncio +async def test_start_up_passes_env_base_url_to_openai_client(monkeypatch: Any) -> None: + """OPENAI_API_KEY and OPENAI_BASE_URL come from config and are passed to the SDK.""" + _set_openai_test_config(monkeypatch) + client_kwargs: dict[str, Any] = {} + + class FakeConn: + async def __aenter__(self) -> "FakeConn": return self + async def __aexit__(self, exc_type: Any, exc: Any, tb: Any) -> bool: return False + def __aiter__(self) -> "FakeConn": return self + async def __anext__(self) -> None: raise StopAsyncIteration + + class _Session: + async def update(self, **_kw: Any) -> None: return None + session = _Session() + + class FakeRealtime: + def connect(self, **_kw: Any) -> FakeConn: + return FakeConn() + + class FakeClient: + def __init__(self, **kwargs: Any) -> None: + client_kwargs.update(kwargs) + self.realtime = FakeRealtime() + + monkeypatch.setattr(rt_mod, "AsyncOpenAI", FakeClient) + + deps = ToolDependencies(reachy_mini=MagicMock(), movement_manager=MagicMock()) + handler = rt_mod.OpenaiRealtimeHandler(deps) + + await handler.start_up() + + assert client_kwargs == { + "api_key": "test-key", + "base_url": "https://example.test/v1", + } + + +@pytest.mark.asyncio +async def test_send_text_message_creates_input_text_and_collects_response(monkeypatch: Any) -> None: + """Text mode sends a user input_text item and returns chatbot updates.""" + _set_openai_test_config(monkeypatch) + event_queue: asyncio.Queue[Any] = asyncio.Queue() + created_items: list[dict[str, Any]] = [] + + class FakeEvent: + def __init__(self, etype: str, **kwargs: Any) -> None: + self.type = etype + for key, value in kwargs.items(): + setattr(self, key, value) + + class FakeSession: + async def update(self, **_kw: Any) -> None: + return None + + class FakeConversationItem: + async def create(self, **kwargs: Any) -> None: + created_items.append(kwargs["item"]) + + class FakeConversation: + item = FakeConversationItem() + + class FakeResponse: + async def create(self, **_kw: Any) -> None: + await event_queue.put(FakeEvent("response.created")) + await event_queue.put(FakeEvent("response.output_audio_transcript.done", transcript="Hello from text mode.")) + await event_queue.put(FakeEvent("response.done", response=MagicMock(usage=None))) + + async def cancel(self, **_kw: Any) -> None: + return None + + class FakeInputAudioBuffer: + async def append(self, **_kw: Any) -> None: + return None + + class FakeConn: + session = FakeSession() + conversation = FakeConversation() + response = FakeResponse() + input_audio_buffer = FakeInputAudioBuffer() + + async def __aenter__(self) -> "FakeConn": + return self + + async def __aexit__(self, exc_type: Any, exc: Any, tb: Any) -> bool: + return False + + def __aiter__(self) -> "FakeConn": + return self + + async def __anext__(self) -> Any: + event = await event_queue.get() + if event is None: + raise StopAsyncIteration + return event + + async def close(self) -> None: + await event_queue.put(None) + + class FakeRealtime: + def connect(self, **_kw: Any) -> FakeConn: + return FakeConn() + + class FakeClient: + def __init__(self, **_kw: Any) -> None: + self.realtime = FakeRealtime() + + monkeypatch.setattr(rt_mod, "AsyncOpenAI", FakeClient) + + deps = ToolDependencies(reachy_mini=MagicMock(), movement_manager=MagicMock()) + handler = rt_mod.OpenaiRealtimeHandler(deps) + + messages = await handler.send_text_message("Hello typed Reachy") + await handler.shutdown() + if handler._text_startup_task is not None: + await asyncio.wait_for(handler._text_startup_task, timeout=1) + + assert created_items == [ + { + "type": "message", + "role": "user", + "content": [{"type": "input_text", "text": "Hello typed Reachy"}], + } + ] + assert messages == [ + {"role": "user", "content": "Hello typed Reachy"}, + {"role": "assistant", "content": "Hello from text mode."}, + ] + + +@pytest.mark.asyncio +async def test_send_text_message_reports_missing_dotenv_key(monkeypatch: Any) -> None: + """Text mode reports the actual missing-key problem instead of a generic connection error.""" + monkeypatch.setattr(rt_mod.config, "OPENAI_API_KEY", "") + monkeypatch.setattr(rt_mod.config, "OPENAI_BASE_URL", "https://inference-api.nvidia.com/v1") + monkeypatch.setattr(rt_mod.config, "MODEL_NAME", "nvidia/nemotron-3-super-120b-a12b") + + deps = ToolDependencies(reachy_mini=MagicMock(), movement_manager=MagicMock()) + handler = rt_mod.OpenaiRealtimeHandler(deps) + + messages = await handler.send_text_message("Hello") + + assert len(messages) == 1 + assert "OPENAI_API_KEY is missing or empty" in messages[0]["content"] + assert "NVIDIA_API_KEY" in messages[0]["content"] + + +@pytest.mark.asyncio +async def test_send_text_message_reports_realtime_startup_failure(monkeypatch: Any) -> None: + """Text mode includes model/base URL context when the Realtime provider rejects startup.""" + monkeypatch.setattr(rt_mod.config, "OPENAI_API_KEY", "test-key") + monkeypatch.setattr(rt_mod.config, "OPENAI_BASE_URL", "https://inference-api.nvidia.com/v1") + monkeypatch.setattr(rt_mod.config, "MODEL_NAME", "gpt-realtime") + + class FakeSession: + async def update(self, **_kw: Any) -> None: + raise RuntimeError("404 not found") + + class FakeConn: + session = FakeSession() + + async def __aenter__(self) -> "FakeConn": + return self + + async def __aexit__(self, exc_type: Any, exc: Any, tb: Any) -> bool: + return False + + class FakeRealtime: + def connect(self, **_kw: Any) -> FakeConn: + return FakeConn() + + class FakeClient: + def __init__(self, **_kw: Any) -> None: + self.realtime = FakeRealtime() + + monkeypatch.setattr(rt_mod, "AsyncOpenAI", FakeClient) + + deps = ToolDependencies(reachy_mini=MagicMock(), movement_manager=MagicMock()) + handler = rt_mod.OpenaiRealtimeHandler(deps) + + messages = await handler.send_text_message("Hello") + + assert len(messages) == 1 + content = messages[0]["content"] + assert "Realtime session.update failed" in content + assert "gpt-realtime" in content + assert "https://inference-api.nvidia.com/v1" in content + assert "Chat Completions" in content + + +@pytest.mark.asyncio +async def test_send_text_message_uses_chat_completions_for_non_realtime_model(monkeypatch: Any) -> None: + """Non-Realtime model IDs use Chat Completions instead of the Realtime websocket.""" + monkeypatch.setattr(rt_mod.config, "OPENAI_API_KEY", "test-key") + monkeypatch.setattr(rt_mod.config, "OPENAI_BASE_URL", "https://inference-api.nvidia.com/v1") + monkeypatch.setattr(rt_mod.config, "MODEL_NAME", "nvidia/nemotron-3-super-120b-a12b") + create_calls: list[dict[str, Any]] = [] + + class FakeMessage: + content = "Hello from Nemotron." + tool_calls: list[Any] = [] + + class FakeChoice: + message = FakeMessage() + + class FakeCompletion: + choices = [FakeChoice()] + + class FakeCompletions: + async def create(self, **kwargs: Any) -> FakeCompletion: + create_calls.append(kwargs) + return FakeCompletion() + + class FakeChat: + completions = FakeCompletions() + + class FakeClient: + def __init__(self, **_kw: Any) -> None: + self.chat = FakeChat() + + monkeypatch.setattr(rt_mod, "AsyncOpenAI", FakeClient) + + deps = ToolDependencies(reachy_mini=MagicMock(), movement_manager=MagicMock()) + handler = rt_mod.OpenaiRealtimeHandler(deps) + + messages = await handler.send_text_message("Hello") + + assert messages == [ + {"role": "user", "content": "Hello"}, + {"role": "assistant", "content": "Hello from Nemotron."}, + ] + assert len(create_calls) == 1 + assert create_calls[0]["model"] == "nvidia/nemotron-3-super-120b-a12b" + assert create_calls[0]["messages"][-1] == {"role": "user", "content": "Hello"} + + +@pytest.mark.asyncio +async def test_chat_completion_tool_follow_up_keeps_tools_param(monkeypatch: Any) -> None: + """Anthropic-compatible backends require tools= on the follow-up after a tool result.""" + monkeypatch.setattr(rt_mod.config, "OPENAI_API_KEY", "test-key") + monkeypatch.setattr(rt_mod.config, "OPENAI_BASE_URL", "https://inference-api.nvidia.com/v1") + monkeypatch.setattr(rt_mod.config, "MODEL_NAME", "azure/anthropic/claude-opus-4-8") + monkeypatch.setattr( + rt_mod, + "get_tool_specs", + lambda: [ + { + "type": "function", + "name": "dance", + "description": "Dance once.", + "parameters": {"type": "object", "properties": {}}, + } + ], + ) + + async def fake_dispatch_tool_call_with_manager(*_args: Any, **_kwargs: Any) -> dict[str, Any]: + return {"ok": True} + + monkeypatch.setattr(rt_mod, "dispatch_tool_call_with_manager", fake_dispatch_tool_call_with_manager) + create_calls: list[dict[str, Any]] = [] + + class FakeFunction: + name = "dance" + arguments = "{}" + + class FakeToolCall: + id = "call_1" + type = "function" + function = FakeFunction() + + def model_dump(self) -> dict[str, Any]: + return { + "id": self.id, + "type": self.type, + "function": { + "name": self.function.name, + "arguments": self.function.arguments, + }, + } + + class FakeToolMessage: + content = "" + tool_calls = [FakeToolCall()] + + class FakeFinalMessage: + content = "I danced." + tool_calls: list[Any] = [] + + class FakeChoice: + def __init__(self, message: Any) -> None: + self.message = message + + class FakeCompletion: + def __init__(self, message: Any) -> None: + self.choices = [FakeChoice(message)] + + class FakeCompletions: + async def create(self, **kwargs: Any) -> FakeCompletion: + create_calls.append(kwargs) + if len(create_calls) == 1: + return FakeCompletion(FakeToolMessage()) + return FakeCompletion(FakeFinalMessage()) + + class FakeChat: + completions = FakeCompletions() + + class FakeClient: + def __init__(self, **_kw: Any) -> None: + self.chat = FakeChat() + + monkeypatch.setattr(rt_mod, "AsyncOpenAI", FakeClient) + + deps = ToolDependencies(reachy_mini=MagicMock(), movement_manager=MagicMock()) + handler = rt_mod.OpenaiRealtimeHandler(deps) + + messages = await handler.send_text_message("Dance") + + assert messages[-1] == {"role": "assistant", "content": "I danced."} + assert len(create_calls) == 2 + assert create_calls[0]["tools"] + assert create_calls[1]["tools"] == create_calls[0]["tools"] + assert any(message["role"] == "tool" for message in create_calls[1]["messages"]) + # ---- Cost calculation tests ---- @@ -193,6 +524,7 @@ async def test_response_sender_retries_on_active_response_rejection(monkeypatch: processing, not mocked out. """ caplog.set_level(logging.DEBUG) + _set_openai_test_config(monkeypatch) FakeCCE = type("FakeCCE", (Exception,), {}) monkeypatch.setattr(rt_mod, "ConnectionClosedError", FakeCCE) From 51ab456572fb49f0c0ac18d99529608b078e874f Mon Sep 17 00:00:00 2001 From: Johnny Greco Date: Wed, 24 Jun 2026 23:17:53 -0400 Subject: [PATCH 09/45] Switch Reachy project type checks to ty --- projects/reachy-mini-openshell/pyproject.toml | 22 ++++---- projects/reachy-mini-openshell/uv.lock | 53 +++++-------------- 2 files changed, 23 insertions(+), 52 deletions(-) diff --git a/projects/reachy-mini-openshell/pyproject.toml b/projects/reachy-mini-openshell/pyproject.toml index ffce601d..be842755 100644 --- a/projects/reachy-mini-openshell/pyproject.toml +++ b/projects/reachy-mini-openshell/pyproject.toml @@ -14,7 +14,15 @@ name = "Pollen Robotics" email = "contact@pollen-robotics.com" [dependency-groups] -dev = [ "pytest", "pytest-asyncio", "ruff==0.12.0", "mypy==1.18.2", "pre-commit", "types-requests", "python-semantic-release>=10.5.3",] +dev = [ + "pytest", + "pytest-asyncio", + "ruff==0.12.0", + "pre-commit", + "types-requests", + "python-semantic-release>=10.5.3", + "ty>=0.0.53", +] [tool.uv] environments = [ @@ -35,15 +43,7 @@ include-package-data = true [tool.ruff] line-length = 119 -exclude = [ ".venv", "dist", "build", "**/__pycache__", "*.egg-info", ".mypy_cache", ".pytest_cache",] - -[tool.mypy] -python_version = "3.12" -files = [ "src/",] -ignore_missing_imports = true -strict = true -show_error_codes = true -warn_unused_ignores = true +exclude = [ ".venv", "dist", "build", "**/__pycache__", "*.egg-info", ".pytest_cache",] [project.entry-points.reachy_mini_apps] reachy_mini_conversation_app = "reachy_mini_conversation_app.main:ReachyMiniConversationApp" @@ -52,7 +52,7 @@ reachy_mini_conversation_app = "reachy_mini_conversation_app.main:ReachyMiniConv "" = "src" [tool.setuptools.package-data] -reachy_mini_conversation_app = [ "images/*", "static/*", "profiles/**/*.py", "profiles/**/*.txt",] +reachy_mini_conversation_app = [ "images/*", "profiles/**/*.py", "profiles/**/*.txt",] [tool.ruff.lint] select = [ "E", "F", "W", "I", "C4", "D",] diff --git a/projects/reachy-mini-openshell/uv.lock b/projects/reachy-mini-openshell/uv.lock index 4438d67d..a3dcec23 100644 --- a/projects/reachy-mini-openshell/uv.lock +++ b/projects/reachy-mini-openshell/uv.lock @@ -1371,36 +1371,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/81/08/7036c080d7117f28a4af526d794aab6a84463126db031b007717c1a6676e/multidict-6.7.1-py3-none-any.whl", hash = "sha256:55d97cc6dae627efa6a6e548885712d4864b81110ac76fa4e534c03819fa4a56", size = 12319, upload-time = "2026-01-26T02:46:44.004Z" }, ] -[[package]] -name = "mypy" -version = "1.18.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "mypy-extensions", marker = "sys_platform == 'darwin'" }, - { name = "pathspec", marker = "sys_platform == 'darwin'" }, - { name = "tomli", marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, - { name = "typing-extensions", marker = "sys_platform == 'darwin'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/c0/77/8f0d0001ffad290cef2f7f216f96c814866248a0b92a722365ed54648e7e/mypy-1.18.2.tar.gz", hash = "sha256:06a398102a5f203d7477b2923dda3634c36727fa5c237d8f859ef90c42a9924b", size = 3448846, upload-time = "2025-09-19T00:11:10.519Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/03/6f/657961a0743cff32e6c0611b63ff1c1970a0b482ace35b069203bf705187/mypy-1.18.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c1eab0cf6294dafe397c261a75f96dc2c31bffe3b944faa24db5def4e2b0f77c", size = 12807973, upload-time = "2025-09-19T00:10:35.282Z" }, - { url = "https://files.pythonhosted.org/packages/10/e9/420822d4f661f13ca8900f5fa239b40ee3be8b62b32f3357df9a3045a08b/mypy-1.18.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7a780ca61fc239e4865968ebc5240bb3bf610ef59ac398de9a7421b54e4a207e", size = 11896527, upload-time = "2025-09-19T00:10:55.791Z" }, - { url = "https://files.pythonhosted.org/packages/88/87/cafd3ae563f88f94eec33f35ff722d043e09832ea8530ef149ec1efbaf08/mypy-1.18.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:807d9315ab9d464125aa9fcf6d84fde6e1dc67da0b6f80e7405506b8ac72bc7f", size = 12731198, upload-time = "2025-09-19T00:09:44.857Z" }, - { url = "https://files.pythonhosted.org/packages/0f/e0/1e96c3d4266a06d4b0197ace5356d67d937d8358e2ee3ffac71faa843724/mypy-1.18.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:776bb00de1778caf4db739c6e83919c1d85a448f71979b6a0edd774ea8399341", size = 11817879, upload-time = "2025-09-19T00:09:47.131Z" }, - { url = "https://files.pythonhosted.org/packages/07/06/dfdd2bc60c66611dd8335f463818514733bc763e4760dee289dcc33df709/mypy-1.18.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:33eca32dd124b29400c31d7cf784e795b050ace0e1f91b8dc035672725617e34", size = 12908273, upload-time = "2025-09-19T00:10:58.321Z" }, - { url = "https://files.pythonhosted.org/packages/81/14/6a9de6d13a122d5608e1a04130724caf9170333ac5a924e10f670687d3eb/mypy-1.18.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a3c47adf30d65e89b2dcd2fa32f3aeb5e94ca970d2c15fcb25e297871c8e4764", size = 11920910, upload-time = "2025-09-19T00:10:20.043Z" }, - { url = "https://files.pythonhosted.org/packages/87/e3/be76d87158ebafa0309946c4a73831974d4d6ab4f4ef40c3b53a385a66fd/mypy-1.18.2-py3-none-any.whl", hash = "sha256:22a1748707dd62b58d2ae53562ffc4d7f8bcc727e8ac7cbc69c053ddc874d47e", size = 2352367, upload-time = "2025-09-19T00:10:15.489Z" }, -] - -[[package]] -name = "mypy-extensions" -version = "1.1.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a2/6e/371856a3fb9d31ca8dac321cda606860fa4548858c0cc45d9d1d4ca2628b/mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558", size = 6343, upload-time = "2025-04-22T14:54:24.164Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505", size = 4963, upload-time = "2025-04-22T14:54:22.983Z" }, -] - [[package]] name = "narwhals" version = "2.22.1" @@ -1627,15 +1597,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/5c/bd/bf8064d9cfa214294356c2d6702b716d3cf3bb24be59287a6a21e24cae6b/pandas-2.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3fd2f887589c7aa868e02632612ba39acb0b8948faf5cc58f0850e165bd46f35", size = 10729618, upload-time = "2025-09-29T23:39:08.659Z" }, ] -[[package]] -name = "pathspec" -version = "1.1.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/5a/82/42f767fc1c1143d6fd36efb827202a2d997a375e160a71eb2888a925aac1/pathspec-1.1.1.tar.gz", hash = "sha256:17db5ecd524104a120e173814c90367a96a98d07c45b2e10c2f3919fff91bf5a", size = 135180, upload-time = "2026-04-27T01:46:08.907Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f1/d9/7fb5aa316bc299258e68c73ba3bddbc499654a07f151cba08f6153988714/pathspec-1.1.1-py3-none-any.whl", hash = "sha256:a00ce642f577bf7f473932318056212bc4f8bfdf53128c78bbd5af0b9b20b189", size = 57328, upload-time = "2026-04-27T01:46:07.06Z" }, -] - [[package]] name = "pillow" version = "11.3.0" @@ -2169,12 +2130,12 @@ yolo-vision = [ [package.dev-dependencies] dev = [ - { name = "mypy", marker = "sys_platform == 'darwin'" }, { name = "pre-commit", marker = "sys_platform == 'darwin'" }, { name = "pytest", marker = "sys_platform == 'darwin'" }, { name = "pytest-asyncio", marker = "sys_platform == 'darwin'" }, { name = "python-semantic-release", marker = "sys_platform == 'darwin'" }, { name = "ruff", marker = "sys_platform == 'darwin'" }, + { name = "ty", marker = "sys_platform == 'darwin'" }, { name = "types-requests", marker = "sys_platform == 'darwin'" }, ] @@ -2209,12 +2170,12 @@ provides-extras = ["local-vision", "yolo-vision", "mediapipe-vision", "all-visio [package.metadata.requires-dev] dev = [ - { name = "mypy", specifier = "==1.18.2" }, { name = "pre-commit" }, { name = "pytest" }, { name = "pytest-asyncio" }, { name = "python-semantic-release", specifier = ">=10.5.3" }, { name = "ruff", specifier = "==0.12.0" }, + { name = "ty", specifier = ">=0.0.53" }, { name = "types-requests" }, ] @@ -2766,6 +2727,16 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b4/eb/9526a77354a2126f5b220f4792dc8494d573773c098dac6a5ad1fc7a5f17/transformers-5.0.0rc2-py3-none-any.whl", hash = "sha256:f8f2a14060ab11f20a0eec39d827af54c1589c327c5799d82808ae3f4167418a", size = 10067329, upload-time = "2026-01-07T16:57:59.617Z" }, ] +[[package]] +name = "ty" +version = "0.0.53" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/96/87/d5a1d099a41ed22f939b9eec5af3c40bd907409e673cc0b8fcfd1e354ab2/ty-0.0.53.tar.gz", hash = "sha256:86e8c522b1a1ae267cd6442cc93c0c954a2a59b89565e4fb493c1133bd5a056e", size = 5998692, upload-time = "2026-06-24T06:53:57.021Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9d/55/9edc86267086c1d0be32b0625f2cae4bd269f62e9f0084f5469d5a7ada9e/ty-0.0.53-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:5b1079f5f18667362e6a2df0c08eef83b99cc7ec1f1e6bd6a43eb17087a62da2", size = 11793873, upload-time = "2026-06-24T06:53:21.188Z" }, + { url = "https://files.pythonhosted.org/packages/17/9b/92f080253ca27ad60f4a982f1d6e67fce1ab117514b8b51a25ed3e64a6b2/ty-0.0.53-py3-none-macosx_11_0_arm64.whl", hash = "sha256:b0699807f3333c052120998d0f652f9e13d534b16cbb4f04397885569e2889e5", size = 11190702, upload-time = "2026-06-24T06:53:23.216Z" }, +] + [[package]] name = "typer" version = "0.26.7" From e30ffb5287297a2868d3f339251fcd871dcf095f Mon Sep 17 00:00:00 2001 From: Johnny Greco Date: Wed, 24 Jun 2026 23:18:07 -0400 Subject: [PATCH 10/45] Document Reachy simulator workflow --- .../screenshots/gradio-home.png | Bin 0 -> 27027 bytes docs/index.md | 1 + docs/research/applications.md | 1 + .../reachy-mini-conversation-simulator.md | 234 ++++++++++++++++++ projects/reachy-mini-openshell/README.md | 66 ++++- zensical.toml | 3 +- 6 files changed, 291 insertions(+), 14 deletions(-) create mode 100644 docs/assets/reachy-mini-openshell/screenshots/gradio-home.png create mode 100644 docs/research/reachy-mini-conversation-simulator.md diff --git a/docs/assets/reachy-mini-openshell/screenshots/gradio-home.png b/docs/assets/reachy-mini-openshell/screenshots/gradio-home.png new file mode 100644 index 0000000000000000000000000000000000000000..bbd0cde4931c727bfa923b8af185903784a20d7d GIT binary patch literal 27027 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 literal 0 HcmV?d00001 diff --git a/docs/index.md b/docs/index.md index 62f67664..39f9afb8 100644 --- a/docs/index.md +++ b/docs/index.md @@ -19,6 +19,7 @@ - [Research engineering](research/index.md) - [Runtime notes](research/runtime.md) - [Application skeletons](research/applications.md) +- [Reachy Mini simulator tutorial](research/reachy-mini-conversation-simulator.md) - [Dev Notes](dev-notes/index.md) ## What belongs here diff --git a/docs/research/applications.md b/docs/research/applications.md index d761fb70..2fc8b8e6 100644 --- a/docs/research/applications.md +++ b/docs/research/applications.md @@ -5,6 +5,7 @@ OpenShell applications. ## Candidate skeletons +- [Reachy Mini conversation app simulator tutorial](reachy-mini-conversation-simulator.md) - Agent workflow demo - Research paper companion - Evaluation harness diff --git a/docs/research/reachy-mini-conversation-simulator.md b/docs/research/reachy-mini-conversation-simulator.md new file mode 100644 index 00000000..6a03c44f --- /dev/null +++ b/docs/research/reachy-mini-conversation-simulator.md @@ -0,0 +1,234 @@ +# Reachy Mini Conversation App Simulator Tutorial + +This tutorial walks through the local simulator workflow for the Reachy +OpenShell conversation app. It starts the Reachy Mini daemon in MuJoCo +simulation mode, verifies that the daemon is healthy, launches the Gradio +conversation UI, and shows what to expect in the browser. + +The app in this repository is an OpenShell-oriented fork of the Reachy Mini +conversation app template. The upstream Hugging Face Space is a useful reference +for the broader app family: [pollen-robotics/reachy_mini_conversation_app](https://huggingface.co/spaces/pollen-robotics/reachy_mini_conversation_app/tree/main). + +## What You Need + +- macOS with Python 3.10, 3.11, or 3.12. Python 3.12 is the recommended local + version. +- `uv`. +- An API key for conversation. Microphone mode requires an OpenAI-compatible + Realtime model; text mode can also use OpenAI-compatible Chat Completions + providers such as NVIDIA NIM. +- This repository checked out locally. + +The local dependency set includes `reachy-mini[mujoco]==1.8.0`, so the MuJoCo +simulator backend is installed by the default project sync. + +## 1. Install The Project + +From the repository root: + +```sh +cd projects/reachy-mini-openshell +uv venv --python 3.12 +source .venv/bin/activate +uv sync +cp .env.example .env +``` + +Edit `.env`. For OpenAI Realtime microphone and text input, use: + +```sh +OPENAI_API_KEY=your_api_key_here +OPENAI_BASE_URL=https://api.openai.com/v1 +MODEL_NAME=gpt-realtime +``` + +For NVIDIA-hosted text input through an OpenAI-compatible Chat Completions +endpoint, reference your existing NVIDIA API key environment variable: + +```sh +OPENAI_API_KEY=${NVIDIA_API_KEY} +OPENAI_BASE_URL=https://inference-api.nvidia.com/v1 +MODEL_NAME=azure/anthropic/claude-opus-4-8 +``` + +Use the exact model ID exposed by your provider. For example, NVIDIA model IDs +can look like `nvidia/nemotron-3-super-120b-a12b` or +`azure/anthropic/claude-opus-4-8`, depending on the endpoint and account. + +Those provider values are loaded from `.env` only. The browser UI does not +include fields for credentials, endpoint routing, or model selection. + +Run a quick import check: + +```sh +python - <<'PY' +import mujoco +import reachy_mini + +print("mujoco", mujoco.__version__) +print("reachy_mini", reachy_mini.__version__) +PY +``` + +You should see MuJoCo and Reachy Mini versions printed. If MuJoCo is missing, +rerun `uv sync` from `projects/reachy-mini-openshell`. + +## 2. Start The Simulator Daemon + +Start the Reachy Mini daemon in one terminal: + +```sh +reachy-mini-daemon \ + --sim \ + --scene minimal \ + --headless \ + --no-media \ + --fastapi-host 127.0.0.1 \ + --fastapi-port 8000 \ + --dataset-update-interval 0 +``` + +The important log line is: + +```text +Daemon started successfully. +``` + +The daemon should keep running in that terminal. Leave it open while you use the +conversation app. + +## 3. Verify The Daemon + +Open this URL in your browser: + +```text +http://127.0.0.1:8000/api/daemon/status +``` + +You should see syntax-highlighted JSON in the browser. The exact `version` can +vary, but a healthy simulator daemon should look like this: + +```json +{ + "type": "daemon_status", + "robot_name": "reachy_mini", + "state": "running", + "wireless_version": false, + "desktop_app_daemon": false, + "simulation_enabled": true, + "mockup_sim_enabled": false, + "no_media": true, + "media_released": false, + "camera_specs_name": "", + "backend_status": { + "motor_control_mode": "enabled", + "error": null + }, + "error": null, + "wlan_ip": null, + "version": "1.8.0", + "hardware_id": null +} +``` + +If `state` is `error` and the message mentions MuJoCo, the simulator dependency +is missing from the environment that started the daemon. Stop the daemon, run +`uv sync`, and start it again from the activated project environment. + +## 4. Start The Conversation App + +Open a second terminal, activate the same environment, and start the app: + +```sh +cd projects/reachy-mini-openshell +source .venv/bin/activate +python -m reachy_mini_conversation_app --gradio --no-camera +``` + +The console script is equivalent: + +```sh +reachy-mini-conversation-app --gradio --no-camera +``` + +The app connects to the daemon through the Reachy Mini SDK. In simulator mode it +uses the browser-based Gradio UI. The expected launch line is: + +```text +Running on local URL: http://127.0.0.1:7860 +``` + +If port `7860` is busy, Gradio may choose another local port. Use the URL printed +by the terminal. + +## 5. Open The Gradio UI + +Open the Gradio URL, usually: + +```text +http://127.0.0.1:7860/ +``` + +You should see the `Talk with Reachy Mini` page with an empty chat transcript, +an audio stream panel, and an `Input` selector. + +![Gradio conversation UI for Talk with Reachy Mini](../assets/reachy-mini-openshell/screenshots/gradio-home.png) + +If the app logs that `OPENAI_API_KEY` is missing, stop the app, update `.env`, +and restart it. Credentials are intentionally not entered in the browser. If +`.env` references `${NVIDIA_API_KEY}`, make sure that variable is +exported in the shell that starts the app. + +## 6. Talk To Reachy + +Use `Microphone` mode to speak when `MODEL_NAME` points to a Realtime-capable +model. Click `Click to Access Microphone` in the `Stream` panel and allow +microphone access in the browser. Once the stream starts, speak naturally. + +Use `Text` mode to type instead. Switch `Input` to `Text`, enter a message, and +send it from the text composer. For non-Realtime model IDs such as NVIDIA NIM +models, text mode uses Chat Completions. Tool calls are supported in text mode, +including providers that require the tool schema to remain attached after a tool +result is returned. + +Useful first prompts are: + +```text +Hello Reachy, introduce yourself. +Can you dance? +Look around the room. +Show me a happy emotion. +Stop moving. +``` + +Because this tutorial runs with `--no-camera`, camera and head-tracking features +are disabled. Voice conversation and motion tools are still available through the +simulated daemon. + +## 7. Stop The Demo + +Stop the conversation app with `Ctrl+C` in the app terminal. Then stop the +daemon with `Ctrl+C` in the daemon terminal. + +## Troubleshooting + +If the app cannot connect to the daemon, make sure the daemon terminal is still +running and that its status page reports `state: "running"`. + +If the app starts but the browser does not open automatically, copy the `Running +on local URL` value from the terminal into your browser. + +If the browser cannot access the microphone, check the browser permission prompt +and macOS microphone privacy settings. + +If text mode returns `404 page not found`, check that `OPENAI_BASE_URL` matches +the provider's OpenAI-compatible endpoint and that `MODEL_NAME` is an exact +model ID from that provider. + +If text mode returns `401 Unauthorized` with NVIDIA endpoints, make sure +`OPENAI_API_KEY=${NVIDIA_API_KEY}` resolves to a key that is authorized for +generation, not only model listing. + +If the daemon reports `MuJoCo is not installed`, make sure you started the +daemon from this project environment after running `uv sync`. The dependency is +provided by `reachy-mini[mujoco]==1.8.0`. diff --git a/projects/reachy-mini-openshell/README.md b/projects/reachy-mini-openshell/README.md index 97c1c189..14661352 100644 --- a/projects/reachy-mini-openshell/README.md +++ b/projects/reachy-mini-openshell/README.md @@ -39,6 +39,7 @@ This project contains: - a forked Reachy Mini voice conversation app - OpenAI Realtime audio conversation support +- text conversation support through OpenAI-compatible Chat Completions - Reachy Mini movement, dance, emotion, and look-around tools - a locked OpenShell profile for instructions and tool selection - optional camera, local vision, YOLO head-tracking, and MediaPipe head-tracking @@ -53,7 +54,9 @@ this project. The SDK is pinned to the version compatible with the forked conversation-app dependency stack. - a running Reachy Mini daemon, either connected to hardware or started in simulator mode -- an OpenAI API key for conversation +- an API key for conversation. Microphone mode requires an OpenAI-compatible +Realtime model; text mode can also use OpenAI-compatible Chat Completions +providers such as NVIDIA NIM. ## Install @@ -67,12 +70,27 @@ uv sync cp .env.example .env ``` -Then edit `.env` and set: +Then edit `.env`. For OpenAI Realtime microphone and text input, use: ```bash OPENAI_API_KEY=your_api_key_here +OPENAI_BASE_URL=https://api.openai.com/v1 +MODEL_NAME=gpt-realtime ``` +For NVIDIA-hosted text input through an OpenAI-compatible Chat Completions +endpoint, reference your existing NVIDIA API key environment variable: + +```bash +OPENAI_API_KEY=${NVIDIA_API_KEY} +OPENAI_BASE_URL=https://inference-api.nvidia.com/v1 +MODEL_NAME=azure/anthropic/claude-opus-4-8 +``` + +Use the exact model ID exposed by your provider. For example, NVIDIA model IDs +can look like `nvidia/nemotron-3-super-120b-a12b` or +`azure/anthropic/claude-opus-4-8`, depending on the endpoint and account. + If you are not using `uv`, install the app in editable mode from the project directory: @@ -119,21 +137,22 @@ workflow starts `reachy-mini-daemon --sim` from this environment. ## Configuration -The app loads `.env` from the current directory or a parent directory unless -`REACHY_MINI_SKIP_DOTENV=1` is set. +The app loads `.env` from the current directory or a parent directory. Provider +credentials and routing must be configured in `.env`; they are not accepted from +the browser UI or the Reachy Mini settings UI. -Supported environment variables: +Supported `.env` values: -- `OPENAI_API_KEY`: API key used by OpenAI Realtime. -- `MODEL_NAME`: Realtime model name. Defaults to `gpt-realtime`. +- `OPENAI_API_KEY`: API key used by the configured model provider. This can +reference another exported environment variable, such as +`${NVIDIA_API_KEY}`. +- `OPENAI_BASE_URL`: OpenAI-compatible API base URL. +- `MODEL_NAME`: provider model ID. Model names containing `realtime` use the +Realtime path; other model IDs use Chat Completions for text input. - `LOCAL_VISION_MODEL`: Hugging Face model used with `--local-vision`. - `HF_HOME`: Hugging Face cache directory. Defaults to `./cache`. - `HF_TOKEN`: optional Hugging Face token for gated models. -When running with Gradio, the UI also includes an OpenAI API key field. The -bundled Reachy Mini settings UI can store and validate the key when the app is -run through the Reachy Mini app shell. - ## Run Locally Start the Reachy Mini daemon first. For the local simulator baseline: @@ -165,12 +184,18 @@ In simulator mode, the app auto-enables Gradio. The examples still pass at: ```text -c +http://127.0.0.1:7860/ ``` If port `7860` is busy, Gradio may choose another available local port and print that URL in the terminal. +The Gradio UI includes an `Input` selector. Use `Microphone` for the WebRTC +audio stream with a Realtime-capable model, or switch to `Text` for typed +messages. Text mode uses Chat Completions when `MODEL_NAME` is a non-Realtime +model ID. Tool calls are supported in text mode; the app keeps the tool schema +attached on the post-tool follow-up request for providers that require it. + ## Runtime Flags Useful app flags: @@ -233,8 +258,14 @@ Useful local checks: python -m compileall src tests python -m reachy_mini_conversation_app --help reachy-mini-app-assistant check . +uv run ty check ``` +`ty` is the selected Python type checker for this project. The current copied +conversation-app baseline still reports diagnostics in motion, vision, optional +dependency, and SDK event typing, so use `uv run ty check` as the active audit +while that baseline is tightened. + Tests require the development dependency group: ```bash @@ -251,10 +282,19 @@ name to the app with `--robot-name`. If `--local-vision`, `--head-tracker yolo`, or `--head-tracker mediapipe` fails with an import error, install the matching optional dependency group. +If text mode returns `404 page not found`, check that `OPENAI_BASE_URL` matches +the provider's OpenAI-compatible endpoint and that `MODEL_NAME` is an exact +model ID from that provider. A catalog name, marketing page slug, or doubled +namespace may not be accepted by `/chat/completions`. + +If text mode returns `401 Unauthorized` with NVIDIA endpoints, make sure +`OPENAI_API_KEY=${NVIDIA_API_KEY}` resolves to a key that is authorized for +generation, not only model listing. + If `uv sync` tries to build `pygobject` or `pycairo` on macOS, the resolver is including a Linux media dependency path. This project scopes uv resolution to Darwin for the current local workflow; rerun `uv sync`, and if uv is still using old metadata, clear the package cache with `uv cache clean reachy-mini pygobject pycairo`. If you are running the simulator with `--no-media`, keep `--no-camera` on the -conversation app. \ No newline at end of file +conversation app. diff --git a/zensical.toml b/zensical.toml index 4f4429a5..4a97977d 100644 --- a/zensical.toml +++ b/zensical.toml @@ -10,7 +10,8 @@ nav = [ {"Research Engineering" = [ "research/index.md", "research/runtime.md", - "research/applications.md" + "research/applications.md", + "research/reachy-mini-conversation-simulator.md" ]}, {"Dev Notes" = [ "dev-notes/index.md", From 83ca461821a244ea28b4d1c6cd16ef982cc82e15 Mon Sep 17 00:00:00 2001 From: Johnny Greco Date: Thu, 25 Jun 2026 19:10:16 +0000 Subject: [PATCH 11/45] Fix microphone realtime startup --- projects/reachy-mini-openshell/README.md | 5 ++ .../openai_realtime.py | 39 ++++++-- .../tests/test_openai_realtime.py | 88 ++++++++++++++++++- 3 files changed, 123 insertions(+), 9 deletions(-) diff --git a/projects/reachy-mini-openshell/README.md b/projects/reachy-mini-openshell/README.md index 14661352..5df8a444 100644 --- a/projects/reachy-mini-openshell/README.md +++ b/projects/reachy-mini-openshell/README.md @@ -196,6 +196,11 @@ messages. Text mode uses Chat Completions when `MODEL_NAME` is a non-Realtime model ID. Tool calls are supported in text mode; the app keeps the tool schema attached on the post-tool follow-up request for providers that require it. +If the microphone appears to connect but no transcript or model response +arrives, check the visible chat error and your `.env` values. Microphone mode +requires an OpenAI-compatible Realtime model and endpoint; Chat Completions +providers are supported through the `Text` input mode only. + ## Runtime Flags Useful app flags: diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/openai_realtime.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/openai_realtime.py index 7e993157..9d7db348 100644 --- a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/openai_realtime.py +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/openai_realtime.py @@ -98,8 +98,9 @@ def __init__(self, deps: ToolDependencies, gradio_mode: bool = False, instance_p # Internal lifecycle flags self._shutdown_requested: bool = False self._connected_event: asyncio.Event = asyncio.Event() - self._text_startup_task: asyncio.Task[None] | None = None + self._realtime_startup_task: asyncio.Task[None] | None = None self._startup_error: str | None = None + self._microphone_error_reported: bool = False # Background tool manager self.tool_manager = BackgroundToolManager() @@ -220,26 +221,37 @@ def _openai_api_key_or_error(self) -> str | None: logger.error(message) return None - async def _ensure_text_session(self) -> bool: - """Start a Realtime session for text-only Gradio input if needed.""" + async def _ensure_realtime_session(self, task_name: str) -> bool: + """Start a Realtime session for Gradio text or microphone input if needed.""" if self.connection is not None: return True - if self._text_startup_task is None or self._text_startup_task.done(): + if self._realtime_startup_task is None or self._realtime_startup_task.done(): self._startup_error = None try: self._connected_event.clear() except Exception: pass - self._text_startup_task = asyncio.create_task(self.start_up(), name="openai-realtime-text") + self._realtime_startup_task = asyncio.create_task(self.start_up(), name=task_name) try: await asyncio.wait_for(self._connected_event.wait(), timeout=10.0) except asyncio.TimeoutError: - logger.warning("Timed out waiting for text Realtime session startup") + logger.warning("Timed out waiting for Realtime session startup") return self.connection is not None + async def _ensure_text_session(self) -> bool: + """Start a Realtime session for text-only Gradio input if needed.""" + return await self._ensure_realtime_session("openai-realtime-text") + + async def _report_microphone_error_once(self, message: str) -> None: + """Show one visible microphone error instead of silently dropping every frame.""" + if self._microphone_error_reported: + return + self._microphone_error_reported = True + await self.output_queue.put(AdditionalOutputs({"role": "assistant", "content": message})) + @staticmethod def _chat_message_from_output(output: AdditionalOutputs) -> dict[str, Any] | None: """Convert a FastRTC AdditionalOutputs payload into a chatbot message.""" @@ -946,7 +958,20 @@ async def receive(self, frame: Tuple[int, NDArray[np.int16]]) -> None: """ if not self.connection: - return + if not self._text_model_uses_realtime(): + self._record_startup_error( + "Microphone mode requires an OpenAI-compatible Realtime model. " + f"Current MODEL_NAME={config.MODEL_NAME!r} uses the text path only; " + "switch Input to Text or configure a Realtime model for microphone input." + ) + await self._report_microphone_error_once(self._not_connected_message()) + return + + if not await self._ensure_realtime_session("openai-realtime-microphone"): + await self._report_microphone_error_once(self._not_connected_message()) + return + + self._microphone_error_reported = False input_sample_rate, audio_frame = frame diff --git a/projects/reachy-mini-openshell/tests/test_openai_realtime.py b/projects/reachy-mini-openshell/tests/test_openai_realtime.py index 4a014ab4..93182722 100644 --- a/projects/reachy-mini-openshell/tests/test_openai_realtime.py +++ b/projects/reachy-mini-openshell/tests/test_openai_realtime.py @@ -1,3 +1,4 @@ +import base64 import random import asyncio import logging @@ -5,6 +6,7 @@ from datetime import datetime, timezone from unittest.mock import MagicMock +import numpy as np import pytest import reachy_mini_conversation_app.openai_realtime as rt_mod @@ -242,8 +244,8 @@ def __init__(self, **_kw: Any) -> None: messages = await handler.send_text_message("Hello typed Reachy") await handler.shutdown() - if handler._text_startup_task is not None: - await asyncio.wait_for(handler._text_startup_task, timeout=1) + if handler._realtime_startup_task is not None: + await asyncio.wait_for(handler._realtime_startup_task, timeout=1) assert created_items == [ { @@ -258,6 +260,88 @@ def __init__(self, **_kw: Any) -> None: ] +@pytest.mark.asyncio +async def test_receive_lazily_starts_realtime_and_appends_microphone_audio(monkeypatch: Any) -> None: + """Mic frames should start the Realtime session before appending audio.""" + _set_openai_test_config(monkeypatch) + event_queue: asyncio.Queue[Any] = asyncio.Queue() + appended_audio: list[str] = [] + + class FakeSession: + async def update(self, **_kw: Any) -> None: + return None + + class FakeInputAudioBuffer: + async def append(self, **kwargs: Any) -> None: + appended_audio.append(kwargs["audio"]) + + class FakeConn: + session = FakeSession() + input_audio_buffer = FakeInputAudioBuffer() + + async def __aenter__(self) -> "FakeConn": + return self + + async def __aexit__(self, exc_type: Any, exc: Any, tb: Any) -> bool: + return False + + def __aiter__(self) -> "FakeConn": + return self + + async def __anext__(self) -> Any: + event = await event_queue.get() + if event is None: + raise StopAsyncIteration + return event + + async def close(self) -> None: + await event_queue.put(None) + + class FakeRealtime: + def connect(self, **_kw: Any) -> FakeConn: + return FakeConn() + + class FakeClient: + def __init__(self, **_kw: Any) -> None: + self.realtime = FakeRealtime() + + monkeypatch.setattr(rt_mod, "AsyncOpenAI", FakeClient) + + deps = ToolDependencies(reachy_mini=MagicMock(), movement_manager=MagicMock()) + handler = rt_mod.OpenaiRealtimeHandler(deps) + audio_frame = np.array([0, 1000, -1000, 0], dtype=np.int16) + + await handler.receive((24000, audio_frame)) + await handler.shutdown() + if handler._realtime_startup_task is not None: + await asyncio.wait_for(handler._realtime_startup_task, timeout=1) + + assert appended_audio == [base64.b64encode(audio_frame.tobytes()).decode("utf-8")] + + +@pytest.mark.asyncio +async def test_receive_reports_non_realtime_model_without_opening_realtime(monkeypatch: Any) -> None: + """Mic mode should visibly fail when MODEL_NAME can only use text completions.""" + monkeypatch.setattr(rt_mod.config, "OPENAI_API_KEY", "test-key") + monkeypatch.setattr(rt_mod.config, "OPENAI_BASE_URL", "https://inference-api.nvidia.com/v1") + monkeypatch.setattr(rt_mod.config, "MODEL_NAME", "nvidia/nemotron-3-super-120b-a12b") + + def fail_openai_client(**_kw: Any) -> None: + raise AssertionError("microphone mode should not open Realtime for a non-Realtime model") + + monkeypatch.setattr(rt_mod, "AsyncOpenAI", fail_openai_client) + + deps = ToolDependencies(reachy_mini=MagicMock(), movement_manager=MagicMock()) + handler = rt_mod.OpenaiRealtimeHandler(deps) + + await handler.receive((24000, np.array([0, 0], dtype=np.int16))) + + output = await asyncio.wait_for(handler.output_queue.get(), timeout=1) + assert isinstance(output, rt_mod.AdditionalOutputs) + assert "Microphone mode requires an OpenAI-compatible Realtime model" in output.args[0]["content"] + assert handler.connection is None + + @pytest.mark.asyncio async def test_send_text_message_reports_missing_dotenv_key(monkeypatch: Any) -> None: """Text mode reports the actual missing-key problem instead of a generic connection error.""" From ab10adbc7c43e902a4b133c9d5baff35a52088c0 Mon Sep 17 00:00:00 2001 From: Johnny Greco Date: Thu, 25 Jun 2026 19:14:52 +0000 Subject: [PATCH 12/45] Add one-step Reachy app launcher --- projects/reachy-mini-openshell/README.md | 38 +++-- .../scripts/start-local.sh | 153 ++++++++++++++++++ 2 files changed, 175 insertions(+), 16 deletions(-) create mode 100755 projects/reachy-mini-openshell/scripts/start-local.sh diff --git a/projects/reachy-mini-openshell/README.md b/projects/reachy-mini-openshell/README.md index 5df8a444..c771d959 100644 --- a/projects/reachy-mini-openshell/README.md +++ b/projects/reachy-mini-openshell/README.md @@ -155,40 +155,46 @@ Realtime path; other model IDs use Chat Completions for text input. ## Run Locally -Start the Reachy Mini daemon first. For the local simulator baseline: +Use the local launcher for the simulator baseline: ```bash -reachy-mini-daemon --sim --scene minimal --headless --no-media --fastapi-host 127.0.0.1 --fastapi-port 8000 --dataset-update-interval 0 +projects/reachy-mini-openshell/scripts/start-local.sh ``` -You can verify the daemon separately at: +The script creates `.venv` when needed, runs `uv sync`, creates `.env` from +`.env.example` if missing, starts `reachy-mini-daemon --sim`, launches the +Gradio app, and prints the browser URL: ```text -http://127.0.0.1:8000/api/daemon/status +http://127.0.0.1:7860/ ``` -Then run the conversation app: +If port `7860` is busy, the launcher chooses the next free port through `7899` +and prints that URL instead. Pass app flags after the script name: ```bash -python -m reachy_mini_conversation_app --gradio --no-camera +projects/reachy-mini-openshell/scripts/start-local.sh --debug +projects/reachy-mini-openshell/scripts/start-local.sh --head-tracker yolo ``` -The installed console script is equivalent: +From inside `projects/reachy-mini-openshell`, the shorter form is: ```bash -reachy-mini-conversation-app --gradio --no-camera +./scripts/start-local.sh --debug ``` -In simulator mode, the app auto-enables Gradio. The examples still pass -`--gradio` so the expected browser interface is explicit. Gradio usually opens -at: +Useful launcher environment variables: -```text -http://127.0.0.1:7860/ -``` +- `APP_PORT=7861`: request a specific Gradio port. +- `DAEMON_PORT=8001`: use a different Reachy daemon port. +- `REACHY_SKIP_SYNC=1`: skip `uv sync` after dependencies are already installed. -If port `7860` is busy, Gradio may choose another available local port and print -that URL in the terminal. +The manual equivalent, useful for debugging, is: + +```bash +reachy-mini-daemon --sim --scene minimal --headless --no-media --fastapi-host 127.0.0.1 --fastapi-port 8000 --dataset-update-interval 0 +python -m reachy_mini_conversation_app --gradio --no-camera +``` The Gradio UI includes an `Input` selector. Use `Microphone` for the WebRTC audio stream with a Realtime-capable model, or switch to `Text` for typed diff --git a/projects/reachy-mini-openshell/scripts/start-local.sh b/projects/reachy-mini-openshell/scripts/start-local.sh new file mode 100755 index 00000000..88f43b48 --- /dev/null +++ b/projects/reachy-mini-openshell/scripts/start-local.sh @@ -0,0 +1,153 @@ +#!/usr/bin/env bash +set -euo pipefail + +SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_DIR="$(cd -- "${SCRIPT_DIR}/.." && pwd)" +LAUNCHER_PATH="${BASH_SOURCE[0]}" + +cd "${PROJECT_DIR}" + +APP_HOST="${APP_HOST:-127.0.0.1}" +APP_PORT="${APP_PORT:-}" +APP_PORT_START="${APP_PORT_START:-7860}" +APP_PORT_END="${APP_PORT_END:-7899}" +DAEMON_HOST="${DAEMON_HOST:-127.0.0.1}" +DAEMON_PORT="${DAEMON_PORT:-8000}" +PYTHON_VERSION="${PYTHON_VERSION:-3.12}" +REACHY_SKIP_SYNC="${REACHY_SKIP_SYNC:-0}" +REACHY_DAEMON_TIMEOUT="${REACHY_DAEMON_TIMEOUT:-45}" + +DAEMON_PID="" + +log() { + printf '[reachy-start] %s\n' "$*" +} + +finish() { + if [[ -n "${DAEMON_PID}" ]]; then + log "Stopping simulator daemon pid=${DAEMON_PID}" + kill "${DAEMON_PID}" >/dev/null 2>&1 || true + wait "${DAEMON_PID}" >/dev/null 2>&1 || true + fi +} +trap finish EXIT INT TERM + +require_command() { + if ! command -v "$1" >/dev/null 2>&1; then + printf 'Missing required command: %s\n' "$1" >&2 + exit 1 + fi +} + +daemon_status_ok() { + "${PROJECT_DIR}/.venv/bin/python" - "$DAEMON_HOST" "$DAEMON_PORT" <<'PY' >/dev/null 2>&1 +import sys +import urllib.request + +host, port = sys.argv[1], sys.argv[2] +try: + with urllib.request.urlopen(f"http://{host}:{port}/api/daemon/status", timeout=1.5) as response: + raise SystemExit(0 if 200 <= response.status < 500 else 1) +except Exception: + raise SystemExit(1) +PY +} + +pick_app_port() { + if [[ -n "${APP_PORT}" ]]; then + "${PROJECT_DIR}/.venv/bin/python" - "$APP_HOST" "$APP_PORT" <<'PY' +import socket +import sys + +host = sys.argv[1] +port = int(sys.argv[2]) + +with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock: + sock.settimeout(0.2) + if sock.connect_ex((host, port)) == 0: + raise SystemExit(f"Requested APP_PORT={port} is already in use") +PY + printf '%s\n' "${APP_PORT}" + return + fi + + "${PROJECT_DIR}/.venv/bin/python" - "$APP_HOST" "$APP_PORT_START" "$APP_PORT_END" <<'PY' +import socket +import sys + +host = sys.argv[1] +start = int(sys.argv[2]) +end = int(sys.argv[3]) + +for port in range(start, end + 1): + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock: + sock.settimeout(0.2) + if sock.connect_ex((host, port)) != 0: + print(port) + raise SystemExit(0) + +raise SystemExit(f"No free app port found in {start}-{end}") +PY +} + +require_command uv + +if [[ ! -x "${PROJECT_DIR}/.venv/bin/python" ]]; then + log "Creating virtual environment with Python ${PYTHON_VERSION}" + uv venv --python "${PYTHON_VERSION}" +fi + +if [[ "${REACHY_SKIP_SYNC}" != "1" ]]; then + log "Installing project dependencies with uv sync" + if ! uv sync; then + cat >&2 <<'EOF' + +uv sync failed. This project currently has a platform-specific uv.lock. +After installing dependencies another way, rerun with: + + REACHY_SKIP_SYNC=1 ${LAUNCHER_PATH} + +EOF + exit 1 + fi +fi + +if [[ ! -f ".env" ]]; then + cp .env.example .env + log "Created .env from .env.example. Edit it if you need different provider credentials." +fi + +export PATH="${PROJECT_DIR}/.venv/bin:${PATH}" + +if daemon_status_ok; then + log "Using existing Reachy daemon at http://${DAEMON_HOST}:${DAEMON_PORT}" +else + log "Starting Reachy simulator daemon at http://${DAEMON_HOST}:${DAEMON_PORT}" + reachy-mini-daemon \ + --sim \ + --scene minimal \ + --headless \ + --no-media \ + --fastapi-host "${DAEMON_HOST}" \ + --fastapi-port "${DAEMON_PORT}" \ + --dataset-update-interval 0 & + DAEMON_PID="$!" + + log "Waiting for simulator daemon" + deadline=$((SECONDS + REACHY_DAEMON_TIMEOUT)) + until daemon_status_ok; do + if (( SECONDS >= deadline )); then + printf 'Reachy simulator daemon did not become ready within %s seconds.\n' "${REACHY_DAEMON_TIMEOUT}" >&2 + exit 1 + fi + sleep 1 + done +fi + +SELECTED_APP_PORT="$(pick_app_port)" +export GRADIO_SERVER_NAME="${APP_HOST}" +export GRADIO_SERVER_PORT="${SELECTED_APP_PORT}" + +log "Starting Reachy conversation app" +log "Open: http://${APP_HOST}:${SELECTED_APP_PORT}/" +"${PROJECT_DIR}/.venv/bin/python" -m reachy_mini_conversation_app --gradio --no-camera "$@" From 8baa4de67a55926cca89bf51124cc8ad0c81ba2e Mon Sep 17 00:00:00 2001 From: Johnny Greco Date: Thu, 25 Jun 2026 22:41:57 +0000 Subject: [PATCH 13/45] Add Riva STT microphone mode --- projects/reachy-mini-openshell/.env.example | 15 + projects/reachy-mini-openshell/README.md | 49 +- projects/reachy-mini-openshell/pyproject.toml | 11 + .../reachy_mini_conversation_app/config.py | 1 + .../src/reachy_mini_conversation_app/main.py | 20 +- .../openai_realtime.py | 125 ++- .../reachy_mini_conversation_app/riva_asr.py | 202 ++++ .../tests/test_openai_realtime.py | 72 +- projects/reachy-mini-openshell/uv.lock | 919 ++++++++++-------- 9 files changed, 951 insertions(+), 463 deletions(-) create mode 100644 projects/reachy-mini-openshell/src/reachy_mini_conversation_app/riva_asr.py diff --git a/projects/reachy-mini-openshell/.env.example b/projects/reachy-mini-openshell/.env.example index 42515c10..2a82e724 100644 --- a/projects/reachy-mini-openshell/.env.example +++ b/projects/reachy-mini-openshell/.env.example @@ -2,6 +2,21 @@ OPENAI_API_KEY=${NVIDIA_API_KEY} OPENAI_BASE_URL=https://inference-api.nvidia.com/v1 MODEL_NAME=azure/anthropic/claude-opus-4-8 +# Audio input modes: +# - openai_realtime: microphone audio goes to an OpenAI-compatible Realtime endpoint. +# - riva_stt: microphone audio goes to Riva ASR; final transcripts go to the text LLM path. +AUDIO_INPUT_MODE=openai_realtime + +# Used only when AUDIO_INPUT_MODE=riva_stt. +RIVA_SERVER_URI=localhost:50051 +RIVA_USE_SSL=false +RIVA_LANGUAGE_CODE=en-US +RIVA_ASR_MODEL= +RIVA_AUTHORIZATION= +RIVA_METADATA= +RIVA_INTERIM_RESULTS=true +RIVA_AUTOMATIC_PUNCTUATION=true + # Used only with --local-vision. LOCAL_VISION_MODEL=HuggingFaceTB/SmolVLM2-2.2B-Instruct diff --git a/projects/reachy-mini-openshell/README.md b/projects/reachy-mini-openshell/README.md index c771d959..9470fe58 100644 --- a/projects/reachy-mini-openshell/README.md +++ b/projects/reachy-mini-openshell/README.md @@ -39,6 +39,7 @@ This project contains: - a forked Reachy Mini voice conversation app - OpenAI Realtime audio conversation support +- Riva streaming ASR support for microphone-to-text input - text conversation support through OpenAI-compatible Chat Completions - Reachy Mini movement, dance, emotion, and look-around tools - a locked OpenShell profile for instructions and tool selection @@ -54,9 +55,9 @@ this project. The SDK is pinned to the version compatible with the forked conversation-app dependency stack. - a running Reachy Mini daemon, either connected to hardware or started in simulator mode -- an API key for conversation. Microphone mode requires an OpenAI-compatible -Realtime model; text mode can also use OpenAI-compatible Chat Completions -providers such as NVIDIA NIM. +- an API key for conversation. OpenAI Realtime microphone mode requires an +OpenAI-compatible Realtime model; Riva STT and text mode can use +OpenAI-compatible Chat Completions providers such as NVIDIA NIM. ## Install @@ -112,9 +113,10 @@ and regenerate `uv.lock` for that platform. ## Optional Dependencies -The active optional dependency groups are vision-related only: +The active optional dependency groups cover Riva ASR and vision: ```bash +uv sync --extra riva uv sync --extra local_vision uv sync --extra yolo_vision uv sync --extra mediapipe_vision @@ -124,12 +126,17 @@ uv sync --extra all_vision With `pip`, use the equivalent editable installs: ```bash +python -m pip install -e '.[riva]' python -m pip install -e '.[local_vision]' python -m pip install -e '.[yolo_vision]' python -m pip install -e '.[mediapipe_vision]' python -m pip install -e '.[all_vision]' ``` +The `riva` extra is intentionally marked incompatible with `mediapipe_vision` +and `all_vision` because the current Riva and MediaPipe client stacks require +different protobuf ranges. + There are no project-level `backend` or `sim` extras anymore. The previous backend extra belonged to the deleted scaffold. The default dependency set includes Reachy Mini's MuJoCo simulator backend because the local development @@ -149,6 +156,19 @@ reference another exported environment variable, such as - `OPENAI_BASE_URL`: OpenAI-compatible API base URL. - `MODEL_NAME`: provider model ID. Model names containing `realtime` use the Realtime path; other model IDs use Chat Completions for text input. +- `AUDIO_INPUT_MODE`: microphone routing mode. Use `openai_realtime` for the +template default, where audio goes to an OpenAI-compatible Realtime endpoint. +Use `riva_stt` to stream microphone audio to Riva ASR and pass final +transcripts into the text LLM path. +- `RIVA_SERVER_URI`: Riva ASR server URI, for example `localhost:50051`. +- `RIVA_USE_SSL`: set to `true` for TLS-enabled Riva endpoints. +- `RIVA_LANGUAGE_CODE`: BCP-47 language code for Riva ASR, such as `en-US`. +- `RIVA_ASR_MODEL`: optional Riva ASR model name. Leave empty to let Riva +select a model from the language/configuration. +- `RIVA_AUTHORIZATION`: optional authorization metadata value, such as a bearer +token, for hosted Riva endpoints. +- `RIVA_METADATA`: optional comma-separated `key=value` metadata pairs passed +to the Riva client. - `LOCAL_VISION_MODEL`: Hugging Face model used with `--local-vision`. - `HF_HOME`: Hugging Face cache directory. Defaults to `./cache`. - `HF_TOKEN`: optional Hugging Face token for gated models. @@ -196,16 +216,19 @@ reachy-mini-daemon --sim --scene minimal --headless --no-media --fastapi-host 12 python -m reachy_mini_conversation_app --gradio --no-camera ``` -The Gradio UI includes an `Input` selector. Use `Microphone` for the WebRTC -audio stream with a Realtime-capable model, or switch to `Text` for typed -messages. Text mode uses Chat Completions when `MODEL_NAME` is a non-Realtime -model ID. Tool calls are supported in text mode; the app keeps the tool schema -attached on the post-tool follow-up request for providers that require it. +The Gradio UI includes an `Input` selector: + +- `OpenAI Realtime`: template-default microphone behavior. Audio streams to an +OpenAI-compatible Realtime endpoint, which handles transcription and response +generation in one session. +- `Riva STT`: microphone audio streams to Riva ASR. Final transcripts are sent +to the same text LLM path used by typed messages, so OpenAI-compatible Chat +Completions providers such as NVIDIA NIM can answer. +- `Text`: typed messages only. -If the microphone appears to connect but no transcript or model response -arrives, check the visible chat error and your `.env` values. Microphone mode -requires an OpenAI-compatible Realtime model and endpoint; Chat Completions -providers are supported through the `Text` input mode only. +Tool calls are supported in text mode and in the Riva STT path; the app keeps +the tool schema attached on the post-tool follow-up request for providers that +require it. ## Runtime Flags diff --git a/projects/reachy-mini-openshell/pyproject.toml b/projects/reachy-mini-openshell/pyproject.toml index be842755..a9a7a66e 100644 --- a/projects/reachy-mini-openshell/pyproject.toml +++ b/projects/reachy-mini-openshell/pyproject.toml @@ -28,8 +28,19 @@ dev = [ environments = [ "sys_platform == 'darwin'", ] +conflicts = [ + [ + { extra = "riva" }, + { extra = "mediapipe_vision" }, + ], + [ + { extra = "riva" }, + { extra = "all_vision" }, + ], +] [project.optional-dependencies] +riva = [ "nvidia-riva-client>=2.19,<3",] local_vision = [ "torch>=2.1", "transformers==5.0.0rc2", "num2words",] yolo_vision = [ "ultralytics", "supervision",] mediapipe_vision = [ "mediapipe==0.10.14",] diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/config.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/config.py index 6cf01c4f..bb04df19 100644 --- a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/config.py +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/config.py @@ -72,6 +72,7 @@ class Config: OPENAI_API_KEY = _dotenv_value("OPENAI_API_KEY") OPENAI_BASE_URL = _dotenv_value("OPENAI_BASE_URL", "https://api.openai.com/v1") MODEL_NAME = os.getenv("MODEL_NAME", "gpt-realtime") + AUDIO_INPUT_MODE = os.getenv("AUDIO_INPUT_MODE", "openai_realtime") HF_HOME = os.getenv("HF_HOME", "./cache") LOCAL_VISION_MODEL = os.getenv("LOCAL_VISION_MODEL", "HuggingFaceTB/SmolVLM2-2.2B-Instruct") HF_TOKEN = os.getenv("HF_TOKEN") diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/main.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/main.py index f618aef4..3382e089 100644 --- a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/main.py +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/main.py @@ -49,8 +49,13 @@ def run( # Putting these dependencies here makes the dashboard faster to load when the conversation app is installed from reachy_mini_conversation_app.moves import MovementManager + from reachy_mini_conversation_app.config import config from reachy_mini_conversation_app.console import LocalStream - from reachy_mini_conversation_app.openai_realtime import OpenaiRealtimeHandler + from reachy_mini_conversation_app.openai_realtime import ( + AUDIO_MODE_RIVA_STT, + AUDIO_MODE_OPENAI_REALTIME, + OpenaiRealtimeHandler, + ) from reachy_mini_conversation_app.tools.core_tools import ToolDependencies from reachy_mini_conversation_app.audio.head_wobbler import HeadWobbler @@ -157,9 +162,16 @@ def run( stream_manager = stream.ui with stream_manager: + input_mode_choices = { + "OpenAI Realtime": AUDIO_MODE_OPENAI_REALTIME, + "Riva STT": AUDIO_MODE_RIVA_STT, + "Text": "text", + } + initial_input_mode = "Riva STT" if handler.audio_input_mode == AUDIO_MODE_RIVA_STT else "OpenAI Realtime" + input_mode = gr.Radio( - choices=["Microphone", "Text"], - value="Microphone", + choices=list(input_mode_choices), + value=initial_input_mode, label="Input", ) with gr.Row(): @@ -173,6 +185,8 @@ def run( def switch_input_mode(mode: str) -> tuple[dict[str, Any], dict[str, Any], dict[str, Any]]: text_mode = mode == "Text" + if not text_mode: + handler.set_audio_input_mode(input_mode_choices.get(mode, config.AUDIO_INPUT_MODE)) return ( gr.update(visible=not text_mode), gr.update(visible=text_mode), diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/openai_realtime.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/openai_realtime.py index 9d7db348..ad173807 100644 --- a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/openai_realtime.py +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/openai_realtime.py @@ -18,6 +18,7 @@ from reachy_mini_conversation_app.config import LOCKED_PROFILE, config from reachy_mini_conversation_app.prompts import get_session_voice, get_session_instructions +from reachy_mini_conversation_app.riva_asr import RivaAsrConfig, RivaStreamingTranscriber from reachy_mini_conversation_app.tools.core_tools import ( ToolDependencies, get_tool_specs, @@ -34,6 +35,9 @@ OPEN_AI_INPUT_SAMPLE_RATE: Final[Literal[24000]] = 24000 OPEN_AI_OUTPUT_SAMPLE_RATE: Final[Literal[24000]] = 24000 +AUDIO_MODE_OPENAI_REALTIME: Final = "openai_realtime" +AUDIO_MODE_RIVA_STT: Final = "riva_stt" +AUDIO_INPUT_MODES: Final = {AUDIO_MODE_OPENAI_REALTIME, AUDIO_MODE_RIVA_STT} # Cost tracking from usage data (pricing as of Feb 2026 https://openai.com/api/pricing/) AUDIO_INPUT_COST_PER_1M = 32.0 @@ -45,6 +49,19 @@ _RESPONSE_DONE_TIMEOUT: Final[float] = 30.0 +def _normalize_audio_input_mode(audio_input_mode: str) -> str: + """Normalize configured audio input mode.""" + normalized = audio_input_mode.strip().lower().replace("-", "_") + if normalized in {"openai", "realtime", "microphone"}: + return AUDIO_MODE_OPENAI_REALTIME + if normalized in {"riva", "riva_asr", "riva_stt"}: + return AUDIO_MODE_RIVA_STT + if normalized not in AUDIO_INPUT_MODES: + logger.warning("Unknown AUDIO_INPUT_MODE=%r; using %s", audio_input_mode, AUDIO_MODE_OPENAI_REALTIME) + return AUDIO_MODE_OPENAI_REALTIME + return normalized + + def _compute_response_cost(usage: Any) -> float: """Compute dollar cost from a response usage object.""" inp = getattr(usage, "input_token_details", None) @@ -63,7 +80,14 @@ def _compute_response_cost(usage: Any) -> float: class OpenaiRealtimeHandler(AsyncStreamHandler): """An OpenAI realtime handler for fastrtc Stream.""" - def __init__(self, deps: ToolDependencies, gradio_mode: bool = False, instance_path: Optional[str] = None): + def __init__( + self, + deps: ToolDependencies, + gradio_mode: bool = False, + instance_path: Optional[str] = None, + audio_input_mode: str | None = None, + audio_input_mode_state: dict[str, str] | None = None, + ): """Initialize the handler.""" super().__init__( expected_layout="mono", @@ -76,6 +100,9 @@ def __init__(self, deps: ToolDependencies, gradio_mode: bool = False, instance_p self.input_sample_rate: Literal[24000] = self.input_sample_rate self.deps = deps + self._audio_input_mode_state = audio_input_mode_state or { + "mode": _normalize_audio_input_mode(audio_input_mode or config.AUDIO_INPUT_MODE) + } # Override type annotations for OpenAI strict typing (only for values used in API) self.output_sample_rate = OPEN_AI_OUTPUT_SAMPLE_RATE @@ -89,6 +116,7 @@ def __init__(self, deps: ToolDependencies, gradio_mode: bool = False, instance_p self.is_idle_tool_call = False self.gradio_mode = gradio_mode self.instance_path = instance_path + self._riva_transcriber: RivaStreamingTranscriber | None = None # Debouncing for partial transcripts self.partial_transcript_task: asyncio.Task[None] | None = None @@ -118,7 +146,21 @@ def __init__(self, deps: ToolDependencies, gradio_mode: bool = False, instance_p def copy(self) -> "OpenaiRealtimeHandler": """Create a copy of the handler.""" - return OpenaiRealtimeHandler(self.deps, self.gradio_mode, self.instance_path) + return OpenaiRealtimeHandler( + self.deps, + self.gradio_mode, + self.instance_path, + audio_input_mode_state=self._audio_input_mode_state, + ) + + @property + def audio_input_mode(self) -> str: + """Return the current shared microphone audio mode.""" + return self._audio_input_mode_state["mode"] + + def set_audio_input_mode(self, audio_input_mode: str) -> None: + """Select how microphone audio should be processed.""" + self._audio_input_mode_state["mode"] = _normalize_audio_input_mode(audio_input_mode) def _record_startup_error(self, message: str) -> None: """Store a startup failure so the UI can show a useful error.""" @@ -947,22 +989,21 @@ async def _run_realtime_session(self) -> None: # Microphone receive async def receive(self, frame: Tuple[int, NDArray[np.int16]]) -> None: - """Receive audio frame from the microphone and send it to the OpenAI server. - - Handles both mono and stereo audio formats, converting to the expected - mono format for OpenAI's API. Resamples if the input sample rate differs - from the expected rate. + """Receive audio frame from the microphone and route it through the selected audio mode.""" + if self.audio_input_mode == AUDIO_MODE_RIVA_STT: + await self._receive_riva_stt(frame) + return - Args: - frame: A tuple containing (sample_rate, audio_data). + await self._receive_openai_realtime_audio(frame) - """ + async def _receive_openai_realtime_audio(self, frame: Tuple[int, NDArray[np.int16]]) -> None: + """Send a microphone frame to the OpenAI Realtime audio session.""" if not self.connection: if not self._text_model_uses_realtime(): self._record_startup_error( - "Microphone mode requires an OpenAI-compatible Realtime model. " + "OpenAI Realtime microphone mode requires an OpenAI-compatible Realtime model. " f"Current MODEL_NAME={config.MODEL_NAME!r} uses the text path only; " - "switch Input to Text or configure a Realtime model for microphone input." + "switch Input to Riva STT/Text or configure a Realtime model for OpenAI Realtime mode." ) await self._report_microphone_error_once(self._not_connected_message()) return @@ -974,8 +1015,39 @@ async def receive(self, frame: Tuple[int, NDArray[np.int16]]) -> None: self._microphone_error_reported = False input_sample_rate, audio_frame = frame + audio_frame = self._prepare_audio_frame(input_sample_rate, audio_frame, target_sample_rate=self.input_sample_rate) - # Reshape if needed + # Send to OpenAI (guard against races during reconnect) + try: + audio_message = base64.b64encode(audio_frame.tobytes()).decode("utf-8") + await self.connection.input_audio_buffer.append(audio=audio_message) + except Exception as e: + logger.debug("Dropping audio frame: connection not ready (%s)", e) + return + + async def _receive_riva_stt(self, frame: Tuple[int, NDArray[np.int16]]) -> None: + """Send a microphone frame to Riva ASR, then route transcripts into the text LLM path.""" + input_sample_rate, audio_frame = frame + audio_frame = self._prepare_audio_frame(input_sample_rate, audio_frame) + + if self._riva_transcriber is None: + self._riva_transcriber = RivaStreamingTranscriber( + config=RivaAsrConfig.from_env(), + on_final_transcript=self._handle_riva_final_transcript, + on_partial_transcript=self._handle_riva_partial_transcript, + ) + await self._riva_transcriber.start(input_sample_rate) + + await self._riva_transcriber.send_audio(audio_frame.tobytes()) + + def _prepare_audio_frame( + self, + input_sample_rate: int, + audio_frame: NDArray[np.int16], + *, + target_sample_rate: int | None = None, + ) -> NDArray[np.int16]: + """Convert incoming audio to mono PCM16, optionally resampling first.""" if audio_frame.ndim == 2: # Scipy channels last convention if audio_frame.shape[1] > audio_frame.shape[0]: @@ -984,21 +1056,22 @@ async def receive(self, frame: Tuple[int, NDArray[np.int16]]) -> None: if audio_frame.shape[1] > 1: audio_frame = audio_frame[:, 0] - # Resample if needed - if self.input_sample_rate != input_sample_rate: - audio_frame = resample(audio_frame, int(len(audio_frame) * self.input_sample_rate / input_sample_rate)) + if target_sample_rate is not None and target_sample_rate != input_sample_rate: + audio_frame = resample(audio_frame, int(len(audio_frame) * target_sample_rate / input_sample_rate)) - # Cast if needed - audio_frame = audio_to_int16(audio_frame) + return audio_to_int16(audio_frame) - # Send to OpenAI (guard against races during reconnect) - try: - audio_message = base64.b64encode(audio_frame.tobytes()).decode("utf-8") - await self.connection.input_audio_buffer.append(audio=audio_message) - except Exception as e: - logger.debug("Dropping audio frame: connection not ready (%s)", e) + async def _handle_riva_partial_transcript(self, transcript: str) -> None: + await self.output_queue.put(AdditionalOutputs({"role": "user_partial", "content": transcript})) + + async def _handle_riva_final_transcript(self, transcript: str) -> None: + if transcript.startswith("[error]"): + await self.output_queue.put(AdditionalOutputs({"role": "assistant", "content": transcript})) return + for message in await self.send_text_message(transcript): + await self.output_queue.put(AdditionalOutputs(message)) + async def emit(self) -> Tuple[int, NDArray[np.int16]] | AdditionalOutputs | None: """Emit audio frame to be played by the speaker.""" # sends to the stream the stuff put in the output queue by the openai event handler @@ -1027,6 +1100,10 @@ async def shutdown(self) -> None: # Stop background tool manager tasks (listener + cleanup) await self.tool_manager.shutdown() + if self._riva_transcriber is not None: + await self._riva_transcriber.stop() + self._riva_transcriber = None + # Cancel any pending debounce task if self.partial_transcript_task and not self.partial_transcript_task.done(): self.partial_transcript_task.cancel() diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/riva_asr.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/riva_asr.py new file mode 100644 index 00000000..efc7b814 --- /dev/null +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/riva_asr.py @@ -0,0 +1,202 @@ +"""Riva streaming ASR bridge used by microphone-to-text mode.""" + +from __future__ import annotations +import os +import queue +import asyncio +import logging +import threading +from dataclasses import dataclass +from collections.abc import Callable, Awaitable + + +logger = logging.getLogger(__name__) + + +@dataclass(frozen=True) +class RivaAsrConfig: + """Configuration for Riva streaming ASR.""" + + server_uri: str + language_code: str + model: str + use_ssl: bool + ssl_cert: str | None + authorization: str | None + metadata: tuple[tuple[str, str], ...] + interim_results: bool + automatic_punctuation: bool + + @classmethod + def from_env(cls) -> "RivaAsrConfig": + """Build Riva ASR configuration from environment variables.""" + return cls( + server_uri=os.getenv("RIVA_SERVER_URI", "localhost:50051"), + language_code=os.getenv("RIVA_LANGUAGE_CODE", "en-US"), + model=os.getenv("RIVA_ASR_MODEL", ""), + use_ssl=_env_flag("RIVA_USE_SSL", default=False), + ssl_cert=os.getenv("RIVA_SSL_CERT") or None, + authorization=os.getenv("RIVA_AUTHORIZATION") or None, + metadata=_parse_metadata(os.getenv("RIVA_METADATA", "")), + interim_results=_env_flag("RIVA_INTERIM_RESULTS", default=True), + automatic_punctuation=_env_flag("RIVA_AUTOMATIC_PUNCTUATION", default=True), + ) + + +class RivaStreamingTranscriber: + """Threaded wrapper around the blocking Riva streaming ASR client.""" + + def __init__( + self, + *, + config: RivaAsrConfig, + on_final_transcript: Callable[[str], Awaitable[None]], + on_partial_transcript: Callable[[str], Awaitable[None]] | None = None, + ) -> None: + """Initialize the streaming transcriber callbacks and audio queue.""" + self._config = config + self._on_final_transcript = on_final_transcript + self._on_partial_transcript = on_partial_transcript + self._audio_queue: queue.Queue[bytes | None] = queue.Queue(maxsize=128) + self._thread: threading.Thread | None = None + self._loop: asyncio.AbstractEventLoop | None = None + self._sample_rate_hertz: int | None = None + self._last_partial = "" + self._last_final = "" + + async def start(self, sample_rate_hertz: int) -> None: + """Start the background Riva stream.""" + if self._thread is not None and self._thread.is_alive(): + return + + self._loop = asyncio.get_running_loop() + self._sample_rate_hertz = sample_rate_hertz + self._thread = threading.Thread(target=self._run, name="riva-asr-stream", daemon=True) + self._thread.start() + + async def send_audio(self, audio_bytes: bytes) -> None: + """Send one PCM16 audio chunk to the Riva stream.""" + if self._thread is None or not self._thread.is_alive(): + raise RuntimeError("Riva ASR stream is not running") + + try: + self._audio_queue.put_nowait(audio_bytes) + except queue.Full: + try: + self._audio_queue.get_nowait() + except queue.Empty: + pass + self._audio_queue.put_nowait(audio_bytes) + + async def stop(self) -> None: + """Close the stream and wait briefly for the worker to exit.""" + if self._thread is None: + return + self._audio_queue.put(None) + thread = self._thread + await asyncio.to_thread(thread.join, 2.0) + + def _audio_chunks(self) -> object: + while True: + chunk = self._audio_queue.get() + if chunk is None: + return + yield chunk + + def _run(self) -> None: + try: + import riva.client + except ImportError: + self._schedule_final( + "[error] Riva STT mode requires the optional dependency " + "`nvidia-riva-client`. Install it with `uv sync --extra riva`." + ) + return + + if self._loop is None or self._sample_rate_hertz is None: + logger.error("Riva ASR stream started without an event loop or sample rate") + return + + try: + metadata_args = list(self._config.metadata) + if self._config.authorization: + metadata_args.append(("authorization", self._config.authorization)) + + auth = riva.client.Auth( + uri=self._config.server_uri, + use_ssl=self._config.use_ssl, + ssl_cert=self._config.ssl_cert, + metadata_args=metadata_args, + ) + asr_service = riva.client.ASRService(auth) + recognition_config = riva.client.RecognitionConfig( + encoding=riva.client.AudioEncoding.LINEAR_PCM, + sample_rate_hertz=self._sample_rate_hertz, + language_code=self._config.language_code, + max_alternatives=1, + enable_automatic_punctuation=self._config.automatic_punctuation, + audio_channel_count=1, + model=self._config.model, + ) + streaming_config = riva.client.StreamingRecognitionConfig( + config=recognition_config, + interim_results=self._config.interim_results, + ) + + responses = asr_service.streaming_response_generator(self._audio_chunks(), streaming_config) + for response in responses: + for result in getattr(response, "results", []): + transcript = self._result_transcript(result) + if not transcript: + continue + if getattr(result, "is_final", False): + self._schedule_final(transcript) + else: + self._schedule_partial(transcript) + except Exception as exc: + logger.exception("Riva streaming ASR failed") + self._schedule_final(f"[error] Riva streaming ASR failed: {type(exc).__name__}: {exc}") + + def _result_transcript(self, result: object) -> str: + alternatives = getattr(result, "alternatives", []) + if not alternatives: + return "" + transcript = getattr(alternatives[0], "transcript", "") + return transcript.strip() if isinstance(transcript, str) else "" + + def _schedule_partial(self, transcript: str) -> None: + if transcript == self._last_partial: + return + self._last_partial = transcript + if self._loop is None or self._on_partial_transcript is None: + return + asyncio.run_coroutine_threadsafe(self._on_partial_transcript(transcript), self._loop) + + def _schedule_final(self, transcript: str) -> None: + if transcript == self._last_final: + return + self._last_final = transcript + if self._loop is None: + return + asyncio.run_coroutine_threadsafe(self._on_final_transcript(transcript), self._loop) + + +def _env_flag(name: str, default: bool = False) -> bool: + raw = os.getenv(name) + if raw is None: + return default + return raw.strip().lower() in {"1", "true", "yes", "on"} + + +def _parse_metadata(raw: str) -> tuple[tuple[str, str], ...]: + pairs: list[tuple[str, str]] = [] + for item in raw.split(","): + item = item.strip() + if not item: + continue + key, separator, value = item.partition("=") + if not separator or not key.strip(): + logger.warning("Ignoring invalid RIVA_METADATA item %r; expected key=value", item) + continue + pairs.append((key.strip(), value.strip())) + return tuple(pairs) diff --git a/projects/reachy-mini-openshell/tests/test_openai_realtime.py b/projects/reachy-mini-openshell/tests/test_openai_realtime.py index 93182722..06a5e5e3 100644 --- a/projects/reachy-mini-openshell/tests/test_openai_realtime.py +++ b/projects/reachy-mini-openshell/tests/test_openai_realtime.py @@ -338,10 +338,80 @@ def fail_openai_client(**_kw: Any) -> None: output = await asyncio.wait_for(handler.output_queue.get(), timeout=1) assert isinstance(output, rt_mod.AdditionalOutputs) - assert "Microphone mode requires an OpenAI-compatible Realtime model" in output.args[0]["content"] + assert "OpenAI Realtime microphone mode requires an OpenAI-compatible Realtime model" in output.args[0]["content"] assert handler.connection is None +@pytest.mark.asyncio +async def test_receive_riva_mode_routes_final_transcript_to_text_llm(monkeypatch: Any) -> None: + """Riva STT mode should send final ASR transcripts through the text LLM path.""" + sent_text_messages: list[str] = [] + + class FakeRivaTranscriber: + instances: list["FakeRivaTranscriber"] = [] + + def __init__(self, **kwargs: Any) -> None: + self.on_final_transcript = kwargs["on_final_transcript"] + self.on_partial_transcript = kwargs["on_partial_transcript"] + self.started_sample_rate: int | None = None + self.audio_chunks: list[bytes] = [] + self.stopped = False + self.instances.append(self) + + async def start(self, sample_rate_hertz: int) -> None: + self.started_sample_rate = sample_rate_hertz + + async def send_audio(self, audio_bytes: bytes) -> None: + self.audio_chunks.append(audio_bytes) + await self.on_partial_transcript("hello") + await self.on_final_transcript("hello reachy") + + async def stop(self) -> None: + self.stopped = True + + monkeypatch.setattr(rt_mod, "RivaStreamingTranscriber", FakeRivaTranscriber) + + deps = ToolDependencies(reachy_mini=MagicMock(), movement_manager=MagicMock()) + handler = rt_mod.OpenaiRealtimeHandler(deps, audio_input_mode=rt_mod.AUDIO_MODE_RIVA_STT) + + async def fake_send_text_message(message: str) -> list[dict[str, Any]]: + sent_text_messages.append(message) + return [ + {"role": "user", "content": message}, + {"role": "assistant", "content": "Hi from the text model."}, + ] + + handler.send_text_message = fake_send_text_message # type: ignore[method-assign] + audio_frame = np.array([0, 1000, -1000, 0], dtype=np.int16) + + await handler.receive((16000, audio_frame)) + + partial = await asyncio.wait_for(handler.output_queue.get(), timeout=1) + user = await asyncio.wait_for(handler.output_queue.get(), timeout=1) + assistant = await asyncio.wait_for(handler.output_queue.get(), timeout=1) + await handler.shutdown() + + transcriber = FakeRivaTranscriber.instances[0] + assert transcriber.started_sample_rate == 16000 + assert transcriber.audio_chunks == [audio_frame.tobytes()] + assert transcriber.stopped + assert sent_text_messages == ["hello reachy"] + assert partial.args[0] == {"role": "user_partial", "content": "hello"} + assert user.args[0] == {"role": "user", "content": "hello reachy"} + assert assistant.args[0] == {"role": "assistant", "content": "Hi from the text model."} + + +def test_handler_copies_share_audio_input_mode() -> None: + """FastRTC handler copies should see the latest UI-selected audio mode.""" + deps = ToolDependencies(reachy_mini=MagicMock(), movement_manager=MagicMock()) + handler = rt_mod.OpenaiRealtimeHandler(deps, audio_input_mode=rt_mod.AUDIO_MODE_OPENAI_REALTIME) + copied_handler = handler.copy() + + handler.set_audio_input_mode(rt_mod.AUDIO_MODE_RIVA_STT) + + assert copied_handler.audio_input_mode == rt_mod.AUDIO_MODE_RIVA_STT + + @pytest.mark.asyncio async def test_send_text_message_reports_missing_dotenv_key(monkeypatch: Any) -> None: """Text mode reports the actual missing-key problem instead of a generic connection error.""" diff --git a/projects/reachy-mini-openshell/uv.lock b/projects/reachy-mini-openshell/uv.lock index a3dcec23..b4ec368f 100644 --- a/projects/reachy-mini-openshell/uv.lock +++ b/projects/reachy-mini-openshell/uv.lock @@ -9,6 +9,13 @@ resolution-markers = [ supported-markers = [ "sys_platform == 'darwin'", ] +conflicts = [[ + { package = "reachy-mini-conversation-app", extra = "mediapipe-vision" }, + { package = "reachy-mini-conversation-app", extra = "riva" }, +], [ + { package = "reachy-mini-conversation-app", extra = "all-vision" }, + { package = "reachy-mini-conversation-app", extra = "riva" }, +]] [[package]] name = "absl-py" @@ -42,15 +49,15 @@ name = "aiohttp" version = "3.14.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "aiohappyeyeballs", marker = "sys_platform == 'darwin'" }, - { name = "aiosignal", marker = "sys_platform == 'darwin'" }, - { name = "async-timeout", marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, - { name = "attrs", marker = "sys_platform == 'darwin'" }, - { name = "frozenlist", marker = "sys_platform == 'darwin'" }, - { name = "multidict", marker = "sys_platform == 'darwin'" }, - { name = "propcache", marker = "sys_platform == 'darwin'" }, - { name = "typing-extensions", marker = "sys_platform == 'darwin'" }, - { name = "yarl", marker = "sys_platform == 'darwin'" }, + { name = "aiohappyeyeballs", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "aiosignal", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "async-timeout", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "attrs", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "frozenlist", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "multidict", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "propcache", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "typing-extensions", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "yarl", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/82/78/8ea7308cac6934de8c74a14f3d5f65d1c89287426688be79538d0e5c013d/aiohttp-3.14.1.tar.gz", hash = "sha256:307f2cff90a764d329e77040603fa032db89c5c24fdad50c4c15334cba744035", size = 7955794, upload-time = "2026-06-07T21:09:35.529Z" } wheels = [ @@ -70,8 +77,8 @@ name = "aioice" version = "0.10.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "dnspython", marker = "sys_platform == 'darwin'" }, - { name = "ifaddr", marker = "sys_platform == 'darwin'" }, + { name = "dnspython", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "ifaddr", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/67/04/df7286233f468e19e9bedff023b6b246182f0b2ccb04ceeb69b2994021c6/aioice-0.10.2.tar.gz", hash = "sha256:bf236c6829ee33c8e540535d31cd5a066b531cb56de2be94c46be76d68b1a806", size = 44307, upload-time = "2025-11-28T15:56:48.836Z" } wheels = [ @@ -83,13 +90,13 @@ name = "aiortc" version = "1.14.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "aioice", marker = "sys_platform == 'darwin'" }, - { name = "av", marker = "sys_platform == 'darwin'" }, - { name = "cryptography", marker = "sys_platform == 'darwin'" }, - { name = "google-crc32c", marker = "sys_platform == 'darwin'" }, - { name = "pyee", marker = "sys_platform == 'darwin'" }, - { name = "pylibsrtp", marker = "sys_platform == 'darwin'" }, - { name = "pyopenssl", marker = "sys_platform == 'darwin'" }, + { name = "aioice", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "av", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "cryptography", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "google-crc32c", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "pyee", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "pylibsrtp", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "pyopenssl", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/51/9c/4e027bfe0195de0442da301e2389329496745d40ae44d2d7c4571c4290ce/aiortc-1.14.0.tar.gz", hash = "sha256:adc8a67ace10a085721e588e06a00358ed8eaf5f6b62f0a95358ff45628dd762", size = 1180864, upload-time = "2025-10-13T21:40:37.905Z" } wheels = [ @@ -101,8 +108,8 @@ name = "aiosignal" version = "1.4.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "frozenlist", marker = "sys_platform == 'darwin'" }, - { name = "typing-extensions", marker = "sys_platform == 'darwin'" }, + { name = "frozenlist", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "typing-extensions", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/61/62/06741b579156360248d1ec624842ad0edf697050bbaf7c3e46394e106ad1/aiosignal-1.4.0.tar.gz", hash = "sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7", size = 25007, upload-time = "2025-07-03T22:54:43.528Z" } wheels = [ @@ -132,9 +139,9 @@ name = "anyio" version = "4.14.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "exceptiongroup", marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, - { name = "idna", marker = "sys_platform == 'darwin'" }, - { name = "typing-extensions", marker = "sys_platform == 'darwin'" }, + { name = "exceptiongroup", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "idna", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "typing-extensions", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/3b/72/5562aabb8dd7181e8e860622a38bea08d17842b99ecd4c91f84ac95251b0/anyio-4.14.1.tar.gz", hash = "sha256:8d648a3544c1a700e3ff78615cd679e4c5c3f149904287e73687b2596963629e", size = 254831, upload-time = "2026-06-24T20:56:06.017Z" } wheels = [ @@ -146,7 +153,7 @@ name = "asgiref" version = "3.11.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions", marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "typing-extensions", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/63/40/f03da1264ae8f7cfdbf9146542e5e7e8100a4c66ab48e791df9a03d3f6c0/asgiref-3.11.1.tar.gz", hash = "sha256:5f184dc43b7e763efe848065441eac62229c9f7b0475f41f80e207a114eda4ce", size = 38550, upload-time = "2026-02-03T13:30:14.33Z" } wheels = [ @@ -231,7 +238,7 @@ name = "cffi" version = "2.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "pycparser", marker = "implementation_name != 'PyPy' and sys_platform == 'darwin'" }, + { name = "pycparser", marker = "(implementation_name != 'PyPy' and sys_platform == 'darwin') or (implementation_name == 'PyPy' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (implementation_name == 'PyPy' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/eb/56/b1ba7935a17738ae8453301356628e8147c79dbb825bcbc73dc7401f9846/cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529", size = 523588, upload-time = "2025-09-08T23:24:04.541Z" } wheels = [ @@ -278,7 +285,7 @@ name = "click-option-group" version = "0.5.9" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "click", marker = "sys_platform == 'darwin'" }, + { name = "click", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/ef/ff/d291d66595b30b83d1cb9e314b2c9be7cfc7327d4a0d40a15da2416ea97b/click_option_group-0.5.9.tar.gz", hash = "sha256:f94ed2bc4cf69052e0f29592bd1e771a1789bd7bfc482dd0bc482134aff95823", size = 22222, upload-time = "2025-10-09T09:38:01.474Z" } wheels = [ @@ -293,7 +300,7 @@ resolution-markers = [ "python_full_version < '3.11' and sys_platform == 'darwin'", ] dependencies = [ - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/66/54/eb9bfc647b19f2009dd5c7f5ec51c4e6ca831725f1aea7a993034f483147/contourpy-1.3.2.tar.gz", hash = "sha256:b6945942715a034c671b7fc54f9588126b0b8bf23db2696e3ca8328f3ff0ab54", size = 13466130, upload-time = "2025-04-15T17:47:53.79Z" } wheels = [ @@ -316,7 +323,7 @@ resolution-markers = [ "python_full_version == '3.11.*' and sys_platform == 'darwin'", ] dependencies = [ - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/58/01/1253e6698a07380cd31a736d248a3f2a50a7c88779a1813da27503cadc2a/contourpy-1.3.3.tar.gz", hash = "sha256:083e12155b210502d0bca491432bb04d56dc3432f95a979b429f2848c3dbe880", size = 13466174, upload-time = "2025-07-26T12:03:12.549Z" } wheels = [ @@ -333,8 +340,8 @@ name = "cryptography" version = "49.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "cffi", marker = "platform_python_implementation != 'PyPy' and sys_platform == 'darwin'" }, - { name = "typing-extensions", marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "cffi", marker = "(platform_python_implementation != 'PyPy' and sys_platform == 'darwin') or (platform_python_implementation == 'PyPy' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (platform_python_implementation == 'PyPy' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "typing-extensions", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/1f/99/d1c90d6041656cc6ee229dc99cd67fd0cd5aec3c5f7d72fffc27cc750054/cryptography-49.0.0.tar.gz", hash = "sha256:f89660a348f4f78a92366240a61404e337586ef7f5909a2fef59ca88ef505493", size = 854345, upload-time = "2026-06-12T20:02:30.512Z" } wheels = [ @@ -375,7 +382,7 @@ name = "deprecated" version = "1.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "wrapt", marker = "sys_platform == 'darwin'" }, + { name = "wrapt", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/49/85/12f0a49a7c4ffb70572b6c2ef13c90c88fd190debda93b23f026b25f9634/deprecated-1.3.1.tar.gz", hash = "sha256:b1b50e0ff0c1fddaa5708a2c6b0a6588bb09b892825ab2b214ac9ea9d92a5223", size = 2932523, upload-time = "2025-10-30T08:19:02.757Z" } wheels = [ @@ -448,10 +455,10 @@ wheels = [ [package.optional-dependencies] epath = [ - { name = "fsspec", marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, - { name = "importlib-resources", marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, - { name = "typing-extensions", marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, - { name = "zipp", marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "fsspec", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "importlib-resources", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "typing-extensions", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "zipp", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] [[package]] @@ -469,9 +476,9 @@ wheels = [ [package.optional-dependencies] epath = [ - { name = "fsspec", marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, - { name = "typing-extensions", marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, - { name = "zipp", marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, + { name = "fsspec", marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "typing-extensions", marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "zipp", marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] [[package]] @@ -479,7 +486,7 @@ name = "exceptiongroup" version = "1.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions", marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "typing-extensions", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] 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 = [ @@ -491,11 +498,11 @@ name = "fastapi" version = "0.138.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "annotated-doc", marker = "sys_platform == 'darwin'" }, - { name = "pydantic", marker = "sys_platform == 'darwin'" }, - { name = "starlette", marker = "sys_platform == 'darwin'" }, - { name = "typing-extensions", marker = "sys_platform == 'darwin'" }, - { name = "typing-inspection", marker = "sys_platform == 'darwin'" }, + { name = "annotated-doc", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "pydantic", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "starlette", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "typing-extensions", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "typing-inspection", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/5b/58/ff455d9fe47c60abadb34b9e05a304b1f05f5ab8000ac01565156b6f5e43/fastapi-0.138.0.tar.gz", hash = "sha256:d445a4877636ad191e7053e08c9bf98cb921a6756776848400bb773d1740c061", size = 419240, upload-time = "2026-06-20T01:18:05.259Z" } wheels = [ @@ -507,13 +514,13 @@ name = "fastrtc" version = "0.0.34" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "aioice", marker = "sys_platform == 'darwin'" }, - { name = "aiortc", marker = "sys_platform == 'darwin'" }, - { name = "gradio", marker = "sys_platform == 'darwin'" }, - { name = "librosa", marker = "sys_platform == 'darwin'" }, - { name = "numba", marker = "sys_platform == 'darwin'" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, + { name = "aioice", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "aiortc", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "gradio", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "librosa", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "numba", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/af/e1/ea3968b064a183d9ac595dcbde0e6c67033afe01852d5854a0001f7c9faa/fastrtc-0.0.34-py3-none-any.whl", hash = "sha256:6da3831da9c2257810b6c5e5fd7cdd4f1636d716f47ab49d8bb3f2d5d9e499ac", size = 2806078, upload-time = "2025-11-24T17:14:12.68Z" }, @@ -592,7 +599,7 @@ name = "gitdb" version = "4.0.12" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "smmap", marker = "sys_platform == 'darwin'" }, + { name = "smmap", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/72/94/63b0fc47eb32792c7ba1fe1b694daec9a63620db1e313033d18140c2320a/gitdb-4.0.12.tar.gz", hash = "sha256:5ef71f855d191a3326fcfbc0d5da835f26b13fbcba60c32c21091c349ffdb571", size = 394684, upload-time = "2025-01-02T07:20:46.413Z" } wheels = [ @@ -604,7 +611,7 @@ name = "gitpython" version = "3.1.50" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "gitdb", marker = "sys_platform == 'darwin'" }, + { name = "gitdb", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/33/f6/354ae6491228b5eb40e10d89c4d13c651fe1cf7556e35ebdded50cff57ce/gitpython-3.1.50.tar.gz", hash = "sha256:80da2d12504d52e1f998772dc5baf6e553f8d2fcfe1fcc226c9d9a2ee3372dcc", size = 219798, upload-time = "2026-05-06T04:01:26.571Z" } wheels = [ @@ -644,35 +651,35 @@ name = "gradio" version = "5.50.1.dev1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "aiofiles", marker = "sys_platform == 'darwin'" }, - { name = "anyio", marker = "sys_platform == 'darwin'" }, - { name = "brotli", marker = "sys_platform == 'darwin'" }, - { name = "fastapi", marker = "sys_platform == 'darwin'" }, - { name = "ffmpy", marker = "sys_platform == 'darwin'" }, - { name = "gradio-client", marker = "sys_platform == 'darwin'" }, - { name = "groovy", marker = "sys_platform == 'darwin'" }, - { name = "httpx", marker = "sys_platform == 'darwin'" }, - { name = "huggingface-hub", marker = "sys_platform == 'darwin'" }, - { name = "jinja2", marker = "sys_platform == 'darwin'" }, - { name = "markupsafe", marker = "sys_platform == 'darwin'" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, - { name = "orjson", marker = "sys_platform == 'darwin'" }, - { name = "packaging", marker = "sys_platform == 'darwin'" }, - { name = "pandas", marker = "sys_platform == 'darwin'" }, - { name = "pillow", marker = "sys_platform == 'darwin'" }, - { name = "pydantic", marker = "sys_platform == 'darwin'" }, - { name = "pydub", marker = "sys_platform == 'darwin'" }, - { name = "python-multipart", marker = "sys_platform == 'darwin'" }, - { name = "pyyaml", marker = "sys_platform == 'darwin'" }, - { name = "ruff", marker = "sys_platform == 'darwin'" }, - { name = "safehttpx", marker = "sys_platform == 'darwin'" }, - { name = "semantic-version", marker = "sys_platform == 'darwin'" }, - { name = "starlette", marker = "sys_platform == 'darwin'" }, - { name = "tomlkit", marker = "sys_platform == 'darwin'" }, - { name = "typer", marker = "sys_platform == 'darwin'" }, - { name = "typing-extensions", marker = "sys_platform == 'darwin'" }, - { name = "uvicorn", marker = "sys_platform == 'darwin'" }, + { name = "aiofiles", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "anyio", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "brotli", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "fastapi", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "ffmpy", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "gradio-client", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "groovy", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "httpx", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "huggingface-hub", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "jinja2", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "markupsafe", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "orjson", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "packaging", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "pandas", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "pillow", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "pydantic", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "pydub", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "python-multipart", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "pyyaml", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "ruff", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "safehttpx", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "semantic-version", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "starlette", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "tomlkit", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "typer", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "typing-extensions", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "uvicorn", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/73/23/c6d28a7963e81e5b6cf658a745b448ae085111af62310f6ae68107d261c6/gradio-5.50.1.dev1.tar.gz", hash = "sha256:25255c2e86a2419b15e87d17263de30d87f967c0801d3a02a48008eb158334a3", size = 71671888, upload-time = "2025-12-03T15:20:12.836Z" } wheels = [ @@ -684,12 +691,12 @@ name = "gradio-client" version = "1.14.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "fsspec", marker = "sys_platform == 'darwin'" }, - { name = "httpx", marker = "sys_platform == 'darwin'" }, - { name = "huggingface-hub", marker = "sys_platform == 'darwin'" }, - { name = "packaging", marker = "sys_platform == 'darwin'" }, - { name = "typing-extensions", marker = "sys_platform == 'darwin'" }, - { name = "websockets", marker = "sys_platform == 'darwin'" }, + { name = "fsspec", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "httpx", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "huggingface-hub", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "packaging", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "typing-extensions", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "websockets", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/be/8a/f2a47134c5b5a7f3bad27eae749589a80d81efaaad8f59af47c136712bf6/gradio_client-1.14.0-py3-none-any.whl", hash = "sha256:9a2f5151978411e0f8b55a2d38cddd0a94491851149d14db4af96f5a09774825", size = 325555, upload-time = "2025-11-21T18:04:21.834Z" }, @@ -704,19 +711,49 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/28/27/3d6dcadc8a3214d8522c1e7f6a19554e33659be44546d44a2f7572ac7d2a/groovy-0.1.2-py3-none-any.whl", hash = "sha256:7f7975bab18c729a257a8b1ae9dcd70b7cafb1720481beae47719af57c35fa64", size = 14090, upload-time = "2025-02-28T20:24:55.152Z" }, ] +[[package]] +name = "grpcio" +version = "1.81.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b0/b5/1ff353970a87eda4c98251e34d2dfd214abd4982dc89119c9252a2a482d2/grpcio-1.81.1.tar.gz", hash = "sha256:6fa10a767143a5e82e8eaab53918af0cd8909a57a27f8cb2288b80a613ac671b", size = 13026582, upload-time = "2026-06-11T12:46:51.673Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/80/41/9c95232b94b219ed8b14029d9cd000e0381cafba869c451dda60af84f4ba/grpcio-1.81.1-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:69ef28e54fc85397f91b8c19592b8ef3d81952080366914823bd8572a2958120", size = 12062291, upload-time = "2026-06-11T12:44:27.142Z" }, + { url = "https://files.pythonhosted.org/packages/2b/18/acf45fa8bd1bc5d7b0c2fd3dc4c209379fbd5bb396b440b68a83342226b7/grpcio-1.81.1-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:b137f4bf3ada9dc44d411478decc6ff09a79ed30b306cd2abaa98408c3588137", size = 12074277, upload-time = "2026-06-11T12:44:55.354Z" }, + { url = "https://files.pythonhosted.org/packages/75/95/539706ca0d3bd40dbad583dc56fd883da941f37556b629132da5762781b9/grpcio-1.81.1-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:12b7524c88d4026d3dcb7b0ebe16b6714f3b4af402ddd0f0639ab064a00c87c3", size = 12052560, upload-time = "2026-06-11T12:45:23.652Z" }, +] + +[[package]] +name = "grpcio-tools" +version = "1.81.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "grpcio", marker = "sys_platform == 'darwin'" }, + { name = "protobuf", version = "6.33.5", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'darwin'" }, + { name = "setuptools", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/83/b3/1c5951352d6777fd7f99a0ccee04617fdfd8a5dbf2918a1f58c8b2b280b8/grpcio_tools-1.81.1.tar.gz", hash = "sha256:a22a3870180927fdd84e2b27d079ef5b7f5f8c6110181b6736afc17a463481f1", size = 6236155, upload-time = "2026-06-11T12:51:21.235Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a2/d7/1815110b2d40ec99dbb0a7e6d7eafd591cd1f1e9bf9d3858cd9cf3ffacbd/grpcio_tools-1.81.1-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:ac47a9ea1224df8b653072614e6f0207e9fbfe63fdabaa5918a60ca5fc931b88", size = 5817509, upload-time = "2026-06-11T12:49:25.958Z" }, + { url = "https://files.pythonhosted.org/packages/87/a8/d5aa99de9d8b2dd2a8192c1779796eda8b0d0f1dd915422e0a8a61b80391/grpcio_tools-1.81.1-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:53ef76cc3b0493ff734a5e8c39d5b519e1822236fcccdfe7677c5e1efd767761", size = 5818063, upload-time = "2026-06-11T12:49:45.975Z" }, + { url = "https://files.pythonhosted.org/packages/2f/35/e5f9f671378b1b89a896150d3e4fa2c6ec61a5e1e9e5107ce4c140ccc931/grpcio_tools-1.81.1-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:768f584c2423cbeb6cb6867817a39365b987ff16b8259a3adbc6546b9e303a4e", size = 5815665, upload-time = "2026-06-11T12:50:08.178Z" }, +] + [[package]] name = "gstreamer-bundle" version = "1.28.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "gstreamer-cli", marker = "sys_platform == 'darwin'" }, - { name = "gstreamer-gtk", marker = "sys_platform == 'darwin'" }, - { name = "gstreamer-libs", marker = "sys_platform == 'darwin'" }, - { name = "gstreamer-plugins", marker = "sys_platform == 'darwin'" }, - { name = "gstreamer-plugins-gpl", marker = "sys_platform == 'darwin'" }, - { name = "gstreamer-plugins-gpl-restricted", marker = "sys_platform == 'darwin'" }, - { name = "gstreamer-plugins-restricted", marker = "sys_platform == 'darwin'" }, - { name = "gstreamer-python", marker = "sys_platform == 'darwin'" }, + { name = "gstreamer-cli", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "gstreamer-gtk", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "gstreamer-libs", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "gstreamer-plugins", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "gstreamer-plugins-gpl", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "gstreamer-plugins-gpl-restricted", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "gstreamer-plugins-restricted", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "gstreamer-python", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/07/0f/0dedd5e30e6a7f553cddf850ee39dadbd729a40e9509976f85437a9aaf26/gstreamer_bundle-1.28.3-py3-none-any.whl", hash = "sha256:1270a2f84b4bdb72ecc76c20802d7fafc58a8af0c8540a8e25dbcff91e190b71", size = 2572, upload-time = "2026-05-16T00:03:25.433Z" }, @@ -727,7 +764,7 @@ name = "gstreamer-cli" version = "1.28.4" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "gstreamer-libs", marker = "sys_platform == 'darwin'" }, + { name = "gstreamer-libs", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/4c/2f/4479a3d4bf3493ed00467ddb2ed6d28a6c7116d5ae5671a3bca8420866ce/gstreamer_cli-1.28.4-cp39-abi3-macosx_10_13_universal2.whl", hash = "sha256:2db1cab8e7ab5b543fa7d8d75cd7fbc0783b3b8853313d2ad7e52051f43d81db", size = 15777538, upload-time = "2026-06-15T08:04:04.075Z" }, @@ -754,8 +791,8 @@ name = "gstreamer-libs" version = "1.28.4" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "gstreamer-ext-runtime", marker = "sys_platform == 'darwin'" }, - { name = "setuptools", marker = "sys_platform == 'darwin'" }, + { name = "gstreamer-ext-runtime", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "setuptools", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/d7/dc/dd954a6f6ccc5d081b03fc11c70f22e4cb6caba4255c114dc6c820514e83/gstreamer_libs-1.28.4-cp39-abi3-macosx_10_13_universal2.whl", hash = "sha256:050679ec56676f5c549aa834b233d81367942214d3d3149761f498eb48ef5642", size = 96281413, upload-time = "2026-06-15T08:10:48.293Z" }, @@ -766,7 +803,7 @@ name = "gstreamer-plugins" version = "1.28.4" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "gstreamer-plugins-libs", marker = "sys_platform == 'darwin'" }, + { name = "gstreamer-plugins-libs", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/28/88/f57f3a1cf57e794cda7af6fbe46993afed37af7fc858ae115dfc705243e4/gstreamer_plugins-1.28.4-cp39-abi3-macosx_10_13_universal2.whl", hash = "sha256:96401e0eca66e03e675b2c9ba6f29a29bcbb1e9ced11679abe8993e1e4301761", size = 101492264, upload-time = "2026-06-15T08:12:05.281Z" }, @@ -777,7 +814,7 @@ name = "gstreamer-plugins-gpl" version = "1.28.4" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "gstreamer-plugins-libs", marker = "sys_platform == 'darwin'" }, + { name = "gstreamer-plugins-libs", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/75/a5/b8ba6f06f49dd20e9dd52abb1a5f32eb59d0d239228c19e4598319e438f0/gstreamer_plugins_gpl-1.28.4-cp39-abi3-macosx_10_13_universal2.whl", hash = "sha256:16e6f442124007690ef467093b5aa22d27e3d89b101f11c76d57089002206ba5", size = 1049786, upload-time = "2026-06-15T08:12:12.451Z" }, @@ -788,7 +825,7 @@ name = "gstreamer-plugins-gpl-restricted" version = "1.28.4" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "gstreamer-plugins-libs", marker = "sys_platform == 'darwin'" }, + { name = "gstreamer-plugins-libs", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/aa/e6/814df679c32822109c26ae26a5673abbc33d639afe3ebc0a93b23ee0ec00/gstreamer_plugins_gpl_restricted-1.28.4-cp39-abi3-macosx_10_13_universal2.whl", hash = "sha256:e81ee50d88059d0b8fc42f8dbadbb136e1cc16c73254a5907981403183d01e91", size = 13453376, upload-time = "2026-06-15T08:12:22.956Z" }, @@ -799,7 +836,7 @@ name = "gstreamer-plugins-libs" version = "1.28.4" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "gstreamer-libs", marker = "sys_platform == 'darwin'" }, + { name = "gstreamer-libs", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/06/03/2f71e1c322eed79b8ddaf831351cf8f6215c433d9babc182a3b0f0a9e637/gstreamer_plugins_libs-1.28.4-cp39-abi3-macosx_10_13_universal2.whl", hash = "sha256:1bd17be5cf37b6ca8378a181e074928d94a4934fb7f874dcf271e858d29684e8", size = 83518063, upload-time = "2026-06-15T08:12:49.084Z" }, @@ -810,7 +847,7 @@ name = "gstreamer-plugins-restricted" version = "1.28.4" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "gstreamer-plugins-libs", marker = "sys_platform == 'darwin'" }, + { name = "gstreamer-plugins-libs", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/29/a2/1bed33c875782e1c041b160479136cac8a612bfd794b7989ea18af3ddd56/gstreamer_plugins_restricted-1.28.4-cp39-abi3-macosx_10_13_universal2.whl", hash = "sha256:751d12daf9652d4c45c5a8548dbec9b5c46ab48bdababf37a8bc9831a382ac3d", size = 6103261, upload-time = "2026-06-15T08:12:54.29Z" }, @@ -850,8 +887,8 @@ name = "httpcore" version = "1.0.9" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "certifi", marker = "sys_platform == 'darwin'" }, - { name = "h11", marker = "sys_platform == 'darwin'" }, + { name = "certifi", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "h11", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8", size = 85484, upload-time = "2025-04-24T22:06:22.219Z" } wheels = [ @@ -877,10 +914,10 @@ name = "httpx" version = "0.28.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "anyio", marker = "sys_platform == 'darwin'" }, - { name = "certifi", marker = "sys_platform == 'darwin'" }, - { name = "httpcore", marker = "sys_platform == 'darwin'" }, - { name = "idna", marker = "sys_platform == 'darwin'" }, + { name = "anyio", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "certifi", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "httpcore", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "idna", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406, upload-time = "2024-12-06T15:37:23.222Z" } wheels = [ @@ -892,16 +929,16 @@ name = "huggingface-hub" version = "1.3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "filelock", marker = "sys_platform == 'darwin'" }, - { name = "fsspec", marker = "sys_platform == 'darwin'" }, - { name = "hf-xet", marker = "(platform_machine == 'AMD64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'darwin') or (platform_machine == 'amd64' and sys_platform == 'darwin') or (platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'x86_64' and sys_platform == 'darwin')" }, - { name = "httpx", marker = "sys_platform == 'darwin'" }, - { name = "packaging", marker = "sys_platform == 'darwin'" }, - { name = "pyyaml", marker = "sys_platform == 'darwin'" }, - { name = "shellingham", marker = "sys_platform == 'darwin'" }, - { name = "tqdm", marker = "sys_platform == 'darwin'" }, - { name = "typer-slim", marker = "sys_platform == 'darwin'" }, - { name = "typing-extensions", marker = "sys_platform == 'darwin'" }, + { name = "filelock", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "fsspec", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "hf-xet", marker = "(platform_machine != 'AMD64' and platform_machine != 'aarch64' and platform_machine != 'amd64' and platform_machine != 'arm64' and platform_machine != 'x86_64' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (platform_machine != 'AMD64' and platform_machine != 'aarch64' and platform_machine != 'amd64' and platform_machine != 'arm64' and platform_machine != 'x86_64' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (platform_machine == 'AMD64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'darwin') or (platform_machine == 'amd64' and sys_platform == 'darwin') or (platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'x86_64' and sys_platform == 'darwin') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "httpx", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "packaging", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "pyyaml", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "shellingham", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "tqdm", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "typer-slim", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "typing-extensions", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/c1/c9/d42b5cfa0a50b77cf9165e13edfaf2e3bd4e0def9cb67b6b8a07224a52ab/huggingface_hub-1.3.0.tar.gz", hash = "sha256:289e2a3586fdf01e35882944eaa06fbd57436de24b6e653d1fab248584acd66b", size = 622092, upload-time = "2026-01-09T09:54:44.663Z" } wheels = [ @@ -985,8 +1022,8 @@ dependencies = [ { name = "ml-dtypes", marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, { name = "opt-einsum", marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, - { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*' and sys_platform == 'darwin'" }, - { name = "scipy", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12' and sys_platform == 'darwin'" }, + { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision') or (python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision') or (python_full_version == '3.11.*' and sys_platform == 'darwin' and extra != 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version != '3.11.*' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version != '3.11.*' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "scipy", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and sys_platform == 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision') or (python_full_version >= '3.12' and sys_platform == 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision') or (python_full_version >= '3.12' and sys_platform == 'darwin' and extra != 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.12' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.12' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/d2/73/eb91d98fcadfa2cbcfdd4e417ab116e47eb20882acc5ee678e47c35d6b57/jax-0.10.2.tar.gz", hash = "sha256:bf77428a8c2e6904c4f46d5ab12aa5cfc6cad2179f07f7e4c0fc75ac86ef0639", size = 2775110, upload-time = "2026-06-17T23:44:57.818Z" } wheels = [ @@ -1022,8 +1059,8 @@ resolution-markers = [ dependencies = [ { name = "ml-dtypes", marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, - { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*' and sys_platform == 'darwin'" }, - { name = "scipy", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12' and sys_platform == 'darwin'" }, + { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision') or (python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision') or (python_full_version == '3.11.*' and sys_platform == 'darwin' and extra != 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version != '3.11.*' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version != '3.11.*' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "scipy", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and sys_platform == 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision') or (python_full_version >= '3.12' and sys_platform == 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision') or (python_full_version >= '3.12' and sys_platform == 'darwin' and extra != 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.12' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.12' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/b2/2c/7038fc73154307389631b5b2dbe5ac529e1918eecc19a27e6644ad114bbf/jaxlib-0.10.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5a98873fc867623b81f2bee15d554b8edd6588a183d01fa50d21b1e3db96ff2b", size = 61429039, upload-time = "2026-06-17T23:43:44.858Z" }, @@ -1035,7 +1072,7 @@ name = "jinja2" version = "3.1.6" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "markupsafe", marker = "sys_platform == 'darwin'" }, + { name = "markupsafe", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115, upload-time = "2025-03-05T20:05:02.478Z" } wheels = [ @@ -1097,7 +1134,7 @@ name = "lazy-loader" version = "0.5" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "packaging", marker = "sys_platform == 'darwin'" }, + { name = "packaging", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/49/ac/21a1f8aa3777f5658576777ea76bfb124b702c520bbe90edf4ae9915eafa/lazy_loader-0.5.tar.gz", hash = "sha256:717f9179a0dbed357012ddad50a5ad3d5e4d9a0b8712680d4e687f5e6e6ed9b3", size = 15294, upload-time = "2026-03-06T15:45:09.054Z" } wheels = [ @@ -1109,23 +1146,23 @@ name = "librosa" version = "0.11.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "audioread", marker = "sys_platform == 'darwin'" }, - { name = "decorator", marker = "sys_platform == 'darwin'" }, - { name = "joblib", marker = "sys_platform == 'darwin'" }, - { name = "lazy-loader", marker = "sys_platform == 'darwin'" }, - { name = "msgpack", marker = "sys_platform == 'darwin'" }, - { name = "numba", marker = "sys_platform == 'darwin'" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, - { name = "pooch", marker = "sys_platform == 'darwin'" }, - { name = "scikit-learn", version = "1.7.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, - { name = "scikit-learn", version = "1.9.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, - { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, - { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*' and sys_platform == 'darwin'" }, - { name = "scipy", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12' and sys_platform == 'darwin'" }, - { name = "soundfile", marker = "sys_platform == 'darwin'" }, - { name = "soxr", marker = "sys_platform == 'darwin'" }, - { name = "typing-extensions", marker = "sys_platform == 'darwin'" }, + { name = "audioread", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "decorator", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "joblib", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "lazy-loader", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "msgpack", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "numba", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "pooch", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "scikit-learn", version = "1.7.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "scikit-learn", version = "1.9.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version == '3.11.*' and sys_platform == 'darwin') or (python_full_version != '3.11.*' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version != '3.11.*' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "scipy", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and sys_platform == 'darwin') or (python_full_version < '3.12' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.12' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "soundfile", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "soxr", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "typing-extensions", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/64/36/360b5aafa0238e29758729e9486c6ed92a6f37fa403b7875e06c115cdf4a/librosa-0.11.0.tar.gz", hash = "sha256:f5ed951ca189b375bbe2e33b2abd7e040ceeee302b9bbaeeffdfddb8d0ace908", size = 327001, upload-time = "2025-03-11T15:09:54.884Z" } wheels = [ @@ -1137,7 +1174,7 @@ name = "libusb-package" version = "1.0.26.4" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "importlib-resources", marker = "sys_platform == 'darwin'" }, + { name = "importlib-resources", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/01/34/fd042950325366cb8f01e1873cd87f8aa99e773586377a8e670d6127dc8e/libusb_package-1.0.26.4-py3-none-macosx_10_9_x86_64.whl", hash = "sha256:ce3711a82a2b4b9936a6268c9cbad794c34ae3b1b2c5cc9aeced8340db678668", size = 63859, upload-time = "2026-06-19T11:04:23.822Z" }, @@ -1169,7 +1206,7 @@ name = "markdown-it-py" version = "4.2.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "mdurl", marker = "sys_platform == 'darwin'" }, + { name = "mdurl", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/06/ff/7841249c247aa650a76b9ee4bbaeae59370dc8bfd2f6c01f3630c35eb134/markdown_it_py-4.2.0.tar.gz", hash = "sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49", size = 82454, upload-time = "2026-05-07T12:08:28.36Z" } wheels = [ @@ -1198,15 +1235,15 @@ resolution-markers = [ "python_full_version < '3.11' and sys_platform == 'darwin'", ] dependencies = [ - { name = "contourpy", version = "1.3.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, - { name = "cycler", marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, - { name = "fonttools", marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, - { name = "kiwisolver", marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, - { name = "packaging", marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, - { name = "pillow", marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, - { name = "pyparsing", marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, - { name = "python-dateutil", marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "contourpy", version = "1.3.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "cycler", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "fonttools", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "kiwisolver", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "packaging", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "pillow", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "pyparsing", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "python-dateutil", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/63/1b/4be5be87d43d327a0cf4de1a56e86f7f84c89312452406cf122efe2839e6/matplotlib-3.10.9.tar.gz", hash = "sha256:fd66508e8c6877d98e586654b608a0456db8d7e8a546eb1e2600efd957302358", size = 34811233, upload-time = "2026-04-24T00:14:13.539Z" } wheels = [ @@ -1231,15 +1268,15 @@ resolution-markers = [ "python_full_version == '3.11.*' and sys_platform == 'darwin'", ] dependencies = [ - { name = "contourpy", version = "1.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, - { name = "cycler", marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, - { name = "fonttools", marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, - { name = "kiwisolver", marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, - { name = "packaging", marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, - { name = "pillow", marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, - { name = "pyparsing", marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, - { name = "python-dateutil", marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, + { name = "contourpy", version = "1.3.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "cycler", marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "fonttools", marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "kiwisolver", marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "packaging", marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "pillow", marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "pyparsing", marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "python-dateutil", marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/1f/24/080c99d223d158d3a8902769269ab6da5b50f7a0e6e072513907e02b7a6c/matplotlib-3.11.0.tar.gz", hash = "sha256:68c0c7be01b30dcca3638934f7f591df73401235cbdbf0d1ab1c71e7db7f8b57", size = 33251176, upload-time = "2026-06-12T02:29:15.508Z" } wheels = [ @@ -1268,16 +1305,16 @@ dependencies = [ { name = "absl-py", marker = "sys_platform == 'darwin'" }, { name = "attrs", marker = "sys_platform == 'darwin'" }, { name = "flatbuffers", marker = "sys_platform == 'darwin'" }, - { name = "jax", version = "0.6.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, - { name = "jax", version = "0.10.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, - { name = "jaxlib", version = "0.6.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, - { name = "jaxlib", version = "0.10.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, - { name = "matplotlib", version = "3.10.9", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, - { name = "matplotlib", version = "3.11.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, + { name = "jax", version = "0.6.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision') or (python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision') or (python_full_version < '3.11' and sys_platform == 'darwin' and extra != 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "jax", version = "0.10.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision') or (python_full_version >= '3.11' and sys_platform == 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision') or (python_full_version >= '3.11' and sys_platform == 'darwin' and extra != 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "jaxlib", version = "0.6.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision') or (python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision') or (python_full_version < '3.11' and sys_platform == 'darwin' and extra != 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "jaxlib", version = "0.10.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision') or (python_full_version >= '3.11' and sys_platform == 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision') or (python_full_version >= '3.11' and sys_platform == 'darwin' and extra != 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "matplotlib", version = "3.10.9", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision') or (python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision') or (python_full_version < '3.11' and sys_platform == 'darwin' and extra != 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "matplotlib", version = "3.11.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision') or (python_full_version >= '3.11' and sys_platform == 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision') or (python_full_version >= '3.11' and sys_platform == 'darwin' and extra != 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision') or (python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision') or (python_full_version < '3.11' and sys_platform == 'darwin' and extra != 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision') or (python_full_version >= '3.11' and sys_platform == 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision') or (python_full_version >= '3.11' and sys_platform == 'darwin' and extra != 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, { name = "opencv-contrib-python", marker = "sys_platform == 'darwin'" }, - { name = "protobuf", marker = "sys_platform == 'darwin'" }, + { name = "protobuf", version = "4.25.9", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'darwin'" }, { name = "sounddevice", marker = "sys_platform == 'darwin'" }, ] wheels = [ @@ -1294,8 +1331,8 @@ name = "ml-dtypes" version = "0.5.4" 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' and sys_platform == 'darwin'" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision') or (python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision') or (python_full_version < '3.11' and sys_platform == 'darwin' and extra != 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision') or (python_full_version >= '3.11' and sys_platform == 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision') or (python_full_version >= '3.11' and sys_platform == 'darwin' and extra != 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/0e/4a/c27b42ed9b1c7d13d9ba8b6905dece787d6259152f2309338aed29b2447b/ml_dtypes-0.5.4.tar.gz", hash = "sha256:8ab06a50fb9bf9666dd0fe5dfb4676fa2b0ac0f31ecff72a6c3af8e22c063453", size = 692314, upload-time = "2025-11-17T22:32:31.031Z" } wheels = [ @@ -1332,13 +1369,13 @@ name = "mujoco" version = "3.3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "absl-py", marker = "sys_platform == 'darwin'" }, - { name = "etils", version = "1.13.0", source = { registry = "https://pypi.org/simple" }, extra = ["epath"], marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, - { name = "etils", version = "1.14.0", source = { registry = "https://pypi.org/simple" }, extra = ["epath"], marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, - { name = "glfw", marker = "sys_platform == 'darwin'" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, - { name = "pyopengl", marker = "sys_platform == 'darwin'" }, + { name = "absl-py", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "etils", version = "1.13.0", source = { registry = "https://pypi.org/simple" }, extra = ["epath"], marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "etils", version = "1.14.0", source = { registry = "https://pypi.org/simple" }, extra = ["epath"], marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "glfw", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "pyopengl", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/8a/c6/76716fd205ccd0afbaef8b355555ace70347bd02c921d14e05e68eab3dbb/mujoco-3.3.0.tar.gz", hash = "sha256:0fb12ab715bc2b6d2394a6330b8c3a1dd95b0f3ba812bfe4f6c91e0a1ca3ad0f", size = 801447, upload-time = "2025-02-27T19:16:18.748Z" } wheels = [ @@ -1355,7 +1392,7 @@ name = "multidict" version = "6.7.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions", marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "typing-extensions", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/1a/c2/c2d94cbe6ac1753f3fc980da97b3d930efe1da3af3c9f5125354436c073d/multidict-6.7.1.tar.gz", hash = "sha256:ec6652a1bee61c53a3e5776b6049172c53b6aaba34f18c9ad04f82712bac623d", size = 102010, upload-time = "2026-01-26T02:46:45.979Z" } wheels = [ @@ -1419,7 +1456,7 @@ name = "num2words" version = "0.5.14" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "docopt", marker = "sys_platform == 'darwin'" }, + { name = "docopt", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/f6/58/ad645bd38b4b648eb2fc2ba1b909398e54eb0cbb6a7dbd2b4953e38c9621/num2words-0.5.14.tar.gz", hash = "sha256:b066ec18e56b6616a3b38086b5747daafbaa8868b226a36127e0451c0cf379c6", size = 218213, upload-time = "2024-12-17T20:17:10.191Z" } wheels = [ @@ -1431,9 +1468,9 @@ name = "numba" version = "0.65.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "llvmlite", marker = "sys_platform == 'darwin'" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, + { name = "llvmlite", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/f6/c5/db2ac3685833d626c0dcae6bd2330cd68433e1fd248d15f70998160d3ad7/numba-0.65.1.tar.gz", hash = "sha256:19357146c32fe9ed25059ab915e8465fb13951cf6b0aace3826b76886373ab23", size = 2765600, upload-time = "2026-04-24T02:02:56.551Z" } wheels = [ @@ -1500,19 +1537,33 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/23/45/caa600acfab94560807a20a64b5830d2cd3c3202b7f1328644d70b7d6bd8/nvidia_ml_py-13.610.43-py3-none-any.whl", hash = "sha256:f13c72698edef492f985cc225f14faafe68ae065a2e407f45bdf6f4b9b43fde8", size = 53163, upload-time = "2026-06-01T18:54:07.704Z" }, ] +[[package]] +name = "nvidia-riva-client" +version = "2.26.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "grpcio", marker = "sys_platform == 'darwin'" }, + { name = "grpcio-tools", marker = "sys_platform == 'darwin'" }, + { name = "protobuf", version = "6.33.5", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'darwin'" }, + { name = "websockets", marker = "sys_platform == 'darwin'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/21/53/0988b79ee818cb2b8792abeda5a75156946b64da7a2ef2719b9d2068a34f/nvidia_riva_client-2.26.0-py3-none-any.whl", hash = "sha256:16ffc98266fa7be7261e0675de6b7028e7f973c2ac3dfd679668148ff497cc0c", size = 57539, upload-time = "2026-05-28T06:11:43.205Z" }, +] + [[package]] name = "openai" version = "2.44.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "anyio", marker = "sys_platform == 'darwin'" }, - { name = "distro", marker = "sys_platform == 'darwin'" }, - { name = "httpx", marker = "sys_platform == 'darwin'" }, - { name = "jiter", marker = "sys_platform == 'darwin'" }, - { name = "pydantic", marker = "sys_platform == 'darwin'" }, - { name = "sniffio", marker = "sys_platform == 'darwin'" }, - { name = "tqdm", marker = "sys_platform == 'darwin'" }, - { name = "typing-extensions", marker = "sys_platform == 'darwin'" }, + { name = "anyio", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "distro", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "httpx", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "jiter", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "pydantic", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "sniffio", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "tqdm", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "typing-extensions", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/49/f5/7c7cb955305cb41f7f3c5fd7e0e38bf6bbf2658468863d4b7b868a5cb8df/openai-2.44.0.tar.gz", hash = "sha256:68a5a5ffad82b8ff7d451c437529fb64f7c3b8123aaf0c021966a882d9e3947d", size = 988753, upload-time = "2026-06-24T20:56:02.293Z" } wheels = [ @@ -1524,8 +1575,8 @@ name = "opencv-contrib-python" version = "4.13.0.92" 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' and sys_platform == 'darwin'" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision') or (python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision') or (python_full_version < '3.11' and sys_platform == 'darwin' and extra != 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision') or (python_full_version >= '3.11' and sys_platform == 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision') or (python_full_version >= '3.11' and sys_platform == 'darwin' and extra != 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/7e/4c/a45c96b9fe90b2c48ee604f5176eb7deb46ce7c2e87c8d819d2945dbcab6/opencv_contrib_python-4.13.0.92-cp37-abi3-macosx_13_0_arm64.whl", hash = "sha256:53c8ab81376210dda5836307eb6bda7266f39a3820a9a070c7131510ba815fe1", size = 52041546, upload-time = "2026-02-05T07:01:29.918Z" }, @@ -1537,8 +1588,8 @@ name = "opencv-python" version = "4.13.0.92" 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' and sys_platform == 'darwin'" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/fc/6f/5a28fef4c4a382be06afe3938c64cc168223016fa520c5abaf37e8862aa5/opencv_python-4.13.0.92-cp37-abi3-macosx_13_0_arm64.whl", hash = "sha256:caf60c071ec391ba51ed00a4a920f996d0b64e3e46068aac1f646b5de0326a19", size = 46247052, upload-time = "2026-02-05T07:01:25.046Z" }, @@ -1581,11 +1632,11 @@ name = "pandas" version = "2.3.3" 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' and sys_platform == 'darwin'" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, - { name = "python-dateutil", marker = "sys_platform == 'darwin'" }, - { name = "pytz", marker = "sys_platform == 'darwin'" }, - { name = "tzdata", marker = "sys_platform == 'darwin'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "python-dateutil", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "pytz", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "tzdata", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/33/01/d40b85317f86cf08d853a4f495195c73815fdf205eef3993821720274518/pandas-2.3.3.tar.gz", hash = "sha256:e05e1af93b977f7eafa636d043f9f94c7ee3ac81af99c13508215942e64c993b", size = 4495223, upload-time = "2025-09-29T23:34:51.853Z" } wheels = [ @@ -1647,7 +1698,7 @@ name = "polars" version = "1.42.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "polars-runtime-32", marker = "sys_platform == 'darwin'" }, + { name = "polars-runtime-32", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/cb/91/a1d7809a6d399f0aa78d4d3a4f4daf411cb97ccfe7f236c08a01be5fc8a5/polars-1.42.0.tar.gz", hash = "sha256:283ddc923e47857924fbef36580d2e98d984a47c962bae4cbce9c0ebcc98989c", size = 740984, upload-time = "2026-06-24T05:20:13.727Z" } wheels = [ @@ -1669,9 +1720,9 @@ name = "pooch" version = "1.9.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "packaging", marker = "sys_platform == 'darwin'" }, - { name = "platformdirs", marker = "sys_platform == 'darwin'" }, - { name = "requests", marker = "sys_platform == 'darwin'" }, + { name = "packaging", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "platformdirs", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "requests", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/83/43/85ef45e8b36c6a48546af7b266592dc32d7f67837a6514d111bced6d7d75/pooch-1.9.0.tar.gz", hash = "sha256:de46729579b9857ffd3e741987a2f6d5e0e03219892c167c6578c0091fb511ed", size = 61788, upload-time = "2026-01-30T19:15:09.649Z" } wheels = [ @@ -1683,11 +1734,11 @@ name = "pre-commit" version = "4.6.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "cfgv", marker = "sys_platform == 'darwin'" }, - { name = "identify", marker = "sys_platform == 'darwin'" }, - { name = "nodeenv", marker = "sys_platform == 'darwin'" }, - { name = "pyyaml", marker = "sys_platform == 'darwin'" }, - { name = "virtualenv", marker = "sys_platform == 'darwin'" }, + { name = "cfgv", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "identify", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "nodeenv", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "pyyaml", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "virtualenv", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/8e/22/2de9408ac81acbb8a7d05d4cc064a152ccf33b3d480ebe0cd292153db239/pre_commit-4.6.0.tar.gz", hash = "sha256:718d2208cef53fdc38206e40524a6d4d9576d103eb16f0fec11c875e7716e9d9", size = 198525, upload-time = "2026-04-21T20:31:41.613Z" } wheels = [ @@ -1699,7 +1750,7 @@ name = "prompt-toolkit" version = "3.0.52" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "wcwidth", marker = "sys_platform == 'darwin'" }, + { name = "wcwidth", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/a1/96/06e01a7b38dce6fe1db213e061a4602dd6032a8a97ef6c1a862537732421/prompt_toolkit-3.0.52.tar.gz", hash = "sha256:28cde192929c8e7321de85de1ddbe736f1375148b02f2e17edd840042b1be855", size = 434198, upload-time = "2025-08-27T15:24:02.057Z" } wheels = [ @@ -1728,12 +1779,32 @@ wheels = [ name = "protobuf" version = "4.25.9" source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.12' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and sys_platform == 'darwin'", + "python_full_version < '3.11' and sys_platform == 'darwin'", +] sdist = { url = "https://files.pythonhosted.org/packages/d9/8e/d08c41a8c004e1d437ef467e7c4f9c3295cd784eba48ed5d1d01f94b1dad/protobuf-4.25.9.tar.gz", hash = "sha256:b0dc7e7c68de8b1ce831dacb12fb407e838edbb8b6cc0dc3a2a6b4cbf6de9cff", size = 381040, upload-time = "2026-03-25T23:09:36.423Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/56/5b/0074a0a9eb01f3d1c4648ca5e81b22090c811b210b61df9018ac6d6c5cda/protobuf-4.25.9-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:9560813560e6ee72c11ca8873878bdb7ee003c96a57ebb013245fe84e2540904", size = 394826, upload-time = "2026-03-25T23:09:25.194Z" }, { url = "https://files.pythonhosted.org/packages/16/28/d5065b212685875d3924bcdb3201cbf467cb4d58a18aa19a8dfd99ea80a9/protobuf-4.25.9-py3-none-any.whl", hash = "sha256:d49b615e7c935194ac161f0965699ac84df6112c378e05ec53da65d2e4cbb6d4", size = 156822, upload-time = "2026-03-25T23:09:34.957Z" }, ] +[[package]] +name = "protobuf" +version = "6.33.5" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.12' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and sys_platform == 'darwin'", + "python_full_version < '3.11' and sys_platform == 'darwin'", +] +sdist = { url = "https://files.pythonhosted.org/packages/ba/25/7c72c307aafc96fa87062aa6291d9f7c94836e43214d43722e86037aac02/protobuf-6.33.5.tar.gz", hash = "sha256:6ddcac2a081f8b7b9642c09406bc6a4290128fce5f471cddd165960bb9119e5c", size = 444465, upload-time = "2026-01-29T21:51:33.494Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a2/6b/e48dfc1191bc5b52950246275bf4089773e91cb5ba3592621723cdddca62/protobuf-6.33.5-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:a5cb85982d95d906df1e2210e58f8e4f1e3cdc088e52c921a041f9c9a0386de5", size = 427766, upload-time = "2026-01-29T21:51:25.413Z" }, + { url = "https://files.pythonhosted.org/packages/57/bf/2086963c69bdac3d7cff1cc7ff79b8ce5ea0bec6797a017e1be338a46248/protobuf-6.33.5-py3-none-any.whl", hash = "sha256:69915a973dd0f60f31a08b8318b73eab2bd6a392c79184b3612226b0a3f8ec02", size = 170687, upload-time = "2026-01-29T21:51:32.557Z" }, +] + [[package]] name = "psutil" version = "7.2.2" @@ -1758,10 +1829,10 @@ name = "pydantic" version = "2.12.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "annotated-types", marker = "sys_platform == 'darwin'" }, - { name = "pydantic-core", marker = "sys_platform == 'darwin'" }, - { name = "typing-extensions", marker = "sys_platform == 'darwin'" }, - { name = "typing-inspection", marker = "sys_platform == 'darwin'" }, + { name = "annotated-types", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "pydantic-core", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "typing-extensions", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "typing-inspection", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/f3/1e/4f0a3233767010308f2fd6bd0814597e3f63f1dc98304a9112b8759df4ff/pydantic-2.12.3.tar.gz", hash = "sha256:1da1c82b0fc140bb0103bc1441ffe062154c8d38491189751ee00fd8ca65ce74", size = 819383, upload-time = "2025-10-17T15:04:21.222Z" } wheels = [ @@ -1773,7 +1844,7 @@ name = "pydantic-core" version = "2.41.4" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions", marker = "sys_platform == 'darwin'" }, + { name = "typing-extensions", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/df/18/d0944e8eaaa3efd0a91b0f1fc537d3be55ad35091b6a87638211ba691964/pydantic_core-2.41.4.tar.gz", hash = "sha256:70e47929a9d4a1905a67e4b687d5946026390568a8e952b92824118063cee4d5", size = 457557, upload-time = "2025-10-14T10:23:47.909Z" } wheels = [ @@ -1816,7 +1887,7 @@ name = "pyee" version = "13.0.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions", marker = "sys_platform == 'darwin'" }, + { name = "typing-extensions", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/8b/04/e7c1fe4dc78a6fdbfd6c337b1c3732ff543b8a397683ab38378447baa331/pyee-13.0.1.tar.gz", hash = "sha256:0b931f7c14535667ed4c7e0d531716368715e860b988770fc7eb8578d1f67fc8", size = 31655, upload-time = "2026-02-14T21:12:28.044Z" } wheels = [ @@ -1837,7 +1908,7 @@ name = "pylibsrtp" version = "1.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "cffi", marker = "sys_platform == 'darwin'" }, + { name = "cffi", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/0d/a6/6e532bec974aaecbf9fe4e12538489fb1c28456e65088a50f305aeab9f89/pylibsrtp-1.0.0.tar.gz", hash = "sha256:b39dff075b263a8ded5377f2490c60d2af452c9f06c4d061c7a2b640612b34d4", size = 10858, upload-time = "2025-10-13T16:12:31.552Z" } wheels = [ @@ -1859,8 +1930,8 @@ name = "pyopenssl" version = "26.3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "cryptography", marker = "sys_platform == 'darwin'" }, - { name = "typing-extensions", marker = "sys_platform == 'darwin'" }, + { name = "cryptography", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "typing-extensions", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/74/b7/da07bae88f5a9506b4def6f2f4903cf4c3b8831e560dba8fa18ca08f758f/pyopenssl-26.3.0.tar.gz", hash = "sha256:589de7fae1c9ea670d18422ed00fc04da787bbde8e1454aea872aa57b49ad341", size = 182024, upload-time = "2026-06-12T20:28:07.458Z" } wheels = [ @@ -1890,12 +1961,12 @@ name = "pytest" version = "9.1.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "exceptiongroup", marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, - { name = "iniconfig", marker = "sys_platform == 'darwin'" }, - { name = "packaging", marker = "sys_platform == 'darwin'" }, - { name = "pluggy", marker = "sys_platform == 'darwin'" }, - { name = "pygments", marker = "sys_platform == 'darwin'" }, - { name = "tomli", marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "exceptiongroup", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "iniconfig", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "packaging", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "pluggy", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "pygments", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "tomli", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/e4/47/b9efed96c114afcfa3c9d3fe98a76a1d14c74a9e266d397cf6eb64be5e01/pytest-9.1.1.tar.gz", hash = "sha256:1088fbde8f2b49d95a549a195707afa7a76a3ce9bcadc26b6d71f0ffda5fe313", size = 1636369, upload-time = "2026-06-19T10:58:32.857Z" } wheels = [ @@ -1907,9 +1978,9 @@ name = "pytest-asyncio" version = "1.4.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "backports-asyncio-runner", marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, - { name = "pytest", marker = "sys_platform == 'darwin'" }, - { name = "typing-extensions", marker = "sys_platform == 'darwin'" }, + { name = "backports-asyncio-runner", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "pytest", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "typing-extensions", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/43/7c/d36d04db312ecf4298932ef77e6e4a9e8ad017906e24e34f0b0c361a2473/pytest_asyncio-1.4.0.tar.gz", hash = "sha256:c6c0d2259945122819f171a32ecea2c349ead889ee28176caaf492143424be42", size = 58514, upload-time = "2026-05-26T09:56:04.083Z" } wheels = [ @@ -1921,7 +1992,7 @@ name = "python-dateutil" version = "2.9.0.post0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "six", marker = "sys_platform == 'darwin'" }, + { name = "six", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" } wheels = [ @@ -1933,8 +2004,8 @@ name = "python-discovery" version = "1.4.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "filelock", marker = "sys_platform == 'darwin'" }, - { name = "platformdirs", marker = "sys_platform == 'darwin'" }, + { name = "filelock", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "platformdirs", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/0b/1a/cbbaf13b730abb0a16b964d984e19f2fe520c21a4dc664051359a3f5a9e7/python_discovery-1.4.2.tar.gz", hash = "sha256:8f3746c4b4968d22afbb97d36e1a0e5b66e6c0f297290f2e95f05b9b8bf18690", size = 70277, upload-time = "2026-06-11T16:10:42.383Z" } wheels = [ @@ -1955,8 +2026,8 @@ name = "python-gitlab" version = "6.5.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "requests", marker = "sys_platform == 'darwin'" }, - { name = "requests-toolbelt", marker = "sys_platform == 'darwin'" }, + { name = "requests", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "requests-toolbelt", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/9a/bd/b30f1d3b303cb5d3c72e2d57a847d699e8573cbdfd67ece5f1795e49da1c/python_gitlab-6.5.0.tar.gz", hash = "sha256:97553652d94b02de343e9ca92782239aa2b5f6594c5482331a9490d9d5e8737d", size = 400591, upload-time = "2025-10-17T21:40:02.89Z" } wheels = [ @@ -1977,19 +2048,19 @@ name = "python-semantic-release" version = "10.5.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "click", marker = "sys_platform == 'darwin'" }, - { name = "click-option-group", marker = "sys_platform == 'darwin'" }, - { name = "deprecated", marker = "sys_platform == 'darwin'" }, - { name = "dotty-dict", marker = "sys_platform == 'darwin'" }, - { name = "gitpython", marker = "sys_platform == 'darwin'" }, - { name = "importlib-resources", marker = "sys_platform == 'darwin'" }, - { name = "jinja2", marker = "sys_platform == 'darwin'" }, - { name = "pydantic", marker = "sys_platform == 'darwin'" }, - { name = "python-gitlab", marker = "sys_platform == 'darwin'" }, - { name = "requests", marker = "sys_platform == 'darwin'" }, - { name = "rich", marker = "sys_platform == 'darwin'" }, - { name = "shellingham", marker = "sys_platform == 'darwin'" }, - { name = "tomlkit", marker = "sys_platform == 'darwin'" }, + { name = "click", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "click-option-group", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "deprecated", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "dotty-dict", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "gitpython", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "importlib-resources", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "jinja2", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "pydantic", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "python-gitlab", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "requests", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "rich", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "shellingham", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "tomlkit", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/19/3a/7332b822825ed0e902c6e950e0d1e90e8f666fd12eb27855d1c8b6677eff/python_semantic_release-10.5.3.tar.gz", hash = "sha256:de4da78635fa666e5774caaca2be32063cae72431eb75e2ac23b9f2dfd190785", size = 618034, upload-time = "2025-12-14T22:37:29.782Z" } wheels = [ @@ -2033,7 +2104,7 @@ name = "questionary" version = "2.1.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "prompt-toolkit", marker = "sys_platform == 'darwin'" }, + { name = "prompt-toolkit", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/f6/45/eafb0bba0f9988f6a2520f9ca2df2c82ddfa8d67c95d6625452e97b204a5/questionary-2.1.1.tar.gz", hash = "sha256:3d7e980292bb0107abaa79c68dd3eee3c561b83a0f89ae482860b181c8bd412d", size = 25845, upload-time = "2025-08-28T19:00:20.851Z" } wheels = [ @@ -2045,37 +2116,37 @@ name = "reachy-mini" version = "1.8.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "aiohttp", marker = "sys_platform == 'darwin'" }, - { name = "asgiref", marker = "sys_platform == 'darwin'" }, - { name = "fastapi", marker = "sys_platform == 'darwin'" }, - { name = "gstreamer-bundle", marker = "sys_platform == 'darwin'" }, - { name = "huggingface-hub", marker = "sys_platform == 'darwin'" }, - { name = "jinja2", marker = "sys_platform == 'darwin'" }, - { name = "libusb-package", marker = "sys_platform == 'darwin'" }, - { name = "log-throttling", marker = "sys_platform == 'darwin'" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, - { name = "pip", marker = "sys_platform == 'darwin'" }, - { name = "psutil", marker = "sys_platform == 'darwin'" }, - { name = "pyserial", marker = "sys_platform == 'darwin'" }, - { name = "python-multipart", marker = "sys_platform == 'darwin'" }, - { name = "pyusb", marker = "sys_platform == 'darwin'" }, - { name = "pyyaml", marker = "sys_platform == 'darwin'" }, - { name = "questionary", marker = "sys_platform == 'darwin'" }, - { name = "reachy-mini-motor-controller", marker = "sys_platform == 'darwin'" }, - { name = "reachy-mini-rust-kinematics", marker = "sys_platform == 'darwin'" }, - { name = "requests", marker = "sys_platform == 'darwin'" }, - { name = "rich", marker = "sys_platform == 'darwin'" }, - { name = "rustypot", marker = "sys_platform == 'darwin'" }, - { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, - { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*' and sys_platform == 'darwin'" }, - { name = "scipy", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12' and sys_platform == 'darwin'" }, - { name = "starlette", marker = "sys_platform == 'darwin'" }, - { name = "toml", marker = "sys_platform == 'darwin'" }, - { name = "tornado", marker = "sys_platform == 'darwin'" }, - { name = "uvicorn", extra = ["standard"], marker = "sys_platform == 'darwin'" }, - { name = "websockets", marker = "sys_platform == 'darwin'" }, - { name = "zeroconf", marker = "sys_platform == 'darwin'" }, + { name = "aiohttp", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "asgiref", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "fastapi", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "gstreamer-bundle", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "huggingface-hub", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "jinja2", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "libusb-package", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "log-throttling", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "pip", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "psutil", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "pyserial", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "python-multipart", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "pyusb", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "pyyaml", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "questionary", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "reachy-mini-motor-controller", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "reachy-mini-rust-kinematics", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "requests", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "rich", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "rustypot", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version == '3.11.*' and sys_platform == 'darwin') or (python_full_version != '3.11.*' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version != '3.11.*' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "scipy", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and sys_platform == 'darwin') or (python_full_version < '3.12' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.12' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "starlette", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "toml", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "tornado", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "uvicorn", extra = ["standard"], marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "websockets", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "zeroconf", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/f9/20/a82cc900cef998cd8e9eff8bf6bf5a642e841b7daee12d74e184842a0d7d/reachy_mini-1.8.0.tar.gz", hash = "sha256:9c587f2386f1e11fe2f1fbfbcbffd191ee8dcf5cb1cd5fcd7621c2ab416a0dce", size = 24763681, upload-time = "2026-06-01T08:54:13.244Z" } wheels = [ @@ -2084,7 +2155,7 @@ wheels = [ [package.optional-dependencies] mujoco = [ - { name = "mujoco", marker = "sys_platform == 'darwin'" }, + { name = "mujoco", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] [[package]] @@ -2092,18 +2163,18 @@ name = "reachy-mini-conversation-app" version = "0.3.0" source = { editable = "." } dependencies = [ - { name = "aiortc", marker = "sys_platform == 'darwin'" }, - { name = "eclipse-zenoh", marker = "sys_platform == 'darwin'" }, - { name = "fastrtc", marker = "sys_platform == 'darwin'" }, - { name = "gradio", marker = "sys_platform == 'darwin'" }, - { name = "gradio-client", marker = "sys_platform == 'darwin'" }, - { name = "huggingface-hub", marker = "sys_platform == 'darwin'" }, - { name = "openai", marker = "sys_platform == 'darwin'" }, - { name = "opencv-python", marker = "sys_platform == 'darwin'" }, - { name = "python-dotenv", marker = "sys_platform == 'darwin'" }, - { name = "reachy-mini", extra = ["mujoco"], marker = "sys_platform == 'darwin'" }, - { name = "reachy-mini-dances-library", marker = "sys_platform == 'darwin'" }, - { name = "reachy-mini-toolbox", marker = "sys_platform == 'darwin'" }, + { name = "aiortc", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "eclipse-zenoh", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "fastrtc", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "gradio", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "gradio-client", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "huggingface-hub", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "openai", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "opencv-python", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "python-dotenv", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "reachy-mini", extra = ["mujoco"], marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "reachy-mini-dances-library", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "reachy-mini-toolbox", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] [package.optional-dependencies] @@ -2116,27 +2187,30 @@ all-vision = [ { name = "ultralytics", marker = "sys_platform == 'darwin'" }, ] local-vision = [ - { name = "num2words", marker = "sys_platform == 'darwin'" }, - { name = "torch", marker = "sys_platform == 'darwin'" }, - { name = "transformers", marker = "sys_platform == 'darwin'" }, + { name = "num2words", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "torch", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "transformers", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] mediapipe-vision = [ { name = "mediapipe", marker = "sys_platform == 'darwin'" }, ] +riva = [ + { name = "nvidia-riva-client", marker = "sys_platform == 'darwin'" }, +] yolo-vision = [ - { name = "supervision", marker = "sys_platform == 'darwin'" }, - { name = "ultralytics", marker = "sys_platform == 'darwin'" }, + { name = "supervision", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "ultralytics", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] [package.dev-dependencies] dev = [ - { name = "pre-commit", marker = "sys_platform == 'darwin'" }, - { name = "pytest", marker = "sys_platform == 'darwin'" }, - { name = "pytest-asyncio", marker = "sys_platform == 'darwin'" }, - { name = "python-semantic-release", marker = "sys_platform == 'darwin'" }, - { name = "ruff", marker = "sys_platform == 'darwin'" }, - { name = "ty", marker = "sys_platform == 'darwin'" }, - { name = "types-requests", marker = "sys_platform == 'darwin'" }, + { name = "pre-commit", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "pytest", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "pytest-asyncio", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "python-semantic-release", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "ruff", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "ty", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "types-requests", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] [package.metadata] @@ -2151,6 +2225,7 @@ requires-dist = [ { name = "mediapipe", marker = "extra == 'mediapipe-vision'", specifier = "==0.10.14" }, { name = "num2words", marker = "extra == 'all-vision'" }, { name = "num2words", marker = "extra == 'local-vision'" }, + { name = "nvidia-riva-client", marker = "extra == 'riva'", specifier = ">=2.19,<3" }, { name = "openai", specifier = ">=2.1" }, { name = "opencv-python", specifier = ">=4.12.0.88" }, { name = "python-dotenv" }, @@ -2166,7 +2241,7 @@ requires-dist = [ { name = "ultralytics", marker = "extra == 'all-vision'" }, { name = "ultralytics", marker = "extra == 'yolo-vision'" }, ] -provides-extras = ["local-vision", "yolo-vision", "mediapipe-vision", "all-vision"] +provides-extras = ["riva", "local-vision", "yolo-vision", "mediapipe-vision", "all-vision"] [package.metadata.requires-dev] dev = [ @@ -2184,7 +2259,7 @@ name = "reachy-mini-dances-library" version = "0.2.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "reachy-mini", marker = "sys_platform == 'darwin'" }, + { name = "reachy-mini", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/5f/0e/7b26c96caf905e8e0cedff57251da4f953b1c2b97a611c86aee76318f5d1/reachy_mini_dances_library-0.2.1.tar.gz", hash = "sha256:f63fbb0e27f97c547f4e4487e8491495365b24c6f0d063780ef1da9fa5b1daf1", size = 14022, upload-time = "2025-10-15T16:09:00.965Z" } wheels = [ @@ -2250,10 +2325,10 @@ name = "requests" version = "2.34.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "certifi", marker = "sys_platform == 'darwin'" }, - { name = "charset-normalizer", marker = "sys_platform == 'darwin'" }, - { name = "idna", marker = "sys_platform == 'darwin'" }, - { name = "urllib3", marker = "sys_platform == 'darwin'" }, + { name = "certifi", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "charset-normalizer", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "idna", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "urllib3", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/ac/c3/e2a2b89f2d3e2179abd6d00ebd70bff6273f37fb3e0cc209f48b39d00cbf/requests-2.34.2.tar.gz", hash = "sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed", size = 142856, upload-time = "2026-05-14T19:25:27.735Z" } wheels = [ @@ -2265,7 +2340,7 @@ name = "requests-toolbelt" version = "1.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "requests", marker = "sys_platform == 'darwin'" }, + { name = "requests", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/f3/61/d7545dafb7ac2230c70d38d31cbfe4cc64f7144dc41f6e4e4b78ecd9f5bb/requests-toolbelt-1.0.0.tar.gz", hash = "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6", size = 206888, upload-time = "2023-05-01T04:11:33.229Z" } wheels = [ @@ -2277,8 +2352,8 @@ name = "rich" version = "14.3.4" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "markdown-it-py", marker = "sys_platform == 'darwin'" }, - { name = "pygments", marker = "sys_platform == 'darwin'" }, + { name = "markdown-it-py", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "pygments", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/e9/67/cae617f1351490c25a4b8ac3b8b63a4dda609295d8222bad12242dfdc629/rich-14.3.4.tar.gz", hash = "sha256:817e02727f2b25b40ef56f5aa2217f400c8489f79ca8f46ea2b70dd5e14558a9", size = 230524, upload-time = "2026-04-11T02:57:45.419Z" } wheels = [ @@ -2314,7 +2389,7 @@ name = "safehttpx" version = "0.1.7" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "httpx", marker = "sys_platform == 'darwin'" }, + { name = "httpx", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/89/d1/4282284d9cf1ee873607a46442da977fc3c985059315ab23610be31d5885/safehttpx-0.1.7.tar.gz", hash = "sha256:db201c0978c41eddb8bb480f3eee59dd67304fdd91646035e9d9a720049a9d23", size = 10385, upload-time = "2025-10-24T18:30:09.783Z" } wheels = [ @@ -2339,10 +2414,10 @@ resolution-markers = [ "python_full_version < '3.11' and sys_platform == 'darwin'", ] dependencies = [ - { name = "joblib", marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, - { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, - { name = "threadpoolctl", marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "joblib", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "threadpoolctl", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/98/c2/a7855e41c9d285dfe86dc50b250978105dce513d6e459ea66a6aeb0e1e0c/scikit_learn-1.7.2.tar.gz", hash = "sha256:20e9e49ecd130598f1ca38a1d85090e1a600147b9c02fa6f15d69cb53d968fda", size = 7193136, upload-time = "2025-09-09T08:21:29.075Z" } wheels = [ @@ -2363,12 +2438,12 @@ resolution-markers = [ "python_full_version == '3.11.*' and sys_platform == 'darwin'", ] dependencies = [ - { name = "joblib", marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, - { name = "narwhals", marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, - { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*' and sys_platform == 'darwin'" }, - { name = "scipy", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12' and sys_platform == 'darwin'" }, - { name = "threadpoolctl", marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, + { name = "joblib", marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "narwhals", marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version == '3.11.*' and sys_platform == 'darwin') or (python_full_version != '3.11.*' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version != '3.11.*' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "scipy", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and sys_platform == 'darwin') or (python_full_version < '3.12' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.12' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "threadpoolctl", marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/fa/6f/37092bdb25f712817231799fc5674d8e704066a8a70c1d2d40517e18b4ab/scikit_learn-1.9.0.tar.gz", hash = "sha256:8833266989d3a5110178a9fae30783675460724d0e1efb13b14901d2c660c557", size = 7750767, upload-time = "2026-06-02T11:54:32.706Z" } wheels = [ @@ -2386,7 +2461,7 @@ resolution-markers = [ "python_full_version < '3.11' and sys_platform == 'darwin'", ] dependencies = [ - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/0f/37/6964b830433e654ec7485e45a00fc9a27cf868d622838f6b6d9c5ec0d532/scipy-1.15.3.tar.gz", hash = "sha256:eae3cf522bc7df64b42cad3925c876e1b0b6c35c1337c93e12c0f366f55b0eaf", size = 59419214, upload-time = "2025-05-08T16:13:05.955Z" } wheels = [ @@ -2412,7 +2487,7 @@ resolution-markers = [ "python_full_version == '3.11.*' and sys_platform == 'darwin'", ] dependencies = [ - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*' and sys_platform == 'darwin'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version == '3.11.*' and sys_platform == 'darwin') or (python_full_version != '3.11.*' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version != '3.11.*' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/7a/97/5a3609c4f8d58b039179648e62dd220f89864f56f7357f5d4f45c29eb2cc/scipy-1.17.1.tar.gz", hash = "sha256:95d8e012d8cb8816c226aef832200b1d45109ed4464303e997c5b13122b297c0", size = 30573822, upload-time = "2026-02-23T00:26:24.851Z" } wheels = [ @@ -2434,7 +2509,7 @@ resolution-markers = [ "python_full_version >= '3.12' and sys_platform == 'darwin'", ] dependencies = [ - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12' and sys_platform == 'darwin'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and sys_platform == 'darwin') or (python_full_version < '3.12' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.12' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/a7/25/c2700dfaf6442b4effaa91af24ebce5dc9d31bb4a69706313aae70d72cd0/scipy-1.18.0.tar.gz", hash = "sha256:67b2ad2ad54c72ca6d04975a9b2df8c3638c34ddd5b28738e94fc2b57929d378", size = 30774447, upload-time = "2026-06-19T15:01:43.456Z" } wheels = [ @@ -2516,10 +2591,10 @@ name = "soundfile" version = "0.14.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "cffi", marker = "sys_platform == 'darwin'" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, - { name = "typing-extensions", marker = "sys_platform == 'darwin'" }, + { name = "cffi", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "typing-extensions", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/d2/db/949331952a6fb1c5b12e9de80fd08747966c2039d1a61db4764fbd3981c2/soundfile-0.14.0.tar.gz", hash = "sha256:ba1c1a2d618bca5c406647c83b89f07cc8810fa506a50622a6993ba130c1de11", size = 47842, upload-time = "2026-06-06T08:58:47.869Z" } wheels = [ @@ -2533,8 +2608,8 @@ name = "soxr" version = "1.1.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' and sys_platform == 'darwin'" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/ed/11/27cebce4a108f77afea7c80545115536b45e3f11ebfb914f638fdd9ba847/soxr-1.1.0.tar.gz", hash = "sha256:9f228ae21c78fa9359ca98d8a5e8e91f30639e438e574133dace62c5b5309e44", size = 173067, upload-time = "2026-05-03T00:15:18.214Z" } wheels = [ @@ -2551,8 +2626,8 @@ name = "starlette" version = "0.52.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "anyio", marker = "sys_platform == 'darwin'" }, - { name = "typing-extensions", marker = "sys_platform == 'darwin'" }, + { name = "anyio", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "typing-extensions", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/c4/68/79977123bb7be889ad680d79a40f339082c1978b5cfcf62c2d8d196873ac/starlette-0.52.1.tar.gz", hash = "sha256:834edd1b0a23167694292e94f597773bc3f89f362be6effee198165a35d62933", size = 2653702, upload-time = "2026-01-18T13:34:11.062Z" } wheels = [ @@ -2564,20 +2639,20 @@ name = "supervision" version = "0.29.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "defusedxml", marker = "sys_platform == 'darwin'" }, - { name = "matplotlib", version = "3.10.9", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, - { name = "matplotlib", version = "3.11.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, - { name = "opencv-python", marker = "sys_platform == 'darwin'" }, - { name = "pillow", marker = "sys_platform == 'darwin'" }, - { name = "pydeprecate", marker = "sys_platform == 'darwin'" }, - { name = "pyyaml", marker = "sys_platform == 'darwin'" }, - { name = "requests", marker = "sys_platform == 'darwin'" }, - { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, - { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*' and sys_platform == 'darwin'" }, - { name = "scipy", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12' and sys_platform == 'darwin'" }, - { name = "tqdm", marker = "sys_platform == 'darwin'" }, + { name = "defusedxml", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "matplotlib", version = "3.10.9", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "matplotlib", version = "3.11.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "opencv-python", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "pillow", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "pydeprecate", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "pyyaml", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "requests", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version == '3.11.*' and sys_platform == 'darwin') or (python_full_version != '3.11.*' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version != '3.11.*' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "scipy", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and sys_platform == 'darwin') or (python_full_version < '3.12' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.12' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "tqdm", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/dc/ec/293e5693ef5f32b54533b680b909a96976925adbb5c3bbfbf53b199182e0/supervision-0.29.1.tar.gz", hash = "sha256:2db9f968a3253e6778573c39bbb8a8e3fa586ece6c98fbdc41d8fd8508eda5af", size = 246950, upload-time = "2026-06-23T19:55:37.717Z" } wheels = [ @@ -2589,7 +2664,7 @@ name = "sympy" version = "1.14.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "mpmath", marker = "sys_platform == 'darwin'" }, + { name = "mpmath", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/83/d3/803453b36afefb7c2bb238361cd4ae6125a569b4db67cd9e79846ba2d68c/sympy-1.14.0.tar.gz", hash = "sha256:d3d3fe8df1e5a0b42f0e7bdf50541697dbe7d23746e894990c030e2b05e72517", size = 7793921, upload-time = "2025-04-27T18:05:01.611Z" } wheels = [ @@ -2610,7 +2685,7 @@ name = "tokenizers" version = "0.22.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "huggingface-hub", marker = "sys_platform == 'darwin'" }, + { name = "huggingface-hub", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/73/6f/f80cfef4a312e1fb34baf7d85c72d4411afde10978d4657f8cdd811d3ccc/tokenizers-0.22.2.tar.gz", hash = "sha256:473b83b915e547aa366d1eee11806deaf419e17be16310ac0a14077f1e28f917", size = 372115, upload-time = "2026-01-05T10:45:15.988Z" } wheels = [ @@ -2654,14 +2729,14 @@ name = "torch" version = "2.12.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "filelock", marker = "sys_platform == 'darwin'" }, - { name = "fsspec", marker = "sys_platform == 'darwin'" }, - { name = "jinja2", marker = "sys_platform == 'darwin'" }, - { name = "networkx", version = "3.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, - { name = "networkx", version = "3.6.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, - { name = "setuptools", marker = "sys_platform == 'darwin'" }, - { name = "sympy", marker = "sys_platform == 'darwin'" }, - { name = "typing-extensions", marker = "sys_platform == 'darwin'" }, + { name = "filelock", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "fsspec", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "jinja2", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "networkx", version = "3.4.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "networkx", version = "3.6.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "setuptools", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "sympy", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "typing-extensions", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/db/ed/ff0c4f8cef63977a646dc80e40c05cae873f4097b12dc87e1cd7e1cecf42/torch-2.12.1-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:ec56e82be6a8b0c036771a77f7d32ad3c299770571af9815b3dafe61434389d5", size = 87967927, upload-time = "2026-06-17T21:08:43.16Z" }, @@ -2674,10 +2749,10 @@ name = "torchvision" version = "0.27.1" 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' and sys_platform == 'darwin'" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, - { name = "pillow", marker = "sys_platform == 'darwin'" }, - { name = "torch", marker = "sys_platform == 'darwin'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "pillow", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "torch", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/c9/10/8e3e5a70dded1f86368bc987d93fa0436e73a79060aead75a8783b040ebd/torchvision-0.27.1-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:68ba63b48af92f06db995adb23d8411993dba1dee705a4e92411b83a00930b7f", size = 1852109, upload-time = "2026-06-17T21:09:34.966Z" }, @@ -2709,18 +2784,18 @@ name = "transformers" version = "5.0.0rc2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "filelock", marker = "sys_platform == 'darwin'" }, - { name = "huggingface-hub", marker = "sys_platform == 'darwin'" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, - { name = "packaging", marker = "sys_platform == 'darwin'" }, - { name = "pyyaml", marker = "sys_platform == 'darwin'" }, - { name = "regex", marker = "sys_platform == 'darwin'" }, - { name = "requests", marker = "sys_platform == 'darwin'" }, - { name = "safetensors", marker = "sys_platform == 'darwin'" }, - { name = "tokenizers", marker = "sys_platform == 'darwin'" }, - { name = "tqdm", marker = "sys_platform == 'darwin'" }, - { name = "typer-slim", marker = "sys_platform == 'darwin'" }, + { name = "filelock", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "huggingface-hub", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "packaging", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "pyyaml", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "regex", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "requests", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "safetensors", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "tokenizers", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "tqdm", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "typer-slim", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/94/e2/86b1bd5264272953370a5e50a91da38d7a53a87c5faf3fd3ff62d7353879/transformers-5.0.0rc2.tar.gz", hash = "sha256:9f2fa5e132433dd7eb910dc224b32de0baf758f3b6ffc918dbb632e0af85c07a", size = 8362532, upload-time = "2026-01-07T16:58:02.603Z" } wheels = [ @@ -2742,9 +2817,9 @@ name = "typer" version = "0.26.7" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "annotated-doc", marker = "sys_platform == 'darwin'" }, - { name = "rich", marker = "sys_platform == 'darwin'" }, - { name = "shellingham", marker = "sys_platform == 'darwin'" }, + { name = "annotated-doc", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "rich", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "shellingham", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/5e/ed/ef06584ccdd5c410df0837951ecd7e15d9a6144ea1bd4c73cecab1a89891/typer-0.26.7.tar.gz", hash = "sha256:e314a34c617e419c091b2830dda3ea1f257134ff593061a8f5b9717ab8dddb3a", size = 201709, upload-time = "2026-06-03T07:18:06.843Z" } wheels = [ @@ -2756,7 +2831,7 @@ name = "typer-slim" version = "0.24.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typer", marker = "sys_platform == 'darwin'" }, + { name = "typer", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/a7/a7/e6aecc4b4eb59598829a3b5076a93aff291b4fdaa2ded25efc4e1f4d219c/typer_slim-0.24.0.tar.gz", hash = "sha256:f0ed36127183f52ae6ced2ecb2521789995992c521a46083bfcdbb652d22ad34", size = 4776, upload-time = "2026-02-16T22:08:51.2Z" } wheels = [ @@ -2768,7 +2843,7 @@ name = "types-requests" version = "2.33.0.20260518" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "urllib3", marker = "sys_platform == 'darwin'" }, + { name = "urllib3", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/e0/01/c5a19253fe1ac159159ddf9a3a07cec8bb5e486ec4d9002ad2821da0e5d2/types_requests-2.33.0.20260518.tar.gz", hash = "sha256:df7bd3bfe0ca8402dfb841e7d9be714bb5578203283d66d7dc4ef69343449a5e", size = 24752, upload-time = "2026-05-18T06:07:37.966Z" } wheels = [ @@ -2789,7 +2864,7 @@ name = "typing-inspection" version = "0.4.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions", marker = "sys_platform == 'darwin'" }, + { name = "typing-extensions", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/55/e3/70399cb7dd41c10ac53367ae42139cf4b1ca5f36bb3dc6c9d33acdb43655/typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464", size = 75949, upload-time = "2025-10-01T02:14:41.687Z" } wheels = [ @@ -2810,23 +2885,23 @@ name = "ultralytics" version = "8.4.76" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "matplotlib", version = "3.10.9", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, - { name = "matplotlib", version = "3.11.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, - { name = "nvidia-ml-py", marker = "sys_platform == 'darwin'" }, - { name = "opencv-python", marker = "sys_platform == 'darwin'" }, - { name = "pillow", marker = "sys_platform == 'darwin'" }, - { name = "polars", marker = "sys_platform == 'darwin'" }, - { name = "psutil", marker = "sys_platform == 'darwin'" }, - { name = "pyyaml", marker = "sys_platform == 'darwin'" }, - { name = "requests", marker = "sys_platform == 'darwin'" }, - { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, - { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*' and sys_platform == 'darwin'" }, - { name = "scipy", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12' and sys_platform == 'darwin'" }, - { name = "torch", marker = "sys_platform == 'darwin'" }, - { name = "torchvision", marker = "sys_platform == 'darwin'" }, - { name = "ultralytics-thop", marker = "sys_platform == 'darwin'" }, + { name = "matplotlib", version = "3.10.9", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "matplotlib", version = "3.11.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "nvidia-ml-py", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "opencv-python", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "pillow", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "polars", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "psutil", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "pyyaml", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "requests", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version == '3.11.*' and sys_platform == 'darwin') or (python_full_version != '3.11.*' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version != '3.11.*' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "scipy", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and sys_platform == 'darwin') or (python_full_version < '3.12' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.12' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "torch", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "torchvision", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "ultralytics-thop", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/5d/0b/d6b82fe3115ddc9d44c3819555b66112c0940bbb8a5cd39dd2ab6b42acc6/ultralytics-8.4.76.tar.gz", hash = "sha256:332382999ed31cec039cae216ef877fb2af67babf1d3e8a3d3e267c5e51fca3a", size = 1109784, upload-time = "2026-06-24T14:13:30.449Z" } wheels = [ @@ -2838,9 +2913,9 @@ name = "ultralytics-thop" version = "2.0.20" 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' and sys_platform == 'darwin'" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, - { name = "torch", marker = "sys_platform == 'darwin'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "torch", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/98/c6/d25cb53e141242f74950744179c21b8798bb09b9e7161465ecda4f577ddf/ultralytics_thop-2.0.20.tar.gz", hash = "sha256:f3595e0d8c6fd0b9f62fc2cd9be921755e2649a05c34f1fabaea0bff7295d641", size = 34682, upload-time = "2026-06-06T11:42:42.184Z" } wheels = [ @@ -2861,9 +2936,9 @@ name = "uvicorn" version = "0.49.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "click", marker = "sys_platform == 'darwin'" }, - { name = "h11", marker = "sys_platform == 'darwin'" }, - { name = "typing-extensions", marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "click", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "h11", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "typing-extensions", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/c4/1f/fa18009dea8469069cca78a4e877a008ab78f08b064bfc9ab891579077ff/uvicorn-0.49.0.tar.gz", hash = "sha256:ebf4271aa580d9de97f93192d4595176df6e91f9aae919ca73e4fc07df1e66a3", size = 91284, upload-time = "2026-06-03T22:01:30.448Z" } wheels = [ @@ -2872,12 +2947,12 @@ wheels = [ [package.optional-dependencies] standard = [ - { name = "httptools", marker = "sys_platform == 'darwin'" }, - { name = "python-dotenv", marker = "sys_platform == 'darwin'" }, - { name = "pyyaml", marker = "sys_platform == 'darwin'" }, - { name = "uvloop", marker = "platform_python_implementation != 'PyPy' and sys_platform == 'darwin'" }, - { name = "watchfiles", marker = "sys_platform == 'darwin'" }, - { name = "websockets", marker = "sys_platform == 'darwin'" }, + { name = "httptools", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "python-dotenv", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "pyyaml", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "uvloop", marker = "(platform_python_implementation != 'PyPy' and sys_platform == 'darwin') or (platform_python_implementation == 'PyPy' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (platform_python_implementation == 'PyPy' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "watchfiles", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "websockets", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] [[package]] @@ -2899,11 +2974,11 @@ name = "virtualenv" version = "21.5.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "distlib", marker = "sys_platform == 'darwin'" }, - { name = "filelock", marker = "sys_platform == 'darwin'" }, - { name = "platformdirs", marker = "sys_platform == 'darwin'" }, - { name = "python-discovery", marker = "sys_platform == 'darwin'" }, - { name = "typing-extensions", marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "distlib", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "filelock", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "platformdirs", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "python-discovery", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "typing-extensions", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/f1/a5/81f987504738e6defeed61ec1c47e2aefab3c35d8eeb87e1b3f38cf28254/virtualenv-21.5.1.tar.gz", hash = "sha256:dca3bf98275a59c652b69d68e73433e597d977c2da9198882479d1a7188009c8", size = 4578798, upload-time = "2026-06-16T16:23:58.603Z" } wheels = [ @@ -2915,7 +2990,7 @@ name = "watchfiles" version = "1.2.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "anyio", marker = "sys_platform == 'darwin'" }, + { name = "anyio", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/cd/41/5e1a4bb12aac5f1493fa1bdc11154eca3b258ca4eba65d39c473fe19d8e9/watchfiles-1.2.0.tar.gz", hash = "sha256:c995fba777f1ea992f090f9236e9284cf7a5d1a0130dd5a3d82c598cacd76838", size = 108252, upload-time = "2026-05-18T04:32:04.251Z" } wheels = [ @@ -2978,9 +3053,9 @@ name = "yarl" version = "1.24.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "idna", marker = "sys_platform == 'darwin'" }, - { name = "multidict", marker = "sys_platform == 'darwin'" }, - { name = "propcache", marker = "sys_platform == 'darwin'" }, + { name = "idna", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "multidict", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "propcache", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/79/12/1e8f37460ea0f7eb59c221fdaf0ed75e7ac43e97f8093b9c6f411df50a78/yarl-1.24.2.tar.gz", hash = "sha256:9ac374123c6fd7abf64d1fec93962b0bd4ee2c19751755a762a72dd96c0378f8", size = 210798, upload-time = "2026-05-19T21:31:05.599Z" } wheels = [ @@ -3001,7 +3076,7 @@ name = "zeroconf" version = "0.150.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "ifaddr", marker = "sys_platform == 'darwin'" }, + { name = "ifaddr", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/09/ea/34bb185645ecaa18d34e5883bffea71aa9bffbbb994634884e8b2f3ad0c4/zeroconf-0.150.0.tar.gz", hash = "sha256:a5fe7feab1de6ef5e541e0a3d07e534fd91629b813fc27281593584100f63164", size = 213634, upload-time = "2026-06-22T17:52:37.982Z" } wheels = [ From c316dfd3331b3c75dedc6e6e0ffa311749617a6d Mon Sep 17 00:00:00 2001 From: Johnny Greco Date: Thu, 25 Jun 2026 22:52:53 +0000 Subject: [PATCH 14/45] Normalize Riva endpoint URLs --- projects/reachy-mini-openshell/.env.example | 1 + projects/reachy-mini-openshell/README.md | 7 ++-- .../reachy_mini_conversation_app/riva_asr.py | 22 ++++++++++-- .../tests/test_riva_asr.py | 34 +++++++++++++++++++ 4 files changed, 60 insertions(+), 4 deletions(-) create mode 100644 projects/reachy-mini-openshell/tests/test_riva_asr.py diff --git a/projects/reachy-mini-openshell/.env.example b/projects/reachy-mini-openshell/.env.example index 2a82e724..be0b39a3 100644 --- a/projects/reachy-mini-openshell/.env.example +++ b/projects/reachy-mini-openshell/.env.example @@ -8,6 +8,7 @@ MODEL_NAME=azure/anthropic/claude-opus-4-8 AUDIO_INPUT_MODE=openai_realtime # Used only when AUDIO_INPUT_MODE=riva_stt. +# Accepts either host:port or http(s)://host:port. RIVA_SERVER_URI=localhost:50051 RIVA_USE_SSL=false RIVA_LANGUAGE_CODE=en-US diff --git a/projects/reachy-mini-openshell/README.md b/projects/reachy-mini-openshell/README.md index 9470fe58..5102b8d3 100644 --- a/projects/reachy-mini-openshell/README.md +++ b/projects/reachy-mini-openshell/README.md @@ -160,8 +160,11 @@ Realtime path; other model IDs use Chat Completions for text input. template default, where audio goes to an OpenAI-compatible Realtime endpoint. Use `riva_stt` to stream microphone audio to Riva ASR and pass final transcripts into the text LLM path. -- `RIVA_SERVER_URI`: Riva ASR server URI, for example `localhost:50051`. -- `RIVA_USE_SSL`: set to `true` for TLS-enabled Riva endpoints. +- `RIVA_SERVER_URI`: Riva ASR server URI, for example `localhost:50051` or +`http://riva-host:9000`. URL schemes are normalized for the Riva client. +- `RIVA_USE_SSL`: set to `true` for TLS-enabled Riva endpoints. If +`RIVA_SERVER_URI` starts with `https://`, TLS is enabled unless this value is +explicitly set. - `RIVA_LANGUAGE_CODE`: BCP-47 language code for Riva ASR, such as `en-US`. - `RIVA_ASR_MODEL`: optional Riva ASR model name. Leave empty to let Riva select a model from the language/configuration. diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/riva_asr.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/riva_asr.py index efc7b814..134ed179 100644 --- a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/riva_asr.py +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/riva_asr.py @@ -7,6 +7,7 @@ import logging import threading from dataclasses import dataclass +from urllib.parse import urlparse from collections.abc import Callable, Awaitable @@ -30,11 +31,12 @@ class RivaAsrConfig: @classmethod def from_env(cls) -> "RivaAsrConfig": """Build Riva ASR configuration from environment variables.""" + server_uri, inferred_use_ssl = _normalize_server_uri(os.getenv("RIVA_SERVER_URI", "localhost:50051")) return cls( - server_uri=os.getenv("RIVA_SERVER_URI", "localhost:50051"), + server_uri=server_uri, language_code=os.getenv("RIVA_LANGUAGE_CODE", "en-US"), model=os.getenv("RIVA_ASR_MODEL", ""), - use_ssl=_env_flag("RIVA_USE_SSL", default=False), + use_ssl=_env_flag("RIVA_USE_SSL", default=inferred_use_ssl), ssl_cert=os.getenv("RIVA_SSL_CERT") or None, authorization=os.getenv("RIVA_AUTHORIZATION") or None, metadata=_parse_metadata(os.getenv("RIVA_METADATA", "")), @@ -188,6 +190,22 @@ def _env_flag(name: str, default: bool = False) -> bool: return raw.strip().lower() in {"1", "true", "yes", "on"} +def _normalize_server_uri(raw: str) -> tuple[str, bool]: + value = raw.strip() + if "://" not in value: + return value, False + + parsed = urlparse(value) + if parsed.scheme not in {"http", "https"}: + logger.warning("RIVA_SERVER_URI=%r has an unexpected scheme; passing host/path through", raw) + + server_uri = parsed.netloc or parsed.path + if parsed.path not in {"", "/"} and parsed.netloc: + logger.warning("Ignoring path in RIVA_SERVER_URI=%r; Riva client expects host:port", raw) + + return server_uri, parsed.scheme == "https" + + def _parse_metadata(raw: str) -> tuple[tuple[str, str], ...]: pairs: list[tuple[str, str]] = [] for item in raw.split(","): diff --git a/projects/reachy-mini-openshell/tests/test_riva_asr.py b/projects/reachy-mini-openshell/tests/test_riva_asr.py new file mode 100644 index 00000000..9a28d01b --- /dev/null +++ b/projects/reachy-mini-openshell/tests/test_riva_asr.py @@ -0,0 +1,34 @@ +from reachy_mini_conversation_app.riva_asr import RivaAsrConfig + + +def test_riva_config_accepts_http_endpoint_url(monkeypatch): + """Riva endpoint URLs should be normalized to the host:port form expected by the client.""" + monkeypatch.setenv("RIVA_SERVER_URI", "http://192.168.1.57:9000") + monkeypatch.delenv("RIVA_USE_SSL", raising=False) + + config = RivaAsrConfig.from_env() + + assert config.server_uri == "192.168.1.57:9000" + assert config.use_ssl is False + + +def test_riva_config_infers_ssl_from_https_endpoint_url(monkeypatch): + """HTTPS Riva endpoint URLs should enable TLS unless explicitly overridden.""" + monkeypatch.setenv("RIVA_SERVER_URI", "https://riva.example.test:443") + monkeypatch.delenv("RIVA_USE_SSL", raising=False) + + config = RivaAsrConfig.from_env() + + assert config.server_uri == "riva.example.test:443" + assert config.use_ssl is True + + +def test_riva_use_ssl_env_overrides_endpoint_url_scheme(monkeypatch): + """RIVA_USE_SSL should keep explicit operator configuration authoritative.""" + monkeypatch.setenv("RIVA_SERVER_URI", "https://riva.example.test:443") + monkeypatch.setenv("RIVA_USE_SSL", "false") + + config = RivaAsrConfig.from_env() + + assert config.server_uri == "riva.example.test:443" + assert config.use_ssl is False From 565d15e280c001c31ee3e833a93dc00ffc4c6aa1 Mon Sep 17 00:00:00 2001 From: Johnny Greco Date: Thu, 25 Jun 2026 23:20:55 +0000 Subject: [PATCH 15/45] Address Reachy panel review findings --- .../reachy-mini-conversation-simulator.md | 27 +++-- projects/reachy-mini-openshell/.env.example | 6 +- projects/reachy-mini-openshell/README.md | 21 ++-- projects/reachy-mini-openshell/index.html | 4 +- projects/reachy-mini-openshell/pyproject.toml | 4 +- .../reachy_mini_conversation_app/config.py | 48 +++++++- .../reachy_mini_conversation_app/console.py | 27 ++--- .../src/reachy_mini_conversation_app/main.py | 22 +++- .../openai_realtime.py | 28 ++++- .../reachy_mini_conversation_app/riva_asr.py | 12 +- .../tools/background_tool_manager.py | 13 ++- .../tools/move_head.py | 4 +- .../vision/yolo_head_tracker.py | 14 ++- .../tests/test_openai_realtime.py | 109 +++++++++++++++++- .../tests/test_riva_asr.py | 87 +++++++++++++- .../tools/test_background_tool_manager.py | 31 +++++ projects/reachy-mini-openshell/uv.lock | 48 +++++++- 17 files changed, 432 insertions(+), 73 deletions(-) diff --git a/docs/research/reachy-mini-conversation-simulator.md b/docs/research/reachy-mini-conversation-simulator.md index 6a03c44f..51671e42 100644 --- a/docs/research/reachy-mini-conversation-simulator.md +++ b/docs/research/reachy-mini-conversation-simulator.md @@ -14,9 +14,9 @@ for the broader app family: [pollen-robotics/reachy_mini_conversation_app](https - macOS with Python 3.10, 3.11, or 3.12. Python 3.12 is the recommended local version. - `uv`. -- An API key for conversation. Microphone mode requires an OpenAI-compatible - Realtime model; text mode can also use OpenAI-compatible Chat Completions - providers such as NVIDIA NIM. +- An API key for conversation. `OpenAI Realtime` microphone mode requires an + OpenAI-compatible Realtime model. `Riva STT` and `Text` mode can use + OpenAI-compatible Chat Completions providers such as NVIDIA NIM. - This repository checked out locally. The local dependency set includes `reachy-mini[mujoco]==1.8.0`, so the MuJoCo @@ -40,6 +40,7 @@ Edit `.env`. For OpenAI Realtime microphone and text input, use: OPENAI_API_KEY=your_api_key_here OPENAI_BASE_URL=https://api.openai.com/v1 MODEL_NAME=gpt-realtime +AUDIO_INPUT_MODE=openai_realtime ``` For NVIDIA-hosted text input through an OpenAI-compatible Chat Completions @@ -49,6 +50,7 @@ endpoint, reference your existing NVIDIA API key environment variable: OPENAI_API_KEY=${NVIDIA_API_KEY} OPENAI_BASE_URL=https://inference-api.nvidia.com/v1 MODEL_NAME=azure/anthropic/claude-opus-4-8 +AUDIO_INPUT_MODE=text ``` Use the exact model ID exposed by your provider. For example, NVIDIA model IDs @@ -170,9 +172,9 @@ http://127.0.0.1:7860/ ``` You should see the `Talk with Reachy Mini` page with an empty chat transcript, -an audio stream panel, and an `Input` selector. - -![Gradio conversation UI for Talk with Reachy Mini](../assets/reachy-mini-openshell/screenshots/gradio-home.png) +an `Input` selector with `OpenAI Realtime`, `Riva STT`, and `Text` options. +`Text` mode shows the message box and send button. The two microphone modes show +the audio stream panel. If the app logs that `OPENAI_API_KEY` is missing, stop the app, update `.env`, and restart it. Credentials are intentionally not entered in the browser. If @@ -181,15 +183,20 @@ exported in the shell that starts the app. ## 6. Talk To Reachy -Use `Microphone` mode to speak when `MODEL_NAME` points to a Realtime-capable +Use `OpenAI Realtime` to speak when `MODEL_NAME` points to a Realtime-capable model. Click `Click to Access Microphone` in the `Stream` panel and allow microphone access in the browser. Once the stream starts, speak naturally. +Use `Riva STT` when you have a Riva ASR endpoint and want speech-to-text before +sending text to a Chat Completions provider. Set `AUDIO_INPUT_MODE=riva_stt`, +configure `RIVA_SERVER_URI`, and install the Riva optional dependencies with +`uv sync --extra riva`. + Use `Text` mode to type instead. Switch `Input` to `Text`, enter a message, and send it from the text composer. For non-Realtime model IDs such as NVIDIA NIM -models, text mode uses Chat Completions. Tool calls are supported in text mode, -including providers that require the tool schema to remain attached after a tool -result is returned. +models, text mode uses Chat Completions. Tool calls are supported in text mode +and in the Riva STT path, including providers that require the tool schema to +remain attached after a tool result is returned. Useful first prompts are: diff --git a/projects/reachy-mini-openshell/.env.example b/projects/reachy-mini-openshell/.env.example index be0b39a3..060850d0 100644 --- a/projects/reachy-mini-openshell/.env.example +++ b/projects/reachy-mini-openshell/.env.example @@ -5,12 +5,14 @@ MODEL_NAME=azure/anthropic/claude-opus-4-8 # Audio input modes: # - openai_realtime: microphone audio goes to an OpenAI-compatible Realtime endpoint. # - riva_stt: microphone audio goes to Riva ASR; final transcripts go to the text LLM path. -AUDIO_INPUT_MODE=openai_realtime +# - text: typed input goes to the text LLM path. +AUDIO_INPUT_MODE=text # Used only when AUDIO_INPUT_MODE=riva_stt. # Accepts either host:port or http(s)://host:port. RIVA_SERVER_URI=localhost:50051 -RIVA_USE_SSL=false +# Optional override. Leave unset to infer TLS from an https:// RIVA_SERVER_URI. +# RIVA_USE_SSL=false RIVA_LANGUAGE_CODE=en-US RIVA_ASR_MODEL= RIVA_AUTHORIZATION= diff --git a/projects/reachy-mini-openshell/README.md b/projects/reachy-mini-openshell/README.md index 5102b8d3..0e220dc5 100644 --- a/projects/reachy-mini-openshell/README.md +++ b/projects/reachy-mini-openshell/README.md @@ -77,6 +77,7 @@ Then edit `.env`. For OpenAI Realtime microphone and text input, use: OPENAI_API_KEY=your_api_key_here OPENAI_BASE_URL=https://api.openai.com/v1 MODEL_NAME=gpt-realtime +AUDIO_INPUT_MODE=openai_realtime ``` For NVIDIA-hosted text input through an OpenAI-compatible Chat Completions @@ -86,6 +87,7 @@ endpoint, reference your existing NVIDIA API key environment variable: OPENAI_API_KEY=${NVIDIA_API_KEY} OPENAI_BASE_URL=https://inference-api.nvidia.com/v1 MODEL_NAME=azure/anthropic/claude-opus-4-8 +AUDIO_INPUT_MODE=text ``` Use the exact model ID exposed by your provider. For example, NVIDIA model IDs @@ -156,15 +158,14 @@ reference another exported environment variable, such as - `OPENAI_BASE_URL`: OpenAI-compatible API base URL. - `MODEL_NAME`: provider model ID. Model names containing `realtime` use the Realtime path; other model IDs use Chat Completions for text input. -- `AUDIO_INPUT_MODE`: microphone routing mode. Use `openai_realtime` for the -template default, where audio goes to an OpenAI-compatible Realtime endpoint. -Use `riva_stt` to stream microphone audio to Riva ASR and pass final -transcripts into the text LLM path. +- `AUDIO_INPUT_MODE`: initial input mode. Use `text` for the default typed +message path, `openai_realtime` when microphone audio should go to an +OpenAI-compatible Realtime endpoint, or `riva_stt` to stream microphone audio +to Riva ASR and pass final transcripts into the text LLM path. - `RIVA_SERVER_URI`: Riva ASR server URI, for example `localhost:50051` or `http://riva-host:9000`. URL schemes are normalized for the Riva client. -- `RIVA_USE_SSL`: set to `true` for TLS-enabled Riva endpoints. If -`RIVA_SERVER_URI` starts with `https://`, TLS is enabled unless this value is -explicitly set. +- `RIVA_USE_SSL`: optional override for TLS-enabled Riva endpoints. If this is +unset and `RIVA_SERVER_URI` starts with `https://`, TLS is enabled. - `RIVA_LANGUAGE_CODE`: BCP-47 language code for Riva ASR, such as `en-US`. - `RIVA_ASR_MODEL`: optional Riva ASR model name. Leave empty to let Riva select a model from the language/configuration. @@ -193,11 +194,11 @@ http://127.0.0.1:7860/ ``` If port `7860` is busy, the launcher chooses the next free port through `7899` -and prints that URL instead. Pass app flags after the script name: +and prints that URL instead. Pass app flags that are compatible with the +no-camera simulator baseline after the script name: ```bash projects/reachy-mini-openshell/scripts/start-local.sh --debug -projects/reachy-mini-openshell/scripts/start-local.sh --head-tracker yolo ``` From inside `projects/reachy-mini-openshell`, the shorter form is: @@ -221,7 +222,7 @@ python -m reachy_mini_conversation_app --gradio --no-camera The Gradio UI includes an `Input` selector: -- `OpenAI Realtime`: template-default microphone behavior. Audio streams to an +- `OpenAI Realtime`: Realtime microphone behavior. Audio streams to an OpenAI-compatible Realtime endpoint, which handles transcription and response generation in one session. - `Riva STT`: microphone audio streams to Riva ASR. Final transcripts are sent diff --git a/projects/reachy-mini-openshell/index.html b/projects/reachy-mini-openshell/index.html index d241f1fc..752400d6 100644 --- a/projects/reachy-mini-openshell/index.html +++ b/projects/reachy-mini-openshell/index.html @@ -32,10 +32,10 @@

    Installation

    Configuration

    -

    OpenAI API Key

    +

    Provider Configuration

    -

    This app requires an OpenAI API key for voice conversations. Set it via the web interface or environment variable.

    +

    Configure provider credentials, model routing, and input mode in .env, then run ./scripts/start-local.sh.

    diff --git a/projects/reachy-mini-openshell/pyproject.toml b/projects/reachy-mini-openshell/pyproject.toml index a9a7a66e..6c955849 100644 --- a/projects/reachy-mini-openshell/pyproject.toml +++ b/projects/reachy-mini-openshell/pyproject.toml @@ -42,9 +42,9 @@ conflicts = [ [project.optional-dependencies] riva = [ "nvidia-riva-client>=2.19,<3",] local_vision = [ "torch>=2.1", "transformers==5.0.0rc2", "num2words",] -yolo_vision = [ "ultralytics", "supervision",] +yolo_vision = [ "ultralytics", "supervision", "onnxruntime",] mediapipe_vision = [ "mediapipe==0.10.14",] -all_vision = [ "torch>=2.1", "transformers==5.0.0rc2", "num2words", "ultralytics", "supervision", "mediapipe==0.10.14",] +all_vision = [ "torch>=2.1", "transformers==5.0.0rc2", "num2words", "ultralytics", "supervision", "onnxruntime", "mediapipe==0.10.14",] [project.scripts] reachy-mini-conversation-app = "reachy_mini_conversation_app.main:main" diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/config.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/config.py index bb04df19..115fcdae 100644 --- a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/config.py +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/config.py @@ -2,6 +2,7 @@ import sys import logging from pathlib import Path +from collections.abc import Mapping from dotenv import find_dotenv, load_dotenv, dotenv_values @@ -57,15 +58,34 @@ def _env_flag(name: str, default: bool = False) -> bool: logger.warning("No .env file found") -def _dotenv_value(name: str, default: str | None = None) -> str | None: +def _dotenv_value( + name: str, + default: str | None = None, + *, + values: Mapping[str, str | None] | None = None, +) -> str | None: """Return a value from the loaded .env file only.""" - value = _dotenv_values.get(name) + source = _dotenv_values if values is None else values + value = source.get(name) if value is None: return default value = value.strip() return value if value else default +def _config_value( + name: str, + default: str | None = None, + *, + values: Mapping[str, str | None] | None = None, +) -> str | None: + """Return .env value first, then the process environment.""" + value = _dotenv_value(name, values=values) + if value is not None: + return value + return os.getenv(name, default) + + class Config: """Configuration class for the conversation app.""" @@ -91,5 +111,29 @@ def __init__(self) -> None: """Initialize the configuration.""" logger.info("Using locked profile '%s' from %s", LOCKED_PROFILE, DEFAULT_PROFILES_DIRECTORY) + def apply_dotenv_values(self, values: Mapping[str, str | None]) -> None: + """Refresh runtime configuration from an explicit dotenv mapping.""" + self.OPENAI_API_KEY = _dotenv_value("OPENAI_API_KEY", values=values) + self.OPENAI_BASE_URL = _dotenv_value("OPENAI_BASE_URL", "https://api.openai.com/v1", values=values) + self.MODEL_NAME = _config_value("MODEL_NAME", "gpt-realtime", values=values) or "gpt-realtime" + self.AUDIO_INPUT_MODE = _config_value("AUDIO_INPUT_MODE", "openai_realtime", values=values) or "openai_realtime" + self.HF_HOME = _config_value("HF_HOME", "./cache", values=values) or "./cache" + self.LOCAL_VISION_MODEL = ( + _config_value("LOCAL_VISION_MODEL", "HuggingFaceTB/SmolVLM2-2.2B-Instruct", values=values) + or "HuggingFaceTB/SmolVLM2-2.2B-Instruct" + ) + self.HF_TOKEN = _config_value("HF_TOKEN", values=values) + + def load_dotenv_file(self, env_path: Path) -> bool: + """Load a dotenv file and refresh all runtime config fields.""" + if not env_path.exists(): + return False + + values = dict(dotenv_values(env_path)) + load_dotenv(dotenv_path=env_path, override=True) + self.apply_dotenv_values(values) + logger.info("Configuration loaded from %s", env_path) + return True + config = Config() diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/console.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/console.py index ff284fca..6f3ff17f 100644 --- a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/console.py +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/console.py @@ -55,17 +55,9 @@ def launch(self) -> None: # Try to load an existing instance .env first for Reachy Mini app-shell runs. if self._instance_path: try: - from dotenv import load_dotenv, dotenv_values - env_path = Path(self._instance_path) / ".env" - if env_path.exists(): - load_dotenv(dotenv_path=str(env_path), override=True) - values = dotenv_values(env_path) - config.OPENAI_API_KEY = (values.get("OPENAI_API_KEY") or "").strip() or None - config.OPENAI_BASE_URL = ( - (values.get("OPENAI_BASE_URL") or "").strip() - or "https://api.openai.com/v1" - ) + if config.load_dotenv_file(env_path): + self.handler.set_audio_input_mode(config.AUDIO_INPUT_MODE) except Exception: pass # Instance .env loading is optional; continue with defaults @@ -117,13 +109,16 @@ def close(self) -> None: except Exception as e: logger.debug(f"Error stopping playback (may already be stopped): {e}") - # Now signal async loops to stop - self._stop_event.set() + def stop_async_tasks() -> None: + self._stop_event.set() + for task in self._tasks: + if not task.done(): + task.cancel() - # Cancel all running tasks - for task in self._tasks: - if not task.done(): - task.cancel() + if self._asyncio_loop is not None and self._asyncio_loop.is_running(): + self._asyncio_loop.call_soon_threadsafe(stop_async_tasks) + else: + stop_async_tasks() def clear_audio_queue(self) -> None: """Flush the player's appsrc to drop any queued audio immediately.""" diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/main.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/main.py index 3382e089..5aeddf94 100644 --- a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/main.py +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/main.py @@ -7,6 +7,7 @@ import argparse import threading from typing import Any, Dict, List, Optional +from pathlib import Path from reachy_mini import ReachyMini, ReachyMiniApp from reachy_mini_conversation_app.utils import ( @@ -52,6 +53,7 @@ def run( from reachy_mini_conversation_app.config import config from reachy_mini_conversation_app.console import LocalStream from reachy_mini_conversation_app.openai_realtime import ( + AUDIO_MODE_TEXT, AUDIO_MODE_RIVA_STT, AUDIO_MODE_OPENAI_REALTIME, OpenaiRealtimeHandler, @@ -62,6 +64,12 @@ def run( logger = setup_logger(args.debug) logger.info("Starting Reachy Mini Conversation App") + if instance_path: + try: + config.load_dotenv_file(Path(instance_path) / ".env") + except Exception as exc: + logger.debug("Instance .env loading skipped: %s", exc) + if args.no_camera and args.head_tracker is not None: logger.warning( "Head tracking disabled: --no-camera flag is set. " @@ -165,9 +173,12 @@ def run( input_mode_choices = { "OpenAI Realtime": AUDIO_MODE_OPENAI_REALTIME, "Riva STT": AUDIO_MODE_RIVA_STT, - "Text": "text", + "Text": AUDIO_MODE_TEXT, } - initial_input_mode = "Riva STT" if handler.audio_input_mode == AUDIO_MODE_RIVA_STT else "OpenAI Realtime" + mode_labels = {value: label for label, value in input_mode_choices.items()} + initial_input_mode = mode_labels.get(handler.audio_input_mode, "OpenAI Realtime") + initial_text_mode = initial_input_mode == "Text" + stream.webrtc_component.visible = not initial_text_mode input_mode = gr.Radio( choices=list(input_mode_choices), @@ -179,14 +190,13 @@ def run( label="Message", lines=2, max_lines=5, - visible=False, + visible=initial_text_mode, ) - send_button = gr.Button("Send", variant="primary", visible=False) + send_button = gr.Button("Send", variant="primary", visible=initial_text_mode) def switch_input_mode(mode: str) -> tuple[dict[str, Any], dict[str, Any], dict[str, Any]]: text_mode = mode == "Text" - if not text_mode: - handler.set_audio_input_mode(input_mode_choices.get(mode, config.AUDIO_INPUT_MODE)) + handler.set_audio_input_mode(input_mode_choices.get(mode, config.AUDIO_INPUT_MODE)) return ( gr.update(visible=not text_mode), gr.update(visible=text_mode), diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/openai_realtime.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/openai_realtime.py index ad173807..b0ef9cfa 100644 --- a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/openai_realtime.py +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/openai_realtime.py @@ -37,7 +37,8 @@ OPEN_AI_OUTPUT_SAMPLE_RATE: Final[Literal[24000]] = 24000 AUDIO_MODE_OPENAI_REALTIME: Final = "openai_realtime" AUDIO_MODE_RIVA_STT: Final = "riva_stt" -AUDIO_INPUT_MODES: Final = {AUDIO_MODE_OPENAI_REALTIME, AUDIO_MODE_RIVA_STT} +AUDIO_MODE_TEXT: Final = "text" +AUDIO_INPUT_MODES: Final = {AUDIO_MODE_OPENAI_REALTIME, AUDIO_MODE_RIVA_STT, AUDIO_MODE_TEXT} # Cost tracking from usage data (pricing as of Feb 2026 https://openai.com/api/pricing/) AUDIO_INPUT_COST_PER_1M = 32.0 @@ -56,6 +57,8 @@ def _normalize_audio_input_mode(audio_input_mode: str) -> str: return AUDIO_MODE_OPENAI_REALTIME if normalized in {"riva", "riva_asr", "riva_stt"}: return AUDIO_MODE_RIVA_STT + if normalized in {"chat", "chat_completions", "text"}: + return AUDIO_MODE_TEXT if normalized not in AUDIO_INPUT_MODES: logger.warning("Unknown AUDIO_INPUT_MODE=%r; using %s", audio_input_mode, AUDIO_MODE_OPENAI_REALTIME) return AUDIO_MODE_OPENAI_REALTIME @@ -620,6 +623,11 @@ async def _response_sender_loop(self) -> None: self._last_response_rejected = False try: + # Mark the just-requested response as active immediately. + # The server's response.created event can arrive after + # response.create() returns, so waiting on the old set + # event here would let the next queued response race ahead. + self._response_done_event.clear() await self.connection.response.create(**kwargs) except Exception as e: logger.debug("_response_sender_loop: send failed: %s", e) @@ -993,6 +1001,8 @@ async def receive(self, frame: Tuple[int, NDArray[np.int16]]) -> None: if self.audio_input_mode == AUDIO_MODE_RIVA_STT: await self._receive_riva_stt(frame) return + if self.audio_input_mode == AUDIO_MODE_TEXT: + return await self._receive_openai_realtime_audio(frame) @@ -1036,9 +1046,21 @@ async def _receive_riva_stt(self, frame: Tuple[int, NDArray[np.int16]]) -> None: on_final_transcript=self._handle_riva_final_transcript, on_partial_transcript=self._handle_riva_partial_transcript, ) - await self._riva_transcriber.start(input_sample_rate) + try: + await self._riva_transcriber.start(input_sample_rate) + except RuntimeError as exc: + self._riva_transcriber = None + await self._report_microphone_error_once(f"[error] Riva STT stream is not available: {exc}") + return - await self._riva_transcriber.send_audio(audio_frame.tobytes()) + try: + if await self._riva_transcriber.send_audio(audio_frame.tobytes()) is False: + self._riva_transcriber = None + await self._report_microphone_error_once("[error] Riva STT stream is not running.") + except RuntimeError as exc: + logger.warning("Riva STT stream stopped: %s", exc) + self._riva_transcriber = None + await self._report_microphone_error_once(f"[error] Riva STT stream is not available: {exc}") def _prepare_audio_frame( self, diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/riva_asr.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/riva_asr.py index 134ed179..9913317b 100644 --- a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/riva_asr.py +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/riva_asr.py @@ -64,7 +64,6 @@ def __init__( self._loop: asyncio.AbstractEventLoop | None = None self._sample_rate_hertz: int | None = None self._last_partial = "" - self._last_final = "" async def start(self, sample_rate_hertz: int) -> None: """Start the background Riva stream.""" @@ -76,10 +75,11 @@ async def start(self, sample_rate_hertz: int) -> None: self._thread = threading.Thread(target=self._run, name="riva-asr-stream", daemon=True) self._thread.start() - async def send_audio(self, audio_bytes: bytes) -> None: + async def send_audio(self, audio_bytes: bytes) -> bool: """Send one PCM16 audio chunk to the Riva stream.""" if self._thread is None or not self._thread.is_alive(): - raise RuntimeError("Riva ASR stream is not running") + logger.debug("Dropping Riva audio frame because the ASR stream is not running") + return False try: self._audio_queue.put_nowait(audio_bytes) @@ -89,6 +89,7 @@ async def send_audio(self, audio_bytes: bytes) -> None: except queue.Empty: pass self._audio_queue.put_nowait(audio_bytes) + return True async def stop(self) -> None: """Close the stream and wait briefly for the worker to exit.""" @@ -175,9 +176,6 @@ def _schedule_partial(self, transcript: str) -> None: asyncio.run_coroutine_threadsafe(self._on_partial_transcript(transcript), self._loop) def _schedule_final(self, transcript: str) -> None: - if transcript == self._last_final: - return - self._last_final = transcript if self._loop is None: return asyncio.run_coroutine_threadsafe(self._on_final_transcript(transcript), self._loop) @@ -187,6 +185,8 @@ def _env_flag(name: str, default: bool = False) -> bool: raw = os.getenv(name) if raw is None: return default + if not raw.strip(): + return default return raw.strip().lower() in {"1", "true", "yes", "on"} diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/background_tool_manager.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/background_tool_manager.py index c7859c81..caa81508 100644 --- a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/background_tool_manager.py +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/background_tool_manager.py @@ -205,7 +205,11 @@ async def _run_tool( tool_call_routine: ToolCallRoutine, ) -> None: """Execute the tool and handle completion.""" - result: dict[str, Any] = await tool_call_routine(self) + try: + result: dict[str, Any] = await tool_call_routine(self) + except asyncio.CancelledError: + result = {"error": "Tool cancelled"} + bg_tool.completed_at = time.monotonic() error = result.get("error") @@ -333,9 +337,16 @@ async def shutdown(self) -> None: pass self._lifecycle_tasks.clear() + running_tool_tasks: list[asyncio.Task[None]] = [] for tool_id in list(self._tools): + tool = self._tools.get(tool_id) + if tool is not None and tool.status == ToolState.RUNNING and tool._task is not None: + running_tool_tasks.append(tool._task) await self.cancel_tool(tool_id, log=False) + if running_tool_tasks: + await asyncio.gather(*running_tool_tasks, return_exceptions=True) + logger.info("BackgroundToolManager shut down") async def timeout_tools(self) -> int: diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/move_head.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/move_head.py index 4633572e..dbf1f4c1 100644 --- a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/move_head.py +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/tools/move_head.py @@ -53,7 +53,7 @@ async def __call__(self, deps: ToolDependencies, **kwargs: Any) -> Dict[str, Any # Get current state for interpolation current_head_pose = deps.reachy_mini.get_current_head_pose() - _, current_antennas = deps.reachy_mini.get_current_joint_positions() + head_joints, current_antennas = deps.reachy_mini.get_current_joint_positions() # Create goto move goto_move = GotoQueueMove( @@ -65,7 +65,7 @@ async def __call__(self, deps: ToolDependencies, **kwargs: Any) -> Dict[str, Any current_antennas[1], ), # Skip body_yaw target_body_yaw=0, # Reset body yaw - start_body_yaw=current_antennas[0], # body_yaw is first in joint positions + start_body_yaw=head_joints[0], duration=deps.motion_duration_s, ) diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/vision/yolo_head_tracker.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/vision/yolo_head_tracker.py index 3619bc7e..97ceebfa 100644 --- a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/vision/yolo_head_tracker.py +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/vision/yolo_head_tracker.py @@ -18,14 +18,19 @@ logger = logging.getLogger(__name__) +DEFAULT_YOLO_FACE_MODEL_REPO = "AdamCodd/YOLOv11n-face-detection" +DEFAULT_YOLO_FACE_MODEL_REVISION = "0e97fea5eacb1460b35725c929d813c7095841b5" +DEFAULT_YOLO_FACE_MODEL_FILENAME = "model.onnx" + class HeadTracker: """Lightweight head tracker using YOLO for face detection.""" def __init__( self, - model_repo: str = "AdamCodd/YOLOv11n-face-detection", - model_filename: str = "model.pt", + model_repo: str = DEFAULT_YOLO_FACE_MODEL_REPO, + model_filename: str = DEFAULT_YOLO_FACE_MODEL_FILENAME, + model_revision: str = DEFAULT_YOLO_FACE_MODEL_REVISION, confidence_threshold: float = 0.3, device: str = "cpu", ) -> None: @@ -34,6 +39,7 @@ def __init__( Args: model_repo: HuggingFace model repository model_filename: Model file name + model_revision: Pinned Hugging Face commit SHA for the model repository confidence_threshold: Minimum confidence for face detection device: Device to run inference on ('cpu' or 'cuda') @@ -42,9 +48,9 @@ def __init__( try: # Download and load YOLO model - model_path = hf_hub_download(repo_id=model_repo, filename=model_filename) + model_path = hf_hub_download(repo_id=model_repo, filename=model_filename, revision=model_revision) self.model = YOLO(model_path).to(device) - logger.info(f"YOLO face detection model loaded from {model_repo}") + logger.info("YOLO face detection model loaded from %s@%s", model_repo, model_revision) except Exception as e: logger.error(f"Failed to load YOLO model: {e}") raise diff --git a/projects/reachy-mini-openshell/tests/test_openai_realtime.py b/projects/reachy-mini-openshell/tests/test_openai_realtime.py index 06a5e5e3..40bc25cd 100644 --- a/projects/reachy-mini-openshell/tests/test_openai_realtime.py +++ b/projects/reachy-mini-openshell/tests/test_openai_realtime.py @@ -412,6 +412,65 @@ def test_handler_copies_share_audio_input_mode() -> None: assert copied_handler.audio_input_mode == rt_mod.AUDIO_MODE_RIVA_STT +@pytest.mark.asyncio +async def test_receive_text_mode_ignores_microphone_frames() -> None: + """Text input mode should not open an audio connection when WebRTC is hidden.""" + deps = ToolDependencies(reachy_mini=MagicMock(), movement_manager=MagicMock()) + handler = rt_mod.OpenaiRealtimeHandler(deps, audio_input_mode=rt_mod.AUDIO_MODE_TEXT) + + await handler.receive((24000, np.array([0, 1000], dtype=np.int16))) + + assert handler.connection is None + assert handler.output_queue.empty() + + +@pytest.mark.asyncio +async def test_receive_riva_mode_does_not_raise_when_transcriber_stops(monkeypatch: Any) -> None: + """A failed Riva worker should report through callbacks, not escape from receive().""" + + class StoppedRivaTranscriber: + async def start(self, _sample_rate_hertz: int) -> None: + return None + + async def send_audio(self, _audio_bytes: bytes) -> None: + raise RuntimeError("Riva ASR stream is not running") + + monkeypatch.setattr(rt_mod, "RivaStreamingTranscriber", lambda **_kw: StoppedRivaTranscriber()) + + deps = ToolDependencies(reachy_mini=MagicMock(), movement_manager=MagicMock()) + handler = rt_mod.OpenaiRealtimeHandler(deps, audio_input_mode=rt_mod.AUDIO_MODE_RIVA_STT) + + await handler.receive((16000, np.array([0, 1000], dtype=np.int16))) + + output = await asyncio.wait_for(handler.output_queue.get(), timeout=1) + assert isinstance(output, rt_mod.AdditionalOutputs) + assert "Riva STT stream is not available" in output.args[0]["content"] + + +@pytest.mark.asyncio +async def test_receive_riva_mode_resets_dead_transcriber(monkeypatch: Any) -> None: + """Dead Riva streams should be cleared so later frames can restart the stream.""" + + class DeadRivaTranscriber: + async def start(self, _sample_rate_hertz: int) -> None: + return None + + async def send_audio(self, _audio_bytes: bytes) -> bool: + return False + + monkeypatch.setattr(rt_mod, "RivaStreamingTranscriber", lambda **_kw: DeadRivaTranscriber()) + + deps = ToolDependencies(reachy_mini=MagicMock(), movement_manager=MagicMock()) + handler = rt_mod.OpenaiRealtimeHandler(deps, audio_input_mode=rt_mod.AUDIO_MODE_RIVA_STT) + + await handler.receive((16000, np.array([0, 1000], dtype=np.int16))) + + output = await asyncio.wait_for(handler.output_queue.get(), timeout=1) + assert isinstance(output, rt_mod.AdditionalOutputs) + assert output.args[0]["content"] == "[error] Riva STT stream is not running." + assert handler._riva_transcriber is None + + @pytest.mark.asyncio async def test_send_text_message_reports_missing_dotenv_key(monkeypatch: Any) -> None: """Text mode reports the actual missing-key problem instead of a generic connection error.""" @@ -692,7 +751,6 @@ async def test_response_sender_retries_on_active_response_rejection(monkeypatch: event_queue: asyncio.Queue[Any] = asyncio.Queue() response_create_log: list[tuple[int, dict[str, Any]]] = [] - handler_ref: list[Any] = [] # ---- Fake event / error objects mirroring the OpenAI SDK shapes ---- @@ -729,16 +787,15 @@ class FakeResponseAPI: def __init__(self) -> None: self._call_count = 0 self._serialization_violations: list[int] = [] + self._server_active = False async def create(self, **kwargs: Any) -> None: self._call_count += 1 n = self._call_count response_create_log.append((n, kwargs)) - h = handler_ref[0] - # Real backend rejects when a response is already active. - if not h._response_done_event.is_set(): + if self._server_active: self._serialization_violations.append(n) await event_queue.put( FakeEvent( @@ -757,6 +814,7 @@ async def create(self, **kwargs: Any) -> None: await event_queue.put( FakeEvent("response.done", response=MagicMock()) ) + self._server_active = False return # Intentional rejections (simulating a race where another @@ -777,11 +835,13 @@ async def create(self, **kwargs: Any) -> None: ) await asyncio.sleep(0) else: + self._server_active = True await event_queue.put(FakeEvent("response.created")) await event_queue.put( FakeEvent("response.done", response=MagicMock()) ) + self._server_active = False async def cancel(self, **_kw: Any) -> None: @@ -851,7 +911,6 @@ async def _fake_dispatch( deps = ToolDependencies(reachy_mini=MagicMock(), movement_manager=MagicMock()) handler = rt_mod.OpenaiRealtimeHandler(deps) - handler_ref.append(handler) asyncio.create_task(handler.start_up()) @@ -921,6 +980,46 @@ async def _fake_dispatch( # ---- Response creation timeout guard tests ---- +@pytest.mark.asyncio +async def test_response_sender_marks_response_active_before_create_returns() -> None: + """The sender should not wait for response.created before blocking the next response.""" + deps = ToolDependencies(reachy_mini=MagicMock(), movement_manager=MagicMock()) + handler = rt_mod.OpenaiRealtimeHandler(deps) + + create_started = asyncio.Event() + create_returned = asyncio.Event() + allow_done = asyncio.Event() + event_states_at_create: list[bool] = [] + + class FakeResponse: + async def create(self, **_kw: Any) -> None: + event_states_at_create.append(handler._response_done_event.is_set()) + create_started.set() + await allow_done.wait() + handler._response_done_event.set() + create_returned.set() + + async def cancel(self, **_kw: Any) -> None: + pass + + fake_conn = MagicMock() + fake_conn.response = FakeResponse() + handler.connection = fake_conn + + await handler._safe_response_create(instructions="req1") + sender_task = asyncio.create_task(handler._response_sender_loop()) + + await asyncio.wait_for(create_started.wait(), timeout=1) + assert event_states_at_create == [False] + + allow_done.set() + await asyncio.wait_for(create_returned.wait(), timeout=1) + + handler.connection = None + await handler._safe_response_create(instructions="stop") + await asyncio.wait_for(sender_task, timeout=1) + + @pytest.mark.asyncio async def test_response_sender_loop_times_out_waiting_for_response_done( monkeypatch: Any, caplog: Any, diff --git a/projects/reachy-mini-openshell/tests/test_riva_asr.py b/projects/reachy-mini-openshell/tests/test_riva_asr.py index 9a28d01b..0779e274 100644 --- a/projects/reachy-mini-openshell/tests/test_riva_asr.py +++ b/projects/reachy-mini-openshell/tests/test_riva_asr.py @@ -1,4 +1,10 @@ -from reachy_mini_conversation_app.riva_asr import RivaAsrConfig +import sys +import asyncio +from collections.abc import Callable + +import pytest + +from reachy_mini_conversation_app.riva_asr import RivaAsrConfig, RivaStreamingTranscriber def test_riva_config_accepts_http_endpoint_url(monkeypatch): @@ -32,3 +38,82 @@ def test_riva_use_ssl_env_overrides_endpoint_url_scheme(monkeypatch): assert config.server_uri == "riva.example.test:443" assert config.use_ssl is False + + +def test_blank_riva_use_ssl_env_keeps_endpoint_url_inference(monkeypatch): + """Blank RIVA_USE_SSL values should not disable https:// inference.""" + monkeypatch.setenv("RIVA_SERVER_URI", "https://riva.example.test:443") + monkeypatch.setenv("RIVA_USE_SSL", "") + + config = RivaAsrConfig.from_env() + + assert config.server_uri == "riva.example.test:443" + assert config.use_ssl is True + + +@pytest.mark.asyncio +async def test_riva_missing_dependency_reports_error_without_send_audio_raise(monkeypatch): + """Missing nvidia-riva-client should report through callbacks without crashing send_audio.""" + monkeypatch.setitem(sys.modules, "riva", None) + delivered: list[str] = [] + + async def on_final(transcript: str) -> None: + delivered.append(transcript) + + transcriber = RivaStreamingTranscriber( + config=RivaAsrConfig( + server_uri="localhost:50051", + language_code="en-US", + model="", + use_ssl=False, + ssl_cert=None, + authorization=None, + metadata=(), + interim_results=True, + automatic_punctuation=True, + ), + on_final_transcript=on_final, + ) + + await transcriber.start(16000) + await asyncio.wait_for(_wait_until(lambda: bool(delivered)), timeout=1) + await transcriber.send_audio(b"\x00\x00") + + assert "Riva STT mode requires the optional dependency" in delivered[0] + + +@pytest.mark.asyncio +async def test_repeated_final_transcripts_are_delivered() -> None: + """Separate identical final utterances should both be routed to the text path.""" + delivered: list[str] = [] + + async def on_final(transcript: str) -> None: + delivered.append(transcript) + + transcriber = RivaStreamingTranscriber( + config=RivaAsrConfig( + server_uri="localhost:50051", + language_code="en-US", + model="", + use_ssl=False, + ssl_cert=None, + authorization=None, + metadata=(), + interim_results=True, + automatic_punctuation=True, + ), + on_final_transcript=on_final, + ) + transcriber._loop = asyncio.get_running_loop() + + transcriber._schedule_final("yes") + transcriber._schedule_final("yes") + await asyncio.wait_for(_wait_until(lambda: len(delivered) == 2), timeout=1) + + assert delivered == ["yes", "yes"] + + +async def _wait_until(predicate: Callable[[], bool]) -> None: + """Yield until predicate returns true.""" + while not predicate(): + await asyncio.sleep(0) diff --git a/projects/reachy-mini-openshell/tests/tools/test_background_tool_manager.py b/projects/reachy-mini-openshell/tests/tools/test_background_tool_manager.py index 90b7a7f1..7f6e38a6 100644 --- a/projects/reachy-mini-openshell/tests/tools/test_background_tool_manager.py +++ b/projects/reachy-mini-openshell/tests/tools/test_background_tool_manager.py @@ -517,6 +517,37 @@ async def test_startup_multiple_callbacks(self, manager: BackgroundToolManager) assert cb1.call_count == 1 assert cb2.call_count == 1 + @pytest.mark.asyncio + async def test_shutdown_waits_for_running_tool_tasks(self, manager: BackgroundToolManager) -> None: + """Shutdown should cancel and drain running tool tasks before returning.""" + started = asyncio.Event() + cancelled = asyncio.Event() + routine = MagicMock(spec=ToolCallRoutine) + routine.tool_name = "long_tool" + routine.args_json_str = "{}" + + async def _call(_manager: BackgroundToolManager) -> dict[str, Any]: + started.set() + try: + await asyncio.sleep(10) + except asyncio.CancelledError: + cancelled.set() + raise + return {"ok": True} + + routine.__call__ = _call # type: ignore[method-assign] + routine.side_effect = _call + + bg = await manager.start_tool("c1", routine, is_idle_tool_call=False) + await asyncio.wait_for(started.wait(), timeout=1) + + await manager.shutdown() + + assert cancelled.is_set() + assert bg._task is not None + assert bg._task.done() + assert bg.status == ToolState.CANCELLED + class TestNotificationQueue: """Verify notifications are enqueued on tool completion or failure.""" diff --git a/projects/reachy-mini-openshell/uv.lock b/projects/reachy-mini-openshell/uv.lock index b4ec368f..f9160eb6 100644 --- a/projects/reachy-mini-openshell/uv.lock +++ b/projects/reachy-mini-openshell/uv.lock @@ -486,7 +486,7 @@ name = "exceptiongroup" version = "1.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "typing-extensions", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] 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 = [ @@ -1551,6 +1551,46 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/21/53/0988b79ee818cb2b8792abeda5a75156946b64da7a2ef2719b9d2068a34f/nvidia_riva_client-2.26.0-py3-none-any.whl", hash = "sha256:16ffc98266fa7be7261e0675de6b7028e7f973c2ac3dfd679668148ff497cc0c", size = 57539, upload-time = "2026-05-28T06:11:43.205Z" }, ] +[[package]] +name = "onnxruntime" +version = "1.24.3" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and sys_platform == 'darwin'", +] +dependencies = [ + { name = "flatbuffers", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "packaging", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "protobuf", version = "4.25.9", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision') or (python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision') or (python_full_version < '3.11' and sys_platform == 'darwin' and extra != 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "protobuf", version = "6.33.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "sympy", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/15/41/3253db975a90c3ce1d475e2a230773a21cd7998537f0657947df6fb79861/onnxruntime-1.24.3-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3e6456801c66b095c5cd68e690ca25db970ea5202bd0c5b84a2c3ef7731c5a3c", size = 17332766, upload-time = "2026-03-05T17:18:59.714Z" }, + { url = "https://files.pythonhosted.org/packages/d0/7f/dfdc4e52600fde4c02d59bfe98c4b057931c1114b701e175aee311a9bc11/onnxruntime-1.24.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:0d244227dc5e00a9ae15a7ac1eba4c4460d7876dfecafe73fb00db9f1d914d91", size = 17342578, upload-time = "2026-03-05T17:19:02.403Z" }, +] + +[[package]] +name = "onnxruntime" +version = "1.27.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.12' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and sys_platform == 'darwin'", +] +dependencies = [ + { name = "flatbuffers", marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "packaging", marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "protobuf", version = "4.25.9", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision') or (python_full_version >= '3.11' and sys_platform == 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision') or (python_full_version >= '3.11' and sys_platform == 'darwin' and extra != 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "protobuf", version = "6.33.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/d4/e4/5353d7e09ced4a8f473f843223fc75d726b2b5519dcefc12f22a6c92852d/onnxruntime-1.27.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:8ba14a38c570087f3cdb8cfba33f7a38a1e826c1e5b29e17c28ceda0cc910016", size = 18416484, upload-time = "2026-06-15T22:43:43.894Z" }, + { url = "https://files.pythonhosted.org/packages/c3/b7/dd3a524ed93a820dff1af902d0412957ab12499953333e9daa01af5bc480/onnxruntime-1.27.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:a14c2ce45312def86b77aea651f46565e45960cf5f0721bfdff449165086ab76", size = 18433506, upload-time = "2026-06-15T22:43:47.026Z" }, +] + [[package]] name = "openai" version = "2.44.0" @@ -2181,6 +2221,8 @@ dependencies = [ all-vision = [ { name = "mediapipe", marker = "sys_platform == 'darwin'" }, { name = "num2words", marker = "sys_platform == 'darwin'" }, + { name = "onnxruntime", version = "1.24.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision') or (python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision') or (python_full_version < '3.11' and sys_platform == 'darwin' and extra != 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "onnxruntime", version = "1.27.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision') or (python_full_version >= '3.11' and sys_platform == 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision') or (python_full_version >= '3.11' and sys_platform == 'darwin' and extra != 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, { name = "supervision", marker = "sys_platform == 'darwin'" }, { name = "torch", marker = "sys_platform == 'darwin'" }, { name = "transformers", marker = "sys_platform == 'darwin'" }, @@ -2198,6 +2240,8 @@ riva = [ { name = "nvidia-riva-client", marker = "sys_platform == 'darwin'" }, ] yolo-vision = [ + { name = "onnxruntime", version = "1.24.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version >= '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, + { name = "onnxruntime", version = "1.27.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (python_full_version < '3.11' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (sys_platform != 'darwin' and extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, { name = "supervision", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, { name = "ultralytics", marker = "sys_platform == 'darwin' or (extra == 'extra-28-reachy-mini-conversation-app-all-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva') or (extra == 'extra-28-reachy-mini-conversation-app-mediapipe-vision' and extra == 'extra-28-reachy-mini-conversation-app-riva')" }, ] @@ -2226,6 +2270,8 @@ requires-dist = [ { name = "num2words", marker = "extra == 'all-vision'" }, { name = "num2words", marker = "extra == 'local-vision'" }, { name = "nvidia-riva-client", marker = "extra == 'riva'", specifier = ">=2.19,<3" }, + { name = "onnxruntime", marker = "extra == 'all-vision'" }, + { name = "onnxruntime", marker = "extra == 'yolo-vision'" }, { name = "openai", specifier = ">=2.1" }, { name = "opencv-python", specifier = ">=4.12.0.88" }, { name = "python-dotenv" }, From 4eaef06c61df1b33f6604375530d34c8cc521b5a Mon Sep 17 00:00:00 2001 From: Johnny Greco Date: Fri, 26 Jun 2026 16:07:11 -0400 Subject: [PATCH 16/45] Finalize Reachy conversation backend refactor --- .gitignore | 1 + .../reachy-mini-conversation-simulator.md | 254 ++- projects/reachy-mini-openshell/.env.example | 74 +- .../.env.hf-realtime.example | 21 + .../.env.local-stt.example | 28 + .../.env.openai-realtime.example | 17 + projects/reachy-mini-openshell/README.md | 383 +++- projects/reachy-mini-openshell/pyproject.toml | 12 +- .../scripts/fake_openai_backend.py | 149 ++ .../scripts/smoke-local-stt.sh | 300 +++ .../scripts/start-local.sh | 3 + .../reachy_mini_conversation_app/__init__.py | 12 +- .../audio/__init__.py | 2 +- .../audio/mic_phrase.py | 87 + .../reachy_mini_conversation_app/audio/pcm.py | 141 ++ .../backend_check.py | 786 +++++++ .../backend_runtime.py | 209 ++ .../camera_worker.py | 15 +- .../chat_completions.py | 270 +++ .../reachy_mini_conversation_app/config.py | 491 ++++- .../reachy_mini_conversation_app/console.py | 62 +- ...nai_realtime.py => conversation_stream.py} | 777 ++++--- .../dance_emotion_moves.py | 4 +- .../goto_queue_move.py | 4 +- .../local_stt_backend.py | 101 + .../src/reachy_mini_conversation_app/main.py | 83 +- .../src/reachy_mini_conversation_app/moves.py | 34 +- .../sweep_look.py | 4 +- .../realtime_backends.py | 162 ++ .../reachy_mini_conversation_app/riva_asr.py | 220 -- .../speech_endpoints.py | 110 + .../tools/background_tool_manager.py | 9 +- .../tools/camera.py | 6 +- .../tools/core_tools.py | 4 +- .../tools/move_head.py | 2 +- .../tools/play_emotion.py | 70 +- .../tools/task_status.py | 4 +- .../src/reachy_mini_conversation_app/utils.py | 12 +- .../vision/__init__.py | 2 +- .../vision/processors.py | 65 +- .../vision/yolo_head_tracker.py | 6 +- .../tests/audio/test_pcm.py | 34 + .../tests/test_backend_check.py | 1007 +++++++++ .../tests/test_backend_runtime.py | 65 + .../tests/test_config.py | 464 +++++ .../tests/test_conversation_stream.py | 1826 +++++++++++++++++ .../tests/test_fake_openai_backend.py | 83 + .../tests/test_local_stt_backend.py | 105 + .../reachy-mini-openshell/tests/test_main.py | 44 + .../tests/test_mic_phrase.py | 61 + .../tests/test_openai_realtime.py | 1129 ---------- .../tests/test_package.py | 7 + .../tests/test_realtime_backends.py | 91 + .../tests/test_riva_asr.py | 119 -- .../tests/test_speech_endpoints.py | 103 + .../tools/test_background_tool_manager.py | 2 - .../tests/tools/test_play_emotion.py | 31 + .../tests/vision/test_processors.py | 39 +- projects/reachy-mini-openshell/uv.lock | 947 ++++----- 59 files changed, 8369 insertions(+), 2784 deletions(-) create mode 100644 projects/reachy-mini-openshell/.env.hf-realtime.example create mode 100644 projects/reachy-mini-openshell/.env.local-stt.example create mode 100644 projects/reachy-mini-openshell/.env.openai-realtime.example create mode 100755 projects/reachy-mini-openshell/scripts/fake_openai_backend.py create mode 100755 projects/reachy-mini-openshell/scripts/smoke-local-stt.sh create mode 100644 projects/reachy-mini-openshell/src/reachy_mini_conversation_app/audio/mic_phrase.py create mode 100644 projects/reachy-mini-openshell/src/reachy_mini_conversation_app/audio/pcm.py create mode 100644 projects/reachy-mini-openshell/src/reachy_mini_conversation_app/backend_check.py create mode 100644 projects/reachy-mini-openshell/src/reachy_mini_conversation_app/backend_runtime.py create mode 100644 projects/reachy-mini-openshell/src/reachy_mini_conversation_app/chat_completions.py rename projects/reachy-mini-openshell/src/reachy_mini_conversation_app/{openai_realtime.py => conversation_stream.py} (63%) create mode 100644 projects/reachy-mini-openshell/src/reachy_mini_conversation_app/local_stt_backend.py create mode 100644 projects/reachy-mini-openshell/src/reachy_mini_conversation_app/realtime_backends.py delete mode 100644 projects/reachy-mini-openshell/src/reachy_mini_conversation_app/riva_asr.py create mode 100644 projects/reachy-mini-openshell/src/reachy_mini_conversation_app/speech_endpoints.py create mode 100644 projects/reachy-mini-openshell/tests/audio/test_pcm.py create mode 100644 projects/reachy-mini-openshell/tests/test_backend_check.py create mode 100644 projects/reachy-mini-openshell/tests/test_backend_runtime.py create mode 100644 projects/reachy-mini-openshell/tests/test_config.py create mode 100644 projects/reachy-mini-openshell/tests/test_conversation_stream.py create mode 100644 projects/reachy-mini-openshell/tests/test_fake_openai_backend.py create mode 100644 projects/reachy-mini-openshell/tests/test_local_stt_backend.py create mode 100644 projects/reachy-mini-openshell/tests/test_main.py create mode 100644 projects/reachy-mini-openshell/tests/test_mic_phrase.py delete mode 100644 projects/reachy-mini-openshell/tests/test_openai_realtime.py create mode 100644 projects/reachy-mini-openshell/tests/test_package.py create mode 100644 projects/reachy-mini-openshell/tests/test_realtime_backends.py delete mode 100644 projects/reachy-mini-openshell/tests/test_riva_asr.py create mode 100644 projects/reachy-mini-openshell/tests/test_speech_endpoints.py create mode 100644 projects/reachy-mini-openshell/tests/tools/test_play_emotion.py diff --git a/.gitignore b/.gitignore index f1304db4..245e108a 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,7 @@ Thumbs.db .env .env.* !.env.example +!.env.*.example *.local *.key *.pem diff --git a/docs/research/reachy-mini-conversation-simulator.md b/docs/research/reachy-mini-conversation-simulator.md index 51671e42..545e3084 100644 --- a/docs/research/reachy-mini-conversation-simulator.md +++ b/docs/research/reachy-mini-conversation-simulator.md @@ -14,9 +14,10 @@ for the broader app family: [pollen-robotics/reachy_mini_conversation_app](https - macOS with Python 3.10, 3.11, or 3.12. Python 3.12 is the recommended local version. - `uv`. -- An API key for conversation. `OpenAI Realtime` microphone mode requires an - OpenAI-compatible Realtime model. `Riva STT` and `Text` mode can use - OpenAI-compatible Chat Completions providers such as NVIDIA NIM. +- Provider credentials for the backend you select in `.env`. The app supports + OpenAI Realtime, the default Pollen/Hugging Face realtime path, and a local + STT cascade that combines an OpenAI-compatible transcription endpoint, Chat + Completions, and TTS. - This repository checked out locally. The local dependency set includes `reachy-mini[mujoco]==1.8.0`, so the MuJoCo @@ -31,34 +32,197 @@ cd projects/reachy-mini-openshell uv venv --python 3.12 source .venv/bin/activate uv sync -cp .env.example .env ``` -Edit `.env`. For OpenAI Realtime microphone and text input, use: +Choose one backend starter and copy it to `.env`: ```sh -OPENAI_API_KEY=your_api_key_here -OPENAI_BASE_URL=https://api.openai.com/v1 -MODEL_NAME=gpt-realtime -AUDIO_INPUT_MODE=openai_realtime +cp .env.openai-realtime.example .env +# or: cp .env.hf-realtime.example .env +# or: cp .env.local-stt.example .env ``` -For NVIDIA-hosted text input through an OpenAI-compatible Chat Completions -endpoint, reference your existing NVIDIA API key environment variable: +`.env.example` is the combined local-STT starter used by the launcher when no +`.env` exists. + +For OpenAI Realtime microphone and text input, use: + +```sh +BACKEND_PROVIDER=openai_realtime +OPENAI_REALTIME_BASE_URL=https://api.openai.com/v1 +OPENAI_REALTIME_MODEL=gpt-realtime +OPENAI_REALTIME_VOICE=cedar +``` + +OpenAI Realtime uses the standard, globally exported `OPENAI_API_KEY` directly. +Do not copy the global key into `.env` for the normal OpenAI path. Start the app +from a shell where `OPENAI_API_KEY` is already exported. Set +`OPENAI_REALTIME_API_KEY` in `.env` only when this app should use a different +key from the global OpenAI key. + +For the default Pollen/Hugging Face realtime path, use: + +```sh +BACKEND_PROVIDER=hf_realtime +HF_REALTIME_CONNECTION_MODE=deployed +HF_REALTIME_MODEL= +HF_REALTIME_VOICE=Aiden +``` + +For a local Hugging Face realtime backend, point at the backend websocket: + +```sh +BACKEND_PROVIDER=hf_realtime +HF_REALTIME_CONNECTION_MODE=local +HF_REALTIME_WS_URL=ws://127.0.0.1:8765/v1/realtime +``` + +For a local STT cascade, combine an OpenAI-compatible transcription endpoint, a +Chat Completions model, and a TTS endpoint: ```sh -OPENAI_API_KEY=${NVIDIA_API_KEY} -OPENAI_BASE_URL=https://inference-api.nvidia.com/v1 -MODEL_NAME=azure/anthropic/claude-opus-4-8 -AUDIO_INPUT_MODE=text +BACKEND_PROVIDER=local_stt +CHAT_API_KEY=${NVIDIA_INFERENCE_API_KEY} +CHAT_BASE_URL=https://inference-api.nvidia.com/v1 +CHAT_MODEL_NAME=azure/anthropic/claude-opus-4-8 +STT_API_KEY=not-needed +STT_BASE_URL=http://127.0.0.1:9000/v1 +STT_MODEL_NAME=whisper-1 +TTS_API_KEY=${OPENAI_API_KEY} +TTS_BASE_URL=https://api.openai.com/v1 +TTS_MODEL_NAME=gpt-4o-mini-tts +TTS_VOICE=cedar ``` Use the exact model ID exposed by your provider. For example, NVIDIA model IDs can look like `nvidia/nemotron-3-super-120b-a12b` or `azure/anthropic/claude-opus-4-8`, depending on the endpoint and account. +The API key values can reference exported system environment variables using +dotenv syntax, for example `${NVIDIA_INFERENCE_API_KEY}`. + +Backend routing and model selection are loaded from `.env`. Secret values can +be literal dotenv values, dotenv references to exported variables, or exported +`OPENAI_API_KEY` for OpenAI Realtime. The standard OpenAI Realtime path uses +the global `OPENAI_API_KEY` directly. The browser UI does not include fields +for credentials, endpoint routing, or model selection. + +`BACKEND_PROVIDER` must be set exactly to `openai_realtime`, `hf_realtime`, or +`local_stt`. The app does not choose a backend implicitly; missing or unknown +values fail preflight and startup. -Those provider values are loaded from `.env` only. The browser UI does not -include fields for credentials, endpoint routing, or model selection. +Before launching the UI, validate the selected backend: + +```sh +reachy-mini-backend-check +``` + +To call configured backend endpoints without opening the browser, add `--live`: + +```sh +reachy-mini-backend-check --live +``` + +For `BACKEND_PROVIDER=openai_realtime` and `BACKEND_PROVIDER=hf_realtime`, this +opens a realtime session, sends the app's session configuration, and then shuts +the session down. For `BACKEND_PROVIDER=local_stt`, `--live` defaults to the +app-flow check: it feeds audio through the handler's microphone receive path +against fake Reachy dependencies, then verifies +`mic frame handling -> STT -> Chat Completions -> Reachy tools -> TTS`. + +You can also name the app-flow stage explicitly: + +```sh +reachy-mini-backend-check --live --stage app-flow \ + --seed-text "Reachy, use the sweep_look tool, then tell me what you did." +``` + +The app-flow check uses fake Reachy tool dependencies by default. After the +simulator daemon is running, add `--real-reachy` to connect through the Reachy +SDK and queue movements through the real movement manager: + +```sh +reachy-mini-backend-check --live --stage app-flow --require-tool --real-reachy \ + --seed-text "Reachy, use the sweep_look tool, then tell me what you did." +``` + +If your real STT endpoint is not reachable yet, start the local fake +OpenAI-compatible smoke workflow: + +```sh +scripts/smoke-local-stt.sh +scripts/smoke-local-stt.sh --real-reachy +scripts/smoke-local-stt.sh --gradio +``` + +The first command checks the app handler path against fake Reachy dependencies. +The second also connects through the Reachy SDK and movement manager, so it +requires the simulator daemon to be running. The `--gradio` variant launches +the actual Gradio app, verifies the `Talk with Reachy Mini` UI, and sends a +text tool-call prompt through the running app process. + +For manual debugging, you can run the fake backend directly: + +```sh +uv run python scripts/fake_openai_backend.py +``` + +In another terminal, point a disposable config at it and run the same app-flow +check: + +```sh +cat > .env.smoke <<'EOF' +BACKEND_PROVIDER=local_stt +CHAT_API_KEY=not-needed +CHAT_BASE_URL=http://127.0.0.1:8766/v1 +CHAT_MODEL_NAME=fake-chat +STT_API_KEY=not-needed +STT_BASE_URL=http://127.0.0.1:8766/v1 +STT_MODEL_NAME=fake-whisper +TTS_API_KEY=not-needed +TTS_BASE_URL=http://127.0.0.1:8766/v1 +TTS_MODEL_NAME=fake-tts +TTS_VOICE=fake-voice +EOF + +reachy-mini-backend-check --env-file .env.smoke --live --stage app-flow --require-tool +reachy-mini-backend-check --env-file .env.smoke --live --stage app-flow --require-tool --real-reachy +``` + +This checks the app's OpenAI-compatible HTTP plumbing and simulator movement +path. It does not replace a final check against the real STT service. + +While services are coming online, check each local STT stage independently: + +```sh +reachy-mini-backend-check --live --stage stt --audio-file ./sample-input.wav +reachy-mini-backend-check --live --stage chat \ + --seed-text "Reachy, use the sweep_look tool, then tell me what you did." \ + --require-tool +reachy-mini-backend-check --live --stage tts \ + --seed-text "Hello, I am Reachy." +``` + +`--stage stt` only needs `STT_*` values and a sample audio file. +`--stage chat` only needs `CHAT_*` values. `--stage tts` only needs `TTS_*` +values. The full `--stage app-flow` check still requires all local-STT pieces +and feeds audio through the handler's microphone receive path before STT. +Use `--require-tool` with `--stage chat` or `--stage app-flow` when the check +should fail unless the model calls a Reachy tool. + +To try a candidate dotenv file without replacing `.env`, pass it explicitly to +the checker: + +```sh +reachy-mini-backend-check --env-file .env.local-stt +``` + +Launch the app with that same candidate file by setting +`REACHY_MINI_DOTENV_PATH`: + +```sh +REACHY_MINI_DOTENV_PATH=.env.local-stt \ + python -m reachy_mini_conversation_app --gradio --no-camera +``` Run a quick import check: @@ -172,30 +336,31 @@ http://127.0.0.1:7860/ ``` You should see the `Talk with Reachy Mini` page with an empty chat transcript, -an `Input` selector with `OpenAI Realtime`, `Riva STT`, and `Text` options. -`Text` mode shows the message box and send button. The two microphone modes show -the audio stream panel. +an audio stream panel, and an `Input` selector. -If the app logs that `OPENAI_API_KEY` is missing, stop the app, update `.env`, -and restart it. Credentials are intentionally not entered in the browser. If -`.env` references `${NVIDIA_API_KEY}`, make sure that variable is -exported in the shell that starts the app. +![Gradio conversation UI for Talk with Reachy Mini](../assets/reachy-mini-openshell/screenshots/gradio-home.png) -## 6. Talk To Reachy +If the app logs a missing local backend value such as `CHAT_API_KEY`, +`STT_BASE_URL`, or `TTS_BASE_URL`, stop the app, update `.env`, and restart it. +Credentials are intentionally not entered in the browser. For OpenAI Realtime, +export the standard `OPENAI_API_KEY` in the shell that starts the app. Set +`OPENAI_REALTIME_API_KEY` in `.env` only if this app should use a different +OpenAI key. If `.env` references `${NVIDIA_INFERENCE_API_KEY}`, make sure that +variable is exported in the shell that starts the app. -Use `OpenAI Realtime` to speak when `MODEL_NAME` points to a Realtime-capable -model. Click `Click to Access Microphone` in the `Stream` panel and allow -microphone access in the browser. Once the stream starts, speak naturally. +## 6. Talk To Reachy -Use `Riva STT` when you have a Riva ASR endpoint and want speech-to-text before -sending text to a Chat Completions provider. Set `AUDIO_INPUT_MODE=riva_stt`, -configure `RIVA_SERVER_URI`, and install the Riva optional dependencies with -`uv sync --extra riva`. +Use `Microphone` mode to speak. With `BACKEND_PROVIDER=openai_realtime` or +`BACKEND_PROVIDER=hf_realtime`, browser audio streams to the selected realtime +backend. With `BACKEND_PROVIDER=local_stt`, the app buffers each spoken phrase, +sends it to `STT_BASE_URL` for transcription, sends the transcript through Chat +Completions, then plays Reachy's synthesized response from `TTS_BASE_URL`. +Click `Click to Access Microphone` in the `Stream` panel and allow microphone +access in the browser. Once the stream starts, speak naturally. Use `Text` mode to type instead. Switch `Input` to `Text`, enter a message, and -send it from the text composer. For non-Realtime model IDs such as NVIDIA NIM -models, text mode uses Chat Completions. Tool calls are supported in text mode -and in the Riva STT path, including providers that require the tool schema to +send it from the text composer. Tool calls are supported in text mode and in +microphone-to-text mode, including providers that require the tool schema to remain attached after a tool result is returned. Useful first prompts are: @@ -228,13 +393,24 @@ on local URL` value from the terminal into your browser. If the browser cannot access the microphone, check the browser permission prompt and macOS microphone privacy settings. -If text mode returns `404 page not found`, check that `OPENAI_BASE_URL` matches -the provider's OpenAI-compatible endpoint and that `MODEL_NAME` is an exact +If `reachy-mini-backend-check` reports older config keys such as +`OPENAI_BASE_URL` or `MODEL_NAME`, replace that `.env` shape with one of the +current `BACKEND_PROVIDER` configurations. Those old keys are intentionally not +used. + +If text mode returns `404 page not found` with `BACKEND_PROVIDER=local_stt`, +check that `CHAT_BASE_URL` is a plain OpenAI-compatible endpoint string, such as +`https://inference-api.nvidia.com/v1`, and that `CHAT_MODEL_NAME` is an exact model ID from that provider. If text mode returns `401 Unauthorized` with NVIDIA endpoints, make sure -`OPENAI_API_KEY=${NVIDIA_API_KEY}` resolves to a key that is authorized for -generation, not only model listing. +`CHAT_API_KEY=${NVIDIA_INFERENCE_API_KEY}` resolves to a key that is authorized +for generation, not only model listing. + +If microphone-to-text returns a transcription error with +`BACKEND_PROVIDER=local_stt`, make sure `STT_BASE_URL` includes the `/v1` base +path expected by OpenAI-compatible clients and that the service exposes +`POST /audio/transcriptions` for `STT_MODEL_NAME`. If the daemon reports `MuJoCo is not installed`, make sure you started the daemon from this project environment after running `uv sync`. The dependency is diff --git a/projects/reachy-mini-openshell/.env.example b/projects/reachy-mini-openshell/.env.example index 060850d0..8df26254 100644 --- a/projects/reachy-mini-openshell/.env.example +++ b/projects/reachy-mini-openshell/.env.example @@ -1,27 +1,57 @@ -OPENAI_API_KEY=${NVIDIA_API_KEY} -OPENAI_BASE_URL=https://inference-api.nvidia.com/v1 -MODEL_NAME=azure/anthropic/claude-opus-4-8 - -# Audio input modes: -# - openai_realtime: microphone audio goes to an OpenAI-compatible Realtime endpoint. -# - riva_stt: microphone audio goes to Riva ASR; final transcripts go to the text LLM path. -# - text: typed input goes to the text LLM path. -AUDIO_INPUT_MODE=text - -# Used only when AUDIO_INPUT_MODE=riva_stt. -# Accepts either host:port or http(s)://host:port. -RIVA_SERVER_URI=localhost:50051 -# Optional override. Leave unset to infer TLS from an https:// RIVA_SERVER_URI. -# RIVA_USE_SSL=false -RIVA_LANGUAGE_CODE=en-US -RIVA_ASR_MODEL= -RIVA_AUTHORIZATION= -RIVA_METADATA= -RIVA_INTERIM_RESULTS=true -RIVA_AUTOMATIC_PUNCTUATION=true +# Default local-STT example. For backend-specific starter files, see: +# - .env.openai-realtime.example +# - .env.hf-realtime.example +# - .env.local-stt.example +# +# Required: select exactly one conversation backend. +# - openai_realtime: OpenAI Realtime API handles speech input, tools, and speech output. +# - hf_realtime: Pollen/Hugging Face realtime voice backend handles speech input, tools, and speech output. +# - local_stt: local/OpenAI-compatible STT endpoint + Chat Completions model + TTS endpoint. +BACKEND_PROVIDER=local_stt + +# Local STT cascade backend. +CHAT_API_KEY=${NVIDIA_INFERENCE_API_KEY} +CHAT_BASE_URL=https://inference-api.nvidia.com/v1 +CHAT_MODEL_NAME=azure/anthropic/claude-opus-4-8 + +STT_API_KEY=not-needed +STT_BASE_URL=http://127.0.0.1:9000/v1 +STT_MODEL_NAME=whisper-1 + +TTS_API_KEY=${OPENAI_API_KEY} +TTS_BASE_URL=https://api.openai.com/v1 +TTS_MODEL_NAME=gpt-4o-mini-tts +TTS_VOICE=cedar + +# OpenAI Realtime backend. +# Uses the globally exported OPENAI_API_KEY by default; no key is required here. +# Uncomment OPENAI_REALTIME_API_KEY only if this app should use a different key +# from the global OpenAI key. +# OPENAI_REALTIME_API_KEY= +OPENAI_REALTIME_BASE_URL=https://api.openai.com/v1 +OPENAI_REALTIME_MODEL=gpt-realtime +OPENAI_REALTIME_VOICE=cedar + +# Hugging Face realtime backend. +HF_REALTIME_CONNECTION_MODE=deployed +# Optional deployed session broker override. Leave unset for the default Pollen broker. +# HF_REALTIME_SESSION_URL=https://pollen-robotics-reachy-mini-realtime-url.hf.space/session +# For local HF realtime, set: +# HF_REALTIME_CONNECTION_MODE=local +# HF_REALTIME_WS_URL=ws://127.0.0.1:8765/v1/realtime +HF_REALTIME_MODEL= +HF_REALTIME_VOICE=Aiden +HF_TOKEN= + +REALTIME_TRANSCRIPTION_LANGUAGE=en + +# Local STT phrase detection. +MIC_TRANSCRIPTION_RMS_THRESHOLD=500 +MIC_TRANSCRIPTION_MIN_AUDIO_MS=250 +MIC_TRANSCRIPTION_SILENCE_MS=800 +MIC_TRANSCRIPTION_MAX_AUDIO_MS=12000 # Used only with --local-vision. LOCAL_VISION_MODEL=HuggingFaceTB/SmolVLM2-2.2B-Instruct HF_HOME=./cache -HF_TOKEN= diff --git a/projects/reachy-mini-openshell/.env.hf-realtime.example b/projects/reachy-mini-openshell/.env.hf-realtime.example new file mode 100644 index 00000000..424e1651 --- /dev/null +++ b/projects/reachy-mini-openshell/.env.hf-realtime.example @@ -0,0 +1,21 @@ +# Pollen/Hugging Face realtime voice backend handles speech input, tools, and speech output. +BACKEND_PROVIDER=hf_realtime + +# Use the default deployed Pollen session broker. +HF_REALTIME_CONNECTION_MODE=deployed +HF_REALTIME_MODEL= +HF_REALTIME_VOICE=Aiden +HF_TOKEN= + +# Optional deployed session broker override. Leave unset for the default Pollen broker. +# HF_REALTIME_SESSION_URL=https://pollen-robotics-reachy-mini-realtime-url.hf.space/session + +# For local HF realtime instead, use: +# HF_REALTIME_CONNECTION_MODE=local +# HF_REALTIME_WS_URL=ws://127.0.0.1:8765/v1/realtime + +REALTIME_TRANSCRIPTION_LANGUAGE=en + +# Used only with --local-vision. +LOCAL_VISION_MODEL=HuggingFaceTB/SmolVLM2-2.2B-Instruct +HF_HOME=./cache diff --git a/projects/reachy-mini-openshell/.env.local-stt.example b/projects/reachy-mini-openshell/.env.local-stt.example new file mode 100644 index 00000000..ede737b2 --- /dev/null +++ b/projects/reachy-mini-openshell/.env.local-stt.example @@ -0,0 +1,28 @@ +# Local/OpenAI-compatible STT endpoint + Chat Completions model + TTS endpoint. +BACKEND_PROVIDER=local_stt + +# Chat Completions model for reasoning and Reachy tool calls. +CHAT_API_KEY=${NVIDIA_INFERENCE_API_KEY} +CHAT_BASE_URL=https://inference-api.nvidia.com/v1 +CHAT_MODEL_NAME=azure/anthropic/claude-opus-4-8 + +# Speech-to-text endpoint. Use not-needed for local no-auth endpoints. +STT_API_KEY=not-needed +STT_BASE_URL=http://127.0.0.1:9000/v1 +STT_MODEL_NAME=whisper-1 + +# Text-to-speech endpoint used for Reachy's spoken reply. +TTS_API_KEY=${OPENAI_API_KEY} +TTS_BASE_URL=https://api.openai.com/v1 +TTS_MODEL_NAME=gpt-4o-mini-tts +TTS_VOICE=cedar + +# Local STT phrase detection. +MIC_TRANSCRIPTION_RMS_THRESHOLD=500 +MIC_TRANSCRIPTION_MIN_AUDIO_MS=250 +MIC_TRANSCRIPTION_SILENCE_MS=800 +MIC_TRANSCRIPTION_MAX_AUDIO_MS=12000 + +# Used only with --local-vision. +LOCAL_VISION_MODEL=HuggingFaceTB/SmolVLM2-2.2B-Instruct +HF_HOME=./cache diff --git a/projects/reachy-mini-openshell/.env.openai-realtime.example b/projects/reachy-mini-openshell/.env.openai-realtime.example new file mode 100644 index 00000000..9573ca57 --- /dev/null +++ b/projects/reachy-mini-openshell/.env.openai-realtime.example @@ -0,0 +1,17 @@ +# OpenAI Realtime API handles speech input, tools, and speech output. +# Uses the globally exported OPENAI_API_KEY directly by default. +# Do not paste the global OpenAI key into this file for the normal path. +# Uncomment OPENAI_REALTIME_API_KEY only if this app should use a different key +# from the global OpenAI key. +BACKEND_PROVIDER=openai_realtime + +# OPENAI_REALTIME_API_KEY= +OPENAI_REALTIME_BASE_URL=https://api.openai.com/v1 +OPENAI_REALTIME_MODEL=gpt-realtime +OPENAI_REALTIME_VOICE=cedar + +REALTIME_TRANSCRIPTION_LANGUAGE=en + +# Used only with --local-vision. +LOCAL_VISION_MODEL=HuggingFaceTB/SmolVLM2-2.2B-Instruct +HF_HOME=./cache diff --git a/projects/reachy-mini-openshell/README.md b/projects/reachy-mini-openshell/README.md index 0e220dc5..f4acae96 100644 --- a/projects/reachy-mini-openshell/README.md +++ b/projects/reachy-mini-openshell/README.md @@ -1,6 +1,5 @@ --- - -## title: Reachy OpenShell +title: Reachy OpenShell emoji: 🤖 colorFrom: purple colorTo: gray @@ -9,6 +8,7 @@ pinned: false tags: - reachy_mini - reachy_mini_python_app +--- # 🤖 Reachy OpenShell @@ -27,20 +27,16 @@ The Python package and command names intentionally match that template: - console script: `reachy-mini-conversation-app` - Reachy Mini Apps entry point: `reachy_mini_conversation_app` -The app is no longer the old `reachy_openshell` smoke/backend scaffold. There is -no standalone backend server on port `8080`, no `reachy_openshell.backend`, and -no `reachy_openshell.smoke` module. Runtime communication goes through the -Reachy Mini SDK and daemon, while the conversation UI is provided by Gradio or -the Reachy Mini app shell. +Runtime communication goes through the Reachy Mini SDK and daemon. The +conversation UI is provided by Gradio or the Reachy Mini app shell. ## What Is Here This project contains: - a forked Reachy Mini voice conversation app -- OpenAI Realtime audio conversation support -- Riva streaming ASR support for microphone-to-text input -- text conversation support through OpenAI-compatible Chat Completions +- selectable voice backends for OpenAI Realtime, Hugging Face realtime, and +local STT + Chat Completions + TTS - Reachy Mini movement, dance, emotion, and look-around tools - a locked OpenShell profile for instructions and tool selection - optional camera, local vision, YOLO head-tracking, and MediaPipe head-tracking @@ -55,9 +51,7 @@ this project. The SDK is pinned to the version compatible with the forked conversation-app dependency stack. - a running Reachy Mini daemon, either connected to hardware or started in simulator mode -- an API key for conversation. OpenAI Realtime microphone mode requires an -OpenAI-compatible Realtime model; Riva STT and text mode can use -OpenAI-compatible Chat Completions providers such as NVIDIA NIM. +- provider credentials for the backend selected in `.env` ## Install @@ -68,31 +62,73 @@ cd projects/reachy-mini-openshell uv venv --python 3.12 source .venv/bin/activate uv sync -cp .env.example .env ``` -Then edit `.env`. For OpenAI Realtime microphone and text input, use: +Then choose one backend starter and copy it to `.env`: + +```bash +cp .env.openai-realtime.example .env +# or: cp .env.hf-realtime.example .env +# or: cp .env.local-stt.example .env +``` + +`.env.example` is the combined local-STT starter used by the launcher when no +`.env` exists. + +For the OpenAI Realtime API: + +```bash +BACKEND_PROVIDER=openai_realtime +OPENAI_REALTIME_BASE_URL=https://api.openai.com/v1 +OPENAI_REALTIME_MODEL=gpt-realtime +OPENAI_REALTIME_VOICE=cedar +``` + +OpenAI Realtime uses the standard, globally exported `OPENAI_API_KEY` directly. +Do not copy the global key into `.env` for the normal OpenAI path. Start the app +from a shell where `OPENAI_API_KEY` is already exported. Set +`OPENAI_REALTIME_API_KEY` in `.env` only when this app should use a different +key from the global OpenAI key. + +For the default Pollen/Hugging Face realtime path: + +```bash +BACKEND_PROVIDER=hf_realtime +HF_REALTIME_CONNECTION_MODE=deployed +HF_REALTIME_MODEL= +HF_REALTIME_VOICE=Aiden +``` + +For a local Hugging Face realtime backend, use a direct websocket endpoint: ```bash -OPENAI_API_KEY=your_api_key_here -OPENAI_BASE_URL=https://api.openai.com/v1 -MODEL_NAME=gpt-realtime -AUDIO_INPUT_MODE=openai_realtime +BACKEND_PROVIDER=hf_realtime +HF_REALTIME_CONNECTION_MODE=local +HF_REALTIME_WS_URL=ws://127.0.0.1:8765/v1/realtime ``` -For NVIDIA-hosted text input through an OpenAI-compatible Chat Completions -endpoint, reference your existing NVIDIA API key environment variable: +For a local STT cascade, combine an OpenAI-compatible STT endpoint, a Chat +Completions model, and a TTS endpoint: ```bash -OPENAI_API_KEY=${NVIDIA_API_KEY} -OPENAI_BASE_URL=https://inference-api.nvidia.com/v1 -MODEL_NAME=azure/anthropic/claude-opus-4-8 -AUDIO_INPUT_MODE=text +BACKEND_PROVIDER=local_stt +CHAT_API_KEY=${NVIDIA_INFERENCE_API_KEY} +CHAT_BASE_URL=https://inference-api.nvidia.com/v1 +CHAT_MODEL_NAME=azure/anthropic/claude-opus-4-8 +STT_API_KEY=not-needed +STT_BASE_URL=http://127.0.0.1:9000/v1 +STT_MODEL_NAME=whisper-1 +TTS_API_KEY=${OPENAI_API_KEY} +TTS_BASE_URL=https://api.openai.com/v1 +TTS_MODEL_NAME=gpt-4o-mini-tts +TTS_VOICE=cedar ``` Use the exact model ID exposed by your provider. For example, NVIDIA model IDs can look like `nvidia/nemotron-3-super-120b-a12b` or `azure/anthropic/claude-opus-4-8`, depending on the endpoint and account. +The API key value can reference any exported system environment variable using +dotenv syntax, for example `${NVIDIA_INFERENCE_API_KEY}`. If you are not using `uv`, install the app in editable mode from the project directory: @@ -115,10 +151,9 @@ and regenerate `uv.lock` for that platform. ## Optional Dependencies -The active optional dependency groups cover Riva ASR and vision: +The active optional dependency groups are vision-related only: ```bash -uv sync --extra riva uv sync --extra local_vision uv sync --extra yolo_vision uv sync --extra mediapipe_vision @@ -128,17 +163,12 @@ uv sync --extra all_vision With `pip`, use the equivalent editable installs: ```bash -python -m pip install -e '.[riva]' python -m pip install -e '.[local_vision]' python -m pip install -e '.[yolo_vision]' python -m pip install -e '.[mediapipe_vision]' python -m pip install -e '.[all_vision]' ``` -The `riva` extra is intentionally marked incompatible with `mediapipe_vision` -and `all_vision` because the current Riva and MediaPipe client stacks require -different protobuf ranges. - There are no project-level `backend` or `sim` extras anymore. The previous backend extra belonged to the deleted scaffold. The default dependency set includes Reachy Mini's MuJoCo simulator backend because the local development @@ -146,36 +176,66 @@ workflow starts `reachy-mini-daemon --sim` from this environment. ## Configuration -The app loads `.env` from the current directory or a parent directory. Provider -credentials and routing must be configured in `.env`; they are not accepted from -the browser UI or the Reachy Mini settings UI. +The app loads `.env` from the current directory or a parent directory. To use a +candidate file without replacing `.env`, set `REACHY_MINI_DOTENV_PATH` before +starting the app. Backend routing and model selection are configured in dotenv +files; credentials are read from dotenv values, dotenv references to exported +variables, or exported `OPENAI_API_KEY` for OpenAI Realtime. They are not +accepted from the browser UI or the Reachy Mini settings UI. Supported `.env` values: -- `OPENAI_API_KEY`: API key used by the configured model provider. This can -reference another exported environment variable, such as -`${NVIDIA_API_KEY}`. -- `OPENAI_BASE_URL`: OpenAI-compatible API base URL. -- `MODEL_NAME`: provider model ID. Model names containing `realtime` use the -Realtime path; other model IDs use Chat Completions for text input. -- `AUDIO_INPUT_MODE`: initial input mode. Use `text` for the default typed -message path, `openai_realtime` when microphone audio should go to an -OpenAI-compatible Realtime endpoint, or `riva_stt` to stream microphone audio -to Riva ASR and pass final transcripts into the text LLM path. -- `RIVA_SERVER_URI`: Riva ASR server URI, for example `localhost:50051` or -`http://riva-host:9000`. URL schemes are normalized for the Riva client. -- `RIVA_USE_SSL`: optional override for TLS-enabled Riva endpoints. If this is -unset and `RIVA_SERVER_URI` starts with `https://`, TLS is enabled. -- `RIVA_LANGUAGE_CODE`: BCP-47 language code for Riva ASR, such as `en-US`. -- `RIVA_ASR_MODEL`: optional Riva ASR model name. Leave empty to let Riva -select a model from the language/configuration. -- `RIVA_AUTHORIZATION`: optional authorization metadata value, such as a bearer -token, for hosted Riva endpoints. -- `RIVA_METADATA`: optional comma-separated `key=value` metadata pairs passed -to the Riva client. +- `BACKEND_PROVIDER`: one of `openai_realtime`, `hf_realtime`, or `local_stt`. +This is the only switch that selects the voice backend. The app does not choose +a backend implicitly; missing or unknown values fail preflight and startup. +- `OPENAI_API_KEY`: standard global OpenAI API key used directly by +`BACKEND_PROVIDER=openai_realtime` when it is exported in the shell that starts +the app. This is the normal OpenAI Realtime credential path. It can also be +referenced from other dotenv values such as `TTS_API_KEY=${OPENAI_API_KEY}`. +- `OPENAI_REALTIME_API_KEY`: optional override for +`BACKEND_PROVIDER=openai_realtime`. Leave this unset unless the app should use a +different OpenAI key from the global `OPENAI_API_KEY`. +- `OPENAI_REALTIME_BASE_URL`: OpenAI Realtime API base URL. Defaults to +`https://api.openai.com/v1`. +- `OPENAI_REALTIME_MODEL`: OpenAI Realtime model ID. +- `OPENAI_REALTIME_VOICE`: OpenAI Realtime voice name. +- `HF_REALTIME_CONNECTION_MODE`: `deployed` for the default Pollen/Hugging Face +session broker, or `local` for a self-hosted Hugging Face realtime backend. +- `HF_REALTIME_SESSION_URL`: deployed Hugging Face session broker URL. Defaults +to the Pollen broker and usually does not need to be set. +- `HF_REALTIME_WS_URL`: local Hugging Face realtime websocket URL, required +when `HF_REALTIME_CONNECTION_MODE=local`. +- `HF_REALTIME_MODEL`: optional model ID passed to the Hugging Face realtime +backend. Leave empty to let the backend choose its default. +- `HF_REALTIME_VOICE`: voice name passed to the Hugging Face realtime backend. +- `HF_TOKEN`: optional token used by the deployed Hugging Face session broker +and gated Hugging Face models. +- `CHAT_API_KEY`: API key for `BACKEND_PROVIDER=local_stt` Chat Completions. +This can reference an exported shell variable, such as +`${NVIDIA_INFERENCE_API_KEY}`. +- `CHAT_BASE_URL`: OpenAI-compatible Chat Completions base URL. +- `CHAT_MODEL_NAME`: exact Chat Completions model ID exposed by the provider. +- `STT_BASE_URL`: OpenAI-compatible speech-to-text base URL. Microphone input +is buffered into a short WAV phrase, transcribed through this endpoint, then +passed to Chat Completions. +- `STT_API_KEY`: API key for `STT_BASE_URL`. For local no-auth STT endpoints, +use `not-needed`. +- `STT_MODEL_NAME`: transcription model ID. Defaults to `whisper-1`. +- `TTS_BASE_URL`: OpenAI-compatible text-to-speech base URL. +- `TTS_API_KEY`: API key for `TTS_BASE_URL`. For local no-auth TTS endpoints, +use `not-needed`. +- `TTS_MODEL_NAME`: speech model ID. Defaults to `gpt-4o-mini-tts`. +- `TTS_VOICE`: voice name for synthesized Reachy speech. +- `MIC_TRANSCRIPTION_RMS_THRESHOLD`: voice activity threshold for mic-to-text. +Defaults to `500`. +- `MIC_TRANSCRIPTION_MIN_AUDIO_MS`: minimum phrase length before the app can +submit audio for transcription. Defaults to `250`. +- `MIC_TRANSCRIPTION_SILENCE_MS`: trailing silence used to end a phrase. +Defaults to `800`. +- `MIC_TRANSCRIPTION_MAX_AUDIO_MS`: maximum phrase length before forcing a +transcription request. Defaults to `12000`. - `LOCAL_VISION_MODEL`: Hugging Face model used with `--local-vision`. - `HF_HOME`: Hugging Face cache directory. Defaults to `./cache`. -- `HF_TOKEN`: optional Hugging Face token for gated models. ## Run Locally @@ -186,19 +246,19 @@ projects/reachy-mini-openshell/scripts/start-local.sh ``` The script creates `.venv` when needed, runs `uv sync`, creates `.env` from -`.env.example` if missing, starts `reachy-mini-daemon --sim`, launches the -Gradio app, and prints the browser URL: +`.env.example` if missing, validates the selected backend config, starts +`reachy-mini-daemon --sim`, launches the Gradio app, and prints the browser URL: ```text http://127.0.0.1:7860/ ``` If port `7860` is busy, the launcher chooses the next free port through `7899` -and prints that URL instead. Pass app flags that are compatible with the -no-camera simulator baseline after the script name: +and prints that URL instead. Pass app flags after the script name: ```bash projects/reachy-mini-openshell/scripts/start-local.sh --debug +projects/reachy-mini-openshell/scripts/start-local.sh --head-tracker yolo ``` From inside `projects/reachy-mini-openshell`, the shorter form is: @@ -220,19 +280,164 @@ reachy-mini-daemon --sim --scene minimal --headless --no-media --fastapi-host 12 python -m reachy_mini_conversation_app --gradio --no-camera ``` -The Gradio UI includes an `Input` selector: +Before starting the app, you can validate the selected backend without opening +the browser or connecting to Reachy: + +```bash +reachy-mini-backend-check +python -m reachy_mini_conversation_app.backend_check +``` + +To validate a candidate dotenv file without replacing `.env`, pass it +explicitly: + +```bash +reachy-mini-backend-check --env-file .env.local-stt.example +``` -- `OpenAI Realtime`: Realtime microphone behavior. Audio streams to an -OpenAI-compatible Realtime endpoint, which handles transcription and response -generation in one session. -- `Riva STT`: microphone audio streams to Riva ASR. Final transcripts are sent -to the same text LLM path used by typed messages, so OpenAI-compatible Chat -Completions providers such as NVIDIA NIM can answer. -- `Text`: typed messages only. +Launch the app with that same candidate file, or with your edited private copy, +by setting `REACHY_MINI_DOTENV_PATH`: + +```bash +REACHY_MINI_DOTENV_PATH=.env.local-stt.example \ + python -m reachy_mini_conversation_app --gradio --no-camera +``` + +The preflight can also call configured backend endpoints: + +```bash +reachy-mini-backend-check --live +reachy-mini-backend-check --env-file .env.local-stt.example --live +``` -Tool calls are supported in text mode and in the Riva STT path; the app keeps -the tool schema attached on the post-tool follow-up request for providers that -require it. +For `BACKEND_PROVIDER=openai_realtime` and `BACKEND_PROVIDER=hf_realtime`, +`--live` opens a realtime session, sends the app's session configuration, and +then shuts the session down. For `BACKEND_PROVIDER=local_stt`, `--live` +defaults to the app-flow check: it feeds audio through the handler's microphone +receive path against fake Reachy dependencies, then verifies +`mic frame handling -> STT -> Chat Completions -> Reachy tools -> TTS`. + +Without `--audio-file`, the live check synthesizes a short seed phrase through +the configured TTS endpoint, sends that audio to STT, sends the transcript to +Chat Completions, then synthesizes the assistant response. It prints only +non-secret routing details, the transcript, response text, and audio durations. + +When setting up local STT services one at a time, use `--stage` to check only +the piece you have ready: + +```bash +reachy-mini-backend-check --env-file .env.local-stt.example --live --stage stt-probe +reachy-mini-backend-check --env-file .env.local-stt.example --live --stage stt \ + --audio-file ./sample-input.wav +reachy-mini-backend-check --env-file .env.local-stt.example --live --stage chat \ + --seed-text "Reachy, use the sweep_look tool, then tell me what you did." \ + --require-tool +reachy-mini-backend-check --env-file .env.local-stt.example --live --stage tts \ + --seed-text "Hello, I am Reachy." +reachy-mini-backend-check --env-file .env.local-stt.example --live --stage chain \ + --audio-file ./sample-input.wav +``` + +`--stage stt-probe` only needs `STT_*` values. It checks `/models` when that +endpoint is available, reports whether `STT_MODEL_NAME` is listed, then sends a +short synthetic WAV to `/audio/transcriptions`. It passes if the endpoint can +handle an audio request, even if the probe tone transcribes to empty text. +`--stage stt` checks actual transcription quality and only needs `STT_*` +values and an audio file unless TTS is already configured to synthesize the +seed phrase. `--stage chat` only needs `CHAT_*` values and can validate +model/tool compatibility before STT or TTS are ready. `--stage tts` only needs +`TTS_*` values. `--stage chain` checks the direct `STT -> Chat Completions -> +TTS` endpoint chain without the app handler or Reachy tool path. + +The app-flow path is the default local-STT live check, but you can name it +explicitly with `--stage app-flow` or its `--app-flow` shortcut: + +```bash +reachy-mini-backend-check --live --stage app-flow \ + --seed-text "Reachy, use the sweep_look tool, then tell me what you did." +reachy-mini-backend-check --live --app-flow --require-tool \ + --seed-text "Reachy, use the sweep_look tool, then tell me what you did." +``` + +When the simulator daemon or a physical Reachy Mini is already running, add +`--real-reachy` to use the real Reachy SDK client and movement manager instead +of fake tool dependencies: + +```bash +reachy-mini-backend-check --live --stage app-flow --require-tool --real-reachy \ + --seed-text "Reachy, use the sweep_look tool, then tell me what you did." +``` + +Use `--robot-name ` with `--real-reachy` if your daemon is advertised +under a non-default robot name. + +If your real STT endpoint is not online yet, run the local fake +OpenAI-compatible smoke workflow: + +```bash +scripts/smoke-local-stt.sh +scripts/smoke-local-stt.sh --real-reachy +scripts/smoke-local-stt.sh --gradio +``` + +The first command starts a fake STT/chat/TTS backend and checks the app handler +path against fake Reachy dependencies. The second also connects through the +Reachy SDK and movement manager, so it requires the simulator daemon or a +physical Reachy Mini to be running. The `--gradio` variant launches the actual +Gradio app, verifies the `Talk with Reachy Mini` UI, and sends a text tool-call +prompt through the running app process. It also requires a running daemon or +simulator. + +For manual debugging, you can run the fake backend directly: + +```bash +uv run python scripts/fake_openai_backend.py +``` + +Then point a disposable smoke config at it: + +```bash +cat > .env.smoke <<'EOF' +BACKEND_PROVIDER=local_stt +CHAT_API_KEY=not-needed +CHAT_BASE_URL=http://127.0.0.1:8766/v1 +CHAT_MODEL_NAME=fake-chat +STT_API_KEY=not-needed +STT_BASE_URL=http://127.0.0.1:8766/v1 +STT_MODEL_NAME=fake-whisper +TTS_API_KEY=not-needed +TTS_BASE_URL=http://127.0.0.1:8766/v1 +TTS_MODEL_NAME=fake-tts +TTS_VOICE=fake-voice +EOF + +reachy-mini-backend-check --env-file .env.smoke --live --stage app-flow --require-tool +reachy-mini-backend-check --env-file .env.smoke --live --stage app-flow --require-tool --real-reachy +``` + +This fake backend validates the app's OpenAI-compatible HTTP plumbing, tool +loop, and audio handoff. It does not validate STT accuracy, provider auth, or a +real model's tool-calling behavior. + +`--require-tool` applies to `--stage chat` and `--stage app-flow`; it fails if +the model does not call a Reachy tool. This is useful for checking model/tool +compatibility, but it still does not replace the final browser microphone and +simulator validation. + +The Gradio UI includes an `Input` selector. With `BACKEND_PROVIDER` set to +`openai_realtime` or `hf_realtime`, `Microphone` streams audio directly to the +selected realtime backend. With `BACKEND_PROVIDER=local_stt`, `Microphone` +sends each spoken phrase to the configured `STT_BASE_URL` transcription +endpoint, sends the transcript through Chat Completions, then synthesizes +Reachy's spoken reply through `TTS_BASE_URL`. Tool calls are supported in text +mode and in microphone-to-text mode; the app keeps the tool schema attached on +the post-tool follow-up request for providers that require it. + +If the microphone appears to connect but no transcript or model response +arrives, check the visible chat error and your `.env` values. For Chat +Completions models, verify that `STT_BASE_URL` points at an OpenAI-compatible +`/audio/transcriptions` service and that `STT_MODEL_NAME` matches the model +served by that endpoint. ## Runtime Flags @@ -300,9 +505,8 @@ uv run ty check ``` `ty` is the selected Python type checker for this project. The current copied -conversation-app baseline still reports diagnostics in motion, vision, optional -dependency, and SDK event typing, so use `uv run ty check` as the active audit -while that baseline is tightened. +conversation-app baseline is expected to pass `uv run ty check` before changes +are merged. Tests require the development dependency group: @@ -320,14 +524,31 @@ name to the app with `--robot-name`. If `--local-vision`, `--head-tracker yolo`, or `--head-tracker mediapipe` fails with an import error, install the matching optional dependency group. -If text mode returns `404 page not found`, check that `OPENAI_BASE_URL` matches -the provider's OpenAI-compatible endpoint and that `MODEL_NAME` is an exact -model ID from that provider. A catalog name, marketing page slug, or doubled -namespace may not be accepted by `/chat/completions`. +If `reachy-mini-backend-check` reports older config keys such as +`OPENAI_BASE_URL` or `MODEL_NAME`, replace that `.env` shape with one of the +current `BACKEND_PROVIDER` configurations. Those old keys are intentionally not +used. + +If text mode returns `404 page not found` with `BACKEND_PROVIDER=local_stt`, +check that `CHAT_BASE_URL` is a plain OpenAI-compatible endpoint string, such +as `https://inference-api.nvidia.com/v1`, and that `CHAT_MODEL_NAME` is an +exact model ID from that provider. A catalog name, marketing page slug, or +doubled namespace may not be accepted by `/chat/completions`. If text mode returns `401 Unauthorized` with NVIDIA endpoints, make sure -`OPENAI_API_KEY=${NVIDIA_API_KEY}` resolves to a key that is authorized for -generation, not only model listing. +`CHAT_API_KEY=${NVIDIA_INFERENCE_API_KEY}` resolves to a key that is authorized +for generation, not only model listing. + +If microphone-to-text returns a transcription error, make sure `STT_BASE_URL` +includes the `/v1` base path expected by OpenAI-compatible clients, for example +`http://:9000/v1`, and that the service exposes +`POST /audio/transcriptions` for the configured `STT_MODEL_NAME`. + +If a vLLM-hosted STT endpoint returns `Please install vllm[audio] for audio +support`, the service is reachable but was deployed without vLLM's audio +dependencies. Redeploy the local STT service with the audio extra enabled, then +rerun `reachy-mini-backend-check --live --stage stt-probe` followed by +`reachy-mini-backend-check --live --stage stt`. If `uv sync` tries to build `pygobject` or `pycairo` on macOS, the resolver is including a Linux media dependency path. This project scopes uv resolution to diff --git a/projects/reachy-mini-openshell/pyproject.toml b/projects/reachy-mini-openshell/pyproject.toml index 6c955849..8adb5cbb 100644 --- a/projects/reachy-mini-openshell/pyproject.toml +++ b/projects/reachy-mini-openshell/pyproject.toml @@ -28,19 +28,8 @@ dev = [ environments = [ "sys_platform == 'darwin'", ] -conflicts = [ - [ - { extra = "riva" }, - { extra = "mediapipe_vision" }, - ], - [ - { extra = "riva" }, - { extra = "all_vision" }, - ], -] [project.optional-dependencies] -riva = [ "nvidia-riva-client>=2.19,<3",] local_vision = [ "torch>=2.1", "transformers==5.0.0rc2", "num2words",] yolo_vision = [ "ultralytics", "supervision", "onnxruntime",] mediapipe_vision = [ "mediapipe==0.10.14",] @@ -48,6 +37,7 @@ all_vision = [ "torch>=2.1", "transformers==5.0.0rc2", "num2words", "ultralytics [project.scripts] reachy-mini-conversation-app = "reachy_mini_conversation_app.main:main" +reachy-mini-backend-check = "reachy_mini_conversation_app.backend_check:main" [tool.setuptools] include-package-data = true diff --git a/projects/reachy-mini-openshell/scripts/fake_openai_backend.py b/projects/reachy-mini-openshell/scripts/fake_openai_backend.py new file mode 100755 index 00000000..54f5f459 --- /dev/null +++ b/projects/reachy-mini-openshell/scripts/fake_openai_backend.py @@ -0,0 +1,149 @@ +#!/usr/bin/env python3 +"""Tiny OpenAI-compatible backend for local Reachy conversation smoke tests.""" + +import io +import math +import time +import wave +import argparse +from typing import Any + +import uvicorn +from fastapi import FastAPI, Request, Response + + +def _wav_bytes(text: str, *, sample_rate: int = 24_000, duration_seconds: float = 0.7) -> bytes: + """Return a small mono WAV payload.""" + frequency = 523.25 if "swept" in text.lower() else 440.0 + frame_count = max(1, int(sample_rate * duration_seconds)) + frames = bytearray() + for index in range(frame_count): + sample = int(math.sin(2 * math.pi * frequency * index / sample_rate) * 6000) + frames.extend(sample.to_bytes(2, byteorder="little", signed=True)) + + buffer = io.BytesIO() + with wave.open(buffer, "wb") as wav_file: + wav_file.setnchannels(1) + wav_file.setsampwidth(2) + wav_file.setframerate(sample_rate) + wav_file.writeframes(bytes(frames)) + return buffer.getvalue() + + +def _message_has_tool_result(messages: list[Any]) -> bool: + """Return whether a Chat Completions request includes a tool result.""" + return any(isinstance(message, dict) and message.get("role") == "tool" for message in messages) + + +def build_app( + *, + transcript: str, + assistant_text: str, + tool_name: str, + call_tool: bool, + audio_duration_seconds: float, +) -> FastAPI: + """Build the fake OpenAI-compatible FastAPI app.""" + app = FastAPI(title="Reachy fake OpenAI-compatible backend") + + @app.get("/v1/models") + async def models() -> dict[str, Any]: + return { + "object": "list", + "data": [ + {"id": "fake-whisper", "object": "model"}, + {"id": "fake-chat", "object": "model"}, + {"id": "fake-tts", "object": "model"}, + ], + } + + @app.post("/v1/audio/transcriptions") + async def transcriptions(request: Request) -> dict[str, str]: + await request.body() + return {"text": transcript} + + @app.post("/v1/audio/speech") + async def speech(request: Request) -> Response: + try: + payload = await request.json() + except Exception: + payload = {} + input_text = str(payload.get("input", "hello")) + return Response( + content=_wav_bytes(input_text, duration_seconds=audio_duration_seconds), + media_type="audio/wav", + ) + + @app.post("/v1/chat/completions") + async def chat_completions(request: Request) -> dict[str, Any]: + payload = await request.json() + messages = payload.get("messages", []) + if not isinstance(messages, list): + messages = [] + + if call_tool and not _message_has_tool_result(messages): + message = { + "role": "assistant", + "content": None, + "tool_calls": [ + { + "id": "call_fake_reachy_tool", + "type": "function", + "function": {"name": tool_name, "arguments": "{}"}, + } + ], + } + finish_reason = "tool_calls" + else: + message = {"role": "assistant", "content": assistant_text} + finish_reason = "stop" + + return { + "id": "chatcmpl-fake-reachy", + "object": "chat.completion", + "created": int(time.time()), + "model": payload.get("model", "fake-chat"), + "choices": [{"index": 0, "message": message, "finish_reason": finish_reason}], + } + + return app + + +def build_parser() -> argparse.ArgumentParser: + """Build CLI parser.""" + parser = argparse.ArgumentParser(description="Run a fake OpenAI-compatible backend for Reachy smoke tests.") + parser.add_argument("--host", default="127.0.0.1", help="host to bind.") + parser.add_argument("--port", type=int, default=8766, help="port to bind.") + parser.add_argument( + "--transcript", + default="Reachy, use the sweep_look tool, then tell me what you did.", + help="transcription text returned by POST /v1/audio/transcriptions.", + ) + parser.add_argument( + "--assistant-text", + default="I swept my gaze and returned to center.", + help="final assistant text returned after a tool result.", + ) + parser.add_argument("--tool-name", default="sweep_look", help="tool name to request from Chat Completions.") + parser.add_argument( + "--no-tool", action="store_true", help="return assistant text immediately without a tool call." + ) + parser.add_argument("--audio-duration", type=float, default=0.7, help="duration in seconds for fake TTS WAVs.") + return parser + + +def main() -> None: + """Run the fake backend.""" + args = build_parser().parse_args() + app = build_app( + transcript=args.transcript, + assistant_text=args.assistant_text, + tool_name=args.tool_name, + call_tool=not args.no_tool, + audio_duration_seconds=args.audio_duration, + ) + uvicorn.run(app, host=args.host, port=args.port, log_level="info") + + +if __name__ == "__main__": + main() diff --git a/projects/reachy-mini-openshell/scripts/smoke-local-stt.sh b/projects/reachy-mini-openshell/scripts/smoke-local-stt.sh new file mode 100755 index 00000000..cf278910 --- /dev/null +++ b/projects/reachy-mini-openshell/scripts/smoke-local-stt.sh @@ -0,0 +1,300 @@ +#!/usr/bin/env bash +set -euo pipefail + +SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_DIR="$(cd -- "${SCRIPT_DIR}/.." && pwd)" + +HOST="${SMOKE_BACKEND_HOST:-127.0.0.1}" +PORT="${SMOKE_BACKEND_PORT:-8766}" +REAL_REACHY="${SMOKE_REAL_REACHY:-0}" +GRADIO_SMOKE="${SMOKE_GRADIO:-0}" +APP_HOST="${SMOKE_APP_HOST:-127.0.0.1}" +APP_PORT="${SMOKE_APP_PORT:-7897}" +ROBOT_NAME="${SMOKE_ROBOT_NAME:-}" +SEED_TEXT="${SMOKE_SEED_TEXT:-Reachy, use the sweep_look tool, then tell me what you did.}" +STARTUP_TIMEOUT="${SMOKE_BACKEND_TIMEOUT:-10}" +APP_STARTUP_TIMEOUT="${SMOKE_APP_TIMEOUT:-20}" +SHUTDOWN_TIMEOUT="${SMOKE_SHUTDOWN_TIMEOUT:-25}" + +SERVER_PID="" +APP_PID="" +SMOKE_ENV="" + +usage() { + cat <<'EOF' +Usage: scripts/smoke-local-stt.sh [--real-reachy] [--gradio] [--robot-name NAME] + +Runs a local OpenAI-compatible fake STT/chat/TTS backend, writes a temporary +local_stt config, and checks the app's microphone app-flow path. + +Options: + --real-reachy Also run the app-flow check through the real Reachy SDK + and movement manager. Requires a running daemon/simulator. + --gradio Also launch the Gradio app, verify the UI labels, and send + a text tool-call prompt through the running app. Requires + a running daemon/simulator. + --robot-name NAME Robot name to pass to reachy-mini-backend-check with + --real-reachy and to the Gradio app smoke when provided. + -h, --help Show this help. + +Environment: + SMOKE_BACKEND_HOST Fake backend host. Default: 127.0.0.1 + SMOKE_BACKEND_PORT Fake backend port. Default: 8766 + SMOKE_APP_HOST Gradio app host for --gradio. Default: 127.0.0.1 + SMOKE_APP_PORT Gradio app port for --gradio. Default: 7897 + SMOKE_SEED_TEXT Seed text for the generated input speech. + SMOKE_BACKEND_TIMEOUT Seconds to wait for the fake backend. Default: 10 + SMOKE_APP_TIMEOUT Seconds to wait for the Gradio app. Default: 20 + SMOKE_SHUTDOWN_TIMEOUT Seconds to wait before forcing shutdown. Default: 25 +EOF +} + +log() { + printf '[reachy-smoke] %s\n' "$*" +} + +terminate_process_tree() { + local pid="$1" + local signal="$2" + local children child + + children="$(pgrep -P "${pid}" 2>/dev/null || true)" + for child in ${children}; do + terminate_process_tree "${child}" "${signal}" + done + kill "-${signal}" "${pid}" >/dev/null 2>&1 || true +} + +wait_for_process_exit() { + local pid="$1" + local timeout_seconds="$2" + local deadline=$((SECONDS + timeout_seconds)) + + while kill -0 "${pid}" >/dev/null 2>&1; do + if (( SECONDS >= deadline )); then + return 1 + fi + sleep 0.2 + done + return 0 +} + +stop_process_tree() { + local pid="$1" + local label="$2" + if [[ -z "${pid}" ]] || ! kill -0 "${pid}" >/dev/null 2>&1; then + return + fi + + terminate_process_tree "${pid}" INT + if ! wait_for_process_exit "${pid}" "${SHUTDOWN_TIMEOUT}"; then + log "Forcing ${label} shutdown" + terminate_process_tree "${pid}" TERM + if ! wait_for_process_exit "${pid}" 3; then + terminate_process_tree "${pid}" KILL + fi + fi + wait "${pid}" >/dev/null 2>&1 || true +} + +cleanup() { + stop_process_tree "${APP_PID}" "Gradio app" + stop_process_tree "${SERVER_PID}" "fake backend" + if [[ -n "${SMOKE_ENV}" ]]; then + rm -f "${SMOKE_ENV}" + fi +} +trap cleanup EXIT INT TERM + +while [[ $# -gt 0 ]]; do + case "$1" in + --real-reachy) + REAL_REACHY=1 + shift + ;; + --gradio) + GRADIO_SMOKE=1 + shift + ;; + --robot-name) + if [[ $# -lt 2 ]]; then + printf 'Missing value for --robot-name\n' >&2 + exit 2 + fi + ROBOT_NAME="$2" + shift 2 + ;; + -h|--help) + usage + exit 0 + ;; + *) + printf 'Unknown argument: %s\n' "$1" >&2 + usage >&2 + exit 2 + ;; + esac +done + +cd "${PROJECT_DIR}" + +if ! command -v uv >/dev/null 2>&1; then + printf 'Missing required command: uv\n' >&2 + exit 1 +fi + +ensure_url_ready() { + local url="$1" + local timeout_seconds="$2" + local label="$3" + + local deadline=$((SECONDS + timeout_seconds)) + until uv run python - "${url}" <<'PY' >/dev/null 2>&1 +import sys +import urllib.request + +url = sys.argv[1] +try: + with urllib.request.urlopen(url, timeout=0.5) as response: + raise SystemExit(0 if 200 <= response.status < 300 else 1) +except Exception: + raise SystemExit(1) +PY + do + if (( SECONDS >= deadline )); then + printf '%s did not become ready within %s seconds.\n' "${label}" "${timeout_seconds}" >&2 + exit 1 + fi + sleep 0.25 + done +} + +SMOKE_ENV="$(mktemp "${TMPDIR:-/tmp}/reachy-local-stt-smoke.XXXXXX")" +cat >"${SMOKE_ENV}" < MicPhraseResult: + """Add one audio frame and return a completed phrase when ready.""" + audio_frame = prepare_mono_int16_audio(frame, self.config.sample_rate) + if audio_frame.size == 0: + return MicPhraseResult(phrase_audio=None, saw_speech=False) + + frame_ms = len(audio_frame) * 1000.0 / self.config.sample_rate + is_speech = audio_rms(audio_frame) >= self.config.rms_threshold + + if is_speech: + self._has_speech = True + self._silence_ms = 0.0 + elif self._has_speech: + self._silence_ms += frame_ms + else: + return MicPhraseResult(phrase_audio=None, saw_speech=False) + + self._buffer.append(audio_frame) + self._buffer_ms += frame_ms + + should_flush = self._buffer_ms >= self.config.max_audio_ms or ( + self._buffer_ms >= self.config.min_audio_ms and self._silence_ms >= self.config.silence_ms + ) + if not should_flush: + return MicPhraseResult(phrase_audio=None, saw_speech=is_speech) + + return MicPhraseResult(phrase_audio=self.flush(), saw_speech=is_speech) + + def flush(self) -> NDArray[np.int16] | None: + """Return the buffered phrase and reset phrase-detection state.""" + if not self._buffer: + return None + + audio_frame = np.concatenate(self._buffer).astype(np.int16, copy=False) + self.reset() + return audio_frame + + def reset(self) -> None: + """Clear buffered audio and voice activity state.""" + self._buffer = [] + self._buffer_ms = 0.0 + self._silence_ms = 0.0 + self._has_speech = False diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/audio/pcm.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/audio/pcm.py new file mode 100644 index 00000000..84e35147 --- /dev/null +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/audio/pcm.py @@ -0,0 +1,141 @@ +"""PCM and WAV helpers shared by realtime and local-STT backends.""" + +import io +import wave +import asyncio +from typing import Any + +import numpy as np +from fastrtc import audio_to_int16 +from numpy.typing import NDArray +from scipy.signal import resample + + +def first_mono_channel(audio_frame: NDArray[Any]) -> NDArray[Any]: + """Return one mono channel from common FastRTC and scipy audio layouts.""" + if audio_frame.ndim == 1: + return audio_frame + + if audio_frame.ndim != 2: + raise ValueError(f"Expected 1D or 2D audio, got shape {audio_frame.shape}") + + rows, columns = audio_frame.shape + if rows == 1: + return audio_frame[0, :] + if columns == 1: + return audio_frame[:, 0] + if rows in {2, 6, 8} and columns > rows: + return audio_frame[0, :] + if columns in {2, 6, 8}: + return audio_frame[:, 0] + if rows < columns: + return audio_frame[0, :] + return audio_frame[:, 0] + + +def coerce_audio_to_int16(audio_frame: NDArray[Any]) -> NDArray[np.int16]: + """Convert supported PCM audio arrays to int16. + + FastRTC accepts normalized float32 audio, while scipy resampling returns + float64 values in the original PCM amplitude range. Preserve that scale + instead of multiplying resampled PCM by 32767 a second time. + """ + if audio_frame.dtype == np.int16: + return audio_frame + + if np.issubdtype(audio_frame.dtype, np.floating): + finite_audio = np.nan_to_num(audio_frame, nan=0.0, posinf=32767.0, neginf=-32768.0) + max_abs = float(np.max(np.abs(finite_audio))) if finite_audio.size else 0.0 + if max_abs <= 1.0: + return audio_to_int16(finite_audio.astype(np.float32, copy=False)) + return np.clip(finite_audio, -32768, 32767).astype(np.int16) + + if np.issubdtype(audio_frame.dtype, np.integer): + return np.clip(audio_frame, -32768, 32767).astype(np.int16) + + raise TypeError(f"Unsupported audio data type: {audio_frame.dtype}") + + +def prepare_mono_int16_audio( + frame: tuple[int, NDArray[Any]], + target_sample_rate: int, +) -> NDArray[np.int16]: + """Convert an incoming audio frame to mono int16 at the requested sample rate.""" + input_sample_rate, audio_frame = frame + mono_audio = first_mono_channel(audio_frame) + + if target_sample_rate != input_sample_rate and len(mono_audio) > 0: + mono_audio = resample(mono_audio, int(len(mono_audio) * target_sample_rate / input_sample_rate)) + + return coerce_audio_to_int16(mono_audio) + + +def audio_rms(audio_frame: NDArray[np.int16]) -> float: + """Return the RMS amplitude for a mono int16 audio frame.""" + if audio_frame.size == 0: + return 0.0 + samples = audio_frame.astype(np.float64) + return float(np.sqrt(np.mean(samples * samples))) + + +def wav_bytes(audio_frame: NDArray[np.int16], sample_rate: int) -> bytes: + """Encode mono int16 PCM audio as a WAV file.""" + buffer = io.BytesIO() + with wave.open(buffer, "wb") as wav_file: + wav_file.setnchannels(1) + wav_file.setsampwidth(2) + wav_file.setframerate(sample_rate) + wav_file.writeframes(audio_frame.tobytes()) + return buffer.getvalue() + + +def read_wav_audio(wav_payload: bytes) -> tuple[int, NDArray[np.int16]]: + """Decode a mono/stereo 16-bit WAV payload to mono int16 audio.""" + with wave.open(io.BytesIO(wav_payload), "rb") as wav_file: + channels = wav_file.getnchannels() + sample_width = wav_file.getsampwidth() + sample_rate = wav_file.getframerate() + frames = wav_file.readframes(wav_file.getnframes()) + + if sample_width != 2: + raise ValueError(f"Expected 16-bit WAV audio, got sample width {sample_width}") + + audio_frame = np.frombuffer(frames, dtype=np.int16) + if channels > 1: + audio_frame = audio_frame.reshape(-1, channels)[:, 0] + return sample_rate, audio_frame + + +def normalize_wav_bytes(wav_payload: bytes) -> bytes: + """Return a 16-bit mono WAV with concrete RIFF/data sizes.""" + sample_rate, audio_frame = read_wav_audio(wav_payload) + return wav_bytes(audio_frame, sample_rate) + + +def wav_duration_seconds(wav_payload: bytes) -> float: + """Return the duration of a WAV payload.""" + sample_rate, audio_frame = read_wav_audio(wav_payload) + return len(audio_frame) / float(sample_rate) if sample_rate else 0.0 + + +async def binary_response_bytes(response: Any) -> bytes: + """Read bytes from an OpenAI binary response object.""" + content = getattr(response, "content", None) + if isinstance(content, bytes): + return content + + read = getattr(response, "read", None) + if callable(read): + result = read() + if asyncio.iscoroutine(result): + result = await result + if isinstance(result, bytes): + return result + + aread = getattr(response, "aread", None) + if callable(aread): + result = await aread() + if isinstance(result, bytes): + return result + + raise TypeError(f"Unsupported binary response type: {type(response).__name__}") diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/backend_check.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/backend_check.py new file mode 100644 index 00000000..546a07d1 --- /dev/null +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/backend_check.py @@ -0,0 +1,786 @@ +"""Backend configuration and endpoint smoke checks for the conversation app.""" + +import asyncio +import argparse +from typing import Any, cast +from pathlib import Path + +import numpy as np +from openai import AsyncOpenAI +from numpy.typing import NDArray + +from reachy_mini_conversation_app.config import ( + config, + load_dotenv_file, + loaded_dotenv_keys, + loaded_dotenv_path, +) +from reachy_mini_conversation_app.audio.pcm import ( + wav_bytes, + read_wav_audio, + wav_duration_seconds, + prepare_mono_int16_audio, +) +from reachy_mini_conversation_app.backend_runtime import ( + selected_backend, + backend_config_error, + describe_selected_backend, + local_stt_tts_config_error, + local_stt_stage_config_error, +) +from reachy_mini_conversation_app.tools.core_tools import ToolDependencies +from reachy_mini_conversation_app.local_stt_backend import LocalSTTBackend +from reachy_mini_conversation_app.tools.background_tool_manager import BackgroundToolManager + + +def _required(value: str | None, name: str) -> str: + """Return a required string config value or raise a clear error.""" + if value and value.strip(): + return value.strip() + raise RuntimeError(f"{name} is required") + + +def _backend_config_hint(error: str) -> str | None: + """Return an actionable hint for common backend config errors.""" + if not error.startswith("BACKEND_PROVIDER is missing"): + return None + + keys = loaded_dotenv_keys() + legacy_keys = {"MODEL_NAME", "OPENAI_BASE_URL"} & keys + loaded_path = loaded_dotenv_path() + if legacy_keys: + legacy_list = ", ".join(sorted(legacy_keys)) + location = f" in {loaded_path}" if loaded_path else "" + return ( + f"Found older config keys{location}: {legacy_list}. They are no longer used. " + "Choose one BACKEND_PROVIDER and set the matching new keys: OPENAI_REALTIME_* for " + "openai_realtime, HF_REALTIME_* for hf_realtime, or CHAT_*/STT_*/TTS_* for local_stt." + ) + + if loaded_path is None: + return ( + "No .env file was loaded. Copy .env.example to .env, set BACKEND_PROVIDER to " + "openai_realtime, hf_realtime, or local_stt, or pass --env-file." + ) + + return ( + f"Loaded config from {loaded_path}. Set BACKEND_PROVIDER there to " + "openai_realtime, hf_realtime, or local_stt, or pass --env-file." + ) + + +def _wav_duration_seconds(wav_payload: bytes) -> float: + """Return the duration of a WAV payload.""" + return wav_duration_seconds(wav_payload) + + +def _audio_duration_seconds(sample_rate: int, audio_frame: NDArray[np.int16]) -> float: + """Return the duration of a mono/channel-first int16 frame.""" + if sample_rate <= 0: + return 0.0 + sample_count = audio_frame.shape[-1] if audio_frame.ndim > 1 else len(audio_frame) + return sample_count / float(sample_rate) + + +def _read_wav_audio(wav_payload: bytes) -> tuple[int, NDArray[np.int16]]: + """Decode a WAV payload into mono int16 audio.""" + return read_wav_audio(wav_payload) + + +def _audio_chunks( + audio_frame: NDArray[np.int16], sample_rate: int, *, chunk_ms: float = 100.0 +) -> list[NDArray[np.int16]]: + """Split audio into chunks that resemble browser microphone frames.""" + chunk_size = max(1, int(sample_rate * chunk_ms / 1000.0)) + return [audio_frame[start : start + chunk_size] for start in range(0, len(audio_frame), chunk_size)] + + +def _silence_frame(sample_rate: int, silence_ms: float) -> NDArray[np.int16]: + """Return a mono silence frame long enough to end the mic phrase.""" + sample_count = max(1, int(sample_rate * silence_ms / 1000.0)) + return np.zeros(sample_count, dtype=np.int16) + + +def _tone_wav_bytes() -> bytes: + """Return a tiny placeholder WAV when an endpoint needs valid audio bytes.""" + sample_rate = 16_000 + t = np.linspace(0, 0.25, int(sample_rate * 0.25), endpoint=False) + samples = (np.sin(2 * np.pi * 440 * t) * 2000).astype(np.int16) + return wav_bytes(samples, sample_rate) + + +def _speech_endpoint_error(component: str, context: str, endpoint_path: str, exc: Exception) -> str: + """Return a concise endpoint failure message without exposing secrets.""" + return ( + f"{component} endpoint request failed ({context}). Check the base URL and that the service exposes " + f"{endpoint_path}. {type(exc).__name__}: {exc}" + ) + + +def _model_ids(models_response: Any) -> list[str]: + """Extract model IDs from common OpenAI-compatible /models response shapes.""" + data = ( + models_response.get("data", []) if isinstance(models_response, dict) else getattr(models_response, "data", []) + ) + ids: list[str] = [] + for model in data or []: + model_id = model.get("id") if isinstance(model, dict) else getattr(model, "id", None) + if isinstance(model_id, str) and model_id.strip(): + ids.append(model_id.strip()) + return sorted(set(ids)) + + +def _format_model_ids(model_ids: list[str], *, limit: int = 5) -> str: + """Return a compact non-secret model list for diagnostics.""" + if not model_ids: + return "" + visible = model_ids[:limit] + suffix = f", ... (+{len(model_ids) - limit} more)" if len(model_ids) > limit else "" + return ", ".join(visible) + suffix + + +async def _stt_models_diagnostic_lines() -> list[str]: + """Return diagnostic lines for the STT /models endpoint when available.""" + _required(config.STT_MODEL_NAME, "STT_MODEL_NAME") + client = AsyncOpenAI( + api_key=(config.STT_API_KEY or "not-needed").strip() or "not-needed", + base_url=config.STT_BASE_URL, + ) + try: + models_response = await client.models.list() + except Exception as exc: + return [f"stt_models_endpoint=unavailable ({type(exc).__name__}: {exc})"] + + ids = _model_ids(models_response) + model_listed = config.STT_MODEL_NAME in ids + return [ + "stt_models_endpoint=reachable", + f"stt_model_listed={'yes' if model_listed else 'no'}", + f"stt_available_models={_format_model_ids(ids)}", + ] + + +def _build_fake_local_stt_backend() -> tuple[LocalSTTBackend, BackgroundToolManager, Any]: + """Build local-STT backend dependencies for CLI smoke checks.""" + movement_manager = _FakeMovementManager() + deps = ToolDependencies( + reachy_mini=cast(Any, _FakeReachyMini()), + movement_manager=movement_manager, + ) + tool_manager = BackgroundToolManager() + return ( + LocalSTTBackend( + deps=deps, + tool_manager=tool_manager, + client_factory=AsyncOpenAI, + ), + tool_manager, + movement_manager, + ) + + +def _chat_summary_from_messages(messages: list[dict[str, Any]], *, require_tool: bool) -> tuple[str, list[str]]: + """Return final assistant text and tool result titles from chatbot messages.""" + assistant_text = "" + tool_titles: list[str] = [] + + for message in messages: + content = message.get("content") + if message.get("role") != "assistant" or not isinstance(content, str): + continue + metadata = message.get("metadata") + if isinstance(metadata, dict) and isinstance(metadata.get("title"), str): + tool_titles.append(metadata["title"]) + elif content.startswith("[error]"): + raise RuntimeError(content) + else: + assistant_text = content + + if not assistant_text: + raise RuntimeError("Chat endpoint returned no final assistant response") + if require_tool and not tool_titles: + raise RuntimeError("Chat check did not execute a Reachy tool") + + return assistant_text, tool_titles + + +async def live_realtime_session_check() -> list[str]: + """Exercise the selected realtime backend's session startup path.""" + from reachy_mini_conversation_app.tools.core_tools import ToolDependencies + from reachy_mini_conversation_app.conversation_stream import ConversationStreamHandler + + movement_manager = _FakeMovementManager() + deps = ToolDependencies( + reachy_mini=cast(Any, _FakeReachyMini()), + movement_manager=movement_manager, + ) + handler = ConversationStreamHandler(deps) + + try: + backend = selected_backend() + connected = await handler._ensure_realtime_session("backend-check-realtime-session") + if not connected: + startup_error = getattr(handler, "_startup_error", None) + raise RuntimeError(startup_error or "Realtime session did not connect before the startup timeout") + + return [ + "realtime_session=connected", + f"realtime_model={backend.realtime_model or ''}", + f"realtime_voice={backend.realtime_voice or ''}", + ] + finally: + await handler.shutdown() + startup_task = getattr(handler, "_realtime_startup_task", None) + if startup_task is not None: + try: + await asyncio.wait_for(startup_task, timeout=2.0) + except asyncio.TimeoutError: + startup_task.cancel() + try: + await startup_task + except asyncio.CancelledError: + pass + + +def _stage_name(args: argparse.Namespace) -> str: + """Return the selected live-check stage, preserving --app-flow as a shortcut.""" + stage = getattr(args, "stage", None) + if stage: + return str(stage) + if getattr(args, "app_flow", False): + return "app-flow" + if getattr(args, "live", False) and selected_backend().uses_local_stt: + return "app-flow" + return "chain" + + +def _require_tool_usage_error(args: argparse.Namespace, stage: str) -> str | None: + """Return an error when --require-tool would otherwise be ignored.""" + if not getattr(args, "require_tool", False): + return None + if not getattr(args, "live", False): + return "--require-tool only applies when --live is set." + if not selected_backend().uses_local_stt: + return "--require-tool is only supported for BACKEND_PROVIDER=local_stt --stage chat or --stage app-flow." + if stage not in {"chat", "app-flow"}: + return "--require-tool only applies to --stage chat or --stage app-flow." + return None + + +def _real_reachy_usage_error(args: argparse.Namespace, stage: str) -> str | None: + """Return an error when --real-reachy would otherwise be ignored.""" + if not getattr(args, "real_reachy", False): + return None + if not getattr(args, "live", False) or not selected_backend().uses_local_stt or stage != "app-flow": + return "--real-reachy only applies to BACKEND_PROVIDER=local_stt with --live --stage app-flow." + return None + + +async def _synthesize_input_audio(seed_text: str) -> bytes: + """Use the configured TTS endpoint to generate a speech sample for STT.""" + _required(config.TTS_MODEL_NAME, "TTS_MODEL_NAME") + _required(config.TTS_VOICE, "TTS_VOICE") + backend, tool_manager, _movement_manager = _build_fake_local_stt_backend() + try: + try: + return await backend.synthesize_speech_wav_bytes(seed_text) + except Exception as exc: + raise RuntimeError(_speech_endpoint_error("TTS", backend.tts_context, "POST /audio/speech", exc)) from exc + finally: + await tool_manager.shutdown() + + +async def live_local_stt_probe_check() -> list[str]: + """Probe the local_stt STT endpoint with synthetic audio without requiring recognized text.""" + _required(config.STT_MODEL_NAME, "STT_MODEL_NAME") + model_lines = await _stt_models_diagnostic_lines() + if "stt_model_listed=no" in model_lines: + raise RuntimeError("; ".join(model_lines)) + + input_audio = _tone_wav_bytes() + backend, tool_manager, _movement_manager = _build_fake_local_stt_backend() + try: + try: + transcript = await backend.transcribe_wav_bytes( + input_audio, + filename="backend-check-probe.wav", + ) + except Exception as exc: + raise RuntimeError( + "; ".join( + [ + *model_lines, + _speech_endpoint_error("STT", backend.stt_context, "POST /audio/transcriptions", exc), + ] + ) + ) from exc + finally: + await tool_manager.shutdown() + + return [ + *model_lines, + "input_audio=synthetic probe tone", + f"input_audio_duration={_wav_duration_seconds(input_audio):.2f}s", + "stt_endpoint=reachable", + f"transcript={transcript or ''}", + ] + + +async def live_local_stt_transcription_check(seed_text: str, audio_file: Path | None) -> list[str]: + """Exercise only the local_stt STT endpoint.""" + if audio_file is not None: + input_audio = audio_file.read_bytes() + input_label = str(audio_file) + else: + tts_error = local_stt_tts_config_error() + if tts_error: + raise RuntimeError("--stage stt requires --audio-file unless TTS is configured to synthesize seed audio") + input_audio = await _synthesize_input_audio(seed_text) + input_label = "configured TTS seed" + + _required(config.STT_MODEL_NAME, "STT_MODEL_NAME") + backend, tool_manager, _movement_manager = _build_fake_local_stt_backend() + try: + try: + transcript = await backend.transcribe_wav_bytes( + input_audio or _tone_wav_bytes(), + filename="backend-check.wav", + ) + except Exception as exc: + raise RuntimeError( + _speech_endpoint_error("STT", backend.stt_context, "POST /audio/transcriptions", exc) + ) from exc + finally: + await tool_manager.shutdown() + if not transcript: + raise RuntimeError("STT endpoint returned an empty transcript") + + return [ + f"input_audio={input_label}", + f"input_audio_duration={_wav_duration_seconds(input_audio):.2f}s", + f"transcript={transcript}", + ] + + +async def live_local_stt_chat_check(seed_text: str, *, require_tool: bool) -> list[str]: + """Exercise only the local_stt Chat Completions and Reachy tool path.""" + backend, tool_manager, movement_manager = _build_fake_local_stt_backend() + try: + _required(config.CHAT_MODEL_NAME, "CHAT_MODEL_NAME") + messages = await backend.send_text_message(seed_text) + assistant_text, tool_titles = _chat_summary_from_messages(messages, require_tool=require_tool) + finally: + await tool_manager.shutdown() + + return [ + f"seed_text={seed_text}", + f"assistant_text={assistant_text}", + f"tool_results={', '.join(tool_titles) if tool_titles else ''}", + f"queued_moves={len(movement_manager.queued_moves)}", + ] + + +async def live_local_stt_tts_check(seed_text: str) -> list[str]: + """Exercise only the local_stt TTS endpoint.""" + output_audio = await _synthesize_input_audio(seed_text) + return [ + f"seed_text={seed_text}", + f"output_audio_duration={_wav_duration_seconds(output_audio):.2f}s", + ] + + +async def live_local_stt_check(seed_text: str, audio_file: Path | None) -> list[str]: + """Exercise local_stt endpoints without connecting to a Reachy daemon.""" + if audio_file is not None: + input_audio = audio_file.read_bytes() + input_label = str(audio_file) + else: + input_audio = await _synthesize_input_audio(seed_text) + input_label = "configured TTS seed" + + _required(config.STT_MODEL_NAME, "STT_MODEL_NAME") + backend, tool_manager, _movement_manager = _build_fake_local_stt_backend() + try: + try: + transcript = await backend.transcribe_wav_bytes( + input_audio or _tone_wav_bytes(), + filename="backend-check.wav", + ) + except Exception as exc: + raise RuntimeError( + _speech_endpoint_error("STT", backend.stt_context, "POST /audio/transcriptions", exc) + ) from exc + if not transcript: + raise RuntimeError("STT endpoint returned an empty transcript") + + _required(config.CHAT_MODEL_NAME, "CHAT_MODEL_NAME") + messages = await backend.send_text_message(transcript) + assistant_text, _tool_titles = _chat_summary_from_messages(messages, require_tool=False) + output_audio = await backend.synthesize_speech_wav_bytes(assistant_text) + finally: + await tool_manager.shutdown() + + return [ + f"input_audio={input_label}", + f"input_audio_duration={_wav_duration_seconds(input_audio):.2f}s", + f"transcript={transcript}", + f"assistant_text={assistant_text}", + f"output_audio_duration={_wav_duration_seconds(output_audio):.2f}s", + ] + + +class _FakeReachyMini: + """Small Reachy stand-in for app-flow backend checks.""" + + def get_current_head_pose(self) -> NDArray[np.float64]: + return np.eye(4, dtype=np.float64) + + def get_current_joint_positions(self) -> tuple[NDArray[np.float64], NDArray[np.float64]]: + return np.array([0.0], dtype=np.float64), np.array([0.0, 0.0], dtype=np.float64) + + +class _FakeMovementManager: + """Movement manager stand-in that records queued Reachy moves.""" + + def __init__(self) -> None: + self.queued_moves: list[Any] = [] + self.clear_count = 0 + self.moving_state_durations: list[float] = [] + + def clear_move_queue(self) -> None: + self.clear_count += 1 + self.queued_moves.clear() + + def queue_move(self, move: Any) -> None: + self.queued_moves.append(move) + + def set_moving_state(self, duration: float) -> None: + self.moving_state_durations.append(duration) + + def is_idle(self) -> bool: + return True + + +class _AppFlowDeps: + """Dependencies and cleanup hooks for app-flow checks.""" + + def __init__(self, reachy_mini: Any, movement_manager: Any, *, real_reachy: bool = False): + self.reachy_mini = reachy_mini + self.movement_manager = movement_manager + self.real_reachy = real_reachy + + def start(self) -> None: + if self.real_reachy: + self.movement_manager.start() + + def movement_summary_lines(self) -> list[str]: + if not self.real_reachy: + return [f"queued_moves={len(self.movement_manager.queued_moves)}"] + + status = self.movement_manager.get_status() + loop_frequency = status.get("loop_frequency", {}) if isinstance(status, dict) else {} + return [ + "movement_manager=real", + f"movement_queue_size={status.get('queue_size', '') if isinstance(status, dict) else ''}", + f"movement_loop_samples={loop_frequency.get('samples', '')}", + ] + + def stop(self) -> None: + if self.real_reachy: + self.movement_manager.stop() + try: + self.reachy_mini.client.disconnect() + except Exception: + pass + + +def _build_app_flow_deps(*, real_reachy: bool, robot_name: str | None) -> _AppFlowDeps: + """Build fake or real Reachy dependencies for app-flow checks.""" + if not real_reachy: + movement_manager = _FakeMovementManager() + return _AppFlowDeps( + reachy_mini=cast(Any, _FakeReachyMini()), + movement_manager=movement_manager, + real_reachy=False, + ) + + from reachy_mini import ReachyMini + from reachy_mini_conversation_app.moves import MovementManager + + robot_kwargs = {"robot_name": robot_name} if robot_name else {} + reachy_mini = ReachyMini(**robot_kwargs) + movement_manager = MovementManager(current_robot=reachy_mini) + return _AppFlowDeps(reachy_mini=reachy_mini, movement_manager=movement_manager, real_reachy=True) + + +async def live_local_stt_app_flow_check( + seed_text: str, + audio_file: Path | None, + *, + require_tool: bool, + real_reachy: bool = False, + robot_name: str | None = None, +) -> list[str]: + """Exercise the app handler's mic -> local_stt STT -> chat/tools -> TTS flow.""" + from reachy_mini_conversation_app.tools.core_tools import ToolDependencies + from reachy_mini_conversation_app.conversation_stream import ( + MIC_TRANSCRIPTION_SAMPLE_RATE, + ConversationStreamHandler, + ) + + if audio_file is not None: + input_audio = audio_file.read_bytes() + input_label = str(audio_file) + else: + input_audio = await _synthesize_input_audio(seed_text) + input_label = "configured TTS seed" + + sample_rate, input_frame = _read_wav_audio(input_audio or _tone_wav_bytes()) + prepared_frame = prepare_mono_int16_audio( + (sample_rate, input_frame), + MIC_TRANSCRIPTION_SAMPLE_RATE, + ) + + app_flow_deps = _build_app_flow_deps(real_reachy=real_reachy, robot_name=robot_name) + app_flow_deps.start() + deps = ToolDependencies(reachy_mini=app_flow_deps.reachy_mini, movement_manager=app_flow_deps.movement_manager) + handler = ConversationStreamHandler(deps) + + transcript = "" + assistant_text = "" + tool_titles: list[str] = [] + error_messages: list[str] = [] + output_audio_duration = 0.0 + try: + for chunk in _audio_chunks(prepared_frame, MIC_TRANSCRIPTION_SAMPLE_RATE): + await handler.receive((MIC_TRANSCRIPTION_SAMPLE_RATE, chunk)) + + silence_ms = max(config.MIC_TRANSCRIPTION_SILENCE_MS + 50.0, 1.0) + await handler.receive( + (MIC_TRANSCRIPTION_SAMPLE_RATE, _silence_frame(MIC_TRANSCRIPTION_SAMPLE_RATE, silence_ms)) + ) + + await _wait_for_app_flow_mic_tasks(handler) + + while not handler.output_queue.empty(): + output = handler.output_queue.get_nowait() + if isinstance(output, tuple): + output_sample_rate, audio_frame = output + if isinstance(output_sample_rate, int) and isinstance(audio_frame, np.ndarray): + output_audio_duration += _audio_duration_seconds( + output_sample_rate, + cast(NDArray[np.int16], np.asarray(audio_frame, dtype=np.int16)), + ) + continue + + for message in getattr(output, "args", ()): + if not isinstance(message, dict): + continue + content = message.get("content") + if message.get("role") == "user" and isinstance(content, str): + transcript = content + elif message.get("role") == "assistant" and isinstance(content, str): + metadata = message.get("metadata") + if isinstance(metadata, dict) and isinstance(metadata.get("title"), str): + tool_titles.append(metadata["title"]) + if real_reachy: + await asyncio.sleep(0.2) + elif content.startswith("[error]"): + error_messages.append(content) + elif not content.startswith("[error]"): + assistant_text = content + finally: + await handler.shutdown() + app_flow_deps.stop() + + if error_messages: + raise RuntimeError("; ".join(error_messages)) + if not transcript: + raise RuntimeError("App-flow check did not produce a transcript") + if not assistant_text: + raise RuntimeError("App-flow check did not produce a final assistant response") + if output_audio_duration <= 0: + raise RuntimeError("App-flow check did not produce synthesized audio") + if require_tool and not tool_titles: + raise RuntimeError("App-flow check did not execute a Reachy tool") + + return [ + f"input_audio={input_label}", + f"input_audio_duration={_wav_duration_seconds(input_audio):.2f}s", + f"transcript={transcript}", + f"assistant_text={assistant_text}", + f"tool_results={', '.join(tool_titles) if tool_titles else ''}", + *app_flow_deps.movement_summary_lines(), + f"output_audio_duration={output_audio_duration:.2f}s", + ] + + +async def _wait_for_app_flow_mic_tasks(handler: Any) -> None: + """Wait for the handler's microphone transcription task to finish.""" + for _ in range(50): + tasks = list(getattr(handler, "_mic_transcription_tasks", ())) + if tasks: + await asyncio.gather(*tasks) + return + if not handler.output_queue.empty(): + return + await asyncio.sleep(0.05) + + raise RuntimeError("App-flow check did not flush microphone audio through the receive path") + + +async def run_check(args: argparse.Namespace) -> int: + """Run the selected backend check.""" + env_file = getattr(args, "env_file", None) + if env_file is not None and not load_dotenv_file(env_file): + print(f"[error] Could not load env file: {env_file}") + return 2 + + stage = _stage_name(args) + + for line in describe_selected_backend(): + print(line) + + error = ( + local_stt_stage_config_error(stage) + if getattr(args, "live", False) and selected_backend().uses_local_stt + else backend_config_error() + ) + if error: + print(f"[error] {error}") + hint = _backend_config_hint(error) + if hint: + print(f"[hint] {hint}") + return 2 + + require_tool_error = _require_tool_usage_error(args, stage) + if require_tool_error: + print(f"[error] {require_tool_error}") + return 2 + + real_reachy_error = _real_reachy_usage_error(args, stage) + if real_reachy_error: + print(f"[error] {real_reachy_error}") + return 2 + + print( + f"[ok] local_stt {stage} config is valid" + if getattr(args, "live", False) and selected_backend().uses_local_stt + else "[ok] backend config is valid" + ) + + if not args.live: + return 0 + + backend = selected_backend() + if not backend.uses_local_stt: + if not backend.uses_realtime: + print("[error] --live supports realtime backends and BACKEND_PROVIDER=local_stt") + return 2 + + try: + results = await live_realtime_session_check() + except Exception as e: + print(f"[error] realtime live session check failed: {type(e).__name__}: {e}") + return 1 + + for line in results: + print(line) + print("[ok] realtime live session check completed") + return 0 + + try: + if stage == "stt-probe": + results = await live_local_stt_probe_check() + elif stage == "stt": + results = await live_local_stt_transcription_check(args.seed_text, args.audio_file) + elif stage == "chat": + results = await live_local_stt_chat_check( + args.seed_text, + require_tool=getattr(args, "require_tool", False), + ) + elif stage == "tts": + results = await live_local_stt_tts_check(args.seed_text) + elif stage == "app-flow": + results = await live_local_stt_app_flow_check( + args.seed_text, + args.audio_file, + require_tool=getattr(args, "require_tool", False), + real_reachy=getattr(args, "real_reachy", False), + robot_name=getattr(args, "robot_name", None), + ) + else: + results = await live_local_stt_check(args.seed_text, args.audio_file) + except Exception as e: + print(f"[error] local_stt live {stage} check failed: {type(e).__name__}: {e}") + return 1 + + for line in results: + print(line) + print(f"[ok] local_stt live {stage} check completed") + return 0 + + +def build_parser() -> argparse.ArgumentParser: + """Build the backend check argument parser.""" + parser = argparse.ArgumentParser(description="Validate Reachy conversation backend configuration.") + parser.add_argument( + "--live", + action="store_true", + help="call configured endpoints. Realtime backends validate session startup; local_stt can validate each stage.", + ) + parser.add_argument( + "--seed-text", + default="Hi Reachy, please introduce yourself in one short sentence.", + help="text to synthesize as the input speech sample when --live is used without --audio-file.", + ) + parser.add_argument( + "--audio-file", + type=Path, + help="WAV or provider-supported audio file to send to STT instead of synthesizing seed text.", + ) + parser.add_argument( + "--stage", + choices=["stt-probe", "stt", "chat", "tts", "chain", "app-flow"], + default=None, + help=( + "with --live and BACKEND_PROVIDER=local_stt, check one stage. " + "Defaults to app-flow for local_stt live checks and is ignored by realtime backends." + ), + ) + parser.add_argument( + "--env-file", + type=Path, + help="load this dotenv file for backend validation instead of the default .env search.", + ) + parser.add_argument( + "--app-flow", + action="store_true", + help="shortcut for --stage app-flow.", + ) + parser.add_argument( + "--require-tool", + action="store_true", + help="with --live --stage chat or --live --stage app-flow, fail unless the model executes a Reachy tool.", + ) + parser.add_argument( + "--real-reachy", + action="store_true", + help="with --live --stage app-flow, use the real Reachy SDK/daemon instead of fake tool dependencies.", + ) + parser.add_argument( + "--robot-name", + help="optional Reachy daemon robot name/prefix, used with --real-reachy.", + ) + return parser + + +def main() -> None: + """CLI entry point.""" + parser = build_parser() + args = parser.parse_args() + raise SystemExit(asyncio.run(run_check(args))) + + +if __name__ == "__main__": + main() diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/backend_runtime.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/backend_runtime.py new file mode 100644 index 00000000..f94f3c9f --- /dev/null +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/backend_runtime.py @@ -0,0 +1,209 @@ +from typing import Final, Literal +from dataclasses import dataclass + +from reachy_mini_conversation_app.config import ( + BACKEND_LOCAL_STT, + BACKEND_PROVIDERS, + BACKEND_HF_REALTIME, + BACKEND_OPENAI_REALTIME, + HF_REALTIME_CONNECTION_LOCAL, + config, + is_configured_value, + openai_realtime_api_key, +) + + +OPENAI_COMPATIBLE_STREAM_SAMPLE_RATE: Final[int] = 24_000 +HF_REALTIME_STREAM_SAMPLE_RATE: Final[int] = 16_000 + +BackendTransport = Literal["realtime", "local_stt", "unknown"] + + +@dataclass(frozen=True) +class BackendRuntimeSpec: + """Runtime traits derived from the single BACKEND_PROVIDER selector.""" + + provider: str + transport: BackendTransport + stream_sample_rate: int + realtime_model: str = "" + realtime_voice: str = "" + refresh_realtime_client_on_retry: bool = False + + @property + def uses_realtime(self) -> bool: + """Return whether microphone/text input should use a realtime websocket.""" + return self.transport == "realtime" + + @property + def uses_local_stt(self) -> bool: + """Return whether microphone input should use STT plus Chat Completions.""" + return self.transport == "local_stt" + + +def selected_backend() -> BackendRuntimeSpec: + """Return the runtime backend selected by BACKEND_PROVIDER.""" + provider = config.BACKEND_PROVIDER + if provider == BACKEND_OPENAI_REALTIME: + return BackendRuntimeSpec( + provider=provider, + transport="realtime", + stream_sample_rate=OPENAI_COMPATIBLE_STREAM_SAMPLE_RATE, + realtime_model=config.OPENAI_REALTIME_MODEL or "", + realtime_voice=config.OPENAI_REALTIME_VOICE or "", + refresh_realtime_client_on_retry=False, + ) + + if provider == BACKEND_HF_REALTIME: + return BackendRuntimeSpec( + provider=provider, + transport="realtime", + stream_sample_rate=HF_REALTIME_STREAM_SAMPLE_RATE, + realtime_model=(config.HF_REALTIME_MODEL or "").strip(), + realtime_voice=config.HF_REALTIME_VOICE or "", + refresh_realtime_client_on_retry=True, + ) + + if provider == BACKEND_LOCAL_STT: + return BackendRuntimeSpec( + provider=provider, + transport="local_stt", + stream_sample_rate=OPENAI_COMPATIBLE_STREAM_SAMPLE_RATE, + ) + + return BackendRuntimeSpec( + provider=provider, + transport="unknown", + stream_sample_rate=OPENAI_COMPATIBLE_STREAM_SAMPLE_RATE, + ) + + +def configured_marker(value: str | None) -> str: + """Return a display-safe configured/missing marker.""" + return "configured" if is_configured_value(value) else "missing" + + +def local_stt_chat_config_error() -> str | None: + """Return a config error for the local-STT Chat Completions component.""" + if not is_configured_value(config.CHAT_API_KEY): + return ( + "CHAT_API_KEY is missing for BACKEND_PROVIDER=local_stt. If .env uses " + "CHAT_API_KEY=${NVIDIA_INFERENCE_API_KEY}, make sure NVIDIA_INFERENCE_API_KEY is exported " + "in the shell that starts the app." + ) + if not is_configured_value(config.CHAT_BASE_URL): + return "CHAT_BASE_URL is missing for BACKEND_PROVIDER=local_stt." + if not is_configured_value(config.CHAT_MODEL_NAME): + return "CHAT_MODEL_NAME is missing for BACKEND_PROVIDER=local_stt." + return None + + +def local_stt_transcription_config_error() -> str | None: + """Return a config error for the local-STT speech-to-text component.""" + if not is_configured_value(config.STT_API_KEY): + return "STT_API_KEY is missing for BACKEND_PROVIDER=local_stt." + if not is_configured_value(config.STT_BASE_URL): + return "STT_BASE_URL is missing for BACKEND_PROVIDER=local_stt." + if not is_configured_value(config.STT_MODEL_NAME): + return "STT_MODEL_NAME is missing for BACKEND_PROVIDER=local_stt." + return None + + +def local_stt_tts_config_error() -> str | None: + """Return a config error for the local-STT text-to-speech component.""" + if not is_configured_value(config.TTS_API_KEY): + return "TTS_API_KEY is missing for BACKEND_PROVIDER=local_stt." + if not is_configured_value(config.TTS_BASE_URL): + return "TTS_BASE_URL is missing for BACKEND_PROVIDER=local_stt." + if not is_configured_value(config.TTS_MODEL_NAME): + return "TTS_MODEL_NAME is missing for BACKEND_PROVIDER=local_stt." + return None + + +def backend_config_error() -> str | None: + """Return a startup-blocking config error for the selected backend, if any.""" + backend = selected_backend() + expected = ", ".join(sorted(BACKEND_PROVIDERS)) + if not is_configured_value(backend.provider): + return f"BACKEND_PROVIDER is missing; set it to one of {expected}." + + if backend.provider not in BACKEND_PROVIDERS: + return f"Unknown BACKEND_PROVIDER={backend.provider!r}; expected one of {expected}." + + if backend.provider == BACKEND_OPENAI_REALTIME: + if openai_realtime_api_key() is None: + return ( + "OPENAI_API_KEY is missing for BACKEND_PROVIDER=openai_realtime. " + "Export OPENAI_API_KEY in the shell that starts the app; set OPENAI_REALTIME_API_KEY " + "only if this app needs a different OpenAI key." + ) + if not is_configured_value(config.OPENAI_REALTIME_BASE_URL): + return "OPENAI_REALTIME_BASE_URL is missing for BACKEND_PROVIDER=openai_realtime." + if not is_configured_value(backend.realtime_model): + return "OPENAI_REALTIME_MODEL is missing for BACKEND_PROVIDER=openai_realtime." + return None + + if backend.provider == BACKEND_HF_REALTIME: + if config.HF_REALTIME_CONNECTION_MODE == HF_REALTIME_CONNECTION_LOCAL and not is_configured_value( + config.HF_REALTIME_WS_URL + ): + return "HF_REALTIME_WS_URL is missing for HF_REALTIME_CONNECTION_MODE=local." + return None + + if backend.provider == BACKEND_LOCAL_STT: + return local_stt_chat_config_error() or local_stt_transcription_config_error() or local_stt_tts_config_error() + + return None + + +def local_stt_stage_config_error(stage: str) -> str | None: + """Return the config error relevant to a local_stt live-check stage.""" + if stage in {"stt", "stt-probe"}: + return local_stt_transcription_config_error() + if stage == "chat": + return local_stt_chat_config_error() + if stage == "tts": + return local_stt_tts_config_error() + return backend_config_error() + + +def describe_selected_backend() -> list[str]: + """Return a non-secret summary of the selected backend configuration.""" + backend = selected_backend() + lines = [f"backend={backend.provider}"] + if backend.provider == BACKEND_OPENAI_REALTIME: + lines.extend( + [ + f"openai_realtime.base_url={config.OPENAI_REALTIME_BASE_URL}", + f"openai_realtime.model={backend.realtime_model}", + f"openai_realtime.voice={backend.realtime_voice}", + f"openai_realtime.api_key={configured_marker(openai_realtime_api_key())}", + ] + ) + elif backend.provider == BACKEND_HF_REALTIME: + lines.extend( + [ + f"hf_realtime.connection_mode={config.HF_REALTIME_CONNECTION_MODE}", + f"hf_realtime.session_url={config.HF_REALTIME_SESSION_URL}", + f"hf_realtime.ws_url={config.HF_REALTIME_WS_URL or ''}", + f"hf_realtime.model={backend.realtime_model or ''}", + f"hf_realtime.voice={backend.realtime_voice}", + f"hf_realtime.token={configured_marker(config.HF_TOKEN)}", + ] + ) + elif backend.provider == BACKEND_LOCAL_STT: + lines.extend( + [ + f"chat.base_url={config.CHAT_BASE_URL}", + f"chat.model={config.CHAT_MODEL_NAME}", + f"chat.api_key={configured_marker(config.CHAT_API_KEY)}", + f"stt.base_url={config.STT_BASE_URL}", + f"stt.model={config.STT_MODEL_NAME}", + f"stt.api_key={configured_marker(config.STT_API_KEY)}", + f"tts.base_url={config.TTS_BASE_URL}", + f"tts.model={config.TTS_MODEL_NAME}", + f"tts.voice={config.TTS_VOICE}", + f"tts.api_key={configured_marker(config.TTS_API_KEY)}", + ] + ) + return lines diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/camera_worker.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/camera_worker.py index e625c009..046bd8db 100644 --- a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/camera_worker.py +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/camera_worker.py @@ -51,7 +51,7 @@ def __init__(self, reachy_mini: ReachyMini, head_tracker: Any = None) -> None: # Face tracking timing variables (same as main_works.py) self.last_face_detected_time: float | None = None self.interpolation_start_time: float | None = None - self.interpolation_start_pose: NDArray[np.float32] | None = None + self.interpolation_start_pose: NDArray[np.float64] | None = None self.face_lost_delay = 2.0 # seconds to wait before starting interpolation self.interpolation_duration = 1.0 # seconds to interpolate back to neutral @@ -102,7 +102,7 @@ def working_loop(self) -> None: logger.debug("Starting camera working loop") # Initialize head tracker if available - neutral_pose = np.eye(4) # Neutral pose (identity matrix) + neutral_pose = np.eye(4, dtype=np.float64) # Neutral pose (identity matrix) self.previous_head_tracking_state = self.is_head_tracking_enabled while not self._stop_event.is_set(): @@ -190,7 +190,7 @@ def working_loop(self) -> None: current_translation = self.face_tracking_offsets[:3] current_rotation_euler = self.face_tracking_offsets[3:] # Convert to 4x4 pose matrix - pose_matrix = np.eye(4, dtype=np.float32) + pose_matrix = np.eye(4, dtype=np.float64) pose_matrix[:3, 3] = current_translation pose_matrix[:3, :3] = R.from_euler( "xyz", @@ -199,12 +199,17 @@ def working_loop(self) -> None: self.interpolation_start_pose = pose_matrix # Calculate interpolation progress (t from 0 to 1) - elapsed_interpolation = current_time - self.interpolation_start_time + interpolation_start_time = self.interpolation_start_time + interpolation_start_pose = self.interpolation_start_pose + if interpolation_start_time is None or interpolation_start_pose is None: + continue + + elapsed_interpolation = current_time - interpolation_start_time t = min(1.0, elapsed_interpolation / self.interpolation_duration) # Interpolate between current pose and neutral pose interpolated_pose = linear_pose_interpolation( - self.interpolation_start_pose, + interpolation_start_pose, neutral_pose, t, ) diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/chat_completions.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/chat_completions.py new file mode 100644 index 00000000..882f6d0b --- /dev/null +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/chat_completions.py @@ -0,0 +1,270 @@ +"""Chat Completions text/tool loop for the local-STT backend.""" + +import re +import json +import uuid +import asyncio +import logging +from typing import Any, Final, cast + +from reachy_mini_conversation_app.prompts import get_session_instructions +from reachy_mini_conversation_app.tools.core_tools import ( + ToolDependencies, + get_tool_specs, + dispatch_tool_call_with_manager, +) +from reachy_mini_conversation_app.tools.background_tool_manager import BackgroundToolManager + + +logger = logging.getLogger(__name__) + +_RATE_LIMIT_ATTEMPTS: Final[int] = 3 +_RATE_LIMIT_DEFAULT_DELAY: Final[float] = 5.0 +_RATE_LIMIT_MAX_DELAY: Final[float] = 30.0 +_TOOL_ROUND_LIMIT: Final[int] = 5 +_WAIT_RE: Final[re.Pattern[str]] = re.compile( + r"(?:please\s+)?wait\s+(\d+(?:\.\d+)?)\s+seconds?", + re.IGNORECASE, +) + + +def chat_completion_tool_specs() -> list[dict[str, Any]]: + """Convert Realtime-style tool specs to Chat Completions tool specs.""" + chat_tools: list[dict[str, Any]] = [] + for tool in get_tool_specs(): + if tool.get("type") != "function": + continue + chat_tools.append( + { + "type": "function", + "function": { + "name": tool.get("name"), + "description": tool.get("description", ""), + "parameters": tool.get("parameters", {}), + }, + } + ) + return chat_tools + + +def _tool_call_value(tool_call: Any, name: str) -> Any: + """Read a value from either an SDK model object or a dict.""" + if isinstance(tool_call, dict): + return tool_call.get(name) + return getattr(tool_call, name, None) + + +def _message_value(message: Any, name: str) -> Any: + """Read a chat message value from either an SDK model object or a dict.""" + if isinstance(message, dict): + return message.get(name) + return getattr(message, name, None) + + +def _choice_message(choice: Any) -> Any: + """Read a Chat Completions choice message from either an object or a dict.""" + if isinstance(choice, dict): + return choice.get("message") + return getattr(choice, "message", None) + + +def _tool_call_function_value(tool_call: Any, name: str) -> Any: + """Read a function value from either an SDK tool-call object or a dict.""" + function = _tool_call_value(tool_call, "function") + if isinstance(function, dict): + return function.get(name) + return getattr(function, name, None) + + +def _serialize_tool_call(tool_call: Any) -> dict[str, Any]: + """Convert a tool call into the dict shape Chat Completions expects.""" + if hasattr(tool_call, "model_dump"): + return tool_call.model_dump() + if isinstance(tool_call, dict): + return tool_call + return { + "id": getattr(tool_call, "id", None), + "type": getattr(tool_call, "type", "function"), + "function": { + "name": getattr(getattr(tool_call, "function", None), "name", None), + "arguments": getattr(getattr(tool_call, "function", None), "arguments", "{}"), + }, + } + + +def _rate_limit_delay(exc: Exception) -> float | None: + """Return a retry delay when a Chat Completions error is a provider rate limit.""" + status_code = getattr(exc, "status_code", None) + message = str(exc) + is_rate_limit = ( + status_code == 429 + or "ratelimit" in type(exc).__name__.lower() + or "rate limit" in message.lower() + or "throttling" in message.lower() + ) + if not is_rate_limit: + return None + + response = getattr(exc, "response", None) + headers = getattr(response, "headers", None) + if headers is not None: + retry_after = headers.get("retry-after") or headers.get("Retry-After") + if retry_after: + try: + return min(float(retry_after), _RATE_LIMIT_MAX_DELAY) + except (TypeError, ValueError): + pass + + match = _WAIT_RE.search(message) + if match: + try: + return min(float(match.group(1)), _RATE_LIMIT_MAX_DELAY) + except (TypeError, ValueError): + pass + + return _RATE_LIMIT_DEFAULT_DELAY + + +class ChatCompletionRunner: + """Run a Chat Completions turn, including Reachy tool calls.""" + + def __init__( + self, + *, + client: Any, + deps: ToolDependencies, + tool_manager: BackgroundToolManager, + model_name: str, + base_url: str | None, + ) -> None: + """Initialize the runner.""" + self.client = client + self.deps = deps + self.tool_manager = tool_manager + self.model_name = model_name + self.base_url = base_url + + async def create_with_retries(self, operation: str, **kwargs: Any) -> Any: + """Create a Chat Completions response, retrying short provider rate limits.""" + for attempt in range(1, _RATE_LIMIT_ATTEMPTS + 1): + try: + return await self.client.chat.completions.create(**kwargs) + except Exception as e: + delay = _rate_limit_delay(e) + if delay is None or attempt == _RATE_LIMIT_ATTEMPTS: + raise + + logger.warning( + "%s rate-limited by provider; retrying in %.1fs (%d/%d)", + operation, + delay, + attempt, + _RATE_LIMIT_ATTEMPTS, + ) + await asyncio.sleep(delay) + + raise RuntimeError("unreachable Chat Completions retry state") + + async def send_text_message(self, text: str) -> list[dict[str, Any]]: + """Send a user text turn through Chat Completions and Reachy tools.""" + chatbot_messages: list[dict[str, Any]] = [{"role": "user", "content": text}] + chat_messages: list[dict[str, Any]] = [ + {"role": "system", "content": get_session_instructions()}, + {"role": "user", "content": text}, + ] + chat_tools = chat_completion_tool_specs() + + operation = "Chat Completions request" + request_kwargs: dict[str, Any] = { + "model": self.model_name, + "messages": cast(Any, chat_messages), + "tools": cast(Any, chat_tools), + "tool_choice": "auto", + } + + for tool_round in range(_TOOL_ROUND_LIMIT + 1): + try: + completion = await self.create_with_retries(operation, **request_kwargs) + except Exception as e: + logger.exception("%s failed", operation) + chatbot_messages.append( + { + "role": "assistant", + "content": ( + f"[error] {operation} failed " + f"(model={self.model_name!r}, base_url={self.base_url!r}): " + f"{type(e).__name__}: {e}" + ), + } + ) + return chatbot_messages + + choice = completion.choices[0] if completion.choices else None + assistant_message = _choice_message(choice) if choice else None + assistant_content = _message_value(assistant_message, "content") or "" + tool_calls = _message_value(assistant_message, "tool_calls") or [] + + if not tool_calls: + chatbot_messages.append({"role": "assistant", "content": assistant_content or "[no response]"}) + return chatbot_messages + + if tool_round >= _TOOL_ROUND_LIMIT: + chatbot_messages.append( + { + "role": "assistant", + "content": ( + f"[error] Chat Completions exceeded the configured tool round limit ({_TOOL_ROUND_LIMIT})." + ), + } + ) + return chatbot_messages + + chat_messages.append( + { + "role": "assistant", + "content": assistant_content, + "tool_calls": [_serialize_tool_call(tool_call) for tool_call in tool_calls], + } + ) + + for tool_call in tool_calls: + tool_call_id = _tool_call_value(tool_call, "id") or str(uuid.uuid4()) + tool_name = _tool_call_function_value(tool_call, "name") + args_json = _tool_call_function_value(tool_call, "arguments") or "{}" + if not isinstance(tool_name, str): + tool_result = {"error": "tool call did not include a valid function name"} + else: + tool_result = await dispatch_tool_call_with_manager( + tool_name, + args_json, + self.deps, + self.tool_manager, + ) + + tool_result_json = json.dumps(tool_result) + chat_messages.append( + { + "role": "tool", + "tool_call_id": tool_call_id, + "content": tool_result_json, + } + ) + chatbot_messages.append( + { + "role": "assistant", + "content": tool_result_json, + "metadata": { + "title": f"Used tool {tool_name or 'unknown'}", + "status": "done", + }, + } + ) + + operation = "Chat Completions tool follow-up" + request_kwargs = { + "model": self.model_name, + "messages": cast(Any, chat_messages), + "tools": cast(Any, chat_tools), + } + + raise RuntimeError("unreachable Chat Completions tool round state") diff --git a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/config.py b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/config.py index 115fcdae..c90f86ac 100644 --- a/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/config.py +++ b/projects/reachy-mini-openshell/src/reachy_mini_conversation_app/config.py @@ -1,16 +1,36 @@ import os +import re import sys import logging +from typing import Mapping from pathlib import Path -from collections.abc import Mapping +from dataclasses import dataclass +from urllib.parse import urlsplit, parse_qsl, urlunsplit -from dotenv import find_dotenv, load_dotenv, dotenv_values +from dotenv import find_dotenv, dotenv_values LOCKED_PROFILE = "_reachy_mini_conversation_app_locked_profile" DEFAULT_PROFILES_DIRECTORY = Path(__file__).parent / "profiles" +BACKEND_OPENAI_REALTIME = "openai_realtime" +BACKEND_HF_REALTIME = "hf_realtime" +BACKEND_LOCAL_STT = "local_stt" +BACKEND_PROVIDERS = { + BACKEND_OPENAI_REALTIME, + BACKEND_HF_REALTIME, + BACKEND_LOCAL_STT, +} + +HF_REALTIME_CONNECTION_DEPLOYED = "deployed" +HF_REALTIME_CONNECTION_LOCAL = "local" +HF_REALTIME_SESSION_PROXY_URL = "https://pollen-robotics-reachy-mini-realtime-url.hf.space/session" + logger = logging.getLogger(__name__) +_MARKDOWN_URL_RE = re.compile(r"^\[(?P
    -## Featured tutorial +## Featured project ### Reachy Mini + OpenShell -Build a physical Reachy Mini application with an authenticated MCP robot -service, an OpenShell-sandboxed conversation agent, separate Realtime and -vision model routes, and policy-controlled robot tools. +Run a voice agent onboard a physical Reachy Mini while OpenShell independently +allows camera capture and denies head motion. The robot-native controller owns +media; the conversation and model-selected REST tools stay inside the sandbox. -[Start the step-by-step tutorial](projects/reachy-mini-openshell-sandbox.md){ .md-button .md-button--primary } +[Read the Dev Note](dev-notes/posts/2026-07-13-policy-controlling-reachy-mini-with-openshell.md){ .md-button .md-button--primary } +[Open the setup tutorial](https://github.com/NVIDIA/OpenShell-Research/blob/kirit93/reachy-implementation/projects/reachy-mini-openshell/ONBOARD_SETUP.md){ .md-button } [View the project overview](projects/reachy-mini-openshell/index.md){ .md-button } ## Starting points @@ -30,7 +31,7 @@ vision model routes, and policy-controlled robot tools. - [Research engineering](research/index.md) - [Projects](projects/index.md) - [Reachy Mini + OpenShell project](projects/reachy-mini-openshell/index.md) -- [Reachy Mini OpenShell sandbox tutorial](projects/reachy-mini-openshell-sandbox.md) +- [Designing OpenShell for the Edge](dev-notes/posts/2026-07-13-policy-controlling-reachy-mini-with-openshell.md) - [Runtime notes](research/runtime.md) - [Application patterns](research/applications.md) - [Dev Notes](dev-notes/index.md) diff --git a/docs/projects/index.md b/docs/projects/index.md index 860e1dea..6a86e2bc 100644 --- a/docs/projects/index.md +++ b/docs/projects/index.md @@ -8,11 +8,14 @@ setup guide, validation commands, and troubleshooting notes. ### [Reachy Mini + OpenShell](reachy-mini-openshell/index.md) A physical-robot and simulator conversation demo with OpenAI Realtime, a -Gradio UI, an authenticated host-side MCP service, approved vision routing, -and OpenShell policy enforcement for robot tools. +robot-native audio and camera bridge, fixed REST actions, an optional Gradio +diagnostic UI, and OpenShell policy enforcement for physical robot tools. -**Following the POC build?** Start with the -[full step-by-step sandbox tutorial](reachy-mini-openshell-sandbox.md). +**Want the edge architecture and engineering story?** Read +[Designing OpenShell for the Edge](../dev-notes/posts/2026-07-13-policy-controlling-reachy-mini-with-openshell.md). + +**Building it on a robot?** Follow the +[project-local onboard setup tutorial](https://github.com/NVIDIA/OpenShell-Research/blob/kirit93/reachy-implementation/projects/reachy-mini-openshell/ONBOARD_SETUP.md). ## Project Page Standard diff --git a/docs/projects/reachy-mini-openshell-sandbox.md b/docs/projects/reachy-mini-openshell-sandbox.md index 05be9746..e11e7894 100644 --- a/docs/projects/reachy-mini-openshell-sandbox.md +++ b/docs/projects/reachy-mini-openshell-sandbox.md @@ -1,468 +1,9 @@ -# Run Reachy Mini Through an OpenShell REST Policy +# Reachy Mini + OpenShell Setup Tutorial -This tutorial runs the Reachy Mini conversation app inside an OpenShell sandbox, -calls the robot daemon's REST API for fixed head actions, and optionally captures -one camera frame through a narrow trusted native Reachy App adapter. +The canonical tutorial now lives beside the runnable project: -There is no MCP server, JSON-RPC adapter, scene scan, camera configuration tool, -or separate vision-model route. The existing OpenAI Realtime session receives -the captured image. +[Open the onboard setup tutorial](https://github.com/NVIDIA/OpenShell-Research/blob/kirit93/reachy-implementation/projects/reachy-mini-openshell/ONBOARD_SETUP.md){ .md-button .md-button--primary } -## What this demonstrates - -The model can translate a request such as: - -```text -Reachy, look up and then right. -``` - -into the fixed application tool call: - -```json -{"directions": ["up", "right"]} -``` - -The application maps those names to fixed head poses and sends one ordered -`POST /api/move/goto` request at a time. OpenShell decides whether that HTTP -method and path may leave the sandbox. - -For a request such as `Reachy, what do you see?`, the model calls the fixed -`camera(question)` tool. That tool sends an argument-free -`POST /camera/capture` request. OpenShell independently decides whether that -single capture endpoint may leave the sandbox. - -## Architecture - -```mermaid -flowchart LR - U["Reachy microphone and speaker"] <--> N["Trusted native Reachy App"] - N <-->|"PCM audio"| A["Conversation app
    OpenShell sandbox"] - A -->|"Realtime WebSocket"| O["OpenAI Realtime"] - A -->|"Motion REST"| P["OpenShell network policy"] - P -->|"host.openshell.internal:8000"| D["Reachy Mini daemon"] - D --> H["Head motors"] - A -->|"POST /camera/capture"| P - P -->|"host.openshell.internal:8042"| N - N --> C["Reachy camera"] -``` - -The sandbox does not start the Reachy SDK, movement manager, camera worker, or -vision router. The trusted native Reachy App owns the SDK media object and only -bridges audio plus one bounded JPEG capture operation. - -## Security boundary - -OpenShell REST rules can match: - -- Calling binary -- Destination host and port -- HTTP method -- URL path -- Query parameters - -OpenShell can therefore allow or deny: - -```text -POST /api/move/goto -POST /camera/capture -``` - -It does not currently enforce arbitrary JSON values inside that REST request. -Once `/api/move/goto` is allowed, OpenShell cannot prove that the body contains -only a head pose or distinguish `up` from `down`. - -The application reduces normal model behavior to fixed values: - -| Direction | Pitch | Yaw | -| --- | ---: | ---: | -| `up` | -30 degrees | 0 degrees | -| `down` | 30 degrees | 0 degrees | -| `left` | 0 degrees | 40 degrees | -| `right` | 0 degrees | -40 degrees | -| `front` | 0 degrees | 0 degrees | - -It also fixes duration to one second, uses `minjerk`, and omits antennas and -body yaw. These body constraints are application validation, not OpenShell -policy enforcement. - -Camera capture has a tighter adapter boundary: the request has no body fields -or query parameters. The native adapter chooses the already-open Reachy camera, -captures one JPEG, never writes it to disk, limits the response to 2 MiB, and -rate-limits calls. OpenShell still enforces the calling binary, host, port, -method, and exact path; the adapter enforces the capture semantics. - -## Prerequisites - -- Reachy Mini daemon reachable on port `8000` -- Docker-backed OpenShell gateway -- Python 3.10 through 3.12 for local development -- `uv` -- OpenAI provider configured for the sandbox - -Verify the robot daemon before adding OpenShell: - -```bash -curl http://reachy-mini.local:8000/api/daemon/status -``` - -For an on-robot sandbox, also verify the daemon through the Docker host alias: - -```bash -docker run --rm --add-host host.openshell.internal:host-gateway \ - curlimages/curl:latest \ - http://host.openshell.internal:8000/api/daemon/status -``` - -Do not continue until the daemon reports `state: running`. - -## Run locally before sandboxing - -From the project directory: - -```bash -cp .env.example .env -export OPENAI_API_KEY=sk-... -./scripts/start-local.sh -``` - -The default `.env.example` selects: - -```dotenv -REACHY_TOOL_TRANSPORT=rest -REACHY_REST_BASE_URL=http://127.0.0.1:8000 -``` - -Test these prompts in text mode first: - -```text -Reachy, look up. -Reachy, look front. -Reachy, look left and then right. -Stop moving. -``` - -## REST transport behavior - -The REST transport always advertises these physical tools: - -- `move_head(directions)` -- `stop_motion()` - -When `REACHY_CAMERA_BASE_URL` is configured, it additionally advertises: - -- `camera(question)` - -`move_head` accepts one to eight values from `left`, `right`, `up`, `down`, and -`front`. Extra keys and raw pose values are rejected before a network request is -made. - -Each successful `goto` returns a move UUID. The client polls -`GET /api/move/running` and waits for that UUID to finish before sending the next -direction. A timed-out POST is reported as `unknown_delivery` and is never -automatically retried. - -`stop_motion` lists active move UUIDs and calls `POST /api/move/stop` once for -each one. - -`camera` posts no model-supplied capture settings. It accepts only a short -question, validates the JPEG response, sends the image into the existing -Realtime conversation, and asks the assistant to answer aloud. An OpenShell -`403` becomes `status: policy_denied` and is not retried. - -## OpenShell policies - -Three relevant policies are checked in: - -```text -openshell/policy-motion-disabled.yaml -openshell/policy-camera-enabled-motion-disabled.yaml -openshell/policy-head-motion-enabled.yaml -``` - -Both allow: - -```text -GET /api/daemon/status -GET /api/move/running -POST /api/move/stop -``` - -Only `policy-head-motion-enabled.yaml` allows: - -```text -POST /api/move/goto -``` - -Only `policy-camera-enabled-motion-disabled.yaml` allows: - -```text -POST /camera/capture -``` - -That camera policy still blocks `POST /api/move/goto`. The base -`policy-motion-disabled.yaml` blocks both camera capture and motion start. - -Neither policy allows `/api/move/set_target`, `/api/motors/**`, -`/api/apps/**`, raw movement WebSockets, wake/sleep, or recorded motions. - -The permitted binary is `/opt/venv/bin/python`. A denial seen with `curl` could -therefore be a binary denial rather than a path denial; use the application or -the same Python executable for final policy tests. - -## Build the sandbox image - -```bash -docker build -f Dockerfile.openshell -t reachy-openshell-rest . -``` - -The image installs the application at `/opt/venv` and runs as the sandbox user. - -## Create the sandbox once - -Create an idle sandbox with camera enabled and motion disabled: - -```bash -openshell sandbox create \ - --name reachy-agent \ - --from ./Dockerfile.openshell \ - --policy ./openshell/policy-camera-enabled-motion-disabled.yaml \ - --provider reachy-openai \ - --env REACHY_MINI_SKIP_DOTENV=1 \ - --env BACKEND_PROVIDER=openai_realtime \ - --env REACHY_TOOL_TRANSPORT=rest \ - --env REACHY_REST_BASE_URL=http://host.openshell.internal:8000 \ - --env REACHY_CAMERA_BASE_URL=http://host.openshell.internal:8042 \ - --env REACHY_REST_TIMEOUT_SECONDS=5 \ - --env REACHY_MOTION_DURATION_SECONDS=1 \ - --env REACHY_MOTION_POLL_INTERVAL_SECONDS=0.1 \ - --env REACHY_MOTION_COMPLETION_TIMEOUT_SECONDS=10 \ - --env REACHY_AUDIO_HOST=127.0.0.1 \ - --env REACHY_AUDIO_PORT=8765 \ - --env REACHY_AGENT_START_TIMEOUT_SECONDS=120 \ - --env REACHY_MODEL_LOGS=1 \ - --env OPENAI_REALTIME_BASE_URL=https://api.openai.com/v1 \ - --env OPENAI_REALTIME_MODEL=gpt-realtime-2 \ - --env OPENAI_REALTIME_VOICE=cedar -``` - -Check that it is ready: - -```bash -openshell sandbox get reachy-agent -``` - -The 120-second agent startup window is intentional. A cold import of the audio -stack takes about 40 seconds on the Reachy Mini onboard Raspberry Pi. - -## Robot-native media and lifecycle - -The normal onboard path uses a small trusted Reachy App from -`projects/reachy-mini-openshell/native-controller`. It owns only the robot -microphone, speaker, camera snapshot adapter, and fixed OpenShell lifecycle -commands. The model, tools, and every requested action remain inside -`reachy-agent`. - -Create the loopback audio service once: - -```bash -openshell service expose reachy-agent 8765 audio -``` - -The native Reachy App's Start lifecycle then runs: - -```bash -openshell sandbox exec --name reachy-agent --no-tty -- \ - /opt/venv/bin/reachy-agent-control start -``` - -Its audio client connects locally on the robot to: - -```text -ws://reachy-agent--audio.openshell.localhost:17670/audio -``` - -The service accepts one client, mono signed 16-bit PCM at 16 kHz, and exposes -`GET /health` plus `WS /audio`. The Reachy App reads and plays audio through the -SDK media manager. No laptop, browser, Gradio page, or SSH tunnel is required -after installation. - -The same native app serves only this camera operation on the robot host: - -```text -POST http://127.0.0.1:8042/camera/capture -``` - -The sandbox addresses it as -`http://host.openshell.internal:8042/camera/capture`, so the call crosses the -OpenShell REST policy. It is not exposed as an OpenShell browser service. - -When the Reachy App is stopped it runs: - -```bash -openshell sandbox exec --name reachy-agent --no-tty -- \ - /opt/venv/bin/reachy-agent-control stop -``` - -The sandbox, provider, service endpoint, and policy remain provisioned for the -next Start. - -Build the native controller on the development machine: - -```bash -cd projects/reachy-mini-openshell -uv build --project native-controller -``` - -Copy `native-controller/dist/reachy_mini_openshell_controller-0.2.0-py3-none-any.whl` -to `/home/pollen/` on Reachy. On a Wireless unit, install it directly into the -daemon's shared app environment using the Pollen-supported manual deployment -path: - -```bash -/opt/uv/uv pip install --no-cache \ - --python /venvs/apps_venv/bin/python \ - /home/pollen/reachy_mini_openshell_controller-0.2.0-py3-none-any.whl -``` - -The `/api/apps/install` endpoint intentionally does not accept `source_kind: -local`; that endpoint installs catalog/Hugging Face apps. After the manual pip -install, `reachy_mini_openshell_controller` appears in the installed app list -and can be started from the Reachy Apps UI. The daemon launches the controller -in its shared apps environment and supplies the local `ReachyMini` media object. - -Inspect the inner process when troubleshooting: - -```bash -openshell sandbox exec --name reachy-agent --no-tty -- \ - /opt/venv/bin/reachy-agent-control status -openshell sandbox exec --name reachy-agent --no-tty -- \ - tail -n 100 /sandbox/logs/reachy-agent.log -``` - -## Optional Gradio diagnostic path - -To diagnose the model/tool path independently of robot-native audio, run the -browser application without recreating the sandbox: - -```bash -openshell sandbox exec \ - --name reachy-agent \ - --timeout 0 \ - --no-tty \ - -- \ - /opt/venv/bin/python -m reachy_mini_conversation_app \ - --gradio \ - --model-logs \ - --tool-transport rest -``` - -In another terminal, expose the Gradio port once: - -```bash -openshell service expose reachy-agent 7860 gradio -``` - -Open the URL printed by OpenShell. Keep the foreground `sandbox exec` running -until the diagnostic session is finished. The native Reachy App does not use -this Gradio endpoint. - -## Verify the denied action - -With `policy-motion-disabled.yaml` active, say: - -```text -Reachy, look up. -``` - -Expected behavior: - -1. The model selects `move_head`. -2. The app attempts `POST /api/move/goto`. -3. OpenShell returns HTTP `403`. -4. The tool result has `status: policy_denied`. -5. Reachy does not move. -6. The assistant explains that policy blocked the action and does not retry. - -## Verify camera allow and deny - -With `policy-camera-enabled-motion-disabled.yaml` active, say: - -```text -Reachy, take a picture and tell me what you see. -``` - -Expected behavior: the model selects `camera`, OpenShell permits only -`POST /camera/capture`, one JPEG is delivered to the Realtime session, and -Reachy answers aloud. Asking `Reachy, look up` remains denied. - -To prove the camera boundary, hot-reload `policy-motion-disabled.yaml` and ask -the picture question again. Reachy must not capture a frame and should explain -that policy blocked the action. Restore the camera-enabled policy to allow -snapshots again. - -Inspect logs: - -```bash -openshell logs reachy-agent --tail -``` - -## Enable head motion without restarting - -Hot-reload the enabled policy: - -```bash -openshell policy set reachy-agent \ - --policy ./openshell/policy-head-motion-enabled.yaml \ - --wait -``` - -Repeat the same request. Reachy should now move through the fixed application -pose. - -Return to the restrictive policy: - -```bash -openshell policy set reachy-agent \ - --policy ./openshell/policy-motion-disabled.yaml \ - --wait -``` - -## Negative policy tests - -Use the permitted Python binary inside the sandbox to test a dangerous path: - -```bash -openshell sandbox exec -n reachy-agent -- \ - /opt/venv/bin/python -c \ - 'import httpx; print(httpx.post("http://host.openshell.internal:8000/api/move/set_target", json={}).status_code)' -``` - -Expected result: `403`. - -Repeat for a motor path or app-management path. Those requests must remain -denied under both policies. - -## Tests - -```bash -uv run ruff check . -uv run pytest -q -docker build -f Dockerfile.openshell -t reachy-openshell-rest . -``` - -The unit suite covers fixed schemas, pose mapping, argument rejection, ordered -movement, stop behavior, OpenShell `403` conversion, no retry after an uncertain -motion POST, native JPEG limits, and exact camera-policy rules. - -## Completion criteria - -- No MCP package, server, client, token, or endpoint remains. -- The sandbox starts no local robot SDK or camera workers. -- Only fixed head directions, stop, and the optional one-frame camera tool are - model-visible robot actions. -- Motion-disabled policy blocks `goto` while preserving stop. -- Camera-enabled/motion-disabled policy permits only one fixed capture endpoint - and still blocks `goto`. -- Motion-enabled policy allows `goto` but no raw target or motor endpoints. -- Policy can be hot-reloaded without recreating the sandbox. -- Documentation states that JSON body values remain application-enforced. +For the engineering story and reusable edge architecture, read +[Designing OpenShell for the Edge: Why Policy Has to Live Next to the +Action](../dev-notes/posts/2026-07-13-policy-controlling-reachy-mini-with-openshell.md). diff --git a/docs/projects/reachy-mini-openshell/index.md b/docs/projects/reachy-mini-openshell/index.md index 8a06abbf..6f14345a 100644 --- a/docs/projects/reachy-mini-openshell/index.md +++ b/docs/projects/reachy-mini-openshell/index.md @@ -1,12 +1,21 @@ # Reachy Mini + OpenShell -This project demonstrates how OpenShell can constrain an AI-controlled physical -Reachy Mini by mediating direct REST calls from a sandboxed conversation app. +This project is a reference implementation for running OpenShell on an edge +device. A conversation agent runs in an onboard sandbox, trusted native code +owns the hardware, and local policy mediates the REST calls that can produce +physical effects on Reachy Mini. ## Start here -Follow the **[Reachy Mini OpenShell sandbox tutorial](../reachy-mini-openshell-sandbox.md)** -for the complete, copy-and-run build. +Read **[Designing OpenShell for the Edge: Why Policy Has to Live Next to the +Action](../../dev-notes/posts/2026-07-13-policy-controlling-reachy-mini-with-openshell.md)** +for the reusable edge architecture, implementation decisions, challenges, and +demo result. + +Follow the **[project-local onboard setup +tutorial](https://github.com/NVIDIA/OpenShell-Research/blob/kirit93/reachy-implementation/projects/reachy-mini-openshell/ONBOARD_SETUP.md)** +for the copy-and-run build, installation, policy verification, voice demo, and +troubleshooting steps. The tutorial progressively adds: @@ -21,16 +30,19 @@ The tutorial progressively adds: | Component | Location | Responsibility | | --- | --- | --- | | Reachy daemon | Reachy Mini | Controls the physical motors and exposes the REST API. | -| OpenShell gateway | Sandbox host | Creates the sandbox and enforces REST method/path policy. | -| Conversation application | OpenShell sandbox | Runs the Gradio UI and Realtime conversation session. | +| OpenShell gateway | Reachy Mini | Creates the onboard sandbox and enforces REST method/path policy. | +| Conversation application | OpenShell sandbox on Reachy | Runs the Realtime conversation session and fixed REST tools. | +| Native controller | Reachy App on Reachy | Owns microphone, speaker, and camera; starts/stops the sandbox agent. | ## Project resources -- [Full step-by-step tutorial](../reachy-mini-openshell-sandbox.md) -- [Application source and README](https://github.com/NVIDIA/OpenShell-Research/tree/main/projects/reachy-mini-openshell) -- [Motion-disabled policy](https://github.com/NVIDIA/OpenShell-Research/blob/main/projects/reachy-mini-openshell/openshell/policy-motion-disabled.yaml) -- [Head-motion-enabled policy](https://github.com/NVIDIA/OpenShell-Research/blob/main/projects/reachy-mini-openshell/openshell/policy-head-motion-enabled.yaml) -- [Sandbox Dockerfile](https://github.com/NVIDIA/OpenShell-Research/blob/main/projects/reachy-mini-openshell/Dockerfile.openshell) +- [Implementation Dev Note](../../dev-notes/posts/2026-07-13-policy-controlling-reachy-mini-with-openshell.md) +- [Onboard setup and troubleshooting tutorial](https://github.com/NVIDIA/OpenShell-Research/blob/kirit93/reachy-implementation/projects/reachy-mini-openshell/ONBOARD_SETUP.md) +- [Application source and README](https://github.com/NVIDIA/OpenShell-Research/tree/kirit93/reachy-implementation/projects/reachy-mini-openshell) +- [Motion-disabled policy](https://github.com/NVIDIA/OpenShell-Research/blob/kirit93/reachy-implementation/projects/reachy-mini-openshell/openshell/policy-motion-disabled.yaml) +- [Camera-enabled, motion-disabled policy](https://github.com/NVIDIA/OpenShell-Research/blob/kirit93/reachy-implementation/projects/reachy-mini-openshell/openshell/policy-camera-enabled-motion-disabled.yaml) +- [Head-motion-enabled policy](https://github.com/NVIDIA/OpenShell-Research/blob/kirit93/reachy-implementation/projects/reachy-mini-openshell/openshell/policy-head-motion-enabled.yaml) +- [Sandbox Dockerfile](https://github.com/NVIDIA/OpenShell-Research/blob/kirit93/reachy-implementation/projects/reachy-mini-openshell/Dockerfile.openshell) ## Two ways to use the project @@ -41,5 +53,5 @@ without an OpenShell sandbox. ### Build the OpenShell policy POC -Use the sandbox tutorial when you want to demonstrate direct REST restrictions, -visible policy denials, and the physical Reachy Mini architecture. +Use the onboard setup tutorial when you want to demonstrate direct REST +restrictions, visible policy denials, and the physical Reachy Mini architecture. diff --git a/docs/research/applications.md b/docs/research/applications.md index bf94f8b4..675e791a 100644 --- a/docs/research/applications.md +++ b/docs/research/applications.md @@ -15,7 +15,9 @@ research project. Keep project-specific setup in [Projects](../projects/index.md [Reachy Mini + OpenShell](../projects/reachy-mini-openshell/index.md) is the current runnable example: OpenAI Realtime conversation, a browser UI, simulator -or physical robot operation, an authenticated MCP tool boundary, approved -vision routing, and OpenShell policy enforcement for Reachy tools. Follow the -[step-by-step sandbox tutorial](../projects/reachy-mini-openshell-sandbox.md) -to build the complete POC. +or physical robot operation, a robot-native media bridge, fixed REST actions, +and OpenShell policy enforcement for Reachy tools. Read the +[implementation Dev Note](../dev-notes/posts/2026-07-13-policy-controlling-reachy-mini-with-openshell.md), +then follow the +[project-local setup tutorial](https://github.com/NVIDIA/OpenShell-Research/blob/kirit93/reachy-implementation/projects/reachy-mini-openshell/ONBOARD_SETUP.md) +to reproduce the complete onboard demo. diff --git a/projects/reachy-mini-openshell/ONBOARD_SETUP.md b/projects/reachy-mini-openshell/ONBOARD_SETUP.md new file mode 100644 index 00000000..fa9abbcc --- /dev/null +++ b/projects/reachy-mini-openshell/ONBOARD_SETUP.md @@ -0,0 +1,762 @@ +# Onboard Reachy Mini + OpenShell Setup + +This is the canonical setup guide for running the Reachy Mini conversation app +on the robot itself. The conversation agent runs inside an OpenShell sandbox; +a trusted native Reachy App owns microphone, speaker, and one-frame camera +access; and OpenShell independently allows or denies the REST requests that can +cause physical actions. + +For the implementation story, architecture decisions, and lessons from building +the demo, read the [Dev Note](https://github.com/NVIDIA/OpenShell-Research/blob/kirit93/reachy-implementation/docs/dev-notes/posts/2026-07-13-policy-controlling-reachy-mini-with-openshell.md). + +The commands alternate between a **development machine** and **Reachy**. Build +the wheel and ARM64 image on the development machine; install and run the final +artifacts on Reachy. + +## What this demonstrates + +The model can translate a request such as: + +```text +Reachy, look up and then right. +``` + +into the fixed application tool call: + +```json +{"directions": ["up", "right"]} +``` + +The application maps those names to fixed head poses and sends one ordered +`POST /api/move/goto` request at a time. OpenShell decides whether that HTTP +method and path may leave the sandbox. + +For a request such as `Reachy, what do you see?`, the model calls the fixed +`camera(question)` tool. That tool sends an argument-free +`POST /camera/capture` request. OpenShell independently decides whether that +single capture endpoint may leave the sandbox. + +## Architecture + +```mermaid +flowchart LR + U["Reachy microphone and speaker"] <--> N["Trusted native Reachy App"] + N <-->|"PCM audio"| A["Conversation app
    OpenShell sandbox"] + A -->|"Realtime WebSocket"| O["OpenAI Realtime"] + A -->|"Motion REST"| P["OpenShell network policy"] + P -->|"host.openshell.internal:8000"| D["Reachy Mini daemon"] + D --> H["Head motors"] + A -->|"POST /camera/capture"| P + P -->|"host.openshell.internal:8042"| N + N --> C["Reachy camera"] +``` + +The sandbox does not start the Reachy SDK, movement manager, camera worker, or +vision router. The trusted native Reachy App owns the SDK media object and only +bridges audio plus one bounded JPEG capture operation. + +## Security boundary + +OpenShell REST rules can match: + +- Calling binary +- Destination host and port +- HTTP method +- URL path +- Query parameters + +OpenShell can therefore allow or deny: + +```text +POST /api/move/goto +POST /camera/capture +``` + +It does not currently enforce arbitrary JSON values inside that REST request. +Once `/api/move/goto` is allowed, OpenShell cannot prove that the body contains +only a head pose or distinguish `up` from `down`. + +The application reduces normal model behavior to fixed values: + +| Direction | Pitch | Yaw | +| --- | ---: | ---: | +| `up` | -30 degrees | 0 degrees | +| `down` | 30 degrees | 0 degrees | +| `left` | 0 degrees | 40 degrees | +| `right` | 0 degrees | -40 degrees | +| `front` | 0 degrees | 0 degrees | + +It also fixes duration to one second, uses `minjerk`, and omits antennas and +body yaw. These body constraints are application validation, not OpenShell +policy enforcement. + +Camera capture has a tighter adapter boundary: the request has no body fields +or query parameters. The native adapter chooses the already-open Reachy camera, +captures one JPEG, never writes it to disk, limits the response to 2 MiB, and +rate-limits calls. OpenShell still enforces the calling binary, host, port, +method, and exact path; the adapter enforces the capture semantics. + +## Requirements and resource budget + +The proven environment was a Reachy Mini Wireless running ARM64 Debian, Reachy +Mini 1.8.3, 3.7 GiB usable RAM, 2 GiB swap, and a 14 GiB root filesystem. + +| Resource | Requirement for this setup | +| --- | --- | +| Development machine | Git, Docker Buildx, Python 3.10–3.12, and `uv` | +| Reachy architecture | `aarch64`; the container is built for `linux/arm64` | +| Reachy RAM | A 4 GB unit is known to work. The sandbox has a 2 GiB ceiling and the host retains the remaining memory. A 2 GB device is unvalidated. | +| Reachy CPU | The sandbox is limited to 2 CPUs. Build the image off-device. | +| Reachy disk | Start with at least 4 GiB free; 5 GiB is preferred. Retain 1–2 GiB free after cleanup. | +| Network | Reachy must reach the configured Realtime API and must be reachable over SSH during installation. | + +The expanded sandbox image is approximately 339 MB. Installation needs more +temporary space because the compressed archive, expanded image, Docker layer +extraction, Docker/OpenShell packages, and `/venvs/apps_venv` may coexist. The +native controller wheel is only about 13 KB, but creating the shared Reachy Apps +environment and installing its Reachy SDK dependencies can require roughly +1–1.5 GiB if that environment does not already exist. + +The model runs remotely, so no local model weights or GPU are required. The +`--memory 2Gi` value used later is a limit, not a claim that the agent +continuously consumes 2 GiB. + +## Prepare the development checkout (development machine) + +```bash +git clone git@github.com:NVIDIA/OpenShell-Research.git +cd OpenShell-Research +git switch kirit93/reachy-implementation +cd projects/reachy-mini-openshell +``` + +Run the relevant checks before building deployable artifacts: + +```bash +uv run ruff check src tests +uv run pytest -q +PYTHONPATH=native-controller/src uv run pytest -q native-controller/tests +``` + +## Verify and prepare Reachy (Reachy) + +Connect and inspect the robot before installing anything: + +```bash +ssh pollen@reachy-mini.local + +uname -m +free -h +df -h / +curl --silent --show-error http://127.0.0.1:8000/api/daemon/status +``` + +Require `aarch64`, a running physical daemon, and at least 4 GiB free. Then +verify Docker and OpenShell: + +```bash +docker --version +sudo systemctl status docker --no-pager +openshell --version +openshell sandbox list +``` + +If either command is missing, install Docker Engine using Docker's current +Debian ARM64 instructions and install OpenShell using the current OpenShell +instructions. Do not copy credentials into the image, policy, or repository. + +Create the provider once on Reachy, then verify it: + +```bash +openshell provider create \ + --name reachy-openai \ + --type openai \ + --from-existing + +openshell provider get reachy-openai +``` + +Finally, verify that containers can reach the host-side Reachy daemon: + +```bash +docker run --rm --add-host host.openshell.internal:host-gateway \ + curlimages/curl:latest \ + http://host.openshell.internal:8000/api/daemon/status +``` + +Do not continue until the daemon reports `state: running`. + +## Run locally before sandboxing + +From the project directory: + +```bash +cp .env.example .env +export OPENAI_API_KEY=sk-... +./scripts/start-local.sh +``` + +The default `.env.example` selects: + +```dotenv +REACHY_TOOL_TRANSPORT=rest +REACHY_REST_BASE_URL=http://127.0.0.1:8000 +``` + +Test these prompts in text mode first: + +```text +Reachy, look up. +Reachy, look front. +Reachy, look left and then right. +Stop moving. +``` + +## REST transport behavior + +The REST transport always advertises these physical tools: + +- `move_head(directions)` +- `stop_motion()` + +When `REACHY_CAMERA_BASE_URL` is configured, it additionally advertises: + +- `camera(question)` + +`move_head` accepts one to eight values from `left`, `right`, `up`, `down`, and +`front`. Extra keys and raw pose values are rejected before a network request is +made. + +Each successful `goto` returns a move UUID. The client polls +`GET /api/move/running` and waits for that UUID to finish before sending the next +direction. A timed-out POST is reported as `unknown_delivery` and is never +automatically retried. + +`stop_motion` lists active move UUIDs and calls `POST /api/move/stop` once for +each one. + +`camera` posts no model-supplied capture settings. It accepts only a short +question, validates the JPEG response, sends the image into the existing +Realtime conversation, and asks the assistant to answer aloud. An OpenShell +`403` becomes `status: policy_denied` and is not retried. + +## OpenShell policies + +Three relevant policies are checked in: + +```text +openshell/policy-motion-disabled.yaml +openshell/policy-camera-enabled-motion-disabled.yaml +openshell/policy-head-motion-enabled.yaml +``` + +Both allow: + +```text +GET /api/daemon/status +GET /api/move/running +POST /api/move/stop +``` + +Only `policy-head-motion-enabled.yaml` allows: + +```text +POST /api/move/goto +``` + +Only `policy-camera-enabled-motion-disabled.yaml` allows: + +```text +POST /camera/capture +``` + +That camera policy still blocks `POST /api/move/goto`. The base +`policy-motion-disabled.yaml` blocks both camera capture and motion start. + +Neither policy allows `/api/move/set_target`, `/api/motors/**`, +`/api/apps/**`, raw movement WebSockets, wake/sleep, or recorded motions. + +The permitted binary is `/opt/venv/bin/python`. A denial seen with `curl` could +therefore be a binary denial rather than a path denial; use the application or +the same Python executable for final policy tests. + +## Build the deployable artifacts (development machine) + +Build the native Reachy App wheel: + +```bash +uv build --project native-controller + +sha256sum \ + native-controller/dist/reachy_mini_openshell_controller-0.2.0-py3-none-any.whl +``` + +Build the sandbox specifically for Reachy's ARM64 computer: + +```bash +docker buildx build \ + --platform linux/arm64 \ + --load \ + --tag reachy-mini-openshell:rest-arm64 \ + --file Dockerfile.openshell \ + . + +docker image inspect reachy-mini-openshell:rest-arm64 \ + --format 'architecture={{.Architecture}} size={{.Size}} cmd={{json .Config.Cmd}}' +``` + +Require `architecture=arm64` and +`cmd=["/bin/sleep","infinity"]`. The persistent command keeps the pre-created +sandbox alive; the native Reachy App starts and stops the agent process inside +it. + +### Why this image is small + +The image is custom-built rather than copying the complete Reachy environment: + +- Both stages start from `python:3.12-slim-bookworm`. +- A disposable builder stage constructs wheels; build files do not enter the + runtime stage. +- `requirements-rest.txt` contains the sandbox's REST, Realtime, and audio + requirements. +- The application wheel is installed with `--no-deps`, preventing its normal + Reachy SDK, MuJoCo, OpenCV, simulator, dance, camera-worker, and local vision + dependencies from entering the sandbox. +- Pip caches, install-time bytecode, runtime `pip`, and APT metadata are + removed. +- Debian packages use `--no-install-recommends`. + +The image deliberately retains `iproute2` and `nftables`. OpenShell needs the +trusted `ip` helper to create the isolated sandbox network, so removing it to +save a few megabytes breaks provisioning. The tested image was 339,495,096 +bytes according to Docker. + +Export and compress the image for transfer: + +```bash +docker save reachy-mini-openshell:rest-arm64 \ + | gzip > reachy-mini-openshell-rest-arm64.tar.gz + +sha256sum reachy-mini-openshell-rest-arm64.tar.gz +``` + +## Transfer and load the artifacts + +Copy the image, controller wheel, and main demo policy from the development +machine: + +```bash +scp reachy-mini-openshell-rest-arm64.tar.gz \ + pollen@reachy-mini.local:/home/pollen/ + +scp native-controller/dist/reachy_mini_openshell_controller-0.2.0-py3-none-any.whl \ + pollen@reachy-mini.local:/home/pollen/ + +scp openshell/policy-camera-enabled-motion-disabled.yaml \ + openshell/policy-motion-disabled.yaml \ + openshell/policy-head-motion-enabled.yaml \ + pollen@reachy-mini.local:/home/pollen/ +``` + +On Reachy, compare the received checksums with the development machine, then +load and inspect the image: + +```bash +df -h / +docker system df +docker load --input ~/reachy-mini-openshell-rest-arm64.tar.gz + +docker image inspect reachy-mini-openshell:rest-arm64 \ + --format 'architecture={{.Architecture}} size={{.Size}} cmd={{json .Config.Cmd}}' +``` + +`docker load` may print nothing for several minutes on microSD storage. In a +second SSH session, check `ps`, `df -h /`, and `journalctl -u docker` before +assuming it has stalled. After a verified load, the transferred `.tar.gz` can +be deleted to recover space. + +Put policies in a stable operator-owned directory: + +```bash +mkdir -p ~/reachy-openshell +cp ~/policy-*.yaml ~/reachy-openshell/ +``` + +## Create the sandbox once (Reachy) + +Create an idle sandbox with camera enabled and motion disabled: + +```bash +openshell sandbox create \ + --name reachy-agent \ + --from reachy-mini-openshell:rest-arm64 \ + --policy ~/reachy-openshell/policy-camera-enabled-motion-disabled.yaml \ + --provider reachy-openai \ + --cpu 2 \ + --memory 2Gi \ + --env REACHY_MINI_SKIP_DOTENV=1 \ + --env BACKEND_PROVIDER=openai_realtime \ + --env REACHY_TOOL_TRANSPORT=rest \ + --env REACHY_REST_BASE_URL=http://host.openshell.internal:8000 \ + --env REACHY_CAMERA_BASE_URL=http://host.openshell.internal:8042 \ + --env REACHY_REST_TIMEOUT_SECONDS=5 \ + --env REACHY_MOTION_DURATION_SECONDS=1 \ + --env REACHY_MOTION_POLL_INTERVAL_SECONDS=0.1 \ + --env REACHY_MOTION_COMPLETION_TIMEOUT_SECONDS=10 \ + --env REACHY_AUDIO_HOST=127.0.0.1 \ + --env REACHY_AUDIO_PORT=8765 \ + --env REACHY_AGENT_START_TIMEOUT_SECONDS=120 \ + --env REACHY_MODEL_LOGS=1 \ + --env OPENAI_REALTIME_BASE_URL=https://api.openai.com/v1 \ + --env OPENAI_REALTIME_MODEL=gpt-realtime-2 \ + --env OPENAI_REALTIME_VOICE=cedar +``` + +If the CLI enters an interactive sandbox prompt after creation, type `exit`. +That exits only the shell; the image's `sleep infinity` command keeps the +sandbox alive. + +Check that it is ready: + +```bash +openshell sandbox get reachy-agent +``` + +Require `Phase: Ready`. Read the printed policy and confirm that it allows +`POST host.openshell.internal:8042/camera/capture` but has no allow rule for +`POST host.openshell.internal:8000/api/move/goto`. + +The 120-second agent startup window is intentional. A cold import of the audio +stack takes about 40 seconds on the Reachy Mini onboard Raspberry Pi. + +## Robot-native media and lifecycle + +The normal onboard path uses a small trusted Reachy App from +`projects/reachy-mini-openshell/native-controller`. It owns only the robot +microphone, speaker, camera snapshot adapter, and fixed OpenShell lifecycle +commands. The model, tools, and every requested action remain inside +`reachy-agent`. + +Before installing the native app, test the inner lifecycle directly. A cold +start took approximately 41 seconds on the tested robot: + +```bash +time openshell sandbox exec \ + --name reachy-agent \ + --no-tty \ + -- \ + /usr/bin/env REACHY_AGENT_START_TIMEOUT_SECONDS=120 \ + /opt/venv/bin/reachy-agent-control start + +openshell sandbox exec --name reachy-agent --no-tty -- \ + /opt/venv/bin/reachy-agent-control status + +openshell sandbox exec --name reachy-agent --no-tty -- \ + tail -n 100 /sandbox/logs/reachy-agent.log +``` + +Require `running` and `Application startup complete` before exposing the audio +service. + +### Expose the sandbox audio listener + +The agent listens on `127.0.0.1:8765` **inside the sandbox**. Sandbox loopback +is intentionally private, so the native Reachy App on the host cannot connect +to that address directly. Exposing the service creates a local OpenShell gateway +route from `reachy-agent--audio.openshell.localhost:17670` to the sandbox +listener: + +```bash +openshell service expose reachy-agent 8765 audio +openshell service get reachy-agent audio + +curl --silent --show-error \ + http://reachy-agent--audio.openshell.localhost:17670/health +``` + +Expected output includes: + +```json +{ + "status": "ok", + "active_audio_client": false, + "format": "pcm_s16le", + "sample_rate": 16000, + "channels": 1 +} +``` + +`active_audio_client: false` is correct until the native app connects Reachy's +microphone and speaker. The route is local to the onboard OpenShell gateway; it +does not publish the audio service to the internet or directly to the robot's +LAN. + +The controller's WebSocket URI is: + +```text +ws://reachy-agent--audio.openshell.localhost:17670/audio +``` + +The service accepts one client, mono signed 16-bit PCM at 16 kHz, and exposes +`GET /health` plus `WS /audio`. The Reachy App reads and plays audio through the +SDK media manager. No laptop, browser, Gradio page, or SSH tunnel is required +after installation. + +The same native app serves only this camera operation on the robot host: + +```text +POST http://127.0.0.1:8042/camera/capture +``` + +The sandbox addresses it as +`http://host.openshell.internal:8042/camera/capture`, so the call crosses the +OpenShell REST policy. It is not exposed as an OpenShell browser service. + +When the Reachy App is stopped it runs: + +```bash +openshell sandbox exec --name reachy-agent --no-tty -- \ + /opt/venv/bin/reachy-agent-control stop +``` + +The sandbox, provider, service endpoint, and policy remain provisioned for the +next Start. + +Stop the manually started agent before testing the native lifecycle: + +```bash +openshell sandbox exec --name reachy-agent --no-tty -- \ + /opt/venv/bin/reachy-agent-control stop +``` + +### Install the native Reachy App (Reachy) + +Reachy's application installer does not accept an arbitrary local wheel. Install +the controller into the daemon's shared application environment instead. + +Check whether that environment already exists: + +```bash +ls -l /venvs/apps_venv/bin/python +``` + +If it does not exist, create it with the same Python generation as the Reachy +daemon and install the matching Reachy SDK: + +```bash +/opt/uv/uv venv \ + --python /venvs/mini_daemon/bin/python \ + /venvs/apps_venv + +/opt/uv/uv pip install \ + --no-cache \ + --python /venvs/apps_venv/bin/python \ + 'reachy-mini==1.8.3' +``` + +Use the daemon's actual Reachy Mini version instead of `1.8.3` if it differs: + +```bash +/venvs/mini_daemon/bin/python -c \ + 'import importlib.metadata as m; print(m.version("reachy-mini"))' +``` + +Install the controller wheel that was transferred earlier: + +```bash +/opt/uv/uv pip install --no-cache \ + --python /venvs/apps_venv/bin/python \ + /home/pollen/reachy_mini_openshell_controller-0.2.0-py3-none-any.whl +``` + +The `/api/apps/install` endpoint intentionally does not accept `source_kind: +local`; that endpoint installs catalog/Hugging Face apps. After the manual pip +install, `reachy_mini_openshell_controller` appears in the installed app list +and can be started from the Reachy Apps UI. The daemon launches the controller +in its shared apps environment and supplies the local `ReachyMini` media object. + +Verify the entry point and installed version: + +```bash +/venvs/apps_venv/bin/python -c \ + 'import importlib.metadata as m; print(m.version("reachy-mini-openshell-controller")); print([ep.name for ep in m.entry_points(group="reachy_mini_apps") if "openshell" in ep.name])' +``` + +### Start and verify the native app (Reachy) + +Start it from the Reachy Apps UI, or call the same daemon endpoint: + +```bash +curl --silent --show-error -X POST \ + http://127.0.0.1:8000/api/apps/start-app/reachy_mini_openshell_controller +``` + +Verify all three layers: + +```bash +curl --silent --show-error \ + http://127.0.0.1:8000/api/apps/current-app-status + +openshell sandbox exec --name reachy-agent --no-tty -- \ + /opt/venv/bin/reachy-agent-control status + +openshell service get reachy-agent audio + +curl --silent --show-error \ + http://reachy-agent--audio.openshell.localhost:17670/health +``` + +Require the Reachy App state `running`, inner agent state `running`, an `audio` +service targeting `127.0.0.1:8765`, and a healthy response. Once the native app +connects, `active_audio_client` should become `true`. + +Inspect the inner log when troubleshooting: + +```bash +openshell sandbox exec --name reachy-agent --no-tty -- \ + tail -n 100 /sandbox/logs/reachy-agent.log +``` + +The project README retains an optional Gradio diagnostic path for testing the +model and tool flow independently of robot media. It is not part of normal +onboard operation. + +## Verify the denied action + +With `policy-camera-enabled-motion-disabled.yaml` active, say: + +```text +Reachy, look up. +``` + +Expected behavior: + +1. The model selects `move_head`. +2. The app attempts `POST /api/move/goto`. +3. OpenShell returns HTTP `403`. +4. The tool result has `status: policy_denied`. +5. Reachy does not move. +6. The assistant explains that policy blocked the action and does not retry. + +## Verify camera allow and deny + +With `policy-camera-enabled-motion-disabled.yaml` active, say: + +```text +Reachy, take a picture and tell me what you see. +``` + +Expected behavior: the model selects `camera`, OpenShell permits only +`POST /camera/capture`, one JPEG is delivered to the Realtime session, and +Reachy answers aloud. Asking `Reachy, look up` remains denied. + +To prove the camera boundary, hot-reload the policy that blocks both camera and +motion: + +```bash +openshell policy set reachy-agent \ + --policy ~/reachy-openshell/policy-motion-disabled.yaml \ + --wait +``` + +Ask the picture question again. Reachy must not capture a frame and should +explain that policy blocked the action. Restore the main demo policy afterward: + +```bash +openshell policy set reachy-agent \ + --policy ~/reachy-openshell/policy-camera-enabled-motion-disabled.yaml \ + --wait +``` + +Inspect logs: + +```bash +openshell logs reachy-agent --tail +``` + +## Enable head motion without restarting + +Hot-reload the enabled policy: + +```bash +openshell policy set reachy-agent \ + --policy ~/reachy-openshell/policy-head-motion-enabled.yaml \ + --wait +``` + +Repeat the same request. Reachy should now move through the fixed application +pose. + +Return to the restrictive policy: + +```bash +openshell policy set reachy-agent \ + --policy ~/reachy-openshell/policy-camera-enabled-motion-disabled.yaml \ + --wait +``` + +## Negative policy tests + +Use the permitted Python binary inside the sandbox to test a dangerous path: + +```bash +openshell sandbox exec -n reachy-agent -- \ + /opt/venv/bin/python -c \ + 'import httpx; print(httpx.post("http://host.openshell.internal:8000/api/move/set_target", json={}).status_code)' +``` + +Expected result: `403`. + +Repeat for a motor path or app-management path. Those requests must remain +denied under both policies. + +## Normal operation + +After provisioning, normal use does not require SSH commands: + +1. Start `reachy_mini_openshell_controller` from the Reachy Apps UI. +2. Wait for the app to report `running`; the first cold start may take about 40 + seconds. +3. Speak directly to Reachy. +4. Stop the app from the Reachy Apps UI when finished. + +Stopping the app closes the media bridge and stops the inner conversation +process. It does not delete the sandbox, provider, policy, or audio-service +definition. + +## Troubleshooting quick reference + +| Symptom | First checks | +| --- | --- | +| `docker load` is silent | In another SSH session run `ps -eo pid,etime,stat,%cpu,%mem,cmd | grep '[d]ocker load'`, `df -h /`, and `sudo journalctl -u docker -n 30 --no-pager`. Slow microSD extraction is normal. | +| Sandbox enters `ContainerRestarting` | Inspect the image command. It must be `sleep infinity`; do not append `/bin/true` to `sandbox create`. | +| `reachy-agent failed to become healthy` | Retry with the 120-second timeout and inspect `/sandbox/logs/reachy-agent.log`. A cold start took about 41 seconds. | +| Audio URL says `Service endpoint is not available` | Confirm the inner agent is `running`, then recreate or expose `audio` and check `/health`. The target listener must exist before the route is usable. | +| Audio bridge reports `Name or service not known` | Verify controller version `0.2.0`. It preserves the virtual routing hostname while connecting the socket to `127.0.0.1:17670`. | +| Reachy says it cannot take a picture | Test `POST http://127.0.0.1:8042/camera/capture`, then test the same path from the sandbox with `/opt/venv/bin/python`. If both work, inspect the model/tool logs and session instructions. | +| Local wheel install is rejected by `/api/apps/install` | This endpoint does not accept `source_kind: local`; install the wheel into `/venvs/apps_venv` with `/opt/uv/uv pip install`. | +| Root filesystem is almost full | Run `docker system df` and `sudo du -sh /var/lib/docker /venvs/apps_venv`. Remove transferred archives, obsolete images, failed layers, and old wheel versions—but not the active image or `/venvs/mini_daemon`. | + +## Development checks + +```bash +uv run ruff check src tests +uv run pytest -q +PYTHONPATH=native-controller/src uv run pytest -q native-controller/tests +``` + +The unit suite covers fixed schemas, pose mapping, argument rejection, ordered +movement, stop behavior, OpenShell `403` conversion, no retry after an uncertain +motion POST, native JPEG limits, and exact camera-policy rules. + +## Completion criteria + +- The sandbox starts no local robot SDK or camera workers. +- Only fixed head directions, stop, and the optional one-frame camera tool are + model-visible robot actions. +- Motion-disabled policy blocks `goto` while preserving stop. +- Camera-enabled/motion-disabled policy permits only one fixed capture endpoint + and still blocks `goto`. +- Motion-enabled policy allows `goto` but no raw target or motor endpoints. +- Policy can be hot-reloaded without recreating the sandbox. +- Documentation states that JSON body values remain application-enforced. diff --git a/projects/reachy-mini-openshell/README.md b/projects/reachy-mini-openshell/README.md index 3900d7b8..64f92c9d 100644 --- a/projects/reachy-mini-openshell/README.md +++ b/projects/reachy-mini-openshell/README.md @@ -5,7 +5,9 @@ and single-frame camera capture; optional Gradio input; OpenAI Realtime; and a deliberately small REST-controlled action surface. > **Building the OpenShell policy demo with a physical Reachy?** Follow the -> [full step-by-step Reachy Mini OpenShell sandbox tutorial](../../docs/projects/reachy-mini-openshell-sandbox.md). +> [onboard setup tutorial](ONBOARD_SETUP.md). For the architecture, implementation +> decisions, and lessons learned, read the +> [Dev Note](../../docs/dev-notes/posts/2026-07-13-policy-controlling-reachy-mini-with-openshell.md). Commands: @@ -84,7 +86,8 @@ Inside an OpenShell sandbox, set the base URL to `http://host.openshell.internal:8000`. OpenShell can allow or deny `POST /api/move/goto`, but REST policy does not inspect the JSON pose values. The app therefore fixes the direction, pose, duration, and interpolation before -sending the request. See the sandbox tutorial for the exact security boundary. +sending the request. See the [onboard setup guide](ONBOARD_SETUP.md#security-boundary) +for the exact security boundary. For onboard snapshots, also set `REACHY_CAMERA_BASE_URL=http://host.openshell.internal:8042`. The trusted native diff --git a/zensical.toml b/zensical.toml index 2b69d5c0..a997e276 100644 --- a/zensical.toml +++ b/zensical.toml @@ -15,14 +15,14 @@ nav = [ {"Projects" = [ "projects/index.md", {"Reachy Mini + OpenShell" = [ - "projects/reachy-mini-openshell/index.md", - {"Step-by-step sandbox tutorial" = "projects/reachy-mini-openshell-sandbox.md"} + "projects/reachy-mini-openshell/index.md" ]} ]}, {"Dev Notes" = [ "dev-notes/index.md", {"Posts" = [ # dev-notes:nav:start + {"Designing OpenShell for the Edge: Why Policy Has to Live Next to the Action" = "dev-notes/posts/2026-07-13-policy-controlling-reachy-mini-with-openshell.md"}, {"Making Dev Notes Repeatable" = "dev-notes/posts/2026-06-05-making-dev-notes-repeatable.md"}, {"Bootstrapping OpenShell Research" = "dev-notes/posts/2026-06-04-bootstrapping-openshell-research.md"} # dev-notes:nav:end From 37813eb03f3eabc907c3d93b71d8cf93604da781 Mon Sep 17 00:00:00 2001 From: Kirit93 Date: Tue, 14 Jul 2026 11:35:45 -0700 Subject: [PATCH 30/45] Updated images in dev note --- .../diagrams/boundary-stack.svg | 68 +++++++++++ .../diagrams/request-flow.svg | 110 ++++++++++++++++++ ...-controlling-reachy-mini-with-openshell.md | 53 ++------- .../reachy-mini-openshell-demo-tutorial.md | 15 +++ docs/stylesheets/dev-notes.css | 28 +++++ 5 files changed, 229 insertions(+), 45 deletions(-) create mode 100644 docs/assets/reachy-mini-openshell/diagrams/boundary-stack.svg create mode 100644 docs/assets/reachy-mini-openshell/diagrams/request-flow.svg create mode 100644 docs/projects/reachy-mini-openshell-demo-tutorial.md diff --git a/docs/assets/reachy-mini-openshell/diagrams/boundary-stack.svg b/docs/assets/reachy-mini-openshell/diagrams/boundary-stack.svg new file mode 100644 index 00000000..d12cb404 --- /dev/null +++ b/docs/assets/reachy-mini-openshell/diagrams/boundary-stack.svg @@ -0,0 +1,68 @@ + + + + + + + + + + + + + ON-DEVICE BOUNDARY STACK + + + + + + + model I/O + request + if allowed + bounded action + + + + 1 + Cloud or local model + interprets the conversation, selects a tool + + + + 2 + Agent in an on-device OpenShell sandbox + turns intent into one concrete request + + + + 3 + Local OpenShell policy decision + allow or deny before it leaves the sandbox + CONTROL POINT + + + + 4 + Narrow trusted capability adapter + one bounded operation per capability + + + + 5 + Physical device, sensor, or local data + motors, camera, microphone, files + + Each boundary enforces one thing — and can be tested on its own. + diff --git a/docs/assets/reachy-mini-openshell/diagrams/request-flow.svg b/docs/assets/reachy-mini-openshell/diagrams/request-flow.svg new file mode 100644 index 00000000..508433c2 --- /dev/null +++ b/docs/assets/reachy-mini-openshell/diagrams/request-flow.svg @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + REQUEST FLOW ON REACHY + + + + Person near Reachy + speaks and listens + + + Trusted native Reachy App + microphone · speaker · camera + + + voice + + + + OPENSHELL SANDBOX + + Conversation agent + Realtime client + fixed tools + + Loopback audio + 127.0.0.1:8765 + + + OpenAI Realtime API + remote model + + + + PCM audio + + + + + policy-checked + WebSocket + + + + + POLICY DECISION + OpenShell gateway + policy engine + evaluates binary · destination · port · method · path + + + + robot REST request + + + + + ALLOWED + One-frame camera adapter + 127.0.0.1:8042 · POST /camera/capture + returns one bounded JPEG — Reachy describes it aloud + + + + DENIED + Reachy daemon → motors + 127.0.0.1:8000 · POST /api/move/goto + stopped at the boundary — the robot stays still + + + + capture + + + move + + + + + + The camera works and the head does not move — enforced by policy, not by the app choosing to refuse. + diff --git a/docs/dev-notes/posts/2026-07-13-policy-controlling-reachy-mini-with-openshell.md b/docs/dev-notes/posts/2026-07-13-policy-controlling-reachy-mini-with-openshell.md index 9d1e1843..8655803c 100644 --- a/docs/dev-notes/posts/2026-07-13-policy-controlling-reachy-mini-with-openshell.md +++ b/docs/dev-notes/posts/2026-07-13-policy-controlling-reachy-mini-with-openshell.md @@ -200,17 +200,10 @@ device execution into components with focused responsibilities. other local systems are reached only after the preceding boundaries allow it. -```text -cloud or local model - ↕ -agent in an on-device OpenShell sandbox - ↓ -local OpenShell policy decision - ↓ -narrow trusted capability adapter - ↓ -physical device, sensor, or local data -``` +
    + On-device boundary stack. Five boundaries connected top to bottom: a cloud or local model, the agent in an on-device OpenShell sandbox, the local OpenShell policy decision as the control point, a narrow trusted capability adapter, and the physical device, sensor, or local data. +
    Reasoning, policy enforcement, hardware ownership, and device execution are separated into distinct boundaries. The local OpenShell policy decision is the control point, evaluated on the device before a request can leave the sandbox.
    +
    This decomposition gives each boundary something specific to enforce and something specific to test. We can change the model without changing the robot @@ -337,40 +330,10 @@ model endpoint. ## What This Looks Like on Reachy -```mermaid -flowchart TB - Human["Person near Reachy"] - - subgraph Robot["Reachy Mini onboard computer"] - Native["Trusted native Reachy App\nmicrophone, speaker, camera"] - Gateway["OpenShell gateway\nand policy engine"] - - subgraph Sandbox["OpenShell sandbox"] - Agent["Conversation agent\nRealtime client and fixed tools"] - Audio["Loopback audio service\n127.0.0.1:8765"] - end - - Daemon["Reachy daemon REST API\n127.0.0.1:8000"] - Camera["One-frame adapter\n127.0.0.1:8042"] - Hardware["Mic, speaker, camera, motors"] - end - - Model["OpenAI Realtime API"] - - Human <-->|"voice"| Hardware - Native <-->|"Reachy media API"| Hardware - Native <-->|"PCM through exposed service"| Gateway - Gateway <--> Audio - Audio <--> Agent - Agent <-->|"policy-checked Realtime WebSocket"| Gateway - Gateway <--> Model - Agent -->|"robot REST action"| Gateway - Gateway -->|"permitted request"| Daemon - Daemon --> Hardware - Agent -->|"POST /camera/capture"| Gateway - Gateway --> Camera - Camera --> Native -``` +
    + Request flow on Reachy. The person speaks to the trusted native Reachy App, which streams PCM audio into the OpenShell sandbox, where the conversation agent exchanges policy-checked audio with the OpenAI Realtime API. Robot requests from the agent pass through the OpenShell gateway and policy engine, which allows the POST /camera/capture path to the one-frame camera adapter and denies the POST /api/move/goto path to the Reachy daemon and motors. +
    The same policy engine sits in front of both physical capabilities. It allows the camera capture path (green) and denies the movement path (red), so the camera works and the head does not move — enforced by policy rather than by the application choosing to refuse.
    +
    There is no laptop, browser, or Gradio page in the runtime path. The complete request flow is: diff --git a/docs/projects/reachy-mini-openshell-demo-tutorial.md b/docs/projects/reachy-mini-openshell-demo-tutorial.md new file mode 100644 index 00000000..2d4780f0 --- /dev/null +++ b/docs/projects/reachy-mini-openshell-demo-tutorial.md @@ -0,0 +1,15 @@ +# Reachy Mini + OpenShell: Dev Note and Setup Tutorial + +The original combined guide has been split into two focused documents: + +- Read **[Designing OpenShell for the Edge: Why Policy Has to Live Next to the + Action](../dev-notes/posts/2026-07-13-policy-controlling-reachy-mini-with-openshell.md)** + for the reusable edge architecture, design decisions, challenges, and results. +- Follow the **[project-local onboard setup + tutorial](https://github.com/NVIDIA/OpenShell-Research/blob/kirit93/reachy-implementation/projects/reachy-mini-openshell/ONBOARD_SETUP.md)** + for build, installation, validation, policy switching, and troubleshooting + commands. + +Keeping the tutorial next to the Dockerfile, policies, native controller, and +application source makes it easier to update the procedure whenever the +implementation changes. diff --git a/docs/stylesheets/dev-notes.css b/docs/stylesheets/dev-notes.css index 844f7653..43a7cdd2 100644 --- a/docs/stylesheets/dev-notes.css +++ b/docs/stylesheets/dev-notes.css @@ -377,3 +377,31 @@ body[data-md-color-scheme="slate"][data-md-color-primary="black"] { font-size: clamp(1.2rem, 8vw, 1.55rem); } } + +/* Dev note diagrams (SVG figures) */ +.dev-note-figure { + margin: 1.9rem auto; + text-align: center; +} + +.dev-note-figure img { + width: 100%; + max-width: 620px; + height: auto; + border-radius: 14px; + border: 1px solid var(--openshell-home-hero-border, rgba(0, 0, 0, 0.08)); + box-shadow: var(--openshell-card-shadow, 0 0.55rem 1.6rem rgba(15, 23, 42, 0.11)); + background: #ffffff; +} + +.dev-note-figure--wide img { + max-width: 820px; +} + +.dev-note-figure figcaption { + margin: 0.7rem auto 0; + max-width: 42rem; + font-size: 0.8rem; + line-height: 1.5; + color: var(--md-default-fg-color--light); +} From 9ae53dd268c3fe367de3522a2bf83ab269ce7f8a Mon Sep 17 00:00:00 2001 From: Kirit93 Date: Tue, 14 Jul 2026 11:47:16 -0700 Subject: [PATCH 31/45] Updated dev note --- ...-controlling-reachy-mini-with-openshell.md | 65 ++++++++++--------- 1 file changed, 35 insertions(+), 30 deletions(-) diff --git a/docs/dev-notes/posts/2026-07-13-policy-controlling-reachy-mini-with-openshell.md b/docs/dev-notes/posts/2026-07-13-policy-controlling-reachy-mini-with-openshell.md index 8655803c..f1610e32 100644 --- a/docs/dev-notes/posts/2026-07-13-policy-controlling-reachy-mini-with-openshell.md +++ b/docs/dev-notes/posts/2026-07-13-policy-controlling-reachy-mini-with-openshell.md @@ -44,9 +44,9 @@ working while the operator is out of the loop. That growing autonomy is the motivation behind OpenShell: the more an agent can change and act on its own, the less we can rely on guardrails implemented inside the same process. -OpenShell moves the control point outside the agent. The agent can remain -capable and autonomous inside a sandbox, while separately configured policy -governs its filesystem, process, network, and inference access. If the model is +OpenShell is a runtime that moves the control point outside the agent: it runs +the agent in a sandbox while a separately configured policy layer governs the +agent's filesystem, process, network, and inference access. If the model is prompt-injected, a tool is compromised, or the agent rewrites part of its own workflow, it still cannot grant itself permissions that the runtime has not allowed. @@ -58,15 +58,12 @@ longer limited to a bad shell command or leaked cloud credential. It can expose data that was supposed to remain on-site or cause an action with material real-world consequences. -That creates two immediate requirements. Some data should never leave the -device or the site where it was produced. Some actions should never be possible -in a particular deployment, even if a model, prompt, tool, skill, or application -update tries to request them. - -Trust at the edge therefore requires the OpenShell control plane to move with -the agent. The boundary must be deterministic, provisioned independently, and -enforced locally before data leaves the device or an action reaches the -hardware. +That creates two requirements. Some data should never leave the device or the +site where it was produced, and some actions should never be possible in a given +deployment, even if a model, prompt, tool, skill, or application update tries to +request them. Meeting both means the control plane has to move with the agent: a +boundary that is deterministic, provisioned independently, and enforced locally +before data leaves the device or an action reaches the hardware. We used Reachy Mini to explore what that deployment looks like. The resulting pattern keeps the agent in an on-device OpenShell sandbox, keeps hardware @@ -103,11 +100,10 @@ policy runtime such as OpenShell fits: it enforces those boundaries at the edge, independently of the agent's instructions or behavior. **Safety has to be enforced before action.** An inspection robot may use its -camera everywhere but move only inside a controlled workcell. A building agent -may read temperature data but not change a setpoint in a public deployment. A -field device may expose an emergency stop while route changes remain disabled. -The same software image can be paired with different policies for different -operating environments. +camera everywhere but move only inside a controlled workcell. The same software +image can be paired with different policies for different operating environments, +so what an agent is allowed to physically do becomes a deployment decision rather +than a property baked into the build. **Controls have to survive agent evolution.** Models change. Prompts are tuned. Tools are added. Application code is upgraded. A safety or privacy guarantee @@ -238,9 +234,8 @@ and paths permitted by its policy. A deployment can allow an approved remote model, route through a local privacy service, or deny remote model access and use an on-device endpoint instead. -This is the central edge property. The model may remain a cloud service, but -the authority to move local data and use local capabilities remains local. -Model placement and policy placement are independent choices. +This is the central edge property: the model may remain a cloud service, but the +authority to move local data and use local capabilities stays on the device. ### Expose capabilities, not complete APIs @@ -437,6 +432,12 @@ installation, and Reachy Apps Python environment can coexist temporarily. The robot needs several gigabytes free even though the final sandbox image is only about 339 MB. +**The policy hop is cheap next to the model round-trip.** Each robot request adds +one local policy evaluation on the same host as the agent and daemon — a match on +binary, destination, port, method, and path — which is small beside the network +round-trip to the Realtime model. The latency that mattered in practice was cold +start, not steady-state enforcement. + These details are easy to dismiss as deployment issues. On an edge product, they are part of the architecture because they determine whether the security boundary survives normal starts, updates, failures, and operator workflows. @@ -474,21 +475,25 @@ adapters. What generalizes is the placement of the boundary: the less-trusted agent runs inside the sandbox, and policy-approved requests cross into narrowly defined device capabilities. +This does not remove trust so much as concentrate it. The policy engine, the +trusted adapter, and the device controller are all still trusted code. The point +is where that trust sits: instead of a large, long-running, self-modifying agent +policing itself, the parts you have to trust are small, fixed, and auditable, and +they sit outside the component most likely to change. The goal is a minimal +trusted surface, not the absence of one. + --- ## Summary Running autonomous, evolving agents at the edge is a systems problem, not just -a container-build problem. The Reachy implementation reflects seven principles: - -1. Keep the final control point outside the agent process. -2. Put policy on the device, next to the data and actions it controls. -3. Give the agent narrow capabilities rather than a complete hardware API. -4. Keep hardware handles and native SDK objects in a small trusted process. -5. Separate operator provisioning from the product's Start/Stop lifecycle. -6. Treat CPU, memory, disk, networking, and cold-start time as architecture - inputs. -7. Keep model placement independent from the local action boundary. +a container-build problem. The Reachy implementation comes down to a few choices: +keep the final control point outside the agent and on the device, next to the +data and actions it governs; give the agent narrow capabilities instead of a +complete hardware API, with hardware handles kept in a small trusted process; +separate operator provisioning from the product's start/stop lifecycle; and treat +CPU, memory, disk, networking, cold-start time, and where the model runs as +architecture inputs rather than afterthoughts. The result is more than a policy-controlled robot demo. It is a deployment pattern in which OpenShell becomes the on-device isolation and policy layer for From 808336e88d418e36364d57d6fda87e47e21dba82 Mon Sep 17 00:00:00 2001 From: Kirit93 Date: Tue, 14 Jul 2026 13:11:56 -0700 Subject: [PATCH 32/45] Updated dev note voice --- .../diagrams/boundary-stack.svg | 2 +- .../diagrams/request-flow.svg | 6 +- ...-controlling-reachy-mini-with-openshell.md | 637 +++++++++--------- 3 files changed, 309 insertions(+), 336 deletions(-) diff --git a/docs/assets/reachy-mini-openshell/diagrams/boundary-stack.svg b/docs/assets/reachy-mini-openshell/diagrams/boundary-stack.svg index d12cb404..a904533a 100644 --- a/docs/assets/reachy-mini-openshell/diagrams/boundary-stack.svg +++ b/docs/assets/reachy-mini-openshell/diagrams/boundary-stack.svg @@ -64,5 +64,5 @@ Physical device, sensor, or local data motors, camera, microphone, files - Each boundary enforces one thing — and can be tested on its own. + Each boundary enforces one thing and can be tested on its own. diff --git a/docs/assets/reachy-mini-openshell/diagrams/request-flow.svg b/docs/assets/reachy-mini-openshell/diagrams/request-flow.svg index 508433c2..69d8056a 100644 --- a/docs/assets/reachy-mini-openshell/diagrams/request-flow.svg +++ b/docs/assets/reachy-mini-openshell/diagrams/request-flow.svg @@ -86,14 +86,14 @@ ALLOWED One-frame camera adapter 127.0.0.1:8042 · POST /camera/capture - returns one bounded JPEG — Reachy describes it aloud + returns one bounded JPEG, Reachy describes it aloud DENIED Reachy daemon → motors 127.0.0.1:8000 · POST /api/move/goto - stopped at the boundary — the robot stays still + stopped at the boundary, the robot stays still @@ -106,5 +106,5 @@ - The camera works and the head does not move — enforced by policy, not by the app choosing to refuse. + The camera works and the head does not move, enforced by policy, not by the app choosing to refuse. diff --git a/docs/dev-notes/posts/2026-07-13-policy-controlling-reachy-mini-with-openshell.md b/docs/dev-notes/posts/2026-07-13-policy-controlling-reachy-mini-with-openshell.md index f1610e32..1a8163dc 100644 --- a/docs/dev-notes/posts/2026-07-13-policy-controlling-reachy-mini-with-openshell.md +++ b/docs/dev-notes/posts/2026-07-13-policy-controlling-reachy-mini-with-openshell.md @@ -38,44 +38,42 @@ card_tags: -AI agents are moving from assistants that wait for instructions to long-running -systems that pursue goals, use tools, add skills, write code, and continue -working while the operator is out of the loop. That growing autonomy is the -motivation behind OpenShell: the more an agent can change and act on its own, -the less we can rely on guardrails implemented inside the same process. - -OpenShell is a runtime that moves the control point outside the agent: it runs -the agent in a sandbox while a separately configured policy layer governs the -agent's filesystem, process, network, and inference access. If the model is -prompt-injected, a tool is compromised, or the agent rewrites part of its own -workflow, it still cannot grant itself permissions that the runtime has not -allowed. - -At the edge, the same trust problem gains a physical dimension. An agent may -observe people and places, handle data from microphones, cameras, and sensors, -and make decisions that move machines or change local systems. A failure is no -longer limited to a bad shell command or leaked cloud credential. It can expose -data that was supposed to remain on-site or cause an action with material -real-world consequences. - -That creates two requirements. Some data should never leave the device or the -site where it was produced, and some actions should never be possible in a given -deployment, even if a model, prompt, tool, skill, or application update tries to -request them. Meeting both means the control plane has to move with the agent: a -boundary that is deterministic, provisioned independently, and enforced locally -before data leaves the device or an action reaches the hardware. - -We used Reachy Mini to explore what that deployment looks like. The resulting -pattern keeps the agent in an on-device OpenShell sandbox, keeps hardware -ownership in a small trusted native process, and enforces policy locally before -a request can cross into the rest of the device. +AI agents used to wait for instructions. Now they run for a long time, pursue +goals, call tools, add skills, write code, and keep working while no one is +watching. That is the problem OpenShell exists to solve: the more an agent can +change itself and act on its own, the less you can trust a guardrail that lives +inside the same process. + +OpenShell moves the control point outside the agent. It runs the agent in a +sandbox, and a separate policy layer decides what the agent can touch: its +filesystem, processes, network, and model access. If the model is +prompt-injected, a tool is compromised, or the agent rewrites its own workflow, +it still cannot give itself a permission the runtime did not grant. + +At the edge, this problem gets physical. An agent can watch people and places, +read microphones, cameras, and sensors, and take actions that move machines or +change local systems. A failure is no longer just a bad shell command or a +leaked credential. It can leak data that was supposed to stay on-site, or move +something in the real world. + +That creates two rules. Some data should never leave the device or the site +where it was produced. Some actions should never be possible in a given +deployment, even if a model, prompt, tool, skill, or update asks for them. To +enforce both, the control point has to sit on the device with the agent. It has +to be deterministic, set up separately from the agent, and checked locally +before any data leaves or any action reaches the hardware. + +We used Reachy Mini to see what that looks like in practice. The pattern keeps +the agent in an on-device OpenShell sandbox, keeps hardware ownership in a small +trusted process, and checks policy locally before any request reaches the rest +of the device. -This post walks through the design principles behind that architecture. Reachy -makes the result easy to see: the camera works and the head does not move. The -same boundaries apply to cameras, lab instruments, industrial gateways, -vehicles, kiosks, and other AI-enabled edge systems. +This post walks through the design behind that architecture. Reachy makes the +result easy to see: the camera works and the head does not move. The same +boundaries apply to lab instruments, industrial gateways, vehicles, kiosks, and +other AI-enabled edge systems. The copy-and-run installation procedure lives separately in the [onboard setup tutorial](https://github.com/NVIDIA/OpenShell-Research/blob/kirit93/reachy-implementation/projects/reachy-mini-openshell/ONBOARD_SETUP.md). @@ -84,242 +82,227 @@ The copy-and-run installation procedure lives separately in the ## Trust Has to Move with the Agent -The same agent might run in a factory, a laboratory, a warehouse, a retail -space, or a home. Each deployment has different data boundaries, physical -risks, operators, and acceptable actions. Security controls therefore have to -be applied where the device is running, not only where the model is hosted. - -**Privacy has to be enforced before egress.** A camera may be allowed to analyze -a scene locally but prohibited from sending raw video off-site. A microphone may -support an on-device interaction while recordings remain local. A lab instrument -may expose a derived result while its raw measurements and sample metadata never -leave the facility. These devices need deterministic enforcement of where -sensitive data can be handled: what must stay on the device, what approved -services may process, and what may leave the local environment. This is where a -policy runtime such as OpenShell fits: it enforces those boundaries at the edge, -independently of the agent's instructions or behavior. - -**Safety has to be enforced before action.** An inspection robot may use its -camera everywhere but move only inside a controlled workcell. The same software -image can be paired with different policies for different operating environments, -so what an agent is allowed to physically do becomes a deployment decision rather -than a property baked into the build. - -**Controls have to survive agent evolution.** Models change. Prompts are tuned. -Tools are added. Application code is upgraded. A safety or privacy guarantee -that exists only inside one prompt or one version of the tool implementation has -to be re-established after every change. A separately provisioned policy -boundary remains in force while the agent evolves behind it. - -Deterministic enforcement does not mean that OpenShell understands the meaning -of every image, measurement, motor command, or physical environment. It means -the agent is confined to explicit filesystem and network boundaries, and that -device-specific capabilities cross through narrow trusted interfaces that -policy can allow or deny. OpenShell decides whether the agent may call a -capability. The trusted adapter constrains what that call can request, and the -device controller enforces the hardware limits while executing it, such as -joint ranges, speed limits, and emergency-stop behavior. - -The current Reachy demo uses the OpenAI Realtime API through an explicitly -allowed WebSocket endpoint, so its conversation audio and requested camera frame -are sent to that approved service. A deployment with strict data-residency -requirements could instead permit a local model endpoint, an approved on-device -preprocessing service, or only derived data. The important point is that the -egress decision is made by local policy; it is not implied by where the model -happens to run. +The same agent might run in a factory, a lab, a warehouse, a store, or a home. +Each of those places has different data to protect, different physical risks, +different operators, and different actions it should allow. So the controls have +to live where the device runs, not only where the model is hosted. + +**Stop private data before it leaves.** A camera can analyze a scene on the +device but be blocked from sending raw video off-site. A microphone can drive a +local interaction while the recording stays put. A lab instrument can hand back +a result while its raw measurements never leave the building. Each case needs a +hard rule about where sensitive data can go: what stays on the device, what an +approved service may process, and what may leave. That rule is what OpenShell +enforces, and it holds no matter what the agent is told to do. + +**Enforce safety before the action, not after.** An inspection robot may use its +camera everywhere but move only inside a controlled workcell. That workcell +limit lives in the policy an operator applies at deployment, not in the image or +the agent's code, so the same build can ship to a test bench where movement is +open and to a production line where it is denied. + +**Controls have to outlast changes to the agent.** Models get swapped, prompts +get tuned, tools get added, code gets upgraded. A guarantee that lives in the +prompt or the tool code breaks the moment any of those change, so you have to +re-check it after every update. A guarantee that lives in policy outside the +agent does not. You can change the agent without touching it. + +None of this means OpenShell understands what an image shows or what a motor +command will do. It means the agent is boxed into set filesystem and network +limits, and that anything device-specific has to go through a narrow trusted +interface that policy can allow or deny. OpenShell decides whether the agent may +call a capability at all. The trusted adapter decides what that call is allowed +to ask for. The device controller enforces the hardware limits as it runs, such +as joint ranges, speed caps, and emergency stop. + +The Reachy demo talks to the OpenAI Realtime API over one allowed WebSocket +endpoint, so the conversation audio and the requested camera frame go to that +approved service. A deployment with strict data-residency rules could allow a +local model instead, or an approved on-device preprocessing service, or only +derived data. The point is that local policy decides what leaves. Where the +model runs does not. --- ## An Edge Agent Is Not Just a Smaller Deployment -The straightforward approach is to take an existing agent, run it on the -device, and give it access to the local SDK or REST API. That is enough for an -early prototype. The agent can call the model, invoke a tool, and make the -hardware respond. +The obvious approach is to take an agent, run it on the device, and hand it the +local SDK or REST API. That is fine for a prototype. The agent calls the model, +invokes a tool, and the hardware responds. -Simply removing device access is not a solution because the agent can no longer -do the job. Requiring a person to approve every camera capture or movement -makes the system safer, but gives up the autonomy that made the agent useful. -Giving the agent full local access preserves capability and autonomy, but leaves -a long-running, evolving process responsible for policing itself. +Taking device access away is not an option, because then the agent cannot do its +job. Making a person approve every camera capture or movement is safer, but it +throws away the autonomy that made the agent worth using. Giving the agent full +local access keeps the capability and the autonomy, but it leaves a long-running, +self-changing process in charge of policing itself. -The goal is to preserve all three properties: useful device capabilities, -meaningful autonomy, and controls the agent cannot rewrite. That requires an -enforcement layer outside the agent process. +We want all three at once: real device capability, real autonomy, and controls +the agent cannot rewrite. That only works if the enforcement sits outside the +agent. -The direct-SDK approach also collapses several different kinds of authority -into one process. +The direct-SDK approach also piles several kinds of authority into one process. -**The agent gets more device access than it needs.** A robot SDK may expose -motors, raw targets, camera configuration, recorded motions, application -management, and system state. A conversational agent that needs five fixed head -directions should not inherit that entire surface. +**The agent gets more access than it needs.** A robot SDK exposes motors, raw +targets, camera settings, recorded motions, app management, and system state. An +agent that needs five fixed head directions should not inherit all of that. -**Policy is too far from the effect.** A remote model provider can decide which -tool to call, but it should not be the final authority on whether a local motor, -camera, or actuator is used. That decision belongs on the device, immediately +**The decision is made too far from the effect.** A remote model can pick which +tool to call, but it should not be the last word on whether a local motor, +camera, or actuator actually moves. That call belongs on the device, right before the request reaches the controller. -**The product lifecycle and the agent lifecycle are different.** Operators -choose credentials, images, resource limits, and policy. Users start and stop -an application. Recreating the security boundary every time the app starts -mixes those responsibilities and gives the runtime more provisioning authority -than it needs. +**The product and the agent have different lifecycles.** Operators choose +credentials, images, resource limits, and policy. Users just start and stop the +app. Rebuilding the security boundary every time the app starts mixes those two +jobs and hands the runtime more setup authority than it should have. -**Edge resources change the architecture.** Disk, memory, cold-start time, -networking, and hardware ownership are not deployment footnotes on a small -device. They determine which processes can run, which dependencies belong in -the sandbox, and how the application should recover. +**Edge resources shape the design.** On a small device, disk, memory, cold-start +time, networking, and hardware ownership are not footnotes. They decide which +processes can run, which dependencies belong in the sandbox, and how the app +recovers when something fails. -These are not problems with robots or language models. They come from treating -an edge agent as a conventional application that happens to run on smaller -hardware. What we needed was a clearer system of boundaries. +None of these are robot problems or language-model problems. They come from +treating an edge agent like an ordinary app that happens to run on small +hardware. What it needs instead is a clear set of boundaries. --- ## An Edge Agent as a System of Boundaries -The shift is to separate reasoning, policy enforcement, hardware ownership, and -device execution into components with focused responsibilities. - -1. **The model reasons.** It interprets the conversation and selects from the - tools the application advertises. The model can be remote or local. -2. **The sandboxed agent turns intent into a concrete request.** It owns the - conversation state and model-facing tool logic, but it does not own the - hardware. -3. **OpenShell decides whether the request may leave the sandbox.** Policy is - evaluated on the edge device using the calling binary, destination, port, - HTTP method, path, and query. -4. **A trusted adapter exposes a narrow capability.** It owns native device - objects and translates an approved request into one bounded operation. -5. **The device controller produces the effect.** Motors, sensors, cameras, or - other local systems are reached only after the preceding boundaries allow - it. +The fix is to split reasoning, policy, hardware ownership, and device execution +into separate parts, each with one job. + +1. **The model reasons.** It reads the conversation and picks from the tools the + app offers. It can be remote or local. +2. **The sandboxed agent turns that choice into a concrete request.** It owns the + conversation state and the tool logic, but it does not own the hardware. +3. **OpenShell decides whether the request may leave the sandbox.** It checks the + request on the device against the calling binary, destination, port, HTTP + method, path, and query. +4. **A trusted adapter exposes one narrow capability.** It owns the native device + objects and turns an approved request into a single bounded operation. +5. **The device controller does the work.** Motors, sensors, and cameras are + reached only after every boundary above has allowed it.
    On-device boundary stack. Five boundaries connected top to bottom: a cloud or local model, the agent in an on-device OpenShell sandbox, the local OpenShell policy decision as the control point, a narrow trusted capability adapter, and the physical device, sensor, or local data.
    Reasoning, policy enforcement, hardware ownership, and device execution are separated into distinct boundaries. The local OpenShell policy decision is the control point, evaluated on the device before a request can leave the sandbox.
    -This decomposition gives each boundary something specific to enforce and -something specific to test. We can change the model without changing the robot -adapter. We can change the policy without rebuilding the image. We can restart -the application without recreating credentials or resource limits. And we can -test the allowed camera path independently from the denied movement path. - -The sandbox starts from deny-by-default policy rather than inheriting every -capability available on the host. When Reachy hits a denied action, the agent -receives a structured failure and can explain the constraint instead of silently -bypassing it. An operator can then update the sandbox policy without rebuilding -the application, while the decision to grant new authority remains outside the -agent. +Each boundary now has one thing to enforce and one thing to test. You can change +the model without touching the robot adapter. You can change the policy without +rebuilding the image. You can restart the app without recreating credentials or +resource limits. And you can test the allowed camera path on its own, separate +from the denied movement path. + +The sandbox starts with deny-by-default policy instead of inheriting everything +the host can do. When Reachy hits a denied action, the agent gets a clear error +it can explain out loud, rather than quietly working around it. An operator can +change the policy without rebuilding the app, and the power to grant new +authority stays outside the agent. --- ## Design Principles Behind OpenShell at the Edge -With that framing in place, these are the principles that shaped the Reachy -implementation. +With that in place, here are the principles that shaped the Reachy build. ### Put policy next to the data and the effect -The policy engine runs on the same Reachy onboard computer as the agent and -robot daemon. When the agent attempts a movement request, OpenShell decides -locally whether that request can reach the daemon. A denial stops at the policy -boundary; it does not depend on the remote model deciding to withdraw the tool -call. +The policy engine runs on the same Reachy computer as the agent and the robot +daemon. When the agent tries to move the robot, OpenShell decides right there +whether the request reaches the daemon. A denial stops at the policy boundary. +It does not wait for the remote model to change its mind about the tool call. -The same boundary controls egress. The sandbox can connect only to destinations -and paths permitted by its policy. A deployment can allow an approved remote -model, route through a local privacy service, or deny remote model access and +The same boundary controls what leaves. The sandbox can only reach the +destinations and paths its policy allows. A deployment can allow an approved +remote model, route through a local privacy service, or block remote models and use an on-device endpoint instead. -This is the central edge property: the model may remain a cloud service, but the -authority to move local data and use local capabilities stays on the device. +This is the whole point at the edge: the model can stay in the cloud, but the +power to move local data and use local hardware stays on the device. ### Expose capabilities, not complete APIs -The conversation agent receives three robot tools: +The agent gets three robot tools: - `move_head(directions)` accepts `left`, `right`, `up`, `down`, and `front`. - `stop_motion()` stops active movements. - `camera(question)` requests one image for the current conversation. -The model selects one of those tools; it does not construct an HTTP request -itself. Python handlers inside the sandbox translate `move_head` into -`POST /api/move/goto`, `stop_motion` into `POST /api/move/stop`, and `camera` -into `POST /camera/capture`. OpenShell then evaluates the concrete request before -it can leave the sandbox. +The model picks one of these tools. It does not build the HTTP request itself. +Python handlers in the sandbox turn `move_head` into `POST /api/move/goto`, +`stop_motion` into `POST /api/move/stop`, and `camera` into +`POST /camera/capture`. OpenShell then checks that concrete request before it can +leave the sandbox. -The agent does not discover the complete Reachy API. Fixed tool inputs become -fixed REST requests, making the intended capability visible at the network -boundary. This is easier to reason about than giving an agent a general-purpose -SDK and trying to enumerate every unsafe combination afterward. +The agent never sees the full Reachy API. Fixed tool inputs become fixed REST +requests, so the capability you meant to grant is visible right at the network +boundary. That is much easier to reason about than handing the agent a +general-purpose SDK and trying to list every unsafe combination after the fact. ### Keep hardware handles in trusted native code -Reachy's microphone, speaker, and camera are already managed by its native app -lifecycle. Moving those objects into the sandbox would duplicate hardware -ownership and pull the full Reachy SDK, media stack, and vision dependencies -into the agent image. +Reachy's native app already owns the microphone, speaker, and camera. Moving +those into the sandbox would split hardware ownership in two and drag the full +Reachy SDK, media stack, and vision dependencies into the agent image. -Instead, a small trusted Reachy App owns the native media objects. It forwards -PCM audio through a local WebSocket and exposes one argument-free camera route: -`POST /camera/capture`. The sandbox gets the capability to converse and request -one frame; it does not get the camera handle, device selection, resolution -controls, or a filesystem path. +Instead, a small trusted Reachy App keeps the media objects. It forwards PCM +audio over a local WebSocket and exposes one camera route with no arguments: +`POST /camera/capture`. The sandbox can hold a conversation and ask for one +frame. It never gets the camera handle, the device choice, the resolution +controls, or a file path. ### Provision once, operate many times -Creating a sandbox chooses the image, provider, credentials, filesystem policy, +Creating a sandbox sets the image, provider, credentials, filesystem policy, network policy, CPU limit, and memory limit. Those are operator decisions, so -the native Reachy App does not create or delete the sandbox. +the native Reachy App does not create or delete the sandbox at all. -The model credential is configured through the OpenShell provider and attached -at provisioning time; it is not baked into the Docker image, policy file, or -native controller. The normal Reachy application lifecycle never asks for or -recreates that credential boundary. +The model credential is set through the OpenShell provider and attached when the +sandbox is created. It is not baked into the Docker image, the policy file, or +the native controller. Starting and stopping the app never touches that +credential boundary. -The sandbox remains provisioned while `reachy-agent-control start|stop|status` -manages the conversation process inside it. Starting the Reachy App verifies -the sandbox, starts the agent, exposes the audio route, and connects media. -Stopping the app closes media and stops the agent process. The policy and -provider remain intact for the next start. +The sandbox stays put while `reachy-agent-control start|stop|status` manages the +conversation process inside it. Starting the Reachy App checks the sandbox, +starts the agent, opens the audio route, and connects media. Stopping it closes +media and stops the agent. The policy and provider are still there for the next +start. ### Treat resource constraints as design inputs -The tested Reachy had 3.7 GiB usable RAM, 2 GiB swap, and a 14 GiB root -partition. We gave the sandbox a 2 CPU and 2 GiB memory ceiling and built the -image on a development machine rather than consuming the robot's CPU, memory, -and microSD write budget. +The Reachy we tested had 3.7 GiB of usable RAM, 2 GiB of swap, and a 14 GiB root +partition. We capped the sandbox at 2 CPUs and 2 GiB of memory, and we built the +image on a dev machine instead of spending the robot's CPU, memory, and microSD +write budget on it. -The runtime image uses a slim Python base, a disposable wheel-building stage, -a REST-only dependency list, and an application install with `--no-deps`. That -keeps the Reachy SDK, MuJoCo, OpenCV, simulator, dance, and local vision stacks -out of the sandbox. The resulting ARM64 image was 339,495,096 bytes, or about -339 MB, while retaining the networking tools OpenShell requires. +The runtime image uses a slim Python base, a throwaway wheel-building stage, a +REST-only dependency list, and an install with `--no-deps`. That keeps the +Reachy SDK, MuJoCo, OpenCV, the simulator, the dance stack, and local vision out +of the sandbox. The final ARM64 image came to 339,495,096 bytes, about 339 MB, +and still includes the networking tools OpenShell needs. ### Design for both remote and local models -The demonstrated Realtime model is remote. The conversation, policy, device -adapter, and robot controller still run on Reachy. This matters because “edge” -does not have to mean “fully offline,” and local enforcement does not require a -local foundation model. +The Realtime model in the demo is remote. The conversation, policy, device +adapter, and robot controller all still run on Reachy. That matters, because edge +does not have to mean fully offline, and local enforcement does not need a local +model. -The same architecture can later use an on-device model. The model endpoint -changes; the sandbox, trusted adapter, and local action boundary do not. +The same setup can later use an on-device model. Only the model endpoint changes. +The sandbox, the trusted adapter, and the local action boundary stay the same. -The current policy explicitly allows the chat application to connect to one -OpenAI Realtime endpoint. It does not provide content-aware privacy enforcement, -but it establishes the egress boundary needed to add it. +Today's policy allows the chat app to reach one OpenAI Realtime endpoint. It does +not inspect the content for privacy yet, but it sets up the egress boundary you +would need to add that. -A privacy-focused deployment could deny direct model access and make an -OpenShell Middleware service the sandbox's only permitted model destination. -Privacy Guard, which is on the OpenShell roadmap, could use that service to -detect sensitive camera, microphone, or sensor data and decide whether to block -it, redact it, process it locally, or route it to an approved model. The agent -would not be able to bypass that decision by connecting directly to another -model endpoint. +A privacy-focused deployment could block direct model access and make an +OpenShell Middleware service the only model destination the sandbox can reach. +Privacy Guard, which is on the OpenShell roadmap, could use that service to spot +sensitive camera, microphone, or sensor data and decide whether to block it, +redact it, handle it locally, or send it to an approved model. The agent could +not get around that by connecting straight to another model endpoint. --- @@ -327,187 +310,177 @@ model endpoint.
    Request flow on Reachy. The person speaks to the trusted native Reachy App, which streams PCM audio into the OpenShell sandbox, where the conversation agent exchanges policy-checked audio with the OpenAI Realtime API. Robot requests from the agent pass through the OpenShell gateway and policy engine, which allows the POST /camera/capture path to the one-frame camera adapter and denies the POST /api/move/goto path to the Reachy daemon and motors. -
    The same policy engine sits in front of both physical capabilities. It allows the camera capture path (green) and denies the movement path (red), so the camera works and the head does not move — enforced by policy rather than by the application choosing to refuse.
    +
    The same policy engine sits in front of both physical capabilities. It allows the camera capture path (green) and denies the movement path (red), so the camera works and the head does not move, enforced by policy rather than by the application choosing to refuse.
    -There is no laptop, browser, or Gradio page in the runtime path. The complete +There is no laptop, browser, or Gradio page in the runtime path. The full request flow is: 1. The trusted Reachy App captures microphone audio and streams PCM frames to - the audio service inside the sandbox. -2. The conversation agent sends that audio over its policy-approved WebSocket - connection to the OpenAI Realtime API. The model receives the conversation - together with the fixed `move_head`, `stop_motion`, and `camera` tool - definitions. -3. The model returns response audio or selects a tool. For a tool call, Python - code in the sandbox translates the model's arguments into one of the fixed - REST requests. -4. OpenShell evaluates the destination, port, method, and path. An allowed - request reaches the trusted adapter or Reachy daemon. A denied request returns - a policy error without reaching the hardware. -5. The conversation agent uses the tool result or policy error to continue the - conversation, and response audio travels back through the native Reachy App - to the robot's speaker. - -The active demo policy separates two physical capabilities: + the audio service in the sandbox. +2. The agent sends that audio to the OpenAI Realtime API over its + policy-approved WebSocket. The model gets the conversation along with the + fixed `move_head`, `stop_motion`, and `camera` tools. +3. The model returns audio or picks a tool. For a tool call, Python code in the + sandbox turns the model's arguments into one of the fixed REST requests. +4. OpenShell checks the destination, port, method, and path. An allowed request + reaches the trusted adapter or the Reachy daemon. A denied request comes back + as a policy error and never reaches the hardware. +5. The agent uses the tool result or the policy error to keep talking, and the + response audio goes back through the native Reachy App to the speaker. + +The demo policy splits two physical capabilities: ```text POST host.openshell.internal:8042/camera/capture allowed POST host.openshell.internal:8000/api/move/goto denied ``` -When a person says, “Take a picture of me,” the agent calls `camera`, OpenShell +When someone says, "Take a picture of me," the agent calls `camera`, OpenShell allows the capture path, the trusted adapter returns one bounded JPEG, and Reachy describes it aloud. -When the person says, “Turn right and take a picture,” the agent attempts -`POST /api/move/goto`. OpenShell returns a denial before the request reaches the -Reachy daemon. The robot stays still, and the denial becomes part of Reachy's -spoken response. +When they say, "Turn right and take a picture," the agent tries +`POST /api/move/goto`. OpenShell denies it before it reaches the Reachy daemon. +The robot stays still, and it says so out loud. -The important distinction is that the application is not simply choosing to -refuse movement. The model-facing process attempts a real action, and a -separately configured policy boundary prevents the physical effect. +The key point is that the app is not just choosing not to move. The agent makes +a real attempt to move, and a separate policy boundary stops the physical +effect. --- ## Why Narrow Endpoints Matter OpenShell's REST policy can match the calling binary, destination, method, -path, and query. It does not currently enforce arbitrary values nested inside a -JSON request body. If a broad endpoint can express many operations, allowing -that path also allows the sandbox to submit any body accepted by that endpoint. - -Reachy's fixed direction-to-pose mapping reduces normal model behavior to five -known poses, but that mapping is application validation rather than OpenShell -policy. The camera path has a stronger boundary because the request has no -model-controlled camera settings. The adapter chooses the already-open camera, -captures one JPEG, limits its size, rate-limits requests, and writes nothing to -disk. - -We intentionally stopped at REST method and path enforcement to keep the demo -small. OpenShell also supports generic JSON-RPC method rules. A next step could -add a small trusted JSON-RPC adapter that exposes semantic methods such as -`reachy.look_up` and `reachy.turn_right`. Policy could then allow or deny those -methods independently instead of treating every head movement as the same -`POST /api/move/goto` capability. - -Generic JSON-RPC policy currently matches the method, not arbitrary values in -`params`. Restrictions on angle, speed, distance, or duration would therefore -remain in the trusted adapter or device controller until OpenShell adds argument -matching. The JSON-RPC adapter would improve action-level policy granularity, -but it would not replace hardware safety validation. - -The same approach applies elsewhere. Rather than expose a broad control API, -an edge integration can define paths such as `/inspection/capture`, -`/instrument/read`, `/vehicle/emergency-stop`, or `/alarm/acknowledge`. The -trusted adapter defines exactly what each operation means, and OpenShell gains -a narrow capability it can allow or deny. +path, and query. It does not yet check arbitrary values inside a JSON body. So +if one endpoint can do many things, allowing that path also lets the sandbox +send any body that endpoint accepts. + +Reachy maps each direction to one of five fixed poses, but that check lives in +the app, not in OpenShell policy. The camera path has a tighter boundary, +because the request carries no camera settings the model can control. The +adapter uses the camera that is already open, captures one JPEG, caps its size, +rate-limits requests, and writes nothing to disk. + +We stopped at REST method and path checks on purpose, to keep the demo small. +OpenShell also supports JSON-RPC method rules. A next step would be a small +trusted JSON-RPC adapter that exposes named methods like `reachy.look_up` and +`reachy.turn_right`. Policy could then allow or deny each one on its own, +instead of treating every head movement as the same `POST /api/move/goto`. + +JSON-RPC policy matches the method today, not the values in `params`. So limits +on angle, speed, distance, or duration would still live in the trusted adapter +or the device controller until OpenShell can match arguments. The JSON-RPC +adapter would make action-level policy finer, but it would not replace hardware +safety checks. + +The same idea works elsewhere. Instead of exposing a broad control API, an edge +integration can define paths like `/inspection/capture`, `/instrument/read`, +`/vehicle/emergency-stop`, or `/alarm/acknowledge`. The trusted adapter says +exactly what each one does, and OpenShell gets a narrow capability it can allow +or deny. --- ## What We Learned Bringing It Onto the Robot -The move from a development machine to a small onboard computer exposed several -assumptions that the final architecture had to make explicit. - -**A persistent product needs a persistent sandbox.** Starting a sandbox with a -one-shot command caused the container to exit and restart. The final image stays -alive with `sleep infinity`, while the Reachy lifecycle starts and stops only -the inner agent process. - -**A service definition is not the same as a healthy service.** The audio route -could exist before the sandbox listener was ready. The native app now starts -the listener, verifies health, and only then ensures the OpenShell service route -is available. - -**Cold starts on edge hardware need realistic timeouts.** Importing and starting -the audio stack took roughly 41 seconds on the tested robot. A 120-second health -window handles the first start without hiding a process that never becomes -healthy. - -**Storage needs installation headroom, not just runtime headroom.** The -compressed archive, expanded image, Docker extraction layers, OpenShell -installation, and Reachy Apps Python environment can coexist temporarily. The -robot needs several gigabytes free even though the final sandbox image is only -about 339 MB. - -**The policy hop is cheap next to the model round-trip.** Each robot request adds -one local policy evaluation on the same host as the agent and daemon — a match on -binary, destination, port, method, and path — which is small beside the network +Moving from a dev machine to a small onboard computer forced several assumptions +into the open. + +**A persistent product needs a persistent sandbox.** Starting the sandbox with a +one-shot command made the container exit and restart. The final image stays +alive with `sleep infinity`, and the Reachy lifecycle starts and stops only the +agent process inside it. + +**A defined service is not a healthy service.** The audio route could exist +before the sandbox listener was ready. The native app now starts the listener, +checks that it is healthy, and only then brings up the OpenShell service route. + +**Cold starts on edge hardware need real timeouts.** Loading and starting the +audio stack took about 41 seconds on the robot we tested. A 120-second health +window covers the first start without masking a process that never comes up. + +**Storage needs room to install, not just room to run.** The compressed archive, +the expanded image, the Docker layers, the OpenShell install, and the Reachy +Apps Python environment can all sit on disk at once for a while. The robot needs +several gigabytes free even though the final image is only about 339 MB. + +**The policy check is cheap next to the model round-trip.** Each robot request +adds one local policy check on the same host as the agent and daemon (a match on +binary, destination, port, method, and path), which is tiny next to the network round-trip to the Realtime model. The latency that mattered in practice was cold -start, not steady-state enforcement. +start, not the check itself. -These details are easy to dismiss as deployment issues. On an edge product, -they are part of the architecture because they determine whether the security -boundary survives normal starts, updates, failures, and operator workflows. +It is easy to write these off as deployment details. On an edge product they are +part of the architecture, because they decide whether the security boundary +survives normal starts, updates, failures, and operator workflows. --- ## What This Pattern Makes Possible -Reachy is one concrete system, but its components map cleanly to other edge -applications. +Reachy is one system, but its parts map cleanly onto other edge applications. **Industrial inspection.** An agent can read sensors and capture evidence while -policy denies production-line or actuator changes. +policy blocks production-line and actuator changes. **Smart cameras.** An agent can describe a scene and send an approved alert -while continuous streaming, PTZ movement, and arbitrary upload destinations -remain unavailable. +while continuous streaming, PTZ movement, and arbitrary upload targets stay +off-limits. -**Lab instruments.** An agent can read measurements and prepare a run while -calibration, parameter changes, start, and stop remain separate policy-controlled -operations. +**Lab instruments.** An agent can read measurements and set up a run while +calibration, parameter changes, start, and stop stay as separate +policy-controlled actions. -**Field robots and vehicles.** Telemetry and camera access can remain distinct +**Field robots and vehicles.** Telemetry and camera access can stay separate from navigation, docking, route changes, and payload controls. -**Building-control gateways.** Read-only diagnosis can be separated from HVAC +**Building-control gateways.** Read-only diagnosis can stay separate from HVAC setpoints, doors, alarms, and maintenance actions. **Kiosks and local data appliances.** Microphone, speaker, approved peripherals, -local data, and outbound services can each have their own boundary. +local data, and outbound services can each get their own boundary. -OpenShell does not infer the safety semantics of a motor, valve, instrument, or -door. Each product still needs domain-specific safety engineering and trusted -adapters. What generalizes is the placement of the boundary: the less-trusted -agent runs inside the sandbox, and policy-approved requests cross into narrowly -defined device capabilities. +OpenShell does not know what a motor, valve, instrument, or door will do. Every +product still needs its own safety engineering and trusted adapters. What carries +over is where the boundary sits: the less-trusted agent runs in the sandbox, and +only policy-approved requests cross into a small set of clearly defined device +capabilities. -This does not remove trust so much as concentrate it. The policy engine, the -trusted adapter, and the device controller are all still trusted code. The point -is where that trust sits: instead of a large, long-running, self-modifying agent -policing itself, the parts you have to trust are small, fixed, and auditable, and -they sit outside the component most likely to change. The goal is a minimal -trusted surface, not the absence of one. +This does not remove trust. It concentrates it. The policy engine, the trusted +adapter, and the device controller are all still trusted code. What changes is +where that trust sits. Instead of a large, long-running agent that rewrites +itself and polices itself, the parts you have to trust are small, fixed, and +easy to audit, and they sit outside the piece most likely to change. The goal is +a small trusted surface, not none at all. --- ## Summary -Running autonomous, evolving agents at the edge is a systems problem, not just -a container-build problem. The Reachy implementation comes down to a few choices: +Running autonomous, self-changing agents at the edge is a systems problem, not +just a container-build problem. The Reachy build comes down to a few choices: keep the final control point outside the agent and on the device, next to the -data and actions it governs; give the agent narrow capabilities instead of a -complete hardware API, with hardware handles kept in a small trusted process; -separate operator provisioning from the product's start/stop lifecycle; and treat -CPU, memory, disk, networking, cold-start time, and where the model runs as -architecture inputs rather than afterthoughts. +data and actions it governs; give the agent narrow capabilities instead of a full +hardware API, and keep the hardware handles in a small trusted process; separate +operator setup from the product's start and stop; and treat CPU, memory, disk, +networking, cold-start time, and where the model runs as design inputs, not +afterthoughts. The result is more than a policy-controlled robot demo. It is a deployment -pattern in which OpenShell becomes the on-device isolation and policy layer for -autonomous AI-enabled edge systems. As future agent versions gain new models, -prompts, tools, and skills inside the sandbox, those changes do not automatically -widen their authority over the device. Reachy makes the pattern visible: the -same agent can use the camera, attempt movement, be denied locally, and explain -that denial to the person standing in front of it. - -Moving from this reference implementation to production would add fleet-level +pattern where OpenShell is the on-device isolation and policy layer for +autonomous edge systems. As later versions of the agent get new models, prompts, +tools, and skills inside the sandbox, none of that widens their power over the +device on its own. Reachy makes it visible: the same agent can use the camera, +try to move, be denied on the device, and explain that denial to the person in +front of it. + +Going from this reference implementation to production would add fleet-wide policy distribution, signed and attested images, bounded logs, structured audit -correlation, over-the-air updates, explicit offline behavior, and -safety-specific adapters for each class of hardware. Those are the next systems -problems around a boundary that now works on real edge hardware. +trails, over-the-air updates, defined offline behavior, and safety-specific +adapters for each kind of hardware. Those are the next problems to solve around a +boundary that already works on real edge hardware. Key resources: From 95a17f58c65df19166d92e70346cb7574ec84871 Mon Sep 17 00:00:00 2001 From: Kirit93 Date: Thu, 16 Jul 2026 08:35:42 -0700 Subject: [PATCH 33/45] Updated dev note --- .../diagrams/request-flow.svg | 4 +- .../screenshots/gradio-home.png | Bin 27027 -> 0 bytes ...-controlling-reachy-mini-with-openshell.md | 269 +++++++----------- 3 files changed, 102 insertions(+), 171 deletions(-) delete mode 100644 docs/assets/reachy-mini-openshell/screenshots/gradio-home.png diff --git a/docs/assets/reachy-mini-openshell/diagrams/request-flow.svg b/docs/assets/reachy-mini-openshell/diagrams/request-flow.svg index 69d8056a..64f88fdc 100644 --- a/docs/assets/reachy-mini-openshell/diagrams/request-flow.svg +++ b/docs/assets/reachy-mini-openshell/diagrams/request-flow.svg @@ -1,5 +1,5 @@ + aria-label="Reachy request flow: audio moves from the person through the trusted native app into the sandboxed agent and the OpenAI Realtime model; robot requests pass through the OpenShell gateway, which allows the camera capture path and denies the movement path."> Request flow on Reachy. The person speaks to the trusted native Reachy App, which streams PCM audio into the OpenShell sandbox, where the conversation agent exchanges policy-checked audio with the OpenAI Realtime API. Robot requests from the agent pass through the OpenShell gateway and policy engine, which allows the POST /camera/capture path to the one-frame camera adapter and denies the POST /api/move/goto path to the Reachy daemon and motors. -
    The same policy engine sits in front of both physical capabilities. It allows the camera capture path (green) and denies the movement path (red), so the camera works and the head does not move, enforced by policy rather than by the application choosing to refuse.
    + Request flow on Reachy. The person speaks to the trusted native Reachy App, which streams PCM audio into the OpenShell sandbox, where the conversation agent exchanges policy-checked audio with the OpenAI Realtime API. Robot requests from the agent pass through the OpenShell gateway, which allows the POST /camera/capture path to the one-frame camera adapter and denies the POST /api/move/goto path to the Reachy daemon and motors. +
    The same OpenShell gateway sits in front of both physical capabilities. It allows the camera capture path (green) and denies the movement path (red), so the camera works and the head does not move, enforced by policy rather than by the application choosing to refuse.
    There is no laptop, browser, or Gradio page in the runtime path. The full @@ -350,39 +370,6 @@ effect. --- -## Why Narrow Endpoints Matter - -OpenShell's REST policy can match the calling binary, destination, method, -path, and query. It does not yet check arbitrary values inside a JSON body. So -if one endpoint can do many things, allowing that path also lets the sandbox -send any body that endpoint accepts. - -Reachy maps each direction to one of five fixed poses, but that check lives in -the app, not in OpenShell policy. The camera path has a tighter boundary, -because the request carries no camera settings the model can control. The -adapter uses the camera that is already open, captures one JPEG, caps its size, -rate-limits requests, and writes nothing to disk. - -We stopped at REST method and path checks on purpose, to keep the demo small. -OpenShell also supports JSON-RPC method rules. A next step would be a small -trusted JSON-RPC adapter that exposes named methods like `reachy.look_up` and -`reachy.turn_right`. Policy could then allow or deny each one on its own, -instead of treating every head movement as the same `POST /api/move/goto`. - -JSON-RPC policy matches the method today, not the values in `params`. So limits -on angle, speed, distance, or duration would still live in the trusted adapter -or the device controller until OpenShell can match arguments. The JSON-RPC -adapter would make action-level policy finer, but it would not replace hardware -safety checks. - -The same idea works elsewhere. Instead of exposing a broad control API, an edge -integration can define paths like `/inspection/capture`, `/instrument/read`, -`/vehicle/emergency-stop`, or `/alarm/acknowledge`. The trusted adapter says -exactly what each one does, and OpenShell gets a narrow capability it can allow -or deny. - ---- - ## What We Learned Bringing It Onto the Robot Moving from a dev machine to a small onboard computer forced several assumptions @@ -418,69 +405,13 @@ survives normal starts, updates, failures, and operator workflows. --- -## What This Pattern Makes Possible - -Reachy is one system, but its parts map cleanly onto other edge applications. - -**Industrial inspection.** An agent can read sensors and capture evidence while -policy blocks production-line and actuator changes. - -**Smart cameras.** An agent can describe a scene and send an approved alert -while continuous streaming, PTZ movement, and arbitrary upload targets stay -off-limits. - -**Lab instruments.** An agent can read measurements and set up a run while -calibration, parameter changes, start, and stop stay as separate -policy-controlled actions. - -**Field robots and vehicles.** Telemetry and camera access can stay separate -from navigation, docking, route changes, and payload controls. - -**Building-control gateways.** Read-only diagnosis can stay separate from HVAC -setpoints, doors, alarms, and maintenance actions. - -**Kiosks and local data appliances.** Microphone, speaker, approved peripherals, -local data, and outbound services can each get their own boundary. - -OpenShell does not know what a motor, valve, instrument, or door will do. Every -product still needs its own safety engineering and trusted adapters. What carries -over is where the boundary sits: the less-trusted agent runs in the sandbox, and -only policy-approved requests cross into a small set of clearly defined device -capabilities. - -This does not remove trust. It concentrates it. The policy engine, the trusted -adapter, and the device controller are all still trusted code. What changes is -where that trust sits. Instead of a large, long-running agent that rewrites -itself and polices itself, the parts you have to trust are small, fixed, and -easy to audit, and they sit outside the piece most likely to change. The goal is -a small trusted surface, not none at all. - ---- +## Conclusion -## Summary - -Running autonomous, self-changing agents at the edge is a systems problem, not -just a container-build problem. The Reachy build comes down to a few choices: -keep the final control point outside the agent and on the device, next to the -data and actions it governs; give the agent narrow capabilities instead of a full -hardware API, and keep the hardware handles in a small trusted process; separate -operator setup from the product's start and stop; and treat CPU, memory, disk, -networking, cold-start time, and where the model runs as design inputs, not -afterthoughts. - -The result is more than a policy-controlled robot demo. It is a deployment -pattern where OpenShell is the on-device isolation and policy layer for -autonomous edge systems. As later versions of the agent get new models, prompts, -tools, and skills inside the sandbox, none of that widens their power over the -device on its own. Reachy makes it visible: the same agent can use the camera, -try to move, be denied on the device, and explain that denial to the person in -front of it. - -Going from this reference implementation to production would add fleet-wide -policy distribution, signed and attested images, bounded logs, structured audit -trails, over-the-air updates, defined offline behavior, and safety-specific -adapters for each kind of hardware. Those are the next problems to solve around a -boundary that already works on real edge hardware. +None of this is specific to Reachy. The same approach fits inspection robots, +smart cameras, lab instruments, field vehicles, building gateways, and kiosks. In each one, the agent can read sensors and describe what it sees, while +anything with a real consequence has to be approved by a policy first: moving an actuator, +changing a setpoint, or sending raw data off the device. We see this as a pattern for using OpenShell to bring security and trust to +autonomous edge systems. Key resources: From 8c7ebaeea7220f0629cb82fcd7358ea42ed666b3 Mon Sep 17 00:00:00 2001 From: Kirit93 Date: Thu, 16 Jul 2026 13:46:03 -0700 Subject: [PATCH 34/45] Updated blog --- ...-controlling-reachy-mini-with-openshell.md | 51 +++++-------------- 1 file changed, 13 insertions(+), 38 deletions(-) diff --git a/docs/dev-notes/posts/2026-07-13-policy-controlling-reachy-mini-with-openshell.md b/docs/dev-notes/posts/2026-07-13-policy-controlling-reachy-mini-with-openshell.md index 66eada02..4fb2362f 100644 --- a/docs/dev-notes/posts/2026-07-13-policy-controlling-reachy-mini-with-openshell.md +++ b/docs/dev-notes/posts/2026-07-13-policy-controlling-reachy-mini-with-openshell.md @@ -370,47 +370,22 @@ effect. --- -## What We Learned Bringing It Onto the Robot - -Moving from a dev machine to a small onboard computer forced several assumptions -into the open. - -**A persistent product needs a persistent sandbox.** Starting the sandbox with a -one-shot command made the container exit and restart. The final image stays -alive with `sleep infinity`, and the Reachy lifecycle starts and stops only the -agent process inside it. - -**A defined service is not a healthy service.** The audio route could exist -before the sandbox listener was ready. The native app now starts the listener, -checks that it is healthy, and only then brings up the OpenShell service route. - -**Cold starts on edge hardware need real timeouts.** Loading and starting the -audio stack took about 41 seconds on the robot we tested. A 120-second health -window covers the first start without masking a process that never comes up. - -**Storage needs room to install, not just room to run.** The compressed archive, -the expanded image, the Docker layers, the OpenShell install, and the Reachy -Apps Python environment can all sit on disk at once for a while. The robot needs -several gigabytes free even though the final image is only about 339 MB. - -**The policy check is cheap next to the model round-trip.** Each robot request -adds one local policy check on the same host as the agent and daemon (a match on -binary, destination, port, method, and path), which is tiny next to the network -round-trip to the Realtime model. The latency that mattered in practice was cold -start, not the check itself. - -It is easy to write these off as deployment details. On an edge product they are -part of the architecture, because they decide whether the security boundary -survives normal starts, updates, failures, and operator workflows. - ---- - ## Conclusion None of this is specific to Reachy. The same approach fits inspection robots, -smart cameras, lab instruments, field vehicles, building gateways, and kiosks. In each one, the agent can read sensors and describe what it sees, while -anything with a real consequence has to be approved by a policy first: moving an actuator, -changing a setpoint, or sending raw data off the device. We see this as a pattern for using OpenShell to bring security and trust to +smart cameras, lab instruments, field vehicles, building gateways, and kiosks. In +each one, the agent can read sensors and describe what it sees, while anything +with a real consequence has to be approved by policy first: moving an actuator, +changing a setpoint, or sending raw data off the device. + +The main result from putting this on Reachy is that the whole OpenShell stack, +the gateway and the sandbox, runs on the device's own computer. The isolation and +the policy do not depend on the network or a cloud service, so the device keeps +enforcing its boundary even if the network drops or the model is unreachable. +Running the full stack on device is what gives complete isolation and control at +the edge. + +We see this as a pattern for using OpenShell to bring security and trust to autonomous edge systems. Key resources: From be515c9c2684e1e3febec058f1a9e0e90da16a72 Mon Sep 17 00:00:00 2001 From: Kirit93 Date: Fri, 17 Jul 2026 12:53:58 -0700 Subject: [PATCH 35/45] more blog edits --- ...-controlling-reachy-mini-with-openshell.md | 201 +++++------------- 1 file changed, 56 insertions(+), 145 deletions(-) diff --git a/docs/dev-notes/posts/2026-07-13-policy-controlling-reachy-mini-with-openshell.md b/docs/dev-notes/posts/2026-07-13-policy-controlling-reachy-mini-with-openshell.md index 4fb2362f..32bb6c19 100644 --- a/docs/dev-notes/posts/2026-07-13-policy-controlling-reachy-mini-with-openshell.md +++ b/docs/dev-notes/posts/2026-07-13-policy-controlling-reachy-mini-with-openshell.md @@ -44,13 +44,13 @@ watching. This creates a problem. When an agent can change itself and act on its own, a guardrail that lives inside the same process is easy for it to bypass. OpenShell is the agent runtime for autonomous fleets of agents, and it solves -this problem by moving the control point outside the agent. It runs the agent in +this problem by moving the point of control outside the agent. It runs the agent in a sandbox and sits in the path of everything the agent does. A policy layer, configured separately from the agent, governs each -interaction: which files it can read or write, which processes it can start, -which hosts and ports it can reach, and which models it can call. +interaction: which processes it can start, which hosts and ports it can reach, which models it can call, other services it needs to invoke along its network path. -The boundary is also programmable. Because every request passes through the -runtime, you can do more there than allow or deny. For privacy, you +We recognize that everyone has different criteria and needs for an agent runtime, that's why we made OpenShell extensible. You can pick +your isolation backend, add enterprise specific checks for policy updates, and deploy middleware services that are invoked when any traffic egresses +the sandbox. With this, there's more you can do than just allow or deny requests. For privacy, you can run outbound requests through a filter that redacts or drops sensitive data, such as faces in a camera frame, before it leaves the device. For routing, you can point a model call at an on-device endpoint, a cloud provider, or a @@ -61,47 +61,38 @@ a stronger credential instead of passing on the model's say-so. For enterprise control, you can sign a policy and have the device verify that signature before it loads, so it only enforces rules an operator actually approved, and push those signed policies across a fleet. So OpenShell is more than a sandbox around the -agent. - -If the model is prompt-injected, a tool is compromised, or the agent rewrites its -own workflow, it still cannot give itself a permission the runtime did not grant. +agent, it's a complete runtime. At the edge, this problem gets physical. An agent can watch people and places, read microphones, cameras, and sensors, and take actions that move machines or -change local systems. A failure is no longer just a bad shell command or a -leaked credential. It can leak data that was supposed to stay on-site, or move +change local systems. A corrupted agent can leak data that was supposed to stay on-site, or move something in the real world. -That creates two rules. Some data should never leave the device or the site +Two requirements come out of this - some data should never leave the device or the site where it was produced. Some actions should never be possible in a given -deployment, even if a model, prompt, tool, skill, or update asks for them. To -enforce both, the control point has to sit on the device with the agent. It has -to be deterministic, set up separately from the agent, and checked locally -before any data leaves or any action reaches the hardware. +deployment, even if a model, prompt, tool, skill, or update asks for them. We run the entire OpenShell stack on the edge +to bring deterministic policy enforcement and security to edge devices. -We used Reachy Mini to see what that looks like in practice. The pattern keeps -the agent in an on-device OpenShell sandbox, keeps hardware ownership in a small -trusted process, and checks policy locally before any request reaches the rest -of the device. +We used Reachy Mini to see what that looks like in practice. We run a small chat application connected to an Open AI endpoint within the OpenShell +Runtime, all on the Reachy Mini's onboard Raspberry Pi. - -This post walks through the design behind that architecture. Reachy makes the -result easy to see: the camera works and the head does not move. The same -boundaries apply to lab instruments, industrial gateways, vehicles, kiosks, and -other AI-enabled edge systems. + -The copy-and-run installation procedure lives separately in the -[onboard setup tutorial](https://github.com/NVIDIA/OpenShell-Research/blob/kirit93/reachy-implementation/projects/reachy-mini-openshell/ONBOARD_SETUP.md). +This post talks about how we approached this and what it means for agent security at the edge. If +you just want to try this for yourself, check out our tutorial [here](https://github.com/NVIDIA/OpenShell-Research/blob/kirit93/reachy-implementation/projects/reachy-mini-openshell/ONBOARD_SETUP.md). --- -## Trust Has to Move with the Agent +## Bring Privacy and Trust to the Edge + +The way we approach privacy for edge devices and traditional software applications changes. At the edge, you can have +devices that can see you, hear you, and talk to you. These devices can be in your home, your office, even your schools and +you need to make sure these devices see and hear only things they really need to, and keep that data private. You also need to make sure +these devices can only do the things you really want them to. For a home assistant robot, that could be only allowing a robot to clean but never allowing +it to open a door. -The same agent might run in a factory, a lab, a warehouse, a store, or a home. -Each of those places has different data to protect, different physical risks, -different operators, and different actions it should allow. So the controls have -to live where the device runs, not only where the model is hosted. +Let's think about how OpenShell's core principles can apply here: **Stop private data before it leaves.** A camera can analyze a scene on the device but be blocked from sending raw video off-site. A microphone can drive a @@ -123,14 +114,6 @@ prompt or the tool code breaks the moment any of those change, so you have to re-check it after every update. A guarantee that lives in policy outside the agent does not. You can change the agent without touching it. -None of this means OpenShell understands what an image shows or what a motor -command will do. It means the agent is boxed into set filesystem and network -limits, and that anything device-specific has to go through a narrow trusted -interface that policy can allow or deny. OpenShell decides whether the agent may -call a capability at all. The trusted adapter decides what that call is allowed -to ask for. The device controller enforces the hardware limits as it runs, such -as joint ranges, speed caps, and emergency stop. - The Reachy demo talks to the OpenAI Realtime API over one allowed WebSocket endpoint, so the conversation audio and the requested camera frame go to that approved service. A deployment with strict data-residency rules could allow a @@ -139,45 +122,24 @@ derived data. Local policy decides what leaves, no matter where the model runs. --- -## An Edge Agent Is Not Just a Smaller Deployment - -The obvious approach is to run the agent on the device and hand it the local SDK -or REST API. That works for a prototype: the agent calls the model, invokes a -tool, and the hardware responds. - -It breaks once two things are true: the agent can change itself, and what it does -has real-world consequences. An agent that only answers questions can be trusted -to stay in bounds. One that rewrites its own prompts, adds its own tools, and -drives a motor cannot, because the code enforcing the limits is the same code -that keeps changing. That is when security starts to matter. +## Give Each Job Its Own Boundary -At that point the obvious fixes do not hold. Take device access away and the -agent cannot do its job. Gate every capture and movement on human approval and -you lose the autonomy that made it useful. Leave it with full access and a -self-changing process is policing itself. Keeping capability, autonomy, and -controls the agent cannot rewrite means the enforcement has to sit outside the -agent. +The simplest way to build this is to run the agent on the device and give it the +robot's SDK. That works for a quick demo, but it puts two things that should be +separate into a single process. -Handing the agent the SDK directly also packs two separate concerns into one -process. +**The agent gets more than it needs.** A robot SDK exposes motors, raw targets, +camera settings, recorded motions, app management, and system state. An agent +that only needs a few fixed head moves should not inherit all of that. -**Too much access.** A robot SDK exposes motors, raw targets, camera settings, -recorded motions, app management, and system state. An agent that needs a few -fixed head moves should not inherit all of it. +**The decision happens too far from the effect.** A remote model can pick which +tool to call, but it should not be the final say on whether a local motor +actually moves. That call belongs on the device, right before the request reaches +the controller. -**The decision sits too far from the effect.** A remote model can pick which tool -to call, but it should not be the final say on whether a local motor actually -moves. That decision belongs on the device, right before the request reaches the -controller. - ---- - -## An Edge Agent as a System of Boundaries - -Both problems come from the same thing: one process holds the access and makes -the decisions, instead of splitting those jobs apart. The fix is to give each -responsibility its own part. Reasoning, policy, hardware ownership, and device -execution become four separate boundaries, each with one job. +Both come from the same place: one process holds all the access and makes all the +decisions. So we split the work into separate parts, each with one job. Reasoning, +policy, hardware ownership, and device execution each become their own boundary. 1. **The model reasons.** It reads the conversation and picks from the tools the app offers. It can be remote or local. @@ -210,31 +172,25 @@ authority stays outside the agent. --- -## Design Principles Behind OpenShell at the Edge +## How We Built It -With that in place, here are the principles that shaped the Reachy build. +These were the main choices behind the build. ### Run OpenShell entirely on device -On Reachy, all core parts of OpenShell run on the onboard computer. The gateway is -the control plane: it creates the sandbox, resolves the policy, and manages the -sandbox lifecycle. The agent runs inside the sandbox. - -So when the agent tries to move the robot, OpenShell intercepts the request on -the device and decides whether it reaches the daemon. A denial stops right there. -It does not wait for the remote model to withdraw the tool call. - -OpenShell's policy also enforces what leaves the sandbox. Every outbound connection -goes through it, and it can allow the request, route it to another destination, -or deny it. So a deployment can allow one approved remote model, route model -traffic through a local service, or block remote models and use an on-device -endpoint instead. The model can sit in the cloud, but the gateway and the sandbox -both run on the device, so the power to move local data and use local hardware -stays local. +We run all of OpenShell on Reachy's onboard computer. The gateway is the control +plane: it creates the sandbox, holds the policy, and manages the sandbox +lifecycle. The agent runs inside the sandbox. When the agent tries to move the +robot, OpenShell checks the request on the device and decides whether it reaches +the daemon. A denial stops right there. It does not wait for the remote model to +withdraw the call. The same check controls what leaves the sandbox: every +outbound connection can be allowed, routed somewhere else, or denied. The model +can sit in the cloud, but the gateway and the sandbox both run on the device, so +the power to move local data and use local hardware stays local. ### Expose capabilities, not complete APIs -The agent gets three robot tools: +We give the agent three tools: - `move_head(directions)` accepts `left`, `right`, `up`, `down`, and `front`. - `stop_motion()` stops active movements. @@ -271,58 +227,13 @@ audio over a local WebSocket and exposes one camera route with no arguments: frame. It never gets the camera handle, the device choice, the resolution controls, or a file path. -### Provision once, operate many times - -Setup happens once. You install OpenShell on the robot and create the sandbox a -single time. That one step fixes the operator decisions: the image, the provider, -the credentials, the filesystem and network policy, and the CPU and memory -limits. The model credential is part of it too. It is attached to the sandbox -through the OpenShell provider at creation, not baked into the Docker image, the -policy file, or the native controller. - -After that, the sandbox stays up and the Reachy App only manages the conversation -process inside it. `reachy-agent-control start|stop|status` starts and stops the -agent, never the sandbox. Starting the Reachy App checks that the sandbox is -ready, starts the agent, opens the audio route, and connects media. Stopping it -closes media and stops the agent. The sandbox, its policy, and its credentials -are left in place, ready for the next start. - -We would rather have folded sandbox creation into starting the app, so setup was -one step instead of two. Reachy's app lifecycle did not allow that. - -### Treat resource constraints as design inputs - -The Reachy we tested had 3.7 GiB of usable RAM, 2 GiB of swap, and a 14 GiB root -partition. We capped the sandbox at 2 CPUs and 2 GiB of memory, and we built the -image on a dev machine instead of spending the robot's CPU, memory, and microSD -write budget on it. - -The runtime image uses a slim Python base, a throwaway wheel-building stage, a -REST-only dependency list, and an install with `--no-deps`. That keeps the -Reachy SDK, MuJoCo, OpenCV, the simulator, the dance stack, and local vision out -of the sandbox. The final ARM64 image came to 339,495,096 bytes, about 339 MB, -and still includes the networking tools OpenShell needs. - -### Design for both remote and local models - -The Realtime model in the demo is remote. The conversation, policy, device -adapter, and robot controller all still run on Reachy. That matters, because edge -does not have to mean fully offline, and local enforcement does not need a local -model. - -The same setup can later use an on-device model. Only the model endpoint changes. -The sandbox, the trusted adapter, and the local action boundary stay the same. - -Today's policy allows the chat app to reach one OpenAI Realtime endpoint. It does -not inspect the content for privacy yet, but it sets up the egress boundary you -would need to add that. - -A privacy-focused deployment could block direct model access and make an -OpenShell Middleware service the only model destination the sandbox can reach. -Privacy Guard, which is on the OpenShell roadmap, could use that service to spot -sensitive camera, microphone, or sensor data and decide whether to block it, -redact it, handle it locally, or send it to an approved model. The agent could -not get around that by connecting straight to another model endpoint. +### Use a remote or local model + +The model in our demo is remote, an OpenAI Realtime endpoint. Everything else, +the conversation, the policy, the adapter, and the controller, runs on Reachy. +Edge does not have to mean fully offline, and enforcing policy on the device does +not need a local model. If you later want an on-device model, only the endpoint +changes. The sandbox, the adapter, and the boundary stay the same. --- From ada471a6419d8f4193a84341d9d0536d50bc1b77 Mon Sep 17 00:00:00 2001 From: Kirit93 Date: Fri, 17 Jul 2026 12:59:46 -0700 Subject: [PATCH 36/45] Updated flow --- ...-controlling-reachy-mini-with-openshell.md | 20 ++++++------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/docs/dev-notes/posts/2026-07-13-policy-controlling-reachy-mini-with-openshell.md b/docs/dev-notes/posts/2026-07-13-policy-controlling-reachy-mini-with-openshell.md index 32bb6c19..b74c0fec 100644 --- a/docs/dev-notes/posts/2026-07-13-policy-controlling-reachy-mini-with-openshell.md +++ b/docs/dev-notes/posts/2026-07-13-policy-controlling-reachy-mini-with-openshell.md @@ -53,7 +53,7 @@ your isolation backend, add enterprise specific checks for policy updates, and d the sandbox. With this, there's more you can do than just allow or deny requests. For privacy, you can run outbound requests through a filter that redacts or drops sensitive data, such as faces in a camera frame, before it leaves the device. For routing, you -can point a model call at an on-device endpoint, a cloud provider, or a +can point an agent call at an on-device endpoint, a cloud provider, or a middleware service in between, and change that choice per deployment without touching the agent. For authorization, you can require an extra check before a sensitive request goes through, so an action waits for an operator's approval or @@ -68,19 +68,11 @@ read microphones, cameras, and sensors, and take actions that move machines or change local systems. A corrupted agent can leak data that was supposed to stay on-site, or move something in the real world. -Two requirements come out of this - some data should never leave the device or the site -where it was produced. Some actions should never be possible in a given -deployment, even if a model, prompt, tool, skill, or update asks for them. We run the entire OpenShell stack on the edge -to bring deterministic policy enforcement and security to edge devices. +Two core problems that stand out to us with edge deployments are - privacy of data captured at the edge, and restricting physical actions a robot or +similar device can take depending on it's deployment scenario. We used Reachy Mini to see what that looks like in practice. We run a small chat application connected to an Open AI endpoint within the OpenShell Runtime, all on the Reachy Mini's onboard Raspberry Pi. We use OpenShell to restrict what actions the model can take. Our next step is to +route sensitive data to approved models but more on that in a follow on post! -We used Reachy Mini to see what that looks like in practice. We run a small chat application connected to an Open AI endpoint within the OpenShell -Runtime, all on the Reachy Mini's onboard Raspberry Pi. - - - - -This post talks about how we approached this and what it means for agent security at the edge. If -you just want to try this for yourself, check out our tutorial [here](https://github.com/NVIDIA/OpenShell-Research/blob/kirit93/reachy-implementation/projects/reachy-mini-openshell/ONBOARD_SETUP.md). +If you just want to try this for yourself, check out our tutorial [here](https://github.com/NVIDIA/OpenShell-Research/blob/kirit93/reachy-implementation/projects/reachy-mini-openshell/ONBOARD_SETUP.md). --- @@ -103,7 +95,7 @@ approved service may process, and what may leave. That rule is what OpenShell enforces, and it holds no matter what the agent is told to do. **Enforce safety before the action, not after.** An inspection robot may use its -camera everywhere but move only inside a controlled workcell. That workcell +camera everywhere but move only inside a controlled environment. That environment limit lives in the policy an operator applies at deployment, not in the image or the agent's code, so the same build can ship to a test bench where movement is open and to a production line where it is denied. From 069696b0a28ffd0cd77e1e043a532f81b9cec3e2 Mon Sep 17 00:00:00 2001 From: Kirit93 Date: Fri, 17 Jul 2026 19:31:26 -0700 Subject: [PATCH 37/45] docs(dev-note): finalize Reachy OpenShell edge post Restructure around the two problems (action restriction, privacy), tighten the intro and boundary sections, and add the privacy-routing middleware diagram. --- .../diagrams/privacy-routing.svg | 66 ++++++++ ...-controlling-reachy-mini-with-openshell.md | 143 +++++++----------- 2 files changed, 117 insertions(+), 92 deletions(-) create mode 100644 docs/assets/reachy-mini-openshell/diagrams/privacy-routing.svg diff --git a/docs/assets/reachy-mini-openshell/diagrams/privacy-routing.svg b/docs/assets/reachy-mini-openshell/diagrams/privacy-routing.svg new file mode 100644 index 00000000..a486b2e0 --- /dev/null +++ b/docs/assets/reachy-mini-openshell/diagrams/privacy-routing.svg @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + PRIVACY ROUTING WITH MIDDLEWARE + + + + Sandboxed agent + on the Reachy + + + + OPENSHELL MIDDLEWARE + + Router + detects data type + + + + + IMAGE DATA + Approved image model + cleared for sensitive images + + + + Frontier model + in the cloud + + + + all traffic + + + + image data + + + + everything else + + Policy forces all sandbox traffic through the middleware, so the agent cannot route around it. + diff --git a/docs/dev-notes/posts/2026-07-13-policy-controlling-reachy-mini-with-openshell.md b/docs/dev-notes/posts/2026-07-13-policy-controlling-reachy-mini-with-openshell.md index b74c0fec..06ae19c6 100644 --- a/docs/dev-notes/posts/2026-07-13-policy-controlling-reachy-mini-with-openshell.md +++ b/docs/dev-notes/posts/2026-07-13-policy-controlling-reachy-mini-with-openshell.md @@ -38,87 +38,31 @@ card_tags: -AI agents can now run for a long time, pursue -goals, call tools, learn new skills, write code, and keep working while no one is -watching. This creates a problem. When an agent can change itself and act on its -own, a guardrail that lives inside the same process is easy for it to bypass. - -OpenShell is the agent runtime for autonomous fleets of agents, and it solves -this problem by moving the point of control outside the agent. It runs the agent in -a sandbox and sits in the path of everything the agent does. A policy layer, configured separately from the agent, governs each -interaction: which processes it can start, which hosts and ports it can reach, which models it can call, other services it needs to invoke along its network path. - -We recognize that everyone has different criteria and needs for an agent runtime, that's why we made OpenShell extensible. You can pick -your isolation backend, add enterprise specific checks for policy updates, and deploy middleware services that are invoked when any traffic egresses -the sandbox. With this, there's more you can do than just allow or deny requests. For privacy, you -can run outbound requests through a filter that redacts or drops sensitive data, -such as faces in a camera frame, before it leaves the device. For routing, you -can point an agent call at an on-device endpoint, a cloud provider, or a -middleware service in between, and change that choice per deployment without -touching the agent. For authorization, you can require an extra check before a -sensitive request goes through, so an action waits for an operator's approval or -a stronger credential instead of passing on the model's say-so. For enterprise -control, you can sign a policy and have the device verify that signature before -it loads, so it only enforces rules an operator actually approved, and push those -signed policies across a fleet. So OpenShell is more than a sandbox around the -agent, it's a complete runtime. - -At the edge, this problem gets physical. An agent can watch people and places, -read microphones, cameras, and sensors, and take actions that move machines or -change local systems. A corrupted agent can leak data that was supposed to stay on-site, or move -something in the real world. - -Two core problems that stand out to us with edge deployments are - privacy of data captured at the edge, and restricting physical actions a robot or -similar device can take depending on it's deployment scenario. We used Reachy Mini to see what that looks like in practice. We run a small chat application connected to an Open AI endpoint within the OpenShell Runtime, all on the Reachy Mini's onboard Raspberry Pi. We use OpenShell to restrict what actions the model can take. Our next step is to -route sensitive data to approved models but more on that in a follow on post! - -If you just want to try this for yourself, check out our tutorial [here](https://github.com/NVIDIA/OpenShell-Research/blob/kirit93/reachy-implementation/projects/reachy-mini-openshell/ONBOARD_SETUP.md). +AI agents can now run for a long time, pursue goals, call tools, learn new skills, write code, and keep working while no one is watching. How do you give autonomy to such a highly capable agent? ---- +OpenShell is the secure agent runtime for autonomous agents. It solves this problem by moving the security layer outside the agent. OpenShell runs your agent in a sandbox and sits in the path of everything the agent does. A policy layer, configured separately from the agent, governs what processes the agent can start, which hosts and ports it can reach, which models it can call, and which other services it needs to invoke along its network path. + +Every OpenShell deployment has different needs, so we made OpenShell extensible. You are not locked into a fixed set of behaviors. You can swap the isolation backend, add your own checks on policy updates, and plug in middleware services that run on traffic as it leaves the sandbox. + +The combination of autonomous agents and edge devices like robots brings the digital concerns of traditional software deployments into the physical world. Imagine a home assistant robot that is only supposed to clean. It suffers a prompt injection and starts unlocking the doors instead. At the edge, a compromised agent does not just leak data or crash a process. It can let a stranger into your home, or send what it sees and hears somewhere it should never go. + +OpenShell makes an autonomous agent safe to run at the edge by solving two problems: -## Bring Privacy and Trust to the Edge - -The way we approach privacy for edge devices and traditional software applications changes. At the edge, you can have -devices that can see you, hear you, and talk to you. These devices can be in your home, your office, even your schools and -you need to make sure these devices see and hear only things they really need to, and keep that data private. You also need to make sure -these devices can only do the things you really want them to. For a home assistant robot, that could be only allowing a robot to clean but never allowing -it to open a door. - -Let's think about how OpenShell's core principles can apply here: - -**Stop private data before it leaves.** A camera can analyze a scene on the -device but be blocked from sending raw video off-site. A microphone can drive a -local interaction while the recording stays put. A lab instrument can hand back -a result while its raw measurements never leave the building. Each case needs a -hard rule about where sensitive data can go: what stays on the device, what an -approved service may process, and what may leave. That rule is what OpenShell -enforces, and it holds no matter what the agent is told to do. - -**Enforce safety before the action, not after.** An inspection robot may use its -camera everywhere but move only inside a controlled environment. That environment -limit lives in the policy an operator applies at deployment, not in the image or -the agent's code, so the same build can ship to a test bench where movement is -open and to a production line where it is denied. - -**Controls have to outlast changes to the agent.** Models get swapped, prompts -get tuned, tools get added, code gets upgraded. A guarantee that lives in the -prompt or the tool code breaks the moment any of those change, so you have to -re-check it after every update. A guarantee that lives in policy outside the -agent does not. You can change the agent without touching it. - -The Reachy demo talks to the OpenAI Realtime API over one allowed WebSocket -endpoint, so the conversation audio and the requested camera frame go to that -approved service. A deployment with strict data-residency rules could allow a -local model instead, or an approved on-device preprocessing service, or only -derived data. Local policy decides what leaves, no matter where the model runs. +- **Restrict what the device can do.** Deterministic policy decides what the agent can actually make the device do, and it is enforced on the device. +- **Keep the data private.** Sensitive data stays local, and only approved services ever see it. + +We used the HuggingFace Reachy Mini to see what that looks like in practice. We run a small chat application connected to an OpenAI endpoint within the OpenShell runtime, all on the Reachy Mini's onboard Raspberry Pi. We use OpenShell to restrict what actions the model can take. Our next step is to route sensitive data to approved models, but more on that in a follow-up post. + +If you just want to try this for yourself, check out our tutorial [here](https://github.com/NVIDIA/OpenShell-Research/blob/kirit93/reachy-implementation/projects/reachy-mini-openshell/ONBOARD_SETUP.md). --- ## Give Each Job Its Own Boundary -The simplest way to build this is to run the agent on the device and give it the -robot's SDK. That works for a quick demo, but it puts two things that should be -separate into a single process. +Start with the first problem: restricting what the device can do. The simplest +way to build this is to run the agent on the device and give it the robot's SDK. +That works for a quick demo, but it puts two things that should be separate into +a single process. **The agent gets more than it needs.** A robot SDK exposes motors, raw targets, camera settings, recorded motions, app management, and system state. An agent @@ -130,16 +74,14 @@ actually moves. That call belongs on the device, right before the request reache the controller. Both come from the same place: one process holds all the access and makes all the -decisions. So we split the work into separate parts, each with one job. Reasoning, -policy, hardware ownership, and device execution each become their own boundary. +decisions. So we split the work into separate parts, each with one job. -1. **The model reasons.** It reads the conversation and picks from the tools the - app offers. It can be remote or local. +1. **The model reasons.** It listens to what the user says and picks from the + tools the app offers. The model can be remote or local. 2. **The sandboxed agent turns that choice into a concrete request.** It owns the conversation state and the tool logic, but it does not own the hardware. 3. **OpenShell decides whether the request may leave the sandbox.** It checks the - request on the device against the calling binary, destination, port, HTTP - method, path, and query. + tool call request against the OpenShell policy. 4. **A trusted adapter exposes one narrow capability.** It owns the native device objects and turns an approved request into a single bounded operation. 5. **The device controller does the work.** Motors, sensors, and cameras are @@ -150,12 +92,6 @@ policy, hardware ownership, and device execution each become their own boundary.
    Reasoning, policy enforcement, hardware ownership, and device execution are separated into distinct boundaries. The local OpenShell policy decision is the control point, evaluated on the device before a request can leave the sandbox.
    -Each boundary now has one thing to enforce and one thing to test. You can change -the model without touching the robot adapter. You can change the policy without -rebuilding the image. You can restart the app without recreating credentials or -resource limits. And you can test the allowed camera path on its own, separate -from the denied movement path. - The sandbox starts with deny-by-default policy instead of inheriting everything the host can do. When Reachy hits a denied action, the agent gets a clear error it can explain out loud, rather than quietly working around it. An operator can @@ -174,11 +110,8 @@ We run all of OpenShell on Reachy's onboard computer. The gateway is the control plane: it creates the sandbox, holds the policy, and manages the sandbox lifecycle. The agent runs inside the sandbox. When the agent tries to move the robot, OpenShell checks the request on the device and decides whether it reaches -the daemon. A denial stops right there. It does not wait for the remote model to -withdraw the call. The same check controls what leaves the sandbox: every -outbound connection can be allowed, routed somewhere else, or denied. The model -can sit in the cloud, but the gateway and the sandbox both run on the device, so -the power to move local data and use local hardware stays local. +the daemon. The same check controls what leaves the sandbox: every outbound +connection can be allowed, routed somewhere else, or denied. ### Expose capabilities, not complete APIs @@ -233,7 +166,7 @@ changes. The sandbox, the adapter, and the boundary stay the same.
    Request flow on Reachy. The person speaks to the trusted native Reachy App, which streams PCM audio into the OpenShell sandbox, where the conversation agent exchanges policy-checked audio with the OpenAI Realtime API. Robot requests from the agent pass through the OpenShell gateway, which allows the POST /camera/capture path to the one-frame camera adapter and denies the POST /api/move/goto path to the Reachy daemon and motors. -
    The same OpenShell gateway sits in front of both physical capabilities. It allows the camera capture path (green) and denies the movement path (red), so the camera works and the head does not move, enforced by policy rather than by the application choosing to refuse.
    +
    Every request to the hardware passes through OpenShell first. The OpenShell policy allows the camera capture path (green) and denies the movement path (red), so the camera works and the head does not move, enforced by policy rather than by the application choosing to refuse.
    There is no laptop, browser, or Gradio page in the runtime path. The full @@ -273,6 +206,32 @@ effect. --- +## Keeping Data Private + +The demo above covers action restriction, the first of the two problems. The +second is privacy, and at the edge it matters more than usual, because these +devices can see and hear the room they are in. A camera should be able to +describe a scene without sending raw video off the device, and a microphone +should be able to drive a conversation while the recording stays local. The +device should capture only what it needs, and anything sensitive should leave +only when it has to. + +The next piece for Reachy is to add privacy routing. We use OpenShell's +middleware service, which hooks into OpenShell's sandbox proxy. The middleware service is built to detect +what type of data is leaving the sandbox. We keep things simple here: if it's image data, we route it to a model approved to +handle image data, which may be sensitive. If it's not image data, it goes to a frontier model in the cloud. This is just an +example, but the benefit of middleware is its flexibility. You can build in whatever routing logic you want, and use any tool you +want for PII redaction or replacement. + +
    + Privacy routing with middleware. OpenShell's policy forces the sandboxed agent's outbound traffic through an OpenShell middleware service. A router in the middleware detects the data type: image data goes to a model approved to handle sensitive images, and everything else goes to a frontier model in the cloud. +
    Privacy routing.
    +
    + +We will publish more on this as a follow-up. + +--- + ## Conclusion None of this is specific to Reachy. The same approach fits inspection robots, From dae9006d40d644fa450b3a40a1aaf2ee953049ef Mon Sep 17 00:00:00 2001 From: Kirit93 Date: Fri, 17 Jul 2026 19:40:06 -0700 Subject: [PATCH 38/45] Update blog --- ...026-07-13-policy-controlling-reachy-mini-with-openshell.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/dev-notes/posts/2026-07-13-policy-controlling-reachy-mini-with-openshell.md b/docs/dev-notes/posts/2026-07-13-policy-controlling-reachy-mini-with-openshell.md index 06ae19c6..c84e4fd4 100644 --- a/docs/dev-notes/posts/2026-07-13-policy-controlling-reachy-mini-with-openshell.md +++ b/docs/dev-notes/posts/2026-07-13-policy-controlling-reachy-mini-with-openshell.md @@ -223,12 +223,12 @@ handle image data, which may be sensitive. If it's not image data, it goes to a example, but the benefit of middleware is its flexibility. You can build in whatever routing logic you want, and use any tool you want for PII redaction or replacement. +Keep an eye on this repo for more details on privacy routing! +
    Privacy routing with middleware. OpenShell's policy forces the sandboxed agent's outbound traffic through an OpenShell middleware service. A router in the middleware detects the data type: image data goes to a model approved to handle sensitive images, and everything else goes to a frontier model in the cloud. -
    Privacy routing.
    -We will publish more on this as a follow-up. --- From 7da597f071916ef97dfc0b648f731d853206978e Mon Sep 17 00:00:00 2001 From: Kirit93 Date: Fri, 17 Jul 2026 19:44:50 -0700 Subject: [PATCH 39/45] Updated title --- ...026-07-13-policy-controlling-reachy-mini-with-openshell.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/dev-notes/posts/2026-07-13-policy-controlling-reachy-mini-with-openshell.md b/docs/dev-notes/posts/2026-07-13-policy-controlling-reachy-mini-with-openshell.md index c84e4fd4..8abe165e 100644 --- a/docs/dev-notes/posts/2026-07-13-policy-controlling-reachy-mini-with-openshell.md +++ b/docs/dev-notes/posts/2026-07-13-policy-controlling-reachy-mini-with-openshell.md @@ -1,5 +1,5 @@ --- -title: "Designing OpenShell for the Edge: Why Policy Has to Live Next to the Action" +title: "Bringing Privacy and Security to the Edge with OpenShell" date: 2026-07-13 updated: 2026-07-13 description: "Edge agents handle sensitive data and make decisions with physical consequences. Reachy Mini shows why privacy and safety controls must be deterministic and local." @@ -20,7 +20,7 @@ card_tags: - policy --- -# Designing OpenShell for the Edge: Why Policy Has to Live Next to the Action +# Bringing Privacy and Security to the Edge with OpenShell From bd74cc829d8569586bb720e439697340bdf2f779 Mon Sep 17 00:00:00 2001 From: Kirit93 Date: Mon, 20 Jul 2026 09:46:09 -0700 Subject: [PATCH 40/45] Updated blog --- ...-controlling-reachy-mini-with-openshell.md | 26 ++++++++++++------- .../reachy-mini-openshell/ONBOARD_SETUP.md | 8 +++--- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/docs/dev-notes/posts/2026-07-13-policy-controlling-reachy-mini-with-openshell.md b/docs/dev-notes/posts/2026-07-13-policy-controlling-reachy-mini-with-openshell.md index 8abe165e..6166cdf4 100644 --- a/docs/dev-notes/posts/2026-07-13-policy-controlling-reachy-mini-with-openshell.md +++ b/docs/dev-notes/posts/2026-07-13-policy-controlling-reachy-mini-with-openshell.md @@ -38,11 +38,11 @@ card_tags: -AI agents can now run for a long time, pursue goals, call tools, learn new skills, write code, and keep working while no one is watching. How do you give autonomy to such a highly capable agent? +Useful AI agents now run for long periods of time, taking on critical tasks to accomplish goals. They call tools, learn new skills, write code, and keep working while no one is watching. How do you give autonomy to such a highly capable agent? -OpenShell is the secure agent runtime for autonomous agents. It solves this problem by moving the security layer outside the agent. OpenShell runs your agent in a sandbox and sits in the path of everything the agent does. A policy layer, configured separately from the agent, governs what processes the agent can start, which hosts and ports it can reach, which models it can call, and which other services it needs to invoke along its network path. +OpenShell is the secure runtime for autonomous agents. It solves this problem by moving the security layer outside the agent. OpenShell runs your agent in a sandbox and sits in the path of everything the agent does. A policy layer, configured separately from the agent, governs what processes the agent can start, which hosts and ports it can reach, which models it can call, and which other services it needs to invoke along its network path. -Every OpenShell deployment has different needs, so we made OpenShell extensible. You are not locked into a fixed set of behaviors. You can swap the isolation backend, add your own checks on policy updates, and plug in middleware services that run on traffic as it leaves the sandbox. +Every OpenShell deployment has different needs, and different agents want different things, so we made OpenShell extensible. You are not locked into a fixed set of behaviors. You can swap the isolation backend, add your own checks on policy updates, and plug in middleware services that run on traffic as it leaves the sandbox. The combination of autonomous agents and edge devices like robots brings the digital concerns of traditional software deployments into the physical world. Imagine a home assistant robot that is only supposed to clean. It suffers a prompt injection and starts unlocking the doors instead. At the edge, a compromised agent does not just leak data or crash a process. It can let a stranger into your home, or send what it sees and hears somewhere it should never go. @@ -51,7 +51,7 @@ OpenShell makes an autonomous agent safe to run at the edge by solving two probl - **Restrict what the device can do.** Deterministic policy decides what the agent can actually make the device do, and it is enforced on the device. - **Keep the data private.** Sensitive data stays local, and only approved services ever see it. -We used the HuggingFace Reachy Mini to see what that looks like in practice. We run a small chat application connected to an OpenAI endpoint within the OpenShell runtime, all on the Reachy Mini's onboard Raspberry Pi. We use OpenShell to restrict what actions the model can take. Our next step is to route sensitive data to approved models, but more on that in a follow-up post. +We used the HuggingFace Reachy Mini to see what that looks like in practice. We run a small chat application connected to an OpenAI endpoint within the OpenShell runtime, all on the Reachy Mini's onboard Raspberry Pi. Running the whole stack on a Raspberry Pi is part of the point: OpenShell holds up on the small, resource-constrained hardware that real edge devices ship with, not just a workstation. We use OpenShell to restrict what actions the model can take. Our next step is to route sensitive data to approved models, but more on that in a follow-up post. If you just want to try this for yourself, check out our tutorial [here](https://github.com/NVIDIA/OpenShell-Research/blob/kirit93/reachy-implementation/projects/reachy-mini-openshell/ONBOARD_SETUP.md). @@ -93,10 +93,12 @@ decisions. So we split the work into separate parts, each with one job. The sandbox starts with deny-by-default policy instead of inheriting everything -the host can do. When Reachy hits a denied action, the agent gets a clear error -it can explain out loud, rather than quietly working around it. An operator can -change the policy without rebuilding the app, and the power to grant new -authority stays outside the agent. +the host can do. When OpenShell blocks an action, it returns a natural-language +message explaining why, along with examples of what is allowed. The agent can +tell the person what happened and look for a safe way to do the same task, +instead of quietly working around the limit. An operator can change the policy +without rebuilding the app, and the power to grant new authority stays outside +the agent. --- @@ -247,8 +249,12 @@ enforcing its boundary even if the network drops or the model is unreachable. Running the full stack on device is what gives complete isolation and control at the edge. -We see this as a pattern for using OpenShell to bring security and trust to -autonomous edge systems. +This is a repeatable pattern for edge and robotics. Agents are going to run +everywhere: in homes, factories, vehicles, and hospitals, with more and more of +them running side by side and working together. You cannot govern that many +agents, in that many places, by writing a guardrail into each app. It takes one +deterministic boundary you can put on any device and trust the same way every +time. That is the pattern we are building with OpenShell. Key resources: diff --git a/projects/reachy-mini-openshell/ONBOARD_SETUP.md b/projects/reachy-mini-openshell/ONBOARD_SETUP.md index fa9abbcc..382c04d4 100644 --- a/projects/reachy-mini-openshell/ONBOARD_SETUP.md +++ b/projects/reachy-mini-openshell/ONBOARD_SETUP.md @@ -250,7 +250,7 @@ openshell/policy-camera-enabled-motion-disabled.yaml openshell/policy-head-motion-enabled.yaml ``` -Both allow: +All three allow: ```text GET /api/daemon/status @@ -273,7 +273,7 @@ POST /camera/capture That camera policy still blocks `POST /api/move/goto`. The base `policy-motion-disabled.yaml` blocks both camera capture and motion start. -Neither policy allows `/api/move/set_target`, `/api/motors/**`, +None of the three policies allow `/api/move/set_target`, `/api/motors/**`, `/api/apps/**`, raw movement WebSockets, wake/sleep, or recorded motions. The permitted binary is `/opt/venv/bin/python`. A denial seen with `curl` could @@ -728,14 +728,14 @@ definition. | Symptom | First checks | | --- | --- | -| `docker load` is silent | In another SSH session run `ps -eo pid,etime,stat,%cpu,%mem,cmd | grep '[d]ocker load'`, `df -h /`, and `sudo journalctl -u docker -n 30 --no-pager`. Slow microSD extraction is normal. | +| `docker load` is silent | In another SSH session run `ps -eo pid,etime,stat,%cpu,%mem,cmd \| grep '[d]ocker load'`, `df -h /`, and `sudo journalctl -u docker -n 30 --no-pager`. Slow microSD extraction is normal. | | Sandbox enters `ContainerRestarting` | Inspect the image command. It must be `sleep infinity`; do not append `/bin/true` to `sandbox create`. | | `reachy-agent failed to become healthy` | Retry with the 120-second timeout and inspect `/sandbox/logs/reachy-agent.log`. A cold start took about 41 seconds. | | Audio URL says `Service endpoint is not available` | Confirm the inner agent is `running`, then recreate or expose `audio` and check `/health`. The target listener must exist before the route is usable. | | Audio bridge reports `Name or service not known` | Verify controller version `0.2.0`. It preserves the virtual routing hostname while connecting the socket to `127.0.0.1:17670`. | | Reachy says it cannot take a picture | Test `POST http://127.0.0.1:8042/camera/capture`, then test the same path from the sandbox with `/opt/venv/bin/python`. If both work, inspect the model/tool logs and session instructions. | | Local wheel install is rejected by `/api/apps/install` | This endpoint does not accept `source_kind: local`; install the wheel into `/venvs/apps_venv` with `/opt/uv/uv pip install`. | -| Root filesystem is almost full | Run `docker system df` and `sudo du -sh /var/lib/docker /venvs/apps_venv`. Remove transferred archives, obsolete images, failed layers, and old wheel versions—but not the active image or `/venvs/mini_daemon`. | +| Root filesystem is almost full | Run `docker system df` and `sudo du -sh /var/lib/docker /venvs/apps_venv`. Remove transferred archives, obsolete images, failed layers, and old wheel versions, but not the active image or `/venvs/mini_daemon`. | ## Development checks From 522ff7937e642d2f42167acb6d14d5ae395bcb1e Mon Sep 17 00:00:00 2001 From: Kirit93 Date: Mon, 20 Jul 2026 12:25:51 -0700 Subject: [PATCH 41/45] updated note date --- ...licy-controlling-reachy-mini-with-openshell.md} | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) rename docs/dev-notes/posts/{2026-07-13-policy-controlling-reachy-mini-with-openshell.md => 2026-07-20-policy-controlling-reachy-mini-with-openshell.md} (98%) diff --git a/docs/dev-notes/posts/2026-07-13-policy-controlling-reachy-mini-with-openshell.md b/docs/dev-notes/posts/2026-07-20-policy-controlling-reachy-mini-with-openshell.md similarity index 98% rename from docs/dev-notes/posts/2026-07-13-policy-controlling-reachy-mini-with-openshell.md rename to docs/dev-notes/posts/2026-07-20-policy-controlling-reachy-mini-with-openshell.md index 6166cdf4..14535992 100644 --- a/docs/dev-notes/posts/2026-07-13-policy-controlling-reachy-mini-with-openshell.md +++ b/docs/dev-notes/posts/2026-07-20-policy-controlling-reachy-mini-with-openshell.md @@ -1,7 +1,7 @@ --- title: "Bringing Privacy and Security to the Edge with OpenShell" -date: 2026-07-13 -updated: 2026-07-13 +date: 2026-07-20 +updated: 2026-07-20 description: "Edge agents handle sensitive data and make decisions with physical consequences. Reachy Mini shows why privacy and safety controls must be deterministic and local." categories: - Edge AI @@ -24,9 +24,13 @@ card_tags: -
    +
    June 5, 2026 / Dev Note / Documentation diff --git a/docs/dev-notes/posts/2026-07-13-policy-controlling-reachy-mini-with-openshell.md b/docs/dev-notes/posts/2026-07-13-policy-controlling-reachy-mini-with-openshell.md new file mode 100644 index 00000000..9d1e1843 --- /dev/null +++ b/docs/dev-notes/posts/2026-07-13-policy-controlling-reachy-mini-with-openshell.md @@ -0,0 +1,548 @@ +--- +title: "Designing OpenShell for the Edge: Why Policy Has to Live Next to the Action" +date: 2026-07-13 +updated: 2026-07-13 +description: "Edge agents handle sensitive data and make decisions with physical consequences. Reachy Mini shows why privacy and safety controls must be deterministic and local." +categories: + - Edge AI +tags: + - reachy-mini + - openshell + - edge-ai + - sandbox + - robotics + - policy +authors: + - kirit93 +card_tags: + - edge-ai + - reachy-mini + - policy +--- + +# Designing OpenShell for the Edge: Why Policy Has to Live Next to the Action + + + + + + +AI agents are moving from assistants that wait for instructions to long-running +systems that pursue goals, use tools, add skills, write code, and continue +working while the operator is out of the loop. That growing autonomy is the +motivation behind OpenShell: the more an agent can change and act on its own, +the less we can rely on guardrails implemented inside the same process. + +OpenShell moves the control point outside the agent. The agent can remain +capable and autonomous inside a sandbox, while separately configured policy +governs its filesystem, process, network, and inference access. If the model is +prompt-injected, a tool is compromised, or the agent rewrites part of its own +workflow, it still cannot grant itself permissions that the runtime has not +allowed. + +At the edge, the same trust problem gains a physical dimension. An agent may +observe people and places, handle data from microphones, cameras, and sensors, +and make decisions that move machines or change local systems. A failure is no +longer limited to a bad shell command or leaked cloud credential. It can expose +data that was supposed to remain on-site or cause an action with material +real-world consequences. + +That creates two immediate requirements. Some data should never leave the +device or the site where it was produced. Some actions should never be possible +in a particular deployment, even if a model, prompt, tool, skill, or application +update tries to request them. + +Trust at the edge therefore requires the OpenShell control plane to move with +the agent. The boundary must be deterministic, provisioned independently, and +enforced locally before data leaves the device or an action reaches the +hardware. + +We used Reachy Mini to explore what that deployment looks like. The resulting +pattern keeps the agent in an on-device OpenShell sandbox, keeps hardware +ownership in a small trusted native process, and enforces policy locally before +a request can cross into the rest of the device. + + + +This post walks through the design principles behind that architecture. Reachy +makes the result easy to see: the camera works and the head does not move. The +same boundaries apply to cameras, lab instruments, industrial gateways, +vehicles, kiosks, and other AI-enabled edge systems. + +The copy-and-run installation procedure lives separately in the +[onboard setup tutorial](https://github.com/NVIDIA/OpenShell-Research/blob/kirit93/reachy-implementation/projects/reachy-mini-openshell/ONBOARD_SETUP.md). + +--- + +## Trust Has to Move with the Agent + +The same agent might run in a factory, a laboratory, a warehouse, a retail +space, or a home. Each deployment has different data boundaries, physical +risks, operators, and acceptable actions. Security controls therefore have to +be applied where the device is running, not only where the model is hosted. + +**Privacy has to be enforced before egress.** A camera may be allowed to analyze +a scene locally but prohibited from sending raw video off-site. A microphone may +support an on-device interaction while recordings remain local. A lab instrument +may expose a derived result while its raw measurements and sample metadata never +leave the facility. These devices need deterministic enforcement of where +sensitive data can be handled: what must stay on the device, what approved +services may process, and what may leave the local environment. This is where a +policy runtime such as OpenShell fits: it enforces those boundaries at the edge, +independently of the agent's instructions or behavior. + +**Safety has to be enforced before action.** An inspection robot may use its +camera everywhere but move only inside a controlled workcell. A building agent +may read temperature data but not change a setpoint in a public deployment. A +field device may expose an emergency stop while route changes remain disabled. +The same software image can be paired with different policies for different +operating environments. + +**Controls have to survive agent evolution.** Models change. Prompts are tuned. +Tools are added. Application code is upgraded. A safety or privacy guarantee +that exists only inside one prompt or one version of the tool implementation has +to be re-established after every change. A separately provisioned policy +boundary remains in force while the agent evolves behind it. + +Deterministic enforcement does not mean that OpenShell understands the meaning +of every image, measurement, motor command, or physical environment. It means +the agent is confined to explicit filesystem and network boundaries, and that +device-specific capabilities cross through narrow trusted interfaces that +policy can allow or deny. OpenShell decides whether the agent may call a +capability. The trusted adapter constrains what that call can request, and the +device controller enforces the hardware limits while executing it, such as +joint ranges, speed limits, and emergency-stop behavior. + +The current Reachy demo uses the OpenAI Realtime API through an explicitly +allowed WebSocket endpoint, so its conversation audio and requested camera frame +are sent to that approved service. A deployment with strict data-residency +requirements could instead permit a local model endpoint, an approved on-device +preprocessing service, or only derived data. The important point is that the +egress decision is made by local policy; it is not implied by where the model +happens to run. + +--- + +## An Edge Agent Is Not Just a Smaller Deployment + +The straightforward approach is to take an existing agent, run it on the +device, and give it access to the local SDK or REST API. That is enough for an +early prototype. The agent can call the model, invoke a tool, and make the +hardware respond. + +Simply removing device access is not a solution because the agent can no longer +do the job. Requiring a person to approve every camera capture or movement +makes the system safer, but gives up the autonomy that made the agent useful. +Giving the agent full local access preserves capability and autonomy, but leaves +a long-running, evolving process responsible for policing itself. + +The goal is to preserve all three properties: useful device capabilities, +meaningful autonomy, and controls the agent cannot rewrite. That requires an +enforcement layer outside the agent process. + +The direct-SDK approach also collapses several different kinds of authority +into one process. + +**The agent gets more device access than it needs.** A robot SDK may expose +motors, raw targets, camera configuration, recorded motions, application +management, and system state. A conversational agent that needs five fixed head +directions should not inherit that entire surface. + +**Policy is too far from the effect.** A remote model provider can decide which +tool to call, but it should not be the final authority on whether a local motor, +camera, or actuator is used. That decision belongs on the device, immediately +before the request reaches the controller. + +**The product lifecycle and the agent lifecycle are different.** Operators +choose credentials, images, resource limits, and policy. Users start and stop +an application. Recreating the security boundary every time the app starts +mixes those responsibilities and gives the runtime more provisioning authority +than it needs. + +**Edge resources change the architecture.** Disk, memory, cold-start time, +networking, and hardware ownership are not deployment footnotes on a small +device. They determine which processes can run, which dependencies belong in +the sandbox, and how the application should recover. + +These are not problems with robots or language models. They come from treating +an edge agent as a conventional application that happens to run on smaller +hardware. What we needed was a clearer system of boundaries. + +--- + +## An Edge Agent as a System of Boundaries + +The shift is to separate reasoning, policy enforcement, hardware ownership, and +device execution into components with focused responsibilities. + +1. **The model reasons.** It interprets the conversation and selects from the + tools the application advertises. The model can be remote or local. +2. **The sandboxed agent turns intent into a concrete request.** It owns the + conversation state and model-facing tool logic, but it does not own the + hardware. +3. **OpenShell decides whether the request may leave the sandbox.** Policy is + evaluated on the edge device using the calling binary, destination, port, + HTTP method, path, and query. +4. **A trusted adapter exposes a narrow capability.** It owns native device + objects and translates an approved request into one bounded operation. +5. **The device controller produces the effect.** Motors, sensors, cameras, or + other local systems are reached only after the preceding boundaries allow + it. + +```text +cloud or local model + ↕ +agent in an on-device OpenShell sandbox + ↓ +local OpenShell policy decision + ↓ +narrow trusted capability adapter + ↓ +physical device, sensor, or local data +``` + +This decomposition gives each boundary something specific to enforce and +something specific to test. We can change the model without changing the robot +adapter. We can change the policy without rebuilding the image. We can restart +the application without recreating credentials or resource limits. And we can +test the allowed camera path independently from the denied movement path. + +The sandbox starts from deny-by-default policy rather than inheriting every +capability available on the host. When Reachy hits a denied action, the agent +receives a structured failure and can explain the constraint instead of silently +bypassing it. An operator can then update the sandbox policy without rebuilding +the application, while the decision to grant new authority remains outside the +agent. + +--- + +## Design Principles Behind OpenShell at the Edge + +With that framing in place, these are the principles that shaped the Reachy +implementation. + +### Put policy next to the data and the effect + +The policy engine runs on the same Reachy onboard computer as the agent and +robot daemon. When the agent attempts a movement request, OpenShell decides +locally whether that request can reach the daemon. A denial stops at the policy +boundary; it does not depend on the remote model deciding to withdraw the tool +call. + +The same boundary controls egress. The sandbox can connect only to destinations +and paths permitted by its policy. A deployment can allow an approved remote +model, route through a local privacy service, or deny remote model access and +use an on-device endpoint instead. + +This is the central edge property. The model may remain a cloud service, but +the authority to move local data and use local capabilities remains local. +Model placement and policy placement are independent choices. + +### Expose capabilities, not complete APIs + +The conversation agent receives three robot tools: + +- `move_head(directions)` accepts `left`, `right`, `up`, `down`, and `front`. +- `stop_motion()` stops active movements. +- `camera(question)` requests one image for the current conversation. + +The model selects one of those tools; it does not construct an HTTP request +itself. Python handlers inside the sandbox translate `move_head` into +`POST /api/move/goto`, `stop_motion` into `POST /api/move/stop`, and `camera` +into `POST /camera/capture`. OpenShell then evaluates the concrete request before +it can leave the sandbox. + +The agent does not discover the complete Reachy API. Fixed tool inputs become +fixed REST requests, making the intended capability visible at the network +boundary. This is easier to reason about than giving an agent a general-purpose +SDK and trying to enumerate every unsafe combination afterward. + +### Keep hardware handles in trusted native code + +Reachy's microphone, speaker, and camera are already managed by its native app +lifecycle. Moving those objects into the sandbox would duplicate hardware +ownership and pull the full Reachy SDK, media stack, and vision dependencies +into the agent image. + +Instead, a small trusted Reachy App owns the native media objects. It forwards +PCM audio through a local WebSocket and exposes one argument-free camera route: +`POST /camera/capture`. The sandbox gets the capability to converse and request +one frame; it does not get the camera handle, device selection, resolution +controls, or a filesystem path. + +### Provision once, operate many times + +Creating a sandbox chooses the image, provider, credentials, filesystem policy, +network policy, CPU limit, and memory limit. Those are operator decisions, so +the native Reachy App does not create or delete the sandbox. + +The model credential is configured through the OpenShell provider and attached +at provisioning time; it is not baked into the Docker image, policy file, or +native controller. The normal Reachy application lifecycle never asks for or +recreates that credential boundary. + +The sandbox remains provisioned while `reachy-agent-control start|stop|status` +manages the conversation process inside it. Starting the Reachy App verifies +the sandbox, starts the agent, exposes the audio route, and connects media. +Stopping the app closes media and stops the agent process. The policy and +provider remain intact for the next start. + +### Treat resource constraints as design inputs + +The tested Reachy had 3.7 GiB usable RAM, 2 GiB swap, and a 14 GiB root +partition. We gave the sandbox a 2 CPU and 2 GiB memory ceiling and built the +image on a development machine rather than consuming the robot's CPU, memory, +and microSD write budget. + +The runtime image uses a slim Python base, a disposable wheel-building stage, +a REST-only dependency list, and an application install with `--no-deps`. That +keeps the Reachy SDK, MuJoCo, OpenCV, simulator, dance, and local vision stacks +out of the sandbox. The resulting ARM64 image was 339,495,096 bytes, or about +339 MB, while retaining the networking tools OpenShell requires. + +### Design for both remote and local models + +The demonstrated Realtime model is remote. The conversation, policy, device +adapter, and robot controller still run on Reachy. This matters because “edge” +does not have to mean “fully offline,” and local enforcement does not require a +local foundation model. + +The same architecture can later use an on-device model. The model endpoint +changes; the sandbox, trusted adapter, and local action boundary do not. + +The current policy explicitly allows the chat application to connect to one +OpenAI Realtime endpoint. It does not provide content-aware privacy enforcement, +but it establishes the egress boundary needed to add it. + +A privacy-focused deployment could deny direct model access and make an +OpenShell Middleware service the sandbox's only permitted model destination. +Privacy Guard, which is on the OpenShell roadmap, could use that service to +detect sensitive camera, microphone, or sensor data and decide whether to block +it, redact it, process it locally, or route it to an approved model. The agent +would not be able to bypass that decision by connecting directly to another +model endpoint. + +--- + +## What This Looks Like on Reachy + +```mermaid +flowchart TB + Human["Person near Reachy"] + + subgraph Robot["Reachy Mini onboard computer"] + Native["Trusted native Reachy App\nmicrophone, speaker, camera"] + Gateway["OpenShell gateway\nand policy engine"] + + subgraph Sandbox["OpenShell sandbox"] + Agent["Conversation agent\nRealtime client and fixed tools"] + Audio["Loopback audio service\n127.0.0.1:8765"] + end + + Daemon["Reachy daemon REST API\n127.0.0.1:8000"] + Camera["One-frame adapter\n127.0.0.1:8042"] + Hardware["Mic, speaker, camera, motors"] + end + + Model["OpenAI Realtime API"] + + Human <-->|"voice"| Hardware + Native <-->|"Reachy media API"| Hardware + Native <-->|"PCM through exposed service"| Gateway + Gateway <--> Audio + Audio <--> Agent + Agent <-->|"policy-checked Realtime WebSocket"| Gateway + Gateway <--> Model + Agent -->|"robot REST action"| Gateway + Gateway -->|"permitted request"| Daemon + Daemon --> Hardware + Agent -->|"POST /camera/capture"| Gateway + Gateway --> Camera + Camera --> Native +``` + +There is no laptop, browser, or Gradio page in the runtime path. The complete +request flow is: + +1. The trusted Reachy App captures microphone audio and streams PCM frames to + the audio service inside the sandbox. +2. The conversation agent sends that audio over its policy-approved WebSocket + connection to the OpenAI Realtime API. The model receives the conversation + together with the fixed `move_head`, `stop_motion`, and `camera` tool + definitions. +3. The model returns response audio or selects a tool. For a tool call, Python + code in the sandbox translates the model's arguments into one of the fixed + REST requests. +4. OpenShell evaluates the destination, port, method, and path. An allowed + request reaches the trusted adapter or Reachy daemon. A denied request returns + a policy error without reaching the hardware. +5. The conversation agent uses the tool result or policy error to continue the + conversation, and response audio travels back through the native Reachy App + to the robot's speaker. + +The active demo policy separates two physical capabilities: + +```text +POST host.openshell.internal:8042/camera/capture allowed +POST host.openshell.internal:8000/api/move/goto denied +``` + +When a person says, “Take a picture of me,” the agent calls `camera`, OpenShell +allows the capture path, the trusted adapter returns one bounded JPEG, and +Reachy describes it aloud. + +When the person says, “Turn right and take a picture,” the agent attempts +`POST /api/move/goto`. OpenShell returns a denial before the request reaches the +Reachy daemon. The robot stays still, and the denial becomes part of Reachy's +spoken response. + +The important distinction is that the application is not simply choosing to +refuse movement. The model-facing process attempts a real action, and a +separately configured policy boundary prevents the physical effect. + +--- + +## Why Narrow Endpoints Matter + +OpenShell's REST policy can match the calling binary, destination, method, +path, and query. It does not currently enforce arbitrary values nested inside a +JSON request body. If a broad endpoint can express many operations, allowing +that path also allows the sandbox to submit any body accepted by that endpoint. + +Reachy's fixed direction-to-pose mapping reduces normal model behavior to five +known poses, but that mapping is application validation rather than OpenShell +policy. The camera path has a stronger boundary because the request has no +model-controlled camera settings. The adapter chooses the already-open camera, +captures one JPEG, limits its size, rate-limits requests, and writes nothing to +disk. + +We intentionally stopped at REST method and path enforcement to keep the demo +small. OpenShell also supports generic JSON-RPC method rules. A next step could +add a small trusted JSON-RPC adapter that exposes semantic methods such as +`reachy.look_up` and `reachy.turn_right`. Policy could then allow or deny those +methods independently instead of treating every head movement as the same +`POST /api/move/goto` capability. + +Generic JSON-RPC policy currently matches the method, not arbitrary values in +`params`. Restrictions on angle, speed, distance, or duration would therefore +remain in the trusted adapter or device controller until OpenShell adds argument +matching. The JSON-RPC adapter would improve action-level policy granularity, +but it would not replace hardware safety validation. + +The same approach applies elsewhere. Rather than expose a broad control API, +an edge integration can define paths such as `/inspection/capture`, +`/instrument/read`, `/vehicle/emergency-stop`, or `/alarm/acknowledge`. The +trusted adapter defines exactly what each operation means, and OpenShell gains +a narrow capability it can allow or deny. + +--- + +## What We Learned Bringing It Onto the Robot + +The move from a development machine to a small onboard computer exposed several +assumptions that the final architecture had to make explicit. + +**A persistent product needs a persistent sandbox.** Starting a sandbox with a +one-shot command caused the container to exit and restart. The final image stays +alive with `sleep infinity`, while the Reachy lifecycle starts and stops only +the inner agent process. + +**A service definition is not the same as a healthy service.** The audio route +could exist before the sandbox listener was ready. The native app now starts +the listener, verifies health, and only then ensures the OpenShell service route +is available. + +**Cold starts on edge hardware need realistic timeouts.** Importing and starting +the audio stack took roughly 41 seconds on the tested robot. A 120-second health +window handles the first start without hiding a process that never becomes +healthy. + +**Storage needs installation headroom, not just runtime headroom.** The +compressed archive, expanded image, Docker extraction layers, OpenShell +installation, and Reachy Apps Python environment can coexist temporarily. The +robot needs several gigabytes free even though the final sandbox image is only +about 339 MB. + +These details are easy to dismiss as deployment issues. On an edge product, +they are part of the architecture because they determine whether the security +boundary survives normal starts, updates, failures, and operator workflows. + +--- + +## What This Pattern Makes Possible + +Reachy is one concrete system, but its components map cleanly to other edge +applications. + +**Industrial inspection.** An agent can read sensors and capture evidence while +policy denies production-line or actuator changes. + +**Smart cameras.** An agent can describe a scene and send an approved alert +while continuous streaming, PTZ movement, and arbitrary upload destinations +remain unavailable. + +**Lab instruments.** An agent can read measurements and prepare a run while +calibration, parameter changes, start, and stop remain separate policy-controlled +operations. + +**Field robots and vehicles.** Telemetry and camera access can remain distinct +from navigation, docking, route changes, and payload controls. + +**Building-control gateways.** Read-only diagnosis can be separated from HVAC +setpoints, doors, alarms, and maintenance actions. + +**Kiosks and local data appliances.** Microphone, speaker, approved peripherals, +local data, and outbound services can each have their own boundary. + +OpenShell does not infer the safety semantics of a motor, valve, instrument, or +door. Each product still needs domain-specific safety engineering and trusted +adapters. What generalizes is the placement of the boundary: the less-trusted +agent runs inside the sandbox, and policy-approved requests cross into narrowly +defined device capabilities. + +--- + +## Summary + +Running autonomous, evolving agents at the edge is a systems problem, not just +a container-build problem. The Reachy implementation reflects seven principles: + +1. Keep the final control point outside the agent process. +2. Put policy on the device, next to the data and actions it controls. +3. Give the agent narrow capabilities rather than a complete hardware API. +4. Keep hardware handles and native SDK objects in a small trusted process. +5. Separate operator provisioning from the product's Start/Stop lifecycle. +6. Treat CPU, memory, disk, networking, and cold-start time as architecture + inputs. +7. Keep model placement independent from the local action boundary. + +The result is more than a policy-controlled robot demo. It is a deployment +pattern in which OpenShell becomes the on-device isolation and policy layer for +autonomous AI-enabled edge systems. As future agent versions gain new models, +prompts, tools, and skills inside the sandbox, those changes do not automatically +widen their authority over the device. Reachy makes the pattern visible: the +same agent can use the camera, attempt movement, be denied locally, and explain +that denial to the person standing in front of it. + +Moving from this reference implementation to production would add fleet-level +policy distribution, signed and attested images, bounded logs, structured audit +correlation, over-the-air updates, explicit offline behavior, and +safety-specific adapters for each class of hardware. Those are the next systems +problems around a boundary that now works on real edge hardware. + +Key resources: + +1. [Onboard Reachy Mini + OpenShell setup](https://github.com/NVIDIA/OpenShell-Research/blob/kirit93/reachy-implementation/projects/reachy-mini-openshell/ONBOARD_SETUP.md) +2. [Reachy Mini OpenShell project source](https://github.com/NVIDIA/OpenShell-Research/tree/kirit93/reachy-implementation/projects/reachy-mini-openshell) +3. [Camera-enabled, motion-disabled policy](https://github.com/NVIDIA/OpenShell-Research/blob/kirit93/reachy-implementation/projects/reachy-mini-openshell/openshell/policy-camera-enabled-motion-disabled.yaml) diff --git a/docs/index.md b/docs/index.md index e4cfba6d..d9e3403c 100644 --- a/docs/index.md +++ b/docs/index.md @@ -14,15 +14,16 @@

    %sRV^-CZ@J>^87)(N!1KRXcaJ@&KcaU*&Nd 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