Files
OmniRoute/tests/unit
Diego Rodrigues de Sa e Souza 98ba6e192a fix(dashboard): show custom vision models in LLM selector
A custom chat model registered via the dashboard with the
`supportsVision: true` flag (persisted by addCustomModel /
replaceCustomModels in src/lib/db/models.ts since #4264) now surfaces
`capabilities.vision: true` in `/v1/models`, so the LLM selector and
downstream vision routing treat it as vision-capable. Previously the
`/v1/models` catalog only checked the conservative id-based
`isVisionModelId` heuristic and ignored the explicit per-model flag, so
a custom model whose id did not match the heuristic (e.g.
`my-vision-llm`) appeared as text-only even when explicitly marked
vision in the dashboard.

The two custom-chat-model emission sites (alias and canonical) now call
the new pure exported helper `getCustomVisionCapabilityFields` which:

 - returns vision fields when `entry.supportsVision === true`, OR
 - falls back to the existing id-based heuristic for backwards-compat,
 - respects an explicit `supportsVision === false` as a downgrade
   override (same anti-false-positive discipline as #4071 / #4072).

`CustomModelEntry` gains the `supportsVision?: boolean` field already
present on the persistence layer.

Covered by tests/unit/llm-selector-custom-vision-models.test.ts (5
cases: helper export, flag-true unblock, id-heuristic preserved, no
signal yields nothing, explicit-false downgrade).

Inspired-by: https://github.com/decolua/9router/commit/5e5e78d3

Co-authored-by: Sutarto Jordan Chrisfivo <Jordannst@users.noreply.github.com>
2026-06-23 22:03:55 -03:00
..
2026-05-23 01:46:59 -03:00
2026-06-23 03:08:29 -03:00
2026-06-17 19:26:32 -03:00
2026-06-20 14:55:24 -03:00
2026-06-23 17:06:18 -03:00
2026-06-20 07:09:43 -03:00
2026-06-11 18:52:29 -03:00
2026-06-23 03:08:29 -03:00
2026-06-23 17:06:18 -03:00
2026-06-20 07:09:43 -03:00
2026-06-23 17:06:18 -03:00
2026-05-21 01:29:12 -03:00
2026-06-09 22:57:12 -03:00
2026-06-11 04:01:24 -03:00
2026-06-17 02:43:21 -03:00
2026-06-17 19:26:32 -03:00
2026-06-15 03:32:11 -03:00
2026-06-20 14:55:24 -03:00
2026-06-23 03:08:29 -03:00
2026-05-23 01:46:59 -03:00
2026-06-21 08:56:51 -03:00
2026-06-23 17:06:18 -03:00
2026-04-19 19:50:30 -03:00
2026-05-29 12:44:29 -03:00
2026-06-12 23:49:22 -03:00
2026-06-11 04:01:24 -03:00
2026-06-06 19:13:11 -03:00
2026-06-23 17:06:18 -03:00
2026-06-13 17:27:40 -03:00
2026-06-19 06:49:01 -03:00
2026-05-26 23:51:47 -03:00
2026-05-29 12:44:29 -03:00
2026-05-26 23:51:47 -03:00
2026-05-26 23:51:47 -03:00
2026-05-29 12:44:29 -03:00
2026-05-21 01:29:12 -03:00
2026-05-24 18:05:58 -03:00
2026-06-17 19:26:32 -03:00
2026-05-26 23:51:47 -03:00
2026-06-12 23:49:22 -03:00
2026-06-22 03:17:02 -03:00
2026-06-17 19:26:32 -03:00
2026-06-13 17:27:40 -03:00
2026-06-16 01:00:40 -03:00
2026-06-21 08:56:51 -03:00
2026-05-26 23:51:47 -03:00
2026-06-21 08:56:51 -03:00
2026-06-23 03:08:29 -03:00
2026-05-29 12:44:29 -03:00
2026-06-12 23:49:22 -03:00
2026-05-26 23:51:47 -03:00
2026-05-24 18:05:58 -03:00
2026-05-26 23:51:47 -03:00
2026-05-29 12:44:29 -03:00
2026-05-26 23:51:47 -03:00
2026-05-10 00:55:06 -03:00
2026-06-23 17:06:18 -03:00
2026-05-26 23:51:47 -03:00
2026-06-13 17:27:40 -03:00
2026-05-29 12:44:29 -03:00
2026-06-12 23:49:22 -03:00
2026-06-22 03:17:02 -03:00
2026-05-21 01:29:12 -03:00
2026-04-30 01:27:03 -03:00
2026-04-30 01:27:03 -03:00
2026-05-26 23:51:47 -03:00
2026-06-23 17:06:18 -03:00
2026-05-10 00:55:06 -03:00
2026-05-26 23:51:47 -03:00
2026-04-30 14:08:50 -03:00
2026-06-11 04:01:24 -03:00
2026-06-20 14:55:24 -03:00
2026-06-20 07:09:43 -03:00
2026-06-17 02:43:21 -03:00
2026-06-12 23:49:22 -03:00
2026-05-26 23:51:47 -03:00
2026-06-15 03:32:11 -03:00
2026-06-19 06:49:01 -03:00
2026-05-26 23:51:47 -03:00
2026-05-26 23:51:47 -03:00
2026-06-10 13:49:08 -03:00
2026-06-19 06:49:01 -03:00
2026-06-20 14:55:24 -03:00
2026-06-22 03:17:02 -03:00
2026-05-23 01:46:59 -03:00
2026-06-19 06:49:01 -03:00
2026-06-20 07:09:43 -03:00
2026-04-30 01:27:03 -03:00
2026-06-22 03:17:02 -03:00
2026-06-19 06:49:01 -03:00
2026-06-12 23:49:22 -03:00
2026-06-12 23:49:22 -03:00
2026-06-11 18:52:29 -03:00
2026-04-30 01:27:03 -03:00
2026-05-26 23:51:47 -03:00
2026-06-17 02:43:21 -03:00
2026-05-23 01:46:59 -03:00
2026-05-23 01:46:59 -03:00
2026-06-09 15:56:24 -03:00
2026-06-10 13:49:08 -03:00
2026-05-29 19:54:00 -03:00
2026-06-19 06:49:01 -03:00
2026-06-17 19:26:32 -03:00
2026-06-13 17:27:40 -03:00
2026-06-17 02:43:21 -03:00
2026-05-24 18:05:58 -03:00
2026-05-24 18:05:58 -03:00
2026-06-07 07:20:02 -03:00
2026-04-28 20:46:25 -03:00
2026-05-29 12:44:29 -03:00
2026-05-29 12:44:29 -03:00
2026-06-19 06:49:01 -03:00
2026-06-12 23:49:22 -03:00
2026-06-23 03:08:29 -03:00
2026-05-26 23:51:47 -03:00
2026-06-12 23:49:22 -03:00
2026-06-20 07:09:43 -03:00
2026-06-13 17:27:40 -03:00
2026-06-21 08:56:51 -03:00
2026-06-16 01:00:40 -03:00
2026-05-26 23:51:47 -03:00
2026-06-16 01:00:40 -03:00
2026-05-26 23:51:47 -03:00
2026-06-04 20:05:38 -03:00
2026-06-12 23:49:22 -03:00
2026-05-29 12:44:29 -03:00
2026-06-20 07:09:43 -03:00
2026-06-19 06:49:01 -03:00
2026-06-07 07:20:02 -03:00
2026-06-11 04:01:24 -03:00
2026-06-22 03:17:02 -03:00
2026-05-24 18:05:58 -03:00
2026-05-26 23:51:47 -03:00
2026-06-12 23:49:22 -03:00
2026-06-16 01:00:40 -03:00
2026-06-12 23:49:22 -03:00
2026-06-12 23:49:22 -03:00
2026-06-16 01:00:40 -03:00