"""Domain ports — abstract interfaces that infrastructure must implement. These protocols define what the domain NEEDS, not how it's done. Infrastructure adapters (local Docling, Docling Serve, etc.) implement these. """ from __future__ import annotations from typing import Protocol from domain.value_objects import ConversionOptions, ConversionResult class DocumentConverter(Protocol): """Port for document conversion. Any implementation (local Docling lib, remote Docling Serve, mock, etc.) must satisfy this contract. """ async def convert( self, file_path: str, options: ConversionOptions, ) -> ConversionResult: ...