| # Provider Interface | |
| Providers live under `apps/api/app/providers`. | |
| - `llm/base.py`: reasoning provider for GLM-5.2 or another OpenAI-compatible model. | |
| - `vision/base.py`: visual grounding provider for GLM-5V-Turbo or another grounding-capable model. | |
| - `ocr/base.py`: OCR provider for GLM-OCR or another structured OCR service. | |
| Lenses depend on interfaces, not concrete providers. Test mode uses deterministic fakes and makes no external API calls. | |