[tool.poetry]
name = "whisper-asr-webservice"
version = "1.8.2"
description = "Whisper ASR Webservice is a general-purpose speech recognition webservice."
homepage = "https://github.com/ahmetoner/whisper-asr-webservice/"
license = "https://github.com/ahmetoner/whisper-asr-webservice/blob/main/LICENCE"
authors = ["Ahmet Öner", "Besim Alibegovic"]
readme = "README.md"
packages = [{ include = "app" }]

[tool.poetry.scripts]
whisper-asr-webservice = "app.webservice:start"

[[tool.poetry.source]]
name = "pytorch-cpu"
url = "https://download.pytorch.org/whl/cpu"
priority = "explicit"

[tool.poetry.dependencies]
python = "<3.13,>=3.10"
fastapi = "^0.115.8"
uvicorn = { extras = ["standard"], version = "^0.34.0" }
python-multipart = "^0.0.20"
ffmpeg-python = "^0.2.0"
numpy = "<2.0.0"
openai-whisper = "^20240930"
faster-whisper = "^1.1.0"
whisperx = "^3.3.1"
tqdm = "^4.67.1"
llvmlite = "^0.44.0"
numba = "^0.61.0"
torch = [
    { version = "2.6.0", source = "pypi", markers = "sys_platform == 'darwin'"},
    { version = "2.6.0", source = "pypi", markers = "platform_machine == 'aarch64' and sys_platform != 'darwin'"},
    { version = "2.6.0", source = "pytorch-cpu", markers = "platform_machine == 'x86_64' and sys_platform != 'darwin'" },
]
torchaudio = [
    { version = "2.6.0", source = "pypi", markers = "sys_platform == 'darwin'"},
    { version = "2.6.0", source = "pypi", markers = "platform_machine == 'aarch64' and sys_platform != 'darwin'"},
    { version = "2.6.0", source = "pytorch-cpu", markers = "platform_machine == 'x86_64' and sys_platform != 'darwin'" },
]

[poetry.group.dev.dependencies]
pytest = "^8.3.4"
ruff = "^0.9.6"
black = "^25.1.0"
mkdocs-material = "^9.6.4"
pymdown-extensions = "^10.14.3"

[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"

[tool.black]
skip-string-normalization = true
line-length = 120

[tool.ruff]
line-length = 120

[tool.ruff.lint]
select = [
    "E",  # pycodestyle errors
    "W",  # pycodestyle warnings
    "F",  # pyflakes
    "I",  # isort
    "C",  # flake8-comprehensions
    "B",  # flake8-bugbear
]
ignore = [
    "E501",  # line too long, handled by black
    "C901",  # too complex
]

[tool.ruff.lint.isort]
order-by-type = true
relative-imports-order = "closest-to-furthest"
extra-standard-library = ["typing"]
section-order = [
    "future",
    "standard-library",
    "third-party",
    "first-party",
    "local-folder",
]
known-first-party = []