[project]
name = "trax"
version = "1.0.0"
description = "Production-ready media transcription platform with iterative enhancement"
readme = "README.md"
requires-python = ">=3.11"
authors = [
    { name = "Your Name", email = "your.email@example.com" }
]
dependencies = [
    "python-dotenv>=1.0.0",
    "sqlalchemy>=2.0.0", 
    "alembic>=1.13.0",
    "psycopg2-binary>=2.9.0",
    "pydantic>=2.0.0",
    "click>=8.1.0",
    "rich>=13.0.0",
    "asyncio>=3.4.3",
    "cryptography>=41.0.0",  # For secure configuration
    "streamlit>=1.28.0",  # For research agent UI
    # Phase 2: Transcription Dependencies
    "faster-whisper>=1.0.0",
    "yt-dlp>=2024.0.0",
    "ffmpeg-python>=0.2.0",
    "pydub>=0.25.0",
    "librosa>=0.10.0",  # Audio analysis
    "numpy>=1.24.0",
    "scipy>=1.11.0",
    "soundfile>=0.12.0",  # Audio file I/O
    "aiohttp>=3.9.0",  # Async HTTP for downloads
    "tenacity>=8.2.0",  # Retry logic
    "psutil>=7.0.0",    # System and process utilities
    "openai>=1.0.0",    # OpenAI API client
    "deepseek>=1.0.0",  # DeepSeek API client
]

[project.optional-dependencies]
dev = [
    "pytest>=7.0.0",
    "pytest-asyncio>=0.21.0",
    "pytest-cov>=4.0.0",
    "black>=23.0.0",
    "flake8>=6.0.0",
    "mypy>=1.0.0",
    "ruff>=0.1.0",
    "ipython>=8.0.0",
]

# Phase 3: AI Enhancement (for v2)
ai = [
    "deepseek>=0.1.0",   # DeepSeek API client
    "openai>=1.0.0",     # OpenAI API
    "jinja2>=3.1.0",     # Templates
]

# Phase 4: Advanced Features (for v3-v4)
advanced = [
    "pyannote.audio>=3.0.0",  # Speaker diarization
    "torch>=2.0.0",           # For ML models
    "torchaudio>=2.0.0",
]

# Vector search and embeddings
vector-search = [
    "faiss-cpu>=1.12.0",      # FAISS for vector similarity search
    "chromadb>=1.0.0",        # ChromaDB for vector database
    "sentence-transformers>=5.0.0",  # Sentence embeddings
    "numpy>=1.24.0",          # Required for vector operations
    "scipy>=1.11.0",          # Required for vector operations
]

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

[tool.hatch.build.targets.wheel]
packages = ["src", "lib"]

[tool.uv]
dev-dependencies = [
    "ipython>=8.0.0",
    "rich>=13.0.0",
]

[tool.black]
line-length = 100
target-version = ['py311']
include = '\.pyi?$'
extend-exclude = '''
/(
  migrations
  | .venv
  | data
)/
'''

[tool.ruff]
line-length = 100
select = ["E", "F", "I", "N", "W", "B", "C90", "D"]
ignore = ["E501", "D100", "D104"]
exclude = ["migrations", ".venv", "data"]
fix = true
fixable = ["ALL"]

[tool.mypy]
python_version = "3.11"
warn_return_any = true
warn_unused_configs = true
disallow_untyped_defs = true
ignore_missing_imports = true
plugins = ["pydantic.mypy", "sqlalchemy.ext.mypy.plugin"]
exclude = ["migrations", "tests"]

[tool.pytest.ini_options]
testpaths = ["tests"]
python_files = ["test_*.py", "*_test.py"]
pythonpath = [".", "lib"]
addopts = """
-v 
--cov=src 
--cov-report=html 
--cov-report=term 
--tb=short
"""
asyncio_mode = "auto"
markers = [
    "unit: Unit tests",
    "integration: Integration tests",
    "slow: Slow tests (>5s)",
    "batch: Batch processing tests",
]

[tool.coverage.run]
omit = [
    "*/tests/*",
    "*/migrations/*",
    "*/__pycache__/*",
]

[tool.coverage.report]
exclude_lines = [
    "pragma: no cover",
    "def __repr__",
    "raise AssertionError",
    "raise NotImplementedError",
    "if __name__ == .__main__.:",
]