mirror of
https://github.com/DS4SD/docling.git
synced 2025-12-08 20:58:11 +00:00
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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user