From a8826afdf3683cf5c73949407ad08be88065c6a9 Mon Sep 17 00:00:00 2001 From: Aleksander Grygier Date: Sat, 15 Aug 2026 22:53:18 +0200 Subject: [PATCH] ui : show reasoning and modality icons on model options and search by modality --- .../app/badges/BadgesModality.svelte | 4 +- .../lib/components/app/models/ModelId.svelte | 110 ++++++++++++++---- .../app/models/ModelsSelectorOption.svelte | 4 + .../ui/src/lib/components/app/models/utils.ts | 21 +++- 4 files changed, 111 insertions(+), 28 deletions(-) diff --git a/tools/ui/src/lib/components/app/badges/BadgesModality.svelte b/tools/ui/src/lib/components/app/badges/BadgesModality.svelte index 4eb3e7838d..89a7a1f4ff 100644 --- a/tools/ui/src/lib/components/app/badges/BadgesModality.svelte +++ b/tools/ui/src/lib/components/app/badges/BadgesModality.svelte @@ -1,5 +1,5 @@
diff --git a/tools/ui/src/lib/components/app/models/utils.ts b/tools/ui/src/lib/components/app/models/utils.ts index b78e7085b7..06b8b94247 100644 --- a/tools/ui/src/lib/components/app/models/utils.ts +++ b/tools/ui/src/lib/components/app/models/utils.ts @@ -1,4 +1,5 @@ import type { ModelOption } from '$lib/types/models'; +import { ModelModality } from '$lib/enums'; import { SvelteMap } from 'svelte/reactivity'; export interface ModelItem { @@ -17,6 +18,23 @@ export interface GroupedModelOptions { available: OrgGroup[]; } +function matchesModality(option: ModelOption, term: string): boolean { + const modalities = option.modalities; + + if (!modalities) return false; + + switch (term) { + case ModelModality.VISION.toLowerCase(): + return modalities.vision; + case ModelModality.AUDIO.toLowerCase(): + return modalities.audio; + case ModelModality.VIDEO.toLowerCase(): + return modalities.video; + default: + return false; + } +} + export function filterModelOptions(options: ModelOption[], searchTerm: string): ModelOption[] { const term = searchTerm.trim().toLowerCase(); @@ -27,7 +45,8 @@ export function filterModelOptions(options: ModelOption[], searchTerm: string): option.model.toLowerCase().includes(term) || option.name?.toLowerCase().includes(term) || option.aliases?.some((alias: string) => alias.toLowerCase().includes(term)) || - option.tags?.some((tag: string) => tag.toLowerCase().includes(term)) + option.tags?.some((tag: string) => tag.toLowerCase().includes(term)) || + matchesModality(option, term) ); }