feat: enable precision control in float serialization (#1914)

* chore: propagate precision control in float serialization

Signed-off-by: Panos Vagenas <pva@zurich.ibm.com>

* parametrize float serialization, propagate core updates

Signed-off-by: Panos Vagenas <pva@zurich.ibm.com>

* update test float precision

Signed-off-by: Panos Vagenas <pva@zurich.ibm.com>

* repin docling-core

Signed-off-by: Panos Vagenas <pva@zurich.ibm.com>

---------

Signed-off-by: Panos Vagenas <pva@zurich.ibm.com>
This commit is contained in:
Panos Vagenas
2025-07-09 16:39:17 +02:00
committed by GitHub
parent 931eb55b88
commit ec588df971
44 changed files with 364257 additions and 368422 deletions

View File

@@ -12,6 +12,7 @@ from docling_core.types.doc import (
Size,
TableCell,
)
from docling_core.types.doc.base import PydanticSerCtxKey, round_pydantic_float
from docling_core.types.doc.page import SegmentedPdfPage, TextCell
from docling_core.types.io import (
DocumentStream,
@@ -19,7 +20,14 @@ from docling_core.types.io import (
# DO NOT REMOVE; explicitly exposed from this location
from PIL.Image import Image
from pydantic import BaseModel, ConfigDict, Field, computed_field
from pydantic import (
BaseModel,
ConfigDict,
Field,
FieldSerializationInfo,
computed_field,
field_serializer,
)
if TYPE_CHECKING:
from docling.backend.pdf_backend import PdfPageBackend
@@ -142,6 +150,10 @@ class Cluster(BaseModel):
cells: List[TextCell] = []
children: List["Cluster"] = [] # Add child cluster support
@field_serializer("confidence")
def _serialize(self, value: float, info: FieldSerializationInfo) -> float:
return round_pydantic_float(value, info.context, PydanticSerCtxKey.CONFID_PREC)
class BasePageElement(BaseModel):
label: DocItemLabel
@@ -194,6 +206,16 @@ class FigureElement(BasePageElement):
predicted_class: Optional[str] = None
confidence: Optional[float] = None
@field_serializer("confidence")
def _serialize(
self, value: Optional[float], info: FieldSerializationInfo
) -> Optional[float]:
return (
round_pydantic_float(value, info.context, PydanticSerCtxKey.CONFID_PREC)
if value is not None
else None
)
class FigureClassificationPrediction(BaseModel):
figure_count: int = 0