Source code for churro_ocr.templates.hf
"""Built-in OCR templates."""
from __future__ import annotations
from dataclasses import dataclass
from churro_ocr.page_detection import DocumentPage
from churro_ocr.templates.base import OCRConversation
[docs]
@dataclass(slots=True, frozen=True)
class HFChatTemplate:
"""Template for processor/tokenizer chat-template OCR models.
:param system_message: Optional system message prepended to the conversation.
:param user_prompt: Optional user-side text prompt appended with the image.
:param include_image: Whether to include the page image in the user message.
"""
system_message: str | None = None
user_prompt: str | None = None
include_image: bool = True
[docs]
def build_conversation(self, page: DocumentPage) -> OCRConversation:
"""Build a structured multimodal conversation for one OCR page.
:param page: Page to represent in the conversation.
:returns: Conversation payload suitable for chat-template OCR models.
"""
conversation: OCRConversation = []
if self.system_message:
conversation.append(
{
"role": "system",
"content": [{"type": "text", "text": self.system_message}],
}
)
user_content: list[dict[str, object]] = []
if self.include_image:
user_content.append({"type": "image", "image": page.image.copy()})
if self.user_prompt:
user_content.append({"type": "text", "text": self.user_prompt})
conversation.append({"role": "user", "content": user_content})
return conversation
__all__ = ["HFChatTemplate"]