- Adds abstract aclose() and shared load_prompt() helper to BaseVLMClient.
- OllamaClient now logs latency, tokens, and prompt hash per call.
- Retries cover HTTP 429 and 5xx in addition to network/timeout errors.
- Cache key now includes response_format and max_tokens.
- Warns when JSON schema generation falls back to plain 'json' format.
- Adds FakeVLMClient.aclose() and cache unit tests.
- Adds OcrResponse Pydantic schema for OCR branch JSON output.
- Validates invoice_date and due_date as strict ISO 8601 calendar dates.
- Adds field descriptions to InvoiceLineItem for clearer VLM prompts.
- Expands schema tests for dates, decimal coercion, negatives, and line_items_sum().
Adds the uv lockfile generated from pyproject.toml and updates
tool.mypy.python_version to 3.12 so third-party stubs parse cleanly
while keeping runtime compatibility at Python 3.11.