Spaces:
Running
Running
| [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 | |