fegger 081084816b Improve VLM client lifecycle, retries, metrics, and cache keys
- 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.
2026-08-21 16:44:14 +02:00

odoo_ocr

Local-first invoice OCR pipeline that reads scanned, printed, handwritten, and native-PDF invoices and produces Odoo Enterprise-ready XML.

Quick start

  1. Install dependencies:

    uv sync --all-extras
    # or
    pip install -e ".[dev]"
    
  2. Configure config.yaml or set environment variables:

    export OLLAMA_BASE_URL="http://100.103.83.12:11435"
    
  3. Run the pipeline:

    odoo-ocr process /path/to/invoices --output ./out/
    

Architecture

Input File
  → Classifier (heuristic + small VLM)
    → Branch: digital_pdf      → text/layout extraction
    → Branch: scanned_print    → preprocess → VLM OCR
    → Branch: handwritten      → preprocess → GLM-OCR
    → Branch: mixed_unknown    → preprocess → ensemble OCR
      → Structured Extraction VLM
      → Review VLM (image vs extracted JSON)
        → Confidence check
          → XML Builder
            → Odoo XML + sidecar JSON

Project-specific agent skills

Agent skills are in .agents/skills/:

  • odoo-ocr-pipeline — classifier, branches, extraction, review.
  • odoo-xml-import — generating and validating Odoo XML.
  • local-vlm-client — Ollama/llama.cpp VLM clients and prompts.
S
Description
No description provided
Readme 157 KiB
Languages
Python 99.5%
Shell 0.5%