mirror of
https://github.com/tiennm99/DocsGPT.git
synced 2026-10-15 12:13:38 +00:00
Add document extraction tool using Docling
Add a document extractor tool with an extract_document action that converts an input artifact (PDF, docx, pptx, ...) into structured JSON by running a fixed Docling program in the sandbox (the document and parameters travel as data, so nothing in them can execute). Output is a compact payload bounded by an input size cap, a head-and-tail markdown window, and per-table caps, can be validated against a JSON schema, and is persisted as a data artifact by reference. Docling is heavy, so it stays out of the base image and ships in an opt-in sandbox image variant.
This commit is contained in:
1 parent
381fb3335d
commit
f8bdf998ac
7 files changed
+1048
No files matched your search
@@ -32,6 +32,16 @@ RUN pip install --no-cache-dir \
|
||||
pandas==2.2.3 \
|
||||
matplotlib==3.9.2
|
||||
|
||||
# Docling (MIT) for the document_extractor tool — OFF by default because it pulls
|
||||
# torch + models and makes the image multi-GB. Build the "extract" variant with
|
||||
# `--build-arg INSTALL_DOCLING=true` (see README) when document extraction is
|
||||
# needed. Docling is MIT and uses its own PDF backend; PyMuPDF (AGPL) is NOT
|
||||
# installed here. The base image and the app's requirements stay docling-free.
|
||||
ARG INSTALL_DOCLING=false
|
||||
RUN if [ "$INSTALL_DOCLING" = "true" ]; then \
|
||||
pip install --no-cache-dir docling==2.8.3; \
|
||||
fi
|
||||
|
||||
USER sandbox
|
||||
WORKDIR /home/sandbox
|
||||
|
||||
|
||||
@@ -43,6 +43,25 @@ The `docsgpt-sandbox` service is defined in `deployment/docker-compose.yaml` on
|
||||
an internal-only network. The backend and worker reach it at
|
||||
`http://docsgpt-sandbox:8888`.
|
||||
|
||||
## Document extraction variant (Docling)
|
||||
|
||||
The `document_extractor` tool runs Docling (MIT) inside the runner to convert
|
||||
documents (pdf/docx/pptx/...) to schema-validated JSON. Docling pulls `torch` and
|
||||
ML models, which makes the image multi-GB, so it is **off by default**: it is not
|
||||
in the base image, not in `application/requirements.txt`, and not required in the
|
||||
dev `.venv`. Build the extract variant only where extraction is needed:
|
||||
|
||||
```bash
|
||||
docker build -t docsgpt-sandbox-extract \
|
||||
--build-arg INSTALL_DOCLING=true deployment/sandbox
|
||||
docker run --rm -p 8888:8888 docsgpt-sandbox-extract
|
||||
```
|
||||
|
||||
Point the app at this runner via `SANDBOX_GATEWAY_URL` exactly as the base image.
|
||||
Docling uses its own permissive PDF backend; **PyMuPDF (AGPL) is intentionally not
|
||||
installed.** If the base (non-extract) image is used, `extract_document` returns a
|
||||
clean "docling is not available in the sandbox runner" error rather than crashing.
|
||||
|
||||
## Hardening (separate slice — not in this image)
|
||||
|
||||
Egress/SSRF blocks (drop RFC1918, link-local, `169.254.169.254`), the gVisor
|
||||
|
||||
Reference in new issue
Block a user