Utility for converting document class JSON schemas to Docling extraction templates.
The DocumentClassUtils class provides methods to:
line_itemsfrom docpipe.utils.document_class_utils import generate_docling_template
# Generate template from document class
template = generate_docling_template(
"src/docpipe/utils/document_classes/invoice.json"
)
# Result:
# {
# "invoice_number": "string",
# "invoice_date": "string",
# "customer_name": "string",
# "sub_total": "float",
# "tax": "float",
# "total": "float",
# "line_items": {
# "amount": "float",
# "description": "string",
# "quantity": "int"
# }
# }
from docpipe.utils.document_class_utils import generate_docling_template
from docpipe.core.operators.extract.extract_operator import ExtractOperator
# Generate template
template = generate_docling_template(
"src/docpipe/utils/document_classes/invoice.json"
)
# Configure operator
config = {
"doc_column": "content",
"doc_id_hash": "doc_id_hash",
"use_template": True,
"template": template,
"expand_extracted_data": True # Creates individual columns
}
operator = ExtractOperator(config)
result_tables, metadata = operator.transform(input_table)
from common.util.document_class_utils import DocumentClassUtils
# Without nested fields
template = DocumentClassUtils.generate_docling_template(
doc_class_path="path/to/invoice.json",
include_nested=False # Excludes line_items
)
# Limit number of fields
template = DocumentClassUtils.generate_docling_template(
doc_class_path="path/to/invoice.json",
max_fields=10 # Only first 10 fields
)
# Get template with examples
result = DocumentClassUtils.generate_template_with_examples(
doc_class_path="path/to/invoice.json"
)
# Returns:
# {
# "template": {...},
# "examples": {"invoice_number": ["INV-2024-001"], ...},
# "descriptions": {"invoice_number": "unique identifier...", ...},
# "document_type": "Invoice",
# "document_description": "An invoice is..."
# }
from common.util.document_class_utils import DocumentClassUtils
# List all document classes
doc_classes = DocumentClassUtils.list_available_document_classes()
for dc in doc_classes:
print(f"{dc['name']}: {dc['description']}")
The utility maps document class types to Docling types:
| Document Class Type | Docling Type |
|---|---|
string |
string |
date |
string |
decimal |
float |
float |
float |
long |
int |
int |
int |
boolean |
boolean |
document.fieldstarget_tables sectionline_itemsDocument classes follow this structure:
{
"document_class_name": "Invoice",
"document_class_schema": {
"document": {
"fields": [
{
"name": "invoice_number",
"examples": ["INV-2024-001"],
"description": "unique identifier..."
}
]
},
"target_tables": [
{
"name": "Invoice",
"columns": [
{
"name": "invoice_number",
"type": "string",
"source": {"field": ["invoice_number"]}
}
]
}
]
}
}
See examples/generate_docling_template_example.py for a complete working example.
Run tests with:
# From project root
source .venv/bin/activate
uv run pytest tests/unit/common/util/test_document_class_utils.py -v
generate_docling_template(doc_class_path, include_nested=True, max_fields=None)Convenience function to generate template.
Parameters:
doc_class_path: Path to document class JSON fileinclude_nested: Include nested fields (default: True)max_fields: Maximum number of fields (default: None/all)Returns: Dictionary with field names and types
DocumentClassUtils.generate_template_with_examples(doc_class_path, include_nested=True)Generate template with examples and descriptions.
Returns: Dictionary with template, examples, descriptions, and metadata
DocumentClassUtils.list_available_document_classes(doc_classes_dir=None)List all available document class files.
Returns: List of dictionaries with document class info