[project] name = "speaches" version = "0.1.0" requires-python = ">=3.12,<3.13" # https://packaging.python.org/en/latest/specifications/version-specifiers/#id5 dependencies = [ "ctranslate2>=4.5.0", "fastapi>=0.115.0", "faster-whisper>=1.1.0", "huggingface-hub[hf-transfer]>=0.25.1", "kokoro-onnx>=0.2.2", "numpy>=2.1.1", "onnxruntime-gpu>=1.20.1 ; platform_machine == 'x86_64'", "piper-phonemize ; platform_machine == 'x86_64'", "piper-tts>=1.2.0 ; platform_machine == 'x86_64'", "pydantic-settings>=2.5.2", "pydantic>=2.9.0", "python-multipart>=0.0.10", "sounddevice>=0.5.1", "soundfile>=0.12.1", "uvicorn>=0.30.6", ] [project.optional-dependencies] client = [ "keyboard>=0.13.5", ] dev = [ "anyio>=4.4.0", "basedpyright>=1.18.0", "pytest-antilru>=2.0.0", "mkdocs-material>=9.5.39", "mkdocstrings[python]>=0.26.1", "pytest-asyncio>=0.24.0", "pytest-xdist>=3.6.1", "pytest>=8.3.3", "ruff>=0.9.1", "srt>=3.5.3", "webvtt-py>=0.5.1", "pre-commit>=4.0.1", "pytest-mock>=3.14.0", "mkdocs-render-swagger-plugin>=0.1.2", "mdx-truly-sane-lists>=1.3", ] ui = [ "gradio>=5.0.2", "httpx>=0.27.2", "httpx-sse>=0.4.0", "openai>=1.48.0", ] opentelemetry = [ "opentelemetry-distro>=0.48b0", "opentelemetry-exporter-otlp>=1.27.0", "opentelemetry-instrumentation-asyncio==0.48b0", "opentelemetry-instrumentation-logging==0.48b0", "opentelemetry-instrumentation-threading==0.48b0", "opentelemetry-instrumentation-urllib==0.48b0", # "opentelemetry-instrumentation-wsgi==0.48b0" "opentelemetry-instrumentation-fastapi==0.48b0", "opentelemetry-instrumentation-grpc==0.48b0", "opentelemetry-instrumentation-httpx==0.48b0", "opentelemetry-instrumentation-requests==0.48b0", "opentelemetry-instrumentation-urllib3==0.48b0", ] [build-system] requires = ["hatchling"] build-backend = "hatchling.build" # https://docs.astral.sh/ruff/configuration/ [tool.ruff] line-length = 120 target-version = "py311" [tool.ruff.lint] select = ["ALL"] ignore = [ "FIX", "TD", # disable todo warnings "ERA", # allow commented out code "ANN003", # missing kwargs "ANN101", # missing self type "B006", "B008", "COM812", # trailing comma "D10", # disabled required docstrings "D401", "EM102", "FBT001", "FBT002", "PLR0913", "PLR2004", # magic "RET504", "RET505", "RET508", "S101", # allow assert "S104", "S603", # subprocess untrusted input "SIM102", "T201", # print "TRY003", "W505", "ISC001", # recommended to disable for formatting "INP001", "PT018", "G004", # logging f string ] [tool.ruff.lint.isort] force-sort-within-sections = true [tool.ruff.format] # Like Black, use double quotes for strings. quote-style = "double" # Like Black, indent with spaces, rather than tabs. indent-style = "space" # Like Black, respect magic trailing commas. skip-magic-trailing-comma = false # Like Black, automatically detect the appropriate line ending. line-ending = "auto" [tool.basedpyright] typeCheckingMode = "standard" pythonVersion = "3.12" pythonPlatform = "Linux" # https://github.com/DetachHead/basedpyright?tab=readme-ov-file#pre-commit-hook venvPath = "." venv = ".venv" [tool.pytest.ini_options] asyncio_default_fixture_loop_scope = "function" # this fixes pytest warning filterwarnings = [ 'ignore::DeprecationWarning' ] # https://docs.pytest.org/en/stable/how-to/mark.html#registering-marks markers = [ "requires_openai", ] [tool.uv] constraint-dependencies = ["llvmlite>=0.40.0"] [tool.uv.sources] piper-phonemize = { url = "https://github.com/fedirz/piper-phonemize/raw/refs/heads/master/dist/piper_phonemize-1.2.0-cp312-cp312-manylinux_2_28_x86_64.whl" } [[tool.uv.dependency-metadata]] name = "piper-tts" version = "1.2.0" requires-dist = ["piper-phonemize"]