[build-system] requires = ["hatchling"] build-backend = "hatchling.build" [project] name = "stt-daemon" version = "0.1.0" description = "Always-on speech-to-text daemon with pre-roll buffer and a voice assistant layer" readme = "README.md" license = "ISC" license-files = ["LICENSE.md"] requires-python = ">=3.11" authors = [{name = "Efren", email = "efren@example.com"}] dependencies = [ "numpy>=1.26", "faster-whisper>=1.1.0", "webrtcvad-wheels>=2.0.14", "questionary>=2.0", "textual>=0.80", # Vendored local CUDA build (cp313-only); see docs/PYWHISPERCPP.md. "pywhispercpp>=1.5.1 ; python_full_version == '3.13.*'", ] [project.optional-dependencies] portaudio = ["sounddevice>=0.4.6"] # In-process Laya multilingual triage lane: `uv sync --extra triage`, pinned in [tool.uv.sources]. triage = ["laya"] # In-process sherpa-onnx speaker-embedding lane. `sherpa-onnx` is a meta wheel # that requires `sherpa-onnx-core` (the wheel bundling libonnxruntime.so); list # it explicitly so the lock and `uv sync` always install the native runtime. speaker = ["sherpa-onnx>=1.12.0", "sherpa-onnx-core>=1.12.0"] [dependency-groups] dev = ["pytest>=8", "ruff"] [tool.uv.sources] pywhispercpp = { path = "vendor/pywhispercpp-1.5.1-cp313-cp313-linux_x86_64.whl" } laya = { git = "https://github.com/NandhaKishorM/laya.git", rev = "970dc8c5f63d7b886a68409493f37d569424f933" } [project.scripts] stt-daemon = "stt_daemon.cli:main" stt-assistant = "stt_daemon.assistant.runner:main" stt-ctl = "stt_daemon.ctl:main" stt-tui = "stt_daemon.tui.app:main" [tool.hatch.build.targets.wheel] packages = ["src/stt_daemon"] [tool.ruff] target-version = "py311" line-length = 100 [tool.ruff.lint] select = ["E", "F", "W"] [tool.pytest.ini_options] testpaths = ["tests"] python_files = ["test_*.py"]