Adds the two Protocol-based client contracts the pipeline steps depend on, plus test-oriented fakes. Real engines (Surya, Ollama) land in Chunk 4. - ix.ocr.client.OCRClient — runtime_checkable Protocol with async ocr(). - ix.genai.client.GenAIClient — runtime_checkable Protocol with async invoke(); GenAIInvocationResult + GenAIUsage dataclasses carry the parsed model, token usage, and model name. - FakeOCRClient / FakeGenAIClient: return canned results; both expose a raise_on_call hook for error-path tests. 8 unit tests across tests/unit/test_ocr_fake.py + test_genai_fake.py confirm protocol conformance, canned-return behaviour, usage/model-name defaults, and raise_on_call propagation. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
13 lines
372 B
Python
13 lines
372 B
Python
"""OCR subsystem: protocol + fake client.
|
|
|
|
Real engines (Surya, Azure DI, …) plug in behind :class:`OCRClient`. The
|
|
MVP ships only :class:`FakeOCRClient` from this package; the real Surya
|
|
client lands in Chunk 4.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from ix.ocr.client import OCRClient
|
|
from ix.ocr.fake import FakeOCRClient
|
|
|
|
__all__ = ["FakeOCRClient", "OCRClient"]
|