[project]
name = "reflector"
version = "0.1.0"
description = ""
authors = [{ name = "Monadical team", email = "ops@monadical.com" }]
requires-python = ">=3.11, <3.13"
readme = "README.md"
dependencies = [
    "aiohttp>=3.9.0",
    "aiohttp-cors>=0.7.0",
    "av>=15.0.0",
    "requests>=2.31.0",
    "aiortc>=1.5.0",
    "sortedcontainers>=2.4.0",
    "pydantic-settings>=2.0.2",
    "structlog>=23.1.0",
    "uvicorn[standard]>=0.23.1",
    "fastapi[standard]>=0.100.1",
    "sentry-sdk[fastapi]>=1.29.2",
    "httpx>=0.24.1",
    "fastapi-pagination>=0.12.6",
    "databases[aiosqlite, asyncpg]>=0.7.0",
    "sqlalchemy<1.5",
    "alembic>=1.11.3",
    "nltk>=3.8.1",
    "prometheus-fastapi-instrumentator>=6.1.0",
    "sentencepiece>=0.1.99",
    "protobuf>=4.24.3",
    "celery>=5.3.4",
    "redis>=5.0.1",
    "python-jose[cryptography]>=3.3.0",
    "python-multipart>=0.0.6",
    "transformers>=4.36.2",
    "jsonschema>=4.23.0",
    "openai>=1.59.7",
    "psycopg2-binary>=2.9.10",
    "llama-index>=0.12.52",
    "llama-index-llms-openai-like>=0.4.0",
    "pytest-env>=1.1.5",
    "webvtt-py>=0.5.0",
    "icalendar>=6.0.0",
    "hatchet-sdk>=0.47.0",
]

[dependency-groups]
dev = [
    "black>=24.1.1",
    "stamina>=23.1.0",
    "pyinstrument>=4.6.1",
]
tests = [
    "pytest-cov>=4.1.0",
    "pytest-aiohttp>=1.0.4",
    "pytest-asyncio>=0.21.1",
    "pytest>=7.4.0",
    "httpx-ws>=0.4.1",
    "pytest-httpx>=0.23.1",
    "pytest-celery>=0.0.0",
    "pytest-recording>=0.13.4",
    "pytest-docker>=3.2.3",
    "asgi-lifespan>=2.1.0",
]
aws = ["aioboto3>=11.2.0"]
evaluation = [
    "jiwer>=3.0.2",
    "levenshtein>=0.21.1",
    "tqdm>=4.66.0",
    "pydantic>=2.1.1",
]
local = [
    "pyannote-audio>=3.3.2",
    "faster-whisper>=0.10.0",
]
silero-vad = [
    "silero-vad>=5.1.2",
    "torch>=2.8.0",
    "torchaudio>=2.8.0",
]

[tool.uv]
default-groups = [
    "dev",
    "tests",
    "aws",
    "evaluation",
    "local",
    "silero-vad"
]

[[tool.uv.index]]
name = "pytorch-cpu"
url = "https://download.pytorch.org/whl/cpu"
explicit = true

[tool.uv.sources]
torch = [
  { index = "pytorch-cpu" },
]
torchaudio = [
  { index = "pytorch-cpu" },
]

[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"

[tool.hatch.build.targets.wheel]
packages = ["reflector"]

[tool.coverage.run]
source = ["reflector"]

[tool.pytest_env]
ENVIRONMENT = "pytest"
DATABASE_URL = "postgresql://test_user:test_password@localhost:15432/reflector_test"
AUTH_BACKEND = "jwt"

[tool.pytest.ini_options]
addopts = "-ra -q --disable-pytest-warnings --cov --cov-report html -v"
testpaths = ["tests"]
asyncio_mode = "auto"
markers = [
    "model_api: tests for the unified model-serving HTTP API (backend- and hardware-agnostic)",
]

[tool.ruff.lint]
select = [
    "I",       # isort - import sorting
    "F401",    # unused imports
    "E402",    # module level import not at top of file
    "PLC0415", # import-outside-top-level - detect inline imports
]

[tool.ruff.lint.per-file-ignores]
"reflector/processors/summary/summary_builder.py" = ["E501"]
"gpu/modal_deployments/**.py" = ["PLC0415"]
"reflector/tools/**.py" = ["PLC0415"]
"migrations/versions/**.py" = ["PLC0415"]
"tests/**.py" = ["PLC0415"]
