[project] name = "desklock-gateway" version = "0.2.2" description = "Voice gateway bridging the DeskLock device to the Tatlock butler (STT/chat/TTS)" requires-python = ">=3.11" dependencies = [ "fastapi>=0.115", "uvicorn[standard]>=0.30", "httpx>=0.27", "pydantic-settings>=2.4", ] [project.optional-dependencies] speech = [ "faster-whisper>=1.0", "piper-tts>=1.2", ] dev = [ "pytest>=8.0", "pytest-asyncio>=0.24", "ruff>=0.6", "mypy>=1.11", ] [build-system] requires = ["setuptools>=68"] build-backend = "setuptools.build_meta" [tool.setuptools.packages.find] where = ["src"] [tool.ruff] line-length = 100 src = ["src"] [tool.pytest.ini_options] asyncio_mode = "auto" testpaths = ["tests"] [tool.mypy] python_version = "3.11" # The speech extra is deliberately absent from a default setup. `make setup` # installs the gateway without it; `make setup-speech` adds faster-whisper and # piper-tts, which pull several GB of ML wheels for a backend the deployment # does not use — settings.tts_backend defaults to "speaches", a network call to # the shared service on 8601. Both imports are lazy, inside the functions that # need them, so their absence is a runtime fact rather than a defect. # # numpy is here for the same reason: nothing depends on it directly, it arrives # with faster-whisper. # # Without these overrides, `make typecheck` fails on a machine that followed the # documented setup — the pre-push gate turning red for doing the right thing, # which is how a gate stops being read (T-56). The right assertion is "these # modules may be absent", not "install several GB so the type checker is happy". [[tool.mypy.overrides]] module = [ "piper", "piper.*", "faster_whisper", "faster_whisper.*", "numpy", "numpy.*", ] ignore_missing_imports = true