- Shipped
- July 22, 2026 at 6:02 PM UTC
- Author
- Kamo
- Commit
- 3845553
The client field-initialized a bare `new RestTemplate()`, so no timeout applied on any AI call and no builder could reach it. A hung provider blocked the caller indefinitely — and PDF rate-sheet ingest made up to 12 sequential vision calls, previously inside an open database transaction. Connect 10s: this is an in-cluster ClusterIP hop, so a connection that will not be accepted means the service is down, not busy. Read 180s: transcribing a rendered 150-DPI page of a dense numeric grid is genuinely slow inference, and a seconds-scale timeout would abandon healthy reads and misreport them as "no provider answered" — while three minutes is past the real slow tail, so anything beyond it is a hung provider rather than a slow one. Kept as a static factory in the field initializer, so the no-arg construction used by callers and tests is unchanged and no version bump is needed.