[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__.:", ]