mirror of
https://github.com/Stirling-Tools/Stirling-PDF.git
synced 2026-09-03 05:10:16 +03:00
# Description of Changes Stirling engine docker slimming Exclude Python virtualenvs from the Docker build context Drop unused provider SDKs from the engine dependency set Retry the SQLite WAL switch when workers race on startup Build the engine image in two stages and run it unprivileged Swap voyage SDK for api call removing 200MB bloat Bundle the AI engine in the fat image Publish the AI engine as a standalone image 886MB to 295MB in docker file And Docker fat is only 230MB bigger after adding (since it already has python and some deps) --- ## Checklist ### General - [ ] I have read the [Contribution Guidelines](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/CONTRIBUTING.md) - [ ] I have read the [Stirling-PDF Developer Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/DeveloperGuide.md) (if applicable) - [ ] I have read the [How to add new languages to Stirling-PDF](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/HowToAddNewLanguage.md) (if applicable) - [ ] I have performed a self-review of my own code - [ ] My changes generate no new warnings ### Documentation - [ ] I have updated relevant docs on [Stirling-PDF's doc repo](https://github.com/Stirling-Tools/Stirling-Tools.github.io/blob/main/docs/) (if functionality has heavily changed) - [ ] I have read the section [Add New Translation Tags](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/HowToAddNewLanguage.md#add-new-translation-tags) (for new translation tags only) ### Translations (if applicable) - [ ] I ran [`scripts/counter_translation.py`](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/docs/counter_translation.md) ### UI Changes (if applicable) - [ ] Screenshots or videos demonstrating the UI changes are attached (e.g., as comments or direct attachments in the PR) ### Testing (if applicable) - [ ] I have run `task check` to verify linters, typechecks, and tests pass - [ ] I have tested my changes locally. Refer to the [Testing Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/DeveloperGuide.md#7-testing) for more details.
122 lines
3.2 KiB
TOML
122 lines
3.2 KiB
TOML
[project]
|
|
name = "engine"
|
|
version = "0.1.0"
|
|
description = "Stirling PDF Python projects"
|
|
requires-python = ">=3.13,<3.14"
|
|
dependencies = []
|
|
|
|
[dependency-groups]
|
|
# Runtime dependencies for the AI document engine service.
|
|
engine = [
|
|
"cryptography>=50.0.0",
|
|
"fastapi>=0.141.1",
|
|
"opentelemetry-sdk>=1.39.1",
|
|
"pgvector>=0.5.0",
|
|
"posthog>=7.38.3",
|
|
"psycopg[binary,pool]>=3.3.4",
|
|
"pydantic>=2.13.4",
|
|
# <2 cap: 1.99.0 patches CVE-2026-46678; 2.0 is an untested major migration.
|
|
# Explicit extras: the `pydantic-ai` meta-package pulls all 20 providers (~230MB).
|
|
# No `voyageai` extra either; stirling.documents.voyage speaks its API directly.
|
|
"pydantic-ai-slim[anthropic,openai]>=1.107.2,<2.0.0",
|
|
"pydantic-settings>=2.15.0",
|
|
"python-dotenv>=1.2.2",
|
|
"sqlite-vec>=0.1.9",
|
|
"uvicorn>=0.52.3",
|
|
]
|
|
# Type checking, testing, model generation, and formatting tools for the engine.
|
|
engine-dev = [
|
|
"anyio>=4.14.2",
|
|
"datamodel-code-generator[ruff]==0.64.0",
|
|
"pyright>=1.1.411",
|
|
"pytest>=9.1.1",
|
|
"referencing>=0.37.0",
|
|
"ruff==0.15.5",
|
|
]
|
|
# Dependencies for the Cucumber/Python integration test suite.
|
|
cucumber = [
|
|
"behave>=1.3.3",
|
|
"behave-html-formatter>=0.9.10",
|
|
"opencv-python-headless>=5.0.0.93",
|
|
"pdf2image>=1.17.0",
|
|
"pillow>=12.3.0",
|
|
"pypdf[crypto]>=6.15.0",
|
|
"qrcode[pil]>=8.2",
|
|
"reportlab>=5.0.0",
|
|
"requests>=2.34.2",
|
|
]
|
|
# Shared Python utilities used by repository scripts and CI workflows.
|
|
tools = [
|
|
"deep-translator>=1.11.4",
|
|
"defusedxml>=0.7.1",
|
|
"fonttools>=4.63.0",
|
|
"fpdf2>=2.8.8",
|
|
"openai>=2.53.0",
|
|
"requests>=2.34.2",
|
|
"tomli-w>=1.2.0",
|
|
"tomlkit>=0.15.1",
|
|
"urllib3>=2.7.0",
|
|
"unoserver>=3.7",
|
|
"weasyprint>=69.0",
|
|
]
|
|
# Release-signature verification dependencies.
|
|
updater-signatures = [
|
|
"cryptography>=50.0.0",
|
|
]
|
|
# Pinned repository-wide pre-commit tooling.
|
|
pre-commit = [
|
|
"codespell==2.4.3",
|
|
"ruff==0.15.5",
|
|
"tomli-w==1.2.0",
|
|
]
|
|
|
|
[build-system]
|
|
requires = ["hatchling"]
|
|
build-backend = "hatchling.build"
|
|
|
|
[tool.hatch.build.targets.wheel]
|
|
packages = ["src"]
|
|
exclude = ["tests"]
|
|
|
|
[tool.uv]
|
|
default-groups = []
|
|
|
|
[tool.ruff]
|
|
line-length = 120
|
|
target-version = "py313"
|
|
|
|
[tool.ruff.lint]
|
|
select = [
|
|
"E",
|
|
"F",
|
|
"I",
|
|
"N",
|
|
"W",
|
|
"RUF100",
|
|
"UP",
|
|
"PYI", # flake8-pyi: flags deprecated typing constructs
|
|
"FA", # flake8-future-annotations: flags missing future annotations imports
|
|
"BLE", # flake8-blind-except: flags bare `except Exception`
|
|
]
|
|
|
|
[tool.ruff.lint.isort]
|
|
known-first-party = ["stirling", "tests"]
|
|
|
|
[tool.pyright]
|
|
pythonVersion = "3.13"
|
|
reportImportCycles = "warning"
|
|
reportUnnecessaryCast = "warning"
|
|
reportUnnecessaryTypeIgnoreComment = "warning"
|
|
reportUnusedImport = "warning"
|
|
reportUnknownParameterType = "warning"
|
|
reportDeprecated = "warning"
|
|
|
|
[tool.pytest.ini_options]
|
|
testpaths = ["tests"]
|
|
# ``tests`` is on the path so test modules can import shared helpers (e.g.
|
|
# ``from conftest import build_app_settings``) without packaging the tests dir.
|
|
pythonpath = ["src", "tests"]
|
|
# Use importlib import mode so test directories don't need __init__.py files
|
|
# and duplicate basenames (e.g. multiple test_routes.py) collect cleanly.
|
|
addopts = "--import-mode=importlib"
|