Reachy_OpenWebUI / pyproject.toml
Jacid23's picture
Evidence-based installer compliance: re-declare mediapipe==0.10.14, document exact conflicts
81fbbe1
Raw
History Blame Contribute Delete
4.99 kB
[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