perf: Clean up resources with docling-parse v4, no parsed_page output by default (#2105)

* Call PdfDocument.unload_pages from the pipelines where needed, delete parsed_page data unless requested to keep

Signed-off-by: Christoph Auer <cau@zurich.ibm.com>

* pin docling-parse and update lock

Signed-off-by: Michele Dolfi <dol@zurich.ibm.com>

* Reinstate pipeline_options.generate_parsed_page

Signed-off-by: Christoph Auer <cau@zurich.ibm.com>

---------

Signed-off-by: Christoph Auer <cau@zurich.ibm.com>
Signed-off-by: Michele Dolfi <dol@zurich.ibm.com>
Co-authored-by: Michele Dolfi <dol@zurich.ibm.com>
This commit is contained in:
Christoph Auer
2025-08-20 10:46:31 +02:00
committed by GitHub
parent c5f2e2fdd6
commit 5f57ff2a45
8 changed files with 110 additions and 65 deletions

View File

@@ -22,15 +22,52 @@ _log = logging.getLogger(__name__)
class DoclingParseV4PageBackend(PdfPageBackend):
def __init__(self, parsed_page: SegmentedPdfPage, page_obj: PdfPage):
def __init__(
self,
*,
dp_doc: PdfDocument,
page_obj: PdfPage,
page_no: int,
create_words: bool = True,
create_textlines: bool = True,
):
self._ppage = page_obj
self._dpage = parsed_page
self.valid = parsed_page is not None
self._dp_doc = dp_doc
self._page_no = page_no
self._create_words = create_words
self._create_textlines = create_textlines
self._dpage: Optional[SegmentedPdfPage] = None
self._unloaded = False
self.valid = (self._ppage is not None) and (self._dp_doc is not None)
def _ensure_parsed(self) -> None:
if self._dpage is not None:
return
seg_page = self._dp_doc.get_page(
self._page_no + 1,
create_words=self._create_words,
create_textlines=self._create_textlines,
)
# In Docling, all TextCell instances are expected with top-left origin.
[
tc.to_top_left_origin(seg_page.dimension.height)
for tc in seg_page.textline_cells
]
[tc.to_top_left_origin(seg_page.dimension.height) for tc in seg_page.char_cells]
[tc.to_top_left_origin(seg_page.dimension.height) for tc in seg_page.word_cells]
self._dpage = seg_page
def is_valid(self) -> bool:
return self.valid
def get_text_in_rect(self, bbox: BoundingBox) -> str:
self._ensure_parsed()
assert self._dpage is not None
# Find intersecting cells on the page
text_piece = ""
page_size = self.get_size()
@@ -56,12 +93,19 @@ class DoclingParseV4PageBackend(PdfPageBackend):
return text_piece
def get_segmented_page(self) -> Optional[SegmentedPdfPage]:
self._ensure_parsed()
return self._dpage
def get_text_cells(self) -> Iterable[TextCell]:
self._ensure_parsed()
assert self._dpage is not None
return self._dpage.textline_cells
def get_bitmap_rects(self, scale: float = 1) -> Iterable[BoundingBox]:
self._ensure_parsed()
assert self._dpage is not None
AREA_THRESHOLD = 0 # 32 * 32
images = self._dpage.bitmap_resources
@@ -123,8 +167,13 @@ class DoclingParseV4PageBackend(PdfPageBackend):
# )
def unload(self):
if not self._unloaded and self._dp_doc is not None:
self._dp_doc.unload_pages((self._page_no + 1, self._page_no + 2))
self._unloaded = True
self._ppage = None
self._dpage = None
self._dp_doc = None
class DoclingParseV4DocumentBackend(PdfDocumentBackend):
@@ -157,30 +206,15 @@ class DoclingParseV4DocumentBackend(PdfDocumentBackend):
self, page_no: int, create_words: bool = True, create_textlines: bool = True
) -> DoclingParseV4PageBackend:
with pypdfium2_lock:
seg_page = self.dp_doc.get_page(
page_no + 1,
create_words=create_words,
create_textlines=create_textlines,
)
ppage = self._pdoc[page_no]
# In Docling, all TextCell instances are expected with top-left origin.
[
tc.to_top_left_origin(seg_page.dimension.height)
for tc in seg_page.textline_cells
]
[
tc.to_top_left_origin(seg_page.dimension.height)
for tc in seg_page.char_cells
]
[
tc.to_top_left_origin(seg_page.dimension.height)
for tc in seg_page.word_cells
]
return DoclingParseV4PageBackend(
seg_page,
self._pdoc[page_no],
)
return DoclingParseV4PageBackend(
dp_doc=self.dp_doc,
page_obj=ppage,
page_no=page_no,
create_words=create_words,
create_textlines=create_textlines,
)
def is_valid(self) -> bool:
return self.page_count() > 0

View File

@@ -323,9 +323,7 @@ class PdfPipelineOptions(PaginatedPipelineOptions):
),
)
generate_parsed_pages: Literal[True] = (
True # Always True since parsed_page is now mandatory
)
generate_parsed_pages: bool = False
class ProcessingPipeline(str, Enum):

View File

@@ -20,7 +20,7 @@ from docling.datamodel.base_models import (
Page,
)
from docling.datamodel.document import ConversionResult, InputDocument
from docling.datamodel.pipeline_options import PipelineOptions
from docling.datamodel.pipeline_options import PdfPipelineOptions, PipelineOptions
from docling.datamodel.settings import settings
from docling.models.base_model import GenericEnrichmentModel
from docling.utils.profiling import ProfilingScope, TimeRecorder
@@ -168,6 +168,12 @@ class PaginatedPipeline(BasePipeline): # TODO this is a bad name.
# Cleanup page backends
if not self.keep_backend and p._backend is not None:
p._backend.unload()
if (
isinstance(self.pipeline_options, PdfPipelineOptions)
and not self.pipeline_options.generate_parsed_pages
):
del p.parsed_page
p.parsed_page = None
end_batch_time = time.monotonic()
total_elapsed_time += end_batch_time - start_batch_time

View File

@@ -565,10 +565,12 @@ class ThreadedStandardPdfPipeline(BasePipeline):
if not self.keep_images:
for p in conv_res.pages:
p._image_cache = {}
if not self.keep_backend:
for p in conv_res.pages:
if p._backend is not None:
p._backend.unload()
for p in conv_res.pages:
if not self.keep_backend and p._backend is not None:
p._backend.unload()
if not self.pipeline_options.generate_parsed_pages:
del p.parsed_page
p.parsed_page = None
# ---------------------------------------------------------------- assemble
def _assemble_document(self, conv_res: ConversionResult) -> ConversionResult:

View File

@@ -45,7 +45,7 @@ requires-python = '>=3.9,<4.0'
dependencies = [
'pydantic (>=2.0.0,<3.0.0)',
'docling-core[chunking] (>=2.42.0,<3.0.0)',
'docling-parse (>=4.0.0,<5.0.0)',
'docling-parse (>=4.2.2,<5.0.0)',
"docling-ibm-models>=3.9.0,<4",
'filetype (>=1.2.0,<2.0.0)',
'pypdfium2 (>=4.30.0,!=4.30.1,<5.0.0)',

View File

@@ -27,6 +27,7 @@ def get_converter():
pipeline_options.do_table_structure = True
pipeline_options.table_structure_options.do_cell_matching = True
pipeline_options.accelerator_options.device = AcceleratorDevice.CPU
pipeline_options.generate_parsed_pages = True
converter = DocumentConverter(
format_options={

View File

@@ -3,6 +3,7 @@ from pathlib import Path
import pytest
from docling.datamodel.accelerator_options import AcceleratorDevice
from docling.datamodel.base_models import DocumentStream, InputFormat
from docling.datamodel.pipeline_options import PdfPipelineOptions
from docling.document_converter import DocumentConverter, PdfFormatOption
@@ -24,6 +25,8 @@ def converter():
pipeline_options.do_ocr = False
pipeline_options.do_table_structure = True
pipeline_options.table_structure_options.do_cell_matching = True
pipeline_options.accelerator_options.device = AcceleratorDevice.CPU
pipeline_options.generate_parsed_pages = True
converter = DocumentConverter(
format_options={

61
uv.lock generated
View File

@@ -889,7 +889,7 @@ requires-dist = [
{ name = "certifi", specifier = ">=2024.7.4" },
{ name = "docling-core", extras = ["chunking"], specifier = ">=2.42.0,<3.0.0" },
{ name = "docling-ibm-models", specifier = ">=3.9.0,<4" },
{ name = "docling-parse", specifier = ">=4.0.0,<5.0.0" },
{ name = "docling-parse", specifier = ">=4.2.2,<5.0.0" },
{ name = "easyocr", specifier = ">=1.7,<2.0" },
{ name = "filetype", specifier = ">=1.2.0,<2.0.0" },
{ name = "huggingface-hub", specifier = ">=0.23,<1" },
@@ -1015,7 +1015,7 @@ wheels = [
[[package]]
name = "docling-parse"
version = "4.1.0"
version = "4.2.2"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "docling-core" },
@@ -1024,35 +1024,36 @@ dependencies = [
{ name = "pywin32", marker = "sys_platform == 'win32'" },
{ name = "tabulate" },
]
sdist = { url = "https://files.pythonhosted.org/packages/c0/24/fff30a36af50a720813b1bdbeaee140136ff0fcdfad041ec8127c3115b4f/docling_parse-4.1.0.tar.gz", hash = "sha256:6c2f52c5438ff6158ad2e6d2064b35786f01ce7f1b235c7c882b71ab221549c6", size = 39407179, upload-time = "2025-06-24T11:21:49.233Z" }
sdist = { url = "https://files.pythonhosted.org/packages/ae/d3/d6f31fb414752c86eebb40a9c820678babd94d3c8f6d11c93e603921d777/docling_parse-4.2.2.tar.gz", hash = "sha256:447517de49555dda6573466f0b041f40ee82874f41907143602721a7440aec7e", size = 39613357, upload-time = "2025-08-19T19:37:58.379Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/53/e5/926fce2ceff34b1f1f9ce458652e098aa133b1f76fc2db2bd04630fe0deb/docling_parse-4.1.0-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:93e5b5f7916d25a4d628940ea93ffb9f11ca8143946d897afb4c025cc826742f", size = 14709404, upload-time = "2025-06-24T11:20:46.335Z" },
{ url = "https://files.pythonhosted.org/packages/1c/a0/a4e91bdaf1bf859afff63a814dac3016be280afc2cb3c97a213a2aa0273f/docling_parse-4.1.0-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:1c33cfac7ff70c8890cac33b80e0a3dab4d6c527635806fa60be558d69bbe02a", size = 14587856, upload-time = "2025-06-24T11:20:49.655Z" },
{ url = "https://files.pythonhosted.org/packages/3b/09/5705e61951a6e7475893387539c3a0f4b1aac74372961fc9c1a6bd7260bc/docling_parse-4.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afd5c8d025986110cbfaad9d8cb924b636e08069bde7dcd7e724d57a0a62b24e", size = 15026321, upload-time = "2025-06-24T11:20:51.577Z" },
{ url = "https://files.pythonhosted.org/packages/cb/ea/833cf6b09c5fd8131898dd9df21aea5ec2b6db3c6a04d2782cc0f338357f/docling_parse-4.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62825b46c58bafca6a03a949dd80d0e50253d6e6e979c8c73e00edfb6b58da54", size = 15105276, upload-time = "2025-06-24T11:20:53.821Z" },
{ url = "https://files.pythonhosted.org/packages/bd/0d/c5cfc9dc95a9ded97402d6b821f78556dbfbf65dd3a209abd219a47a8fb7/docling_parse-4.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:28f91e8a09b502bf76324e8d68100830c3fe37b420268b7585aa1bde257acfd2", size = 15894432, upload-time = "2025-06-24T11:20:56.232Z" },
{ url = "https://files.pythonhosted.org/packages/f4/32/8755b295c9850b75f3ee64274ddcbce67c4afbd8263b5136c073483c997c/docling_parse-4.1.0-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:66a6773981702ba052a0f766f868ee98526899ad802bd03dbf50b1209fda8082", size = 14710838, upload-time = "2025-06-24T11:20:58.155Z" },
{ url = "https://files.pythonhosted.org/packages/d9/ac/051d61783b58dda5e33884dc25f4bda38025fcae7f0f94a159373895947e/docling_parse-4.1.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:78515424b90fcd305f8ea9ab243719c3030c9ce764cef44be1b8cf0d8fc4a5a5", size = 14589300, upload-time = "2025-06-24T11:21:00.479Z" },
{ url = "https://files.pythonhosted.org/packages/57/7a/a665f853ff801879598738beb9a5fc3142aa50b1f81fa46d8e1f92d1a4b2/docling_parse-4.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e568bb9d8188bffc72fe10a78712c73a5a6002980b3602d58969dc14e0d7ff1", size = 15027042, upload-time = "2025-06-24T11:21:02.614Z" },
{ url = "https://files.pythonhosted.org/packages/26/d3/04f9816b8eea9e7fa2665bcca511c27ee1e2a223a24ce39bb0cd9eefc7f2/docling_parse-4.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9cfc436cfbc635b65fe4bb5a3157872944c98b95851b71269456614c35d5bf5", size = 15106766, upload-time = "2025-06-24T11:21:04.992Z" },
{ url = "https://files.pythonhosted.org/packages/b3/51/67365adea9afcd1a923e86e5ebecf10e192e12532486e3677adb72c41be1/docling_parse-4.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:2495b5ebf7669770715c290d5f2ef47a849bc2801e8bb78e71f92ea49322b3b3", size = 15896344, upload-time = "2025-06-24T11:21:06.888Z" },
{ url = "https://files.pythonhosted.org/packages/c2/c3/3e72edf879df697eb9349e42980028c4d3d210c0aeab31f7132ec5c6301e/docling_parse-4.1.0-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:febf2b0f08d24a273ee11d876c563ce1d20648a8ddd4c6129e5665138e79c87d", size = 14711298, upload-time = "2025-06-24T11:21:09.385Z" },
{ url = "https://files.pythonhosted.org/packages/2c/a5/bb47eec4abd635bb931332a1408d87829ef649e10469783b37c322b8321d/docling_parse-4.1.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:566573e534de6b353af6362d742b52e06e0a37d4b540fe763dd6aec78817c4b5", size = 14588777, upload-time = "2025-06-24T11:21:11.718Z" },
{ url = "https://files.pythonhosted.org/packages/83/a9/8b6c47ed8b2ce51ae97a3caaeab56e593cd91ec7204a6d2f3eea11aeb46d/docling_parse-4.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5eb29b9bb2eddd91d857ef457b99b67918d1e63569eadaafc2603a8f742d0ad5", size = 15026655, upload-time = "2025-06-24T11:21:14.318Z" },
{ url = "https://files.pythonhosted.org/packages/e5/51/080bba290becb3e0e43345db92a13341beb40bb7aa5a2cddf6674855f79a/docling_parse-4.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80dfcc89569b96b653d3db270ed83418045c5d4a647be97273b7a302e3d4c51c", size = 15106006, upload-time = "2025-06-24T11:21:16.961Z" },
{ url = "https://files.pythonhosted.org/packages/66/5d/fde692143f6106d6c2153f19c2e2db9f30700527449b5f0aac8b1e55d571/docling_parse-4.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:cc657a5fd6fe6f82f6aedde40b295697edb582bd30aee08517565fd5cfba207b", size = 15895073, upload-time = "2025-06-24T11:21:18.942Z" },
{ url = "https://files.pythonhosted.org/packages/23/3b/78fd2fe779dfb9588e4fa27ee6ba36e9e3d4195916536e300d6c38a9c08c/docling_parse-4.1.0-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:0046a2f2334338fbc3c679179a594999c8040e4a71f36c0e1a90c188eb697298", size = 14711292, upload-time = "2025-06-24T11:21:20.967Z" },
{ url = "https://files.pythonhosted.org/packages/ed/a3/06987ca409c9b64d8309f962e402649f02486d79ae10ebb9c940d5e0313c/docling_parse-4.1.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:058402d6915abf87a9f360a5117a87d864e2e0eaf3fe725c9295765c004460ab", size = 14588907, upload-time = "2025-06-24T11:21:23.326Z" },
{ url = "https://files.pythonhosted.org/packages/4f/f5/14d5a939b815011c4b2d58e9afa3c80faf58ee70cafc03e10ec4d7de3e5a/docling_parse-4.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:008d4ee03a076102be80292008e791b994905780a68ae41d805cf9ff2d610b80", size = 15026519, upload-time = "2025-06-24T11:21:25.383Z" },
{ url = "https://files.pythonhosted.org/packages/2c/ea/153dd31b4e46d818b5917f0daac883ae467e32ddab5ca97c67f8e2971b85/docling_parse-4.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:371067eb2d04c3793ab57f254c32db354edbbd85f14e54cd5c67fccd2705acff", size = 15106663, upload-time = "2025-06-24T11:21:27.885Z" },
{ url = "https://files.pythonhosted.org/packages/29/df/39a85b8342401b1ac066e97f3c698e62f34505d3c219a4ffebbbd7c82eca/docling_parse-4.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:adf42e7d1dbcfd67cf466f3e2b2569ddd79af3666c582ef6eac26263584471c5", size = 15895783, upload-time = "2025-06-24T11:21:29.923Z" },
{ url = "https://files.pythonhosted.org/packages/f1/06/2fb95e9abf33856cd80285f3c179e4d5a85b375e8d539c4688fe1b00e6fc/docling_parse-4.1.0-cp39-cp39-macosx_13_0_x86_64.whl", hash = "sha256:44c268231c4a0a2418e25caeab92784e7514cb8e9dc4f32af743d9a47a2c72ad", size = 14709539, upload-time = "2025-06-24T11:21:33.759Z" },
{ url = "https://files.pythonhosted.org/packages/cb/24/aca3dc0a73ee49a1240eadb5df53899b6e59d7a890f71f56bcebc4c0af0d/docling_parse-4.1.0-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:02fed16e96b4c8e7fdfc08719cd27df68ad9d31ec2f4c62c5ac4a7415a7b4bee", size = 14588011, upload-time = "2025-06-24T11:21:35.595Z" },
{ url = "https://files.pythonhosted.org/packages/ca/11/decb9f2598f1cb486560ca642d88482c92754b95706c15429bbd2b8a9e4c/docling_parse-4.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67b65827a3babeb5e738f9bd47313353f06826eb59f6b128891abac273bddde", size = 15026461, upload-time = "2025-06-24T11:21:37.529Z" },
{ url = "https://files.pythonhosted.org/packages/55/ab/996b39935fc0dce229ec8eb77ec7f611476e2654b3390b68e789e0c69595/docling_parse-4.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88885c4661ec42ae00b83a87f4beb7d5df0b9b8c037c34ec2ef8ed8ad9ad485b", size = 15105547, upload-time = "2025-06-24T11:21:39.762Z" },
{ url = "https://files.pythonhosted.org/packages/fd/d2/edd9f63835a4157db004037644e034407e4a1aa1ad3a3338cd8dba13fa08/docling_parse-4.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:04ff8a0158131edf203774a252b161ad4b053d430ed123f00b63af17f9d80280", size = 15894784, upload-time = "2025-06-24T11:21:41.803Z" },
{ url = "https://files.pythonhosted.org/packages/e6/e3/6cef53b0084b8bc0ca0fa2944ffa9a80ff32d462a1733be555363ad00552/docling_parse-4.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:2124de8f5b1dc04f97781d5b0c138d7c35f0a6ce5bd93820ab4d276802b5e345", size = 17704301, upload-time = "2025-06-24T11:21:43.869Z" },
{ url = "https://files.pythonhosted.org/packages/35/b9/c340c536f856a139598b41f213414972a739207347d91b73d2a64a38580d/docling_parse-4.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:e0ec4f15294fad4219979084cbe581bb8d18bb30d5d45dbeea5ad1ddb038a40b", size = 17704773, upload-time = "2025-06-24T11:21:46.226Z" },
{ url = "https://files.pythonhosted.org/packages/bb/28/c089edabfb646d0727b32bd371580c96c57759261d78bc89fed67f5f78d9/docling_parse-4.2.2-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:026967e6e63eb1ba9bb7b00e77e910a3ccffcc0be447cec58615902eeae9bac2", size = 14728865, upload-time = "2025-08-19T19:36:58.238Z" },
{ url = "https://files.pythonhosted.org/packages/6b/36/7bb02cc27e02d261a8b354f9434ba2a5e77d16a080c78132a5518b024d4d/docling_parse-4.2.2-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:213d19cb53b7b0fb178f0afee4974f0ae3a723c4bb245cdae7468fc563361579", size = 14604945, upload-time = "2025-08-19T19:37:01.453Z" },
{ url = "https://files.pythonhosted.org/packages/3a/18/5ed474d3c1486720edc0a797cdee51d5fb6b7b7d2c03c91940052d14f57d/docling_parse-4.2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce11e7629b8516452b35f1d01a6668bf506c3195c26fb07f454e0706e7e3cfaa", size = 15055382, upload-time = "2025-08-19T19:37:04.029Z" },
{ url = "https://files.pythonhosted.org/packages/0d/4b/a604a99fcf358fce51dde4d4a6e9937e8a3168a4e44ec65c7a254af588a8/docling_parse-4.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b564f328688104d2e6048510b36e746b2fb13202e2c0cb55233b103e3cff95bb", size = 15127891, upload-time = "2025-08-19T19:37:06.199Z" },
{ url = "https://files.pythonhosted.org/packages/7f/50/b4451871273bafb3fe1cea64be334b85b8c1a4f52062a02b6bbbda8bb58d/docling_parse-4.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:7c0af6f6d4d4d7e4650f6a09b28a958a7ad0061498f4e0cb26b443a354b24fff", size = 16050206, upload-time = "2025-08-19T19:37:08.378Z" },
{ url = "https://files.pythonhosted.org/packages/0d/b1/d7510c2b042b219b06a3d838a3f6db744c2d8e75ced2652da61fca05ff23/docling_parse-4.2.2-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:0929976fe0b63e6df533b1554a8e62e6a29049eafd193c623c3eb3a07e77a2a0", size = 14730239, upload-time = "2025-08-19T19:37:10.341Z" },
{ url = "https://files.pythonhosted.org/packages/56/34/60fe467fb0f10f279365f2328da942585bc136c154d59cf97076428ccdf6/docling_parse-4.2.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:8835a8a1c79fcbcf32a056326c268b09d0f23d928be7f55cf025c722b08c04d6", size = 14605845, upload-time = "2025-08-19T19:37:12.665Z" },
{ url = "https://files.pythonhosted.org/packages/c6/7c/282aff6982c1f87e62303db552ae5d4f38498abd319f1041af7097f2a773/docling_parse-4.2.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96ac47554d17cc7bc89b5a2a577f98ff78530d262f40ddc1a5836dc5c5a7d576", size = 15056220, upload-time = "2025-08-19T19:37:14.998Z" },
{ url = "https://files.pythonhosted.org/packages/48/fe/2abb3d5e9927e7b3d8f3a46fee02ec7ba4e9984ab78dfa444a824b8a5e5d/docling_parse-4.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:178591af44bf1f9b58035831ebd7938dd24bca28faa08c8aa5196c047b460818", size = 15128395, upload-time = "2025-08-19T19:37:16.826Z" },
{ url = "https://files.pythonhosted.org/packages/d5/02/1cc62f48c8cb1ce7c4848083c7f52caba43b71bdc15b3ff7ab5e0189ece7/docling_parse-4.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:887799977285a92d4e7b2e0716fca0b6a03305cb7c9ee81ec1355b55c76318c2", size = 16051537, upload-time = "2025-08-19T19:37:19.002Z" },
{ url = "https://files.pythonhosted.org/packages/b1/7c/530e9e6d3e7fe459c7467b2c83e2625b863a18ee06c104c4c8ba5fd5a2c2/docling_parse-4.2.2-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:c6687d7e8ef2e01c16da5c73d5698944d9f06d565a7ca0f102023009d3583873", size = 14732026, upload-time = "2025-08-19T19:37:20.919Z" },
{ url = "https://files.pythonhosted.org/packages/a7/c4/cb76ad93828c0ed4d97a274673e8cb58804783b77f618c9924bcb862e693/docling_parse-4.2.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:313cc94186c5555ac668c87904fc7149b48e39c885173a60bb53c024058ea58a", size = 14606481, upload-time = "2025-08-19T19:37:23.008Z" },
{ url = "https://files.pythonhosted.org/packages/bc/17/32cd0dc22ef433777351e01a3322896ae998b4dbebe6c34e1787d0ddb7bf/docling_parse-4.2.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65ccb287d04fb5d599bc0524951db8846e216a14e2c229046947714cab57bdc3", size = 15055328, upload-time = "2025-08-19T19:37:25.214Z" },
{ url = "https://files.pythonhosted.org/packages/20/10/ea0d4e356744c19caa2f5e8f854dfb6f0fdaeb95bdc34477c6584e2db502/docling_parse-4.2.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b572c992b1934ac718ece4cfaa615e081d083136eb04fbcf57ff4e3963c48c0", size = 15128358, upload-time = "2025-08-19T19:37:27.001Z" },
{ url = "https://files.pythonhosted.org/packages/2a/e8/2032d4f8c712b1d21234bcebaee5a5df39be8920daa89d0fbf2abcd222d5/docling_parse-4.2.2-cp312-cp312-win_amd64.whl", hash = "sha256:8dd872f1d7e786b973f7b441c92cf0f015e083bc43cb3c415dbf1e94ad5b7204", size = 16052981, upload-time = "2025-08-19T19:37:28.964Z" },
{ url = "https://files.pythonhosted.org/packages/63/53/1b6e2fd0f71b1089a845bd0127a535a13777273bea4055655f730760d6e4/docling_parse-4.2.2-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:f5334af2f773c14e9456557679103b9787975e3a04bf4d8dcb72205d89bc8c05", size = 14732242, upload-time = "2025-08-19T19:37:30.807Z" },
{ url = "https://files.pythonhosted.org/packages/7c/dd/d00c8aa5cddbbf961cf886006f88503eca7c92b880feb7af4869be62eed3/docling_parse-4.2.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:db99d7af2903ed2510225e1cb89d85cc818cf227021321d05744a86b051586de", size = 14606485, upload-time = "2025-08-19T19:37:32.988Z" },
{ url = "https://files.pythonhosted.org/packages/79/fd/8b01cac7657a0ba0661a921adac54e889d4bfc53f62f11e462e0ab520716/docling_parse-4.2.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81df79404007bc4d6f6e9fafdb93dafc9b87fd6ed33f8c26dca0b9e92e9e65c3", size = 15055143, upload-time = "2025-08-19T19:37:35.186Z" },
{ url = "https://files.pythonhosted.org/packages/0c/15/2a4d27468021faee688ba72de1a780ceed9f8e70c1354907bfff8a609a4e/docling_parse-4.2.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a1a73dcaf6cad4e379f85f0f9aa53c22a301cf31534db49a6422834ecd66144d", size = 15128822, upload-time = "2025-08-19T19:37:37.274Z" },
{ url = "https://files.pythonhosted.org/packages/55/f9/91f45fdffe04daa8f9540070ab83438957adac29552a6237f0ebe87c3f13/docling_parse-4.2.2-cp313-cp313-win_amd64.whl", hash = "sha256:c23c32811ce19d9a3b5ba670c6877c736e81373b5de12852bfba1949b35000bc", size = 16053182, upload-time = "2025-08-19T19:37:39.483Z" },
{ url = "https://files.pythonhosted.org/packages/b5/ec/987b00650ad2b4619d8e304e0f7f079cd93a2ab23fa4bfda9c80a3d68408/docling_parse-4.2.2-cp39-cp39-macosx_13_0_x86_64.whl", hash = "sha256:b3e09092e1322ac12f0b961b5fc559e27580fe40c5f12a23260e6d6f9618a7ac", size = 14729007, upload-time = "2025-08-19T19:37:41.748Z" },
{ url = "https://files.pythonhosted.org/packages/7d/4b/3f3f4b7a6abd236ff4b43020d9f83c13099b072775d54a51458c07ed6a28/docling_parse-4.2.2-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:b9d8fb0a566eb08b9c03643e4ddf6c679770ade76c2ceb61d2b655d38055c227", size = 14605011, upload-time = "2025-08-19T19:37:43.571Z" },
{ url = "https://files.pythonhosted.org/packages/53/09/eb7702b5d783949ac73a03be861374225b8376d172a06b5b10395f957554/docling_parse-4.2.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88fdec04f83992d9efd7b808f7ed4d6a3be29c6c5bb674876a3d2612f956d96a", size = 15055659, upload-time = "2025-08-19T19:37:45.816Z" },
{ url = "https://files.pythonhosted.org/packages/5a/71/e789ea939589da9c6dd790ad0fa982c2f01220ba6614b03bcdeaf6f4314a/docling_parse-4.2.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc54c4fbd0ba63c60c371bead3da0f6826465d2b97c852ee370bfe9616e07b6a", size = 15127878, upload-time = "2025-08-19T19:37:48.173Z" },
{ url = "https://files.pythonhosted.org/packages/c4/e3/6000cec59ad34e5f0566167f6b400df1ffa4f399388424dd601953be36fa/docling_parse-4.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:fde9850d06ac224e74f66967d85595d01fbcaccbc001b6ab08ab7baca19128fd", size = 16050052, upload-time = "2025-08-19T19:37:49.97Z" },
{ url = "https://files.pythonhosted.org/packages/da/6a/698b05aef5f91c90240a04b723edd4ab5b826a727df8bc05014bf05414c2/docling_parse-4.2.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:7b29e38609385ff66248390f7d5711f5b59bcbfee76cd50dacc5a5eff70a4424", size = 17885860, upload-time = "2025-08-19T19:37:51.895Z" },
{ url = "https://files.pythonhosted.org/packages/94/2e/fac52c90abad22c57d282447c04511cb4eafb0dc4853280b521b46575fd1/docling_parse-4.2.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:5feda6387f1f4168998636ed4830dba4d300e59803035e73fc9b069b6129a5f0", size = 17888605, upload-time = "2025-08-19T19:37:54.092Z" },
{ url = "https://files.pythonhosted.org/packages/25/60/6866247a3368f4ff441473f57a99cdede924a672f21f784208fb1b6533f1/docling_parse-4.2.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:9720c7e1341765c7fc3683661c6eea5eab3854d0e2e282a2210fd460cda61ad4", size = 17885806, upload-time = "2025-08-19T19:37:56.088Z" },
]
[[package]]