Files
Stirling-PDF/engine/src/stirling/models/tool_models.py
T
James BruntonandGitHub e10c5f6283 Redesign Python AI engine (#5991)
# Description of Changes
Redesign the Python AI engine to be properly agentic and make use of
`pydantic-ai` instead of `langchain` for correctness and ergonomics.
This should be a good foundation for us to build our AI engine on going
forwards.
2026-03-26 10:35:47 +00:00

440 lines
12 KiB
Python

# AUTO-GENERATED FILE. DO NOT EDIT.
# Generated by scripts/generate_tool_models.py from frontend TypeScript sources.
from __future__ import annotations
from enum import StrEnum
from typing import Any, Literal
from stirling.models.base import ApiModel
class AddAttachmentsParams(ApiModel):
attachments: list[dict[str, Any]] = []
class AdjustContrastParams(ApiModel):
blue: float = 100
brightness: float = 100
contrast: float = 100
green: float = 100
red: float = 100
saturation: float = 100
class AutoRenameParams(ApiModel):
use_first_text_as_fallback: bool = False
class AutomateParams(ApiModel):
pass
class BookletImpositionParams(ApiModel):
add_border: bool = False
add_gutter: bool = False
double_sided: bool = True
duplex_pass: Literal["BOTH", "FIRST", "SECOND"] = "BOTH"
flip_on_short_edge: bool = False
gutter_size: float = 12
pages_per_sheet: float = 2
spine_location: Literal["LEFT", "RIGHT"] = "LEFT"
class CertSignParams(ApiModel):
cert_file: dict[str, Any] | None = None
cert_type: Literal["", "PEM", "PKCS12", "PFX", "JKS"] = ""
jks_file: dict[str, Any] | None = None
location: str = ""
name: str = ""
p12_file: dict[str, Any] | None = None
page_number: float = 1
password: str = ""
private_key_file: dict[str, Any] | None = None
reason: str = ""
show_logo: bool = True
show_signature: bool = False
sign_mode: Literal["MANUAL", "AUTO"] = "MANUAL"
class ChangeMetadataParams(ApiModel):
author: str = ""
creation_date: str | None = None
creator: str = ""
custom_metadata: list[dict[str, str]] = []
delete_all: bool = False
keywords: str = ""
modification_date: str | None = None
producer: str = ""
subject: str = ""
title: str = ""
trapped: Literal["True", "False", "Unknown"] | None = None
class ChangePermissionsParams(ApiModel):
prevent_assembly: bool = False
prevent_extract_content: bool = False
prevent_extract_for_accessibility: bool = False
prevent_fill_in_form: bool = False
prevent_modify: bool = False
prevent_modify_annotations: bool = False
prevent_printing: bool = False
prevent_printing_faithful: bool = False
class AddPasswordParams(ApiModel):
key_length: float = 128
owner_password: str = ""
password: str = ""
permissions: ChangePermissionsParams = ChangePermissionsParams.model_validate(
{
"preventAssembly": False,
"preventExtractContent": False,
"preventExtractForAccessibility": False,
"preventFillInForm": False,
"preventModify": False,
"preventModifyAnnotations": False,
"preventPrinting": False,
"preventPrintingFaithful": False,
}
)
class CompressParams(ApiModel):
compression_level: float = 5
compression_method: Literal["quality", "filesize"] = "quality"
expected_size: str = ""
file_size_unit: Literal["KB", "MB"] = "MB"
file_size_value: str = ""
grayscale: bool = False
class ConvertParams(ApiModel):
cbz_options: dict[str, bool] = {"optimizeForEbook": False}
cbz_output_options: dict[str, float] = {"dpi": 150}
email_options: dict[str, Any] = {
"includeAttachments": True,
"maxAttachmentSizeMB": 10,
"downloadHtml": False,
"includeAllRecipients": False,
}
from_extension: str = ""
html_options: dict[str, float] = {"zoomLevel": 1}
image_options: dict[str, Any] = {
"colorType": "color",
"dpi": 300,
"singleOrMultiple": "multiple",
"fitOption": "maintainAspectRatio",
"autoRotate": True,
"combineImages": True,
}
is_smart_detection: bool = False
pdfa_options: dict[str, str] = {"outputFormat": "pdfa-1"}
smart_detection_type: Literal["mixed", "images", "web", "none"] = "none"
to_extension: str = ""
class CropParams(ApiModel):
crop_area: dict[str, float] = {"x": 0, "y": 0, "width": 595, "height": 842}
class EditTableOfContentsParams(ApiModel):
bookmarks: list[dict[str, Any]] = []
replace_existing: bool = True
class ExtractImagesParams(ApiModel):
allow_duplicates: bool = False
format: Literal["png", "jpg", "gif"] = "png"
class ExtractPagesParams(ApiModel):
page_numbers: str = ""
class FlattenParams(ApiModel):
flatten_only_forms: bool = False
class MergeParams(ApiModel):
generate_table_of_contents: bool = False
remove_digital_signature: bool = False
class OcrParams(ApiModel):
additional_options: list[str] = []
languages: list[str] = []
ocr_render_type: str = "hocr"
ocr_type: str = "skip-text"
class OverlayPdfsParams(ApiModel):
counts: list[float] = []
overlay_files: list[dict[str, Any]] = []
overlay_mode: Literal["SequentialOverlay", "InterleavedOverlay", "FixedRepeatOverlay"] = "SequentialOverlay"
overlay_position: Literal[0, 1] = 0
class PageLayoutParams(ApiModel):
add_border: bool = False
pages_per_sheet: float = 4
class PdfToSinglePageParams(ApiModel):
pass
class RedactParams(ApiModel):
convert_pdfto_image: bool = True
custom_padding: float = 0.1
mode: Literal["automatic", "manual"] = "automatic"
redact_color: str = "#000000"
use_regex: bool = False
whole_word_search: bool = False
words_to_redact: list[str] = []
class RemoveAnnotationsParams(ApiModel):
pass
class RemoveBlanksParams(ApiModel):
include_blank_pages: bool = False
threshold: float = 10
white_percent: float = 99.9
class RemoveCertSignParams(ApiModel):
pass
class RemoveImageParams(ApiModel):
pass
class RemovePagesParams(ApiModel):
page_numbers: str = ""
class RemovePasswordParams(ApiModel):
password: str = ""
class ReorganizePagesParams(ApiModel):
custom_mode: str | None = None
page_numbers: str | None = None
class RepairParams(ApiModel):
pass
class ReplaceColorParams(ApiModel):
back_ground_color: str = "#ffffff"
high_contrast_color_combination: Literal[
"WHITE_TEXT_ON_BLACK", "BLACK_TEXT_ON_WHITE", "YELLOW_TEXT_ON_BLACK", "GREEN_TEXT_ON_BLACK"
] = "WHITE_TEXT_ON_BLACK"
replace_and_invert_option: Literal[
"HIGH_CONTRAST_COLOR", "CUSTOM_COLOR", "FULL_INVERSION", "COLOR_SPACE_CONVERSION"
] = "HIGH_CONTRAST_COLOR"
text_color: str = "#000000"
class RotateParams(ApiModel):
angle: float = 0
class SanitizeParams(ApiModel):
remove_embedded_files: bool = True
remove_fonts: bool = False
remove_java_script: bool = True
remove_links: bool = False
remove_metadata: bool = False
remove_xmpmetadata: bool = False
class ScalePagesParams(ApiModel):
page_size: Literal["KEEP", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "LETTER", "LEGAL"] | None = None
scale_factor: float = 1
class ScannerImageSplitParams(ApiModel):
angle_threshold: float = 10
border_size: float = 1
min_area: float = 10000
min_contour_area: float = 500
tolerance: float = 30
class SignParams(ApiModel):
font_family: str = "Helvetica"
font_size: float = 16
location: str = "Digital"
reason: str = "Document signing"
signature_data: str | None = None
signature_position: dict[str, float] | None = None
signature_type: Literal["text", "image", "canvas"] = "canvas"
signer_name: str = ""
text_color: str = "#000000"
class SplitParams(ApiModel):
allow_duplicates: bool = False
bookmark_level: str = "1"
duplex_mode: bool = False
h_div: str = "2"
include_metadata: bool = False
merge: bool = False
method: Literal[
"", "byPages", "bySections", "bySize", "byPageCount", "byDocCount", "byChapters", "byPageDivider"
] = ""
pages: str = ""
split_value: str = ""
v_div: str = "2"
class UnlockPdfformsParams(ApiModel):
pass
class WatermarkParams(ApiModel):
alphabet: str = "roman"
convert_pdfto_image: bool = False
custom_color: str = "#d3d3d3"
font_size: float = 12
height_spacer: float = 50
opacity: float = 50
rotation: float = 0
watermark_image: dict[str, Any] | None = None
watermark_text: str = ""
watermark_type: Literal["text", "image"] | None = None
width_spacer: float = 50
type ParamToolModel = (
AddAttachmentsParams
| AddPasswordParams
| AdjustContrastParams
| AutoRenameParams
| AutomateParams
| BookletImpositionParams
| CertSignParams
| ChangeMetadataParams
| ChangePermissionsParams
| CompressParams
| ConvertParams
| CropParams
| EditTableOfContentsParams
| ExtractImagesParams
| ExtractPagesParams
| FlattenParams
| MergeParams
| OcrParams
| OverlayPdfsParams
| PageLayoutParams
| PdfToSinglePageParams
| RedactParams
| RemoveAnnotationsParams
| RemoveBlanksParams
| RemoveCertSignParams
| RemoveImageParams
| RemovePagesParams
| RemovePasswordParams
| ReorganizePagesParams
| RepairParams
| ReplaceColorParams
| RotateParams
| SanitizeParams
| ScalePagesParams
| ScannerImageSplitParams
| SignParams
| SplitParams
| UnlockPdfformsParams
| WatermarkParams
)
type ParamToolModelType = type[ParamToolModel]
class OperationId(StrEnum):
ADD_ATTACHMENTS = "addAttachments"
ADD_PASSWORD = "addPassword"
ADJUST_CONTRAST = "adjustContrast"
AUTO_RENAME = "autoRename"
AUTOMATE = "automate"
BOOKLET_IMPOSITION = "bookletImposition"
CERT_SIGN = "certSign"
CHANGE_METADATA = "changeMetadata"
CHANGE_PERMISSIONS = "changePermissions"
COMPRESS = "compress"
CONVERT = "convert"
CROP = "crop"
EDIT_TABLE_OF_CONTENTS = "editTableOfContents"
EXTRACT_IMAGES = "extractImages"
EXTRACT_PAGES = "extractPages"
FLATTEN = "flatten"
MERGE = "merge"
OCR = "ocr"
OVERLAY_PDFS = "overlayPdfs"
PAGE_LAYOUT = "pageLayout"
PDF_TO_SINGLE_PAGE = "pdfToSinglePage"
REDACT = "redact"
REMOVE_ANNOTATIONS = "removeAnnotations"
REMOVE_BLANKS = "removeBlanks"
REMOVE_CERT_SIGN = "removeCertSign"
REMOVE_IMAGE = "removeImage"
REMOVE_PAGES = "removePages"
REMOVE_PASSWORD = "removePassword"
REORGANIZE_PAGES = "reorganizePages"
REPAIR = "repair"
REPLACE_COLOR = "replaceColor"
ROTATE = "rotate"
SANITIZE = "sanitize"
SCALE_PAGES = "scalePages"
SCANNER_IMAGE_SPLIT = "scannerImageSplit"
SIGN = "sign"
SPLIT = "split"
UNLOCK_PDFFORMS = "unlockPDFForms"
WATERMARK = "watermark"
OPERATIONS: dict[OperationId, ParamToolModelType] = {
OperationId.ADD_ATTACHMENTS: AddAttachmentsParams,
OperationId.ADD_PASSWORD: AddPasswordParams,
OperationId.ADJUST_CONTRAST: AdjustContrastParams,
OperationId.AUTO_RENAME: AutoRenameParams,
OperationId.AUTOMATE: AutomateParams,
OperationId.BOOKLET_IMPOSITION: BookletImpositionParams,
OperationId.CERT_SIGN: CertSignParams,
OperationId.CHANGE_METADATA: ChangeMetadataParams,
OperationId.CHANGE_PERMISSIONS: ChangePermissionsParams,
OperationId.COMPRESS: CompressParams,
OperationId.CONVERT: ConvertParams,
OperationId.CROP: CropParams,
OperationId.EDIT_TABLE_OF_CONTENTS: EditTableOfContentsParams,
OperationId.EXTRACT_IMAGES: ExtractImagesParams,
OperationId.EXTRACT_PAGES: ExtractPagesParams,
OperationId.FLATTEN: FlattenParams,
OperationId.MERGE: MergeParams,
OperationId.OCR: OcrParams,
OperationId.OVERLAY_PDFS: OverlayPdfsParams,
OperationId.PAGE_LAYOUT: PageLayoutParams,
OperationId.PDF_TO_SINGLE_PAGE: PdfToSinglePageParams,
OperationId.REDACT: RedactParams,
OperationId.REMOVE_ANNOTATIONS: RemoveAnnotationsParams,
OperationId.REMOVE_BLANKS: RemoveBlanksParams,
OperationId.REMOVE_CERT_SIGN: RemoveCertSignParams,
OperationId.REMOVE_IMAGE: RemoveImageParams,
OperationId.REMOVE_PAGES: RemovePagesParams,
OperationId.REMOVE_PASSWORD: RemovePasswordParams,
OperationId.REORGANIZE_PAGES: ReorganizePagesParams,
OperationId.REPAIR: RepairParams,
OperationId.REPLACE_COLOR: ReplaceColorParams,
OperationId.ROTATE: RotateParams,
OperationId.SANITIZE: SanitizeParams,
OperationId.SCALE_PAGES: ScalePagesParams,
OperationId.SCANNER_IMAGE_SPLIT: ScannerImageSplitParams,
OperationId.SIGN: SignParams,
OperationId.SPLIT: SplitParams,
OperationId.UNLOCK_PDFFORMS: UnlockPdfformsParams,
OperationId.WATERMARK: WatermarkParams,
}