[build-system] requires = ["hatchling"] build-backend = "hatchling.build" [project] name = "modelforge-api" version = "1.2.2" description = "ITWorx ModelForge control-plane API" license = "AGPL-3.0-or-later" requires-python = ">=3.12" dependencies = [ "fastapi==0.141.1", "uvicorn[standard]==0.52.4", "pydantic==2.13.4", "pydantic-settings==2.15.0", "sqlalchemy==2.0.52", "alembic==1.19.1", "psycopg[binary]==3.3.4", "cryptography==50.0.1", "redis==6.4.0", "httpx==0.28.1", "huggingface-hub==1.29.0", "nvidia-ml-py==13.610.43", "psutil==7.2.2", "pyyaml==6.0.3", "structlog==25.5.0", ] [project.optional-dependencies] dev = [ "pytest==8.4.2", "pytest-asyncio==1.4.0", "ruff==0.16.5", "mypy==1.20.2", ] [tool.hatch.build.targets.wheel] packages = ["src/modelforge_api"] [tool.pytest.ini_options] pythonpath = ["src"] testpaths = ["tests"] [tool.mypy] # Strict, and analysed for the platform the images actually run on. # # Both of these were assumed rather than configured. There was no [tool.mypy] section at all, so # `mypy src` ran with defaults while every milestone report described it as strict; and it analysed # the developer's platform, so a Windows-only winreg branch type-checked cleanly here and failed in # CI on identical code. Turning strict on cost three stale `type: ignore` comments. strict = true platform = "linux" [tool.ruff] line-length = 100 target-version = "py312" [tool.ruff.lint] extend-select = ["B", "BLE", "I", "S", "SIM", "UP"] ignore = ["B008"] [tool.ruff.lint.per-file-ignores] "tests/*" = ["S101"] "src/modelforge_api/settings.py" = ["S104"] "src/modelforge_api/hardware/collectors.py" = ["B023"]