[project] name = "rm-backend" version = "1.2.0" description = "Resume Matcher Backend API" requires-python = ">=3.13" dependencies = [ "fastapi==0.128.4", "uvicorn==0.40.0", "python-multipart==0.0.31", "pydantic==2.12.5", "pydantic-settings==2.14.2", "tinydb==4.8.2", "sqlalchemy[asyncio]==2.0.36", "aiosqlite==0.20.0", "cryptography==48.0.1", "litellm==1.86.2", "markitdown[docx]==0.1.4", "pdfminer.six==20260107", "playwright==1.58.0", "python-docx==1.2.0", "python-dotenv==1.2.2", ] [project.scripts] app = "app.main:main" [project.optional-dependencies] dev = [ "pytest>=8.0.0", "pytest-asyncio>=0.24.0", "httpx>=0.28.0", "respx>=0.21.1", ] e2e-monitor = [ "pypdf>=4.0.0", # PDF text probe for the non-blank render check "httpx>=0.28.0", ] [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [tool.hatch.build.targets.wheel] packages = ["app"] [tool.pytest.ini_options] testpaths = ["tests"] pythonpath = ["."] python_files = ["test_*.py"] python_classes = ["Test*"] python_functions = ["test_*"] asyncio_mode = "auto" addopts = [ "--strict-markers", "-v", # Exclude LLM-as-judge evals from the default run (they may call a real # provider and are non-deterministic). Run them on demand with `-m eval`. "-m", "not eval", ] markers = [ "unit: pure function tests, no external dependencies", "service: service layer tests with mocked LLM", "integration: API endpoint tests with httpx AsyncClient", "eval: prompt-quality evaluations; may call a real LLM, skipped without a configured key", ]