[build-system] requires = ["setuptools"] build-backend = "setuptools.build_meta" [project] name = "Reachy_OpenWebUI" version = "0.6.6.2" authors = [{ name = "Jacid23" }] description = "OpenWebUI-first Reachy Mini conversation app using OpenWebUI-managed STT, chat, workspace tools, and TTS." readme = "README.md" requires-python = ">=3.10" dependencies = [ #Media # NOTE: gradio and fastrtc are required at runtime but deliberately NOT # declared. Verified with uv dry-runs against reachy-mini==1.9.0: # - gradio==5.50.1.dev1 is the conflict (its pydantic<=2.12.3 cap vs # reachy-mini's pydantic>=2.12.5) — declaring it makes the installer # downgrade the SDK to 1.8.0, which breaks the app-side camera. # - fastrtc==0.0.34 resolves, but declaring it makes uv swap gradio # down to 5.23.1 (untested with fastrtc; 5.50.1.dev1 was pinned for # fastrtc compatibility), so it stays venv-owned alongside gradio. # Both live in the shared apps venv. Fresh venv bootstrap: # uv pip install gradio==5.50.1.dev1 fastrtc==0.0.34 # Re-declare both when fastrtc ships gradio-6 support. "av", "aiortc>=1.13.0", "fastapi", "httpx", "numpy", "onnxruntime", "opencv-python>=4.12.0.88", "python-multipart", "pyyaml", "requests", "zxing-cpp>=2.3.0", # Exact pin: 0.10.14 is numpy-2-clean (verified via uv dry-run); # 0.10.15+ caps numpy<2 and conflicts with reachy-mini>=1.9.0. "mediapipe==0.10.14", "mcp", #Environment variables "python-dotenv", # Client library used for local Ollama/vLLM/OpenWebUI chat endpoints "openai>=2.30.0", #Reachy mini "reachy_mini_dances_library", "reachy_mini_toolbox", "reachy-mini>=1.9.0", "gradio_client>=1.13.3", #Required at import/runtime by camera_worker, local audio, and local pipeline "scipy", #OpenWebUI pipeline (VAD/audio upload/chat/TTS). Torch/Silero are optional at runtime # because Reachy's shared venv already owns torch, and fresh torch pulls can # drag in giant CUDA/triton wheels. "soundfile", "setuptools<82", "pydantic", "starlette", ] [project.optional-dependencies] local_vision = [ "accelerate>=1.13.0; platform_machine != 'aarch64' and platform_machine != 'arm64'", "torch>=2.1; platform_machine != 'aarch64' and platform_machine != 'arm64'", "transformers==5.3.0; platform_machine != 'aarch64' and platform_machine != 'arm64'", "num2words", ] [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.scripts] reachy-mini-conversation-app-openwebui = "Reachy_OpenWebUI.main:main" [tool.uv] dependency-metadata = [ # Upstream metadata currently marks `gstreamer-msvc-runtime` as unconditional. # It should only be required on Windows. Temp fix. { name = "gstreamer-libs", version = "1.28.1", requires-dist = ["gstreamer-msvc-runtime; sys_platform == 'win32'", "setuptools"] }, ] [project.entry-points."reachy_mini_apps"] Reachy_OpenWebUI = "Reachy_OpenWebUI.main:ReachyMiniConversationOpenWebUIApp" [tool.setuptools] package-dir = { "" = "src" } include-package-data = true [tool.setuptools.packages.find] where = ["src"] [tool.setuptools.package-data] Reachy_OpenWebUI = [ "images/*", "static/*", "static/assets/*", "sub_apps/cookAIware/data/*.json", "sub_apps/cookAIware/profiles/**/*.txt", "profiles/**/*.yaml", "sub_apps/cookAIware/profiles/**/*.py", "sub_apps/marionette/marionette/static/*", "sub_apps/marionette/marionette/static/fonts/*", "sub_apps/marionette/marionette/assets/*", "sub_apps/reachy_mirror/static/*", ".env.example", "demos/**/*.txt", "profiles/**/*.txt", "profiles/**/*.py", ] reachy_talk_data = [ "profiles/**/*.txt", "profiles/**/*.py", ] [tool.ruff] line-length = 119 exclude = [".venv", "dist", "build", "**/__pycache__", "*.egg-info", ".mypy_cache", ".pytest_cache"] [tool.ruff.lint] select = [ "E", # pycodestyle errors "F", # pyflakes "W", # pycodestyle warnings "I", # isort "C4", # flake8-comprehensions "D", # pydocstyle ] ignore = [ "E501", # handled by formatter "D100", # ignore missing module docstrings "D203", # blank line before class docstring (conflicts with D211) "D213", # summary on second line (conflicts with D212) ] [tool.ruff.lint.isort] length-sort = true lines-after-imports = 2 no-lines-before = ["standard-library", "local-folder"] known-local-folder = ["Reachy_OpenWebUI"] known-first-party = ["reachy_mini", "reachy_mini_dances_library", "reachy_mini_toolbox"] split-on-trailing-comma = true [tool.ruff.format] quote-style = "double" indent-style = "space" skip-magic-trailing-comma = false line-ending = "auto" [tool.mypy] python_version = "3.12" files = ["src/"] ignore_missing_imports = true strict = true show_error_codes = true warn_unused_ignores = true