- Shipped
- July 18, 2026 at 6:27 PM UTC
- Author
- Kamo
- Commit
- 0ce89dd
Two limits made org-configured vision unusable for whole classes of caller. 1. Vision was URL-ONLY. Every caller had to stand up public, provider-fetchable serving infrastructure — a signer, an unauthenticated serve endpoint, an ingress. A ClusterIP service could not use vision at all no matter what the org had configured. Adapters now is strict — a malformed data: URI falls back to URL handling, so an ordinary URL can never be turned into a broken inline part. Callers with a signed public URL are unaffected. 2. Tier selection only distinguished "exact match" from "everything else", so a LIGHT or untiered provider could outrank a configured HEAVY purely on priorityOrder — a MEDIUM request could quietly read a document with a model too weak for it. Ordering is now requested tier -> stronger tiers (strongest first) -> untiered -> weaker tiers. Under-serving is the failure that produces wrong answers, so over-serving is preferred to it. Tier stays a preference, never a filter, and priorityOrder still breaks ties. Shared by both vision and text selection, which had duplicated the old comparator. Also adds GET **************** resolved through the real routing path: MlosAiClient collapses every failure into an empty Optional, so "no provider configured" is otherwise indistinguishable from "the model erred" and nothing can tell a member which. This is what lets a UI say so.