[build-system]
requires = ["setuptools>=77.0.3", "wheel"]
build-backend = "setuptools.build_meta"

[project]
name = "speech-to-speech"
version = "0.2.10"
description = "Low-latency speech-to-speech pipeline"
readme = "README.md"
requires-python = ">=3.10"
license = "Apache-2.0"
license-files = ["LICENSE"]
authors = [
    { name = "Hugging Face" },
]
keywords = ["speech-to-speech", "voice-agents", "speech-recognition", "text-to-speech", "openai"]
classifiers = [
    "Development Status :: 3 - Alpha",
    "Intended Audience :: Developers",
    "Programming Language :: Python :: 3",
    "Programming Language :: Python :: 3.10",
    "Programming Language :: Python :: 3.11",
    "Programming Language :: Python :: 3.12",
    "Topic :: Multimedia :: Sound/Audio :: Speech",
    "Topic :: Scientific/Engineering :: Artificial Intelligence",
]
dependencies = [
    "fastapi>=0.115.0",
    "httpx>=0.28.0",
    "nltk==3.9.4",
    "numpy>=1.26.0,<2.4.4; platform_system == 'Darwin'",
    "numpy>=1.26.0; platform_system != 'Darwin'",
    "openai==2.28.0",
    "pillow>=10.0.0",
    "pydantic>=2.0",
    "rich>=13.0",
    "scipy>=1.10.0",
    "sounddevice==0.5.3; platform_system == 'Darwin'",
    "sounddevice>=0.5.0; platform_system != 'Darwin'",
    "soundfile>=0.13.0; platform_system == 'Darwin'",
    "torch==2.11.0; platform_system == 'Darwin'",
    "torch>=2.4.0; platform_system != 'Darwin'",
    "torchaudio==2.11.0; platform_system == 'Darwin'",
    "torchaudio>=2.4.0; platform_system != 'Darwin'",
    "transformers==5.6.2; platform_system == 'Darwin'",
    "transformers>=4.57.0; platform_system != 'Darwin'",
    "uvicorn>=0.30.0",
    "websockets>=12.0",
    "nano-parakeet>=0.2.0; platform_system != 'Darwin'",
    "faster-qwen3-tts>=0.2.6; platform_system != 'Darwin'",
    "lingua-language-detector>=2.0.2",
    "miniaudio==1.61; platform_system == 'Darwin'",
    "mlx==0.31.1; platform_system == 'Darwin'",
    "mlx-audio==0.4.2; platform_system == 'Darwin'",
    "mlx-lm==0.31.1; platform_system == 'Darwin'",
    "mlx-metal==0.31.1; platform_system == 'Darwin'",
    "misaki>=0.9.4; platform_system == 'Darwin'",
    "espeakng-loader>=0.2.4; platform_system == 'Darwin'",
    "spacy>=3.8.4; platform_system == 'Darwin'",
    "phonemizer-fork>=3.3.2; platform_system == 'Darwin'",
]

[project.optional-dependencies]
chattts = [
    "ChatTTS>=0.1.1",
]
facebook-mms = [
    "transformers>=4.57.0",
]
faster-whisper = [
    "faster-whisper>=1.0.3",
]
kokoro = [
    "kokoro>=0.9.2; platform_system != 'Darwin'",
]
language-detection = [
    "lingua-language-detector>=2.0.2",
]
mlx-lm = [
    "mlx-lm==0.31.1; platform_system == 'Darwin'",
    "mlx-vlm==0.4.1; platform_system == 'Darwin'",
]
paraformer = [
    "funasr>=1.1.6",
    "modelscope>=1.17.1",
    "onnxruntime<1.24; python_version < '3.11'",
]
pocket = [
    "pocket-tts>=0.1.0",
]
websocket = [
    "websockets>=12.0",
]
whisper-mlx = [
    "lightning-whisper-mlx>=0.0.10; platform_system == 'Darwin'",
]

[project.urls]
Homepage = "https://github.com/huggingface/speech-to-speech"
Repository = "https://github.com/huggingface/speech-to-speech"
Issues = "https://github.com/huggingface/speech-to-speech/issues"

[project.scripts]
speech-to-speech = "speech_to_speech.s2s_pipeline:main"

[dependency-groups]
dev = [
    "ruff",
    "mypy",
    "pytest",
    "pytest-asyncio",
    "websockets>=12.0",
]

[tool.pytest.ini_options]
asyncio_mode = "auto"

[tool.uv]
package = true
prerelease = "allow"

[tool.setuptools.packages.find]
where = ["src"]
include = ["speech_to_speech*"]
exclude = ["tests*"]

[tool.setuptools.package-data]
speech_to_speech = ["TTS/*.wav"]

[tool.ruff]
src = ["src"]
line-length = 120

[tool.ruff.lint]
select = ["E", "F", "I", "W"]
ignore = ["E501"]

[tool.mypy]
python_version = "3.10"
ignore_missing_imports = true
warn_unused_configs = true
check_untyped_defs = false
