[build-system] build-backend = "setuptools.build_meta" requires = ["setuptools>=61.0"] [dependency-groups] dev = ["sentinel[dev]"] test = ["sentinel[test]"] [project] authors = [ {email = "j.euko@instadeep.com", name = "Joao Paulo Euko"}, {email = "t.d.barrett91@gmail.com", name = "Tom Barrett"}, {email = "t.makkink@instadeep.com", name = "Thomas Makkink"} ] dependencies = [ "fastapi", "fpdf>=1.7.2", "hydra-core>=1.3.2", "langchain", "langchain-community", "langchain-google-genai", "langchain-ollama", "langchain-openai", "markdown2>=2.5.3", "matplotlib>=3.10.3", "openpyxl>=3.1.0", "python-dotenv", "pyyaml", "reportlab>=4.0.0" ] description = "LLM-based Cancer Risk Assessment Assistant" name = "sentinel" readme = "README.md" requires-python = ">=3.12" version = "0.1.0" [project.optional-dependencies] dev = [ "ipywidgets", "jupyterlab", "plotly", "pre-commit", "pyright", "pyright>=1.1.405", "seaborn", "uvicorn" ] test = [ "pytest-cov>=4.0.0", "pytest-mock>=3.15.1", "pytest>=7.0.0" ] [tool.ruff] line-length = 88 target-version = "py312" [tool.ruff.format] indent-style = "space" line-ending = "auto" quote-style = "double" skip-magic-trailing-comma = false [tool.ruff.lint] ignore = [ "ARG001", # unused function argument (test fixtures) "ARG002", # unused method argument (pydantic callbacks) "B008", # do not perform function calls in argument defaults "B904", # raise from err (requires manual review) "C408", # unnecessary dict call (plotly API requires dict()) "C901", # too complex "E501", # line too long, handled by formatter "F841", # unused variable (sometimes needed for future use) "RUF002", # ambiguous hyphen (requires manual review) "RUF012", # ClassVar annotations (requires manual review) "SIM102", # nested if statements (sometimes clearer) "SIM108", # ternary operator (sometimes if-else is clearer) "TCH" # type-checking rules (often can't be auto-fixed) ] select = [ "ARG", # flake8-unused-arguments "B", # flake8-bugbear "C4", # flake8-comprehensions "E", # pycodestyle errors "F", # pyflakes "I", # isort "Q", # flake8-quotes "RUF", # ruff-specific rules "SIM", # flake8-simplify "TCH", # flake8-type-checking "UP", # pyupgrade "W" # pycodestyle warnings ] [tool.ruff.lint.isort] known-first-party = ["sentinel"] [tool.ruff.lint.pydocstyle] # Use Google-style docstrings. convention = "google" [tool.ruff.lint.pylint] allow-magic-value-types = ["int", "str"] [tool.setuptools.packages.find] include = ["sentinel*"] where = ["src"] [tool.uv] default-groups = ["dev", "test"] # By default, install all dependencies.