diff --git a/web-app/src/containers/DropdownModelProvider.tsx b/web-app/src/containers/DropdownModelProvider.tsx index 3e77bad74..5fb332687 100644 --- a/web-app/src/containers/DropdownModelProvider.tsx +++ b/web-app/src/containers/DropdownModelProvider.tsx @@ -8,7 +8,7 @@ import { useModelProvider } from '@/hooks/useModelProvider' import { cn, getProviderTitle } from '@/lib/utils' import { highlightFzfMatch } from '@/utils/highlight' import Capabilities from './Capabilities' -import { IconSettings, IconX, IconCheck } from '@tabler/icons-react' +import { IconSettings, IconX } from '@tabler/icons-react' import { useNavigate } from '@tanstack/react-router' import { route } from '@/constants/routes' import { useThreads } from '@/hooks/useThreads' @@ -149,8 +149,19 @@ const DropdownModelProvider = ({ model }: DropdownModelProviderProps) => { const groupedItems = useMemo(() => { const groups: Record = {} + if (!searchValue) { + // When not searching, show all active providers (even without models) + providers.forEach((provider) => { + if (provider.active) { + groups[provider.provider] = [] + } + }) + } + + // Add the filtered items to their respective groups filteredItems.forEach((item) => { const providerKey = item.provider.provider + console.log(providerKey, 'providerKey') if (!groups[providerKey]) { groups[providerKey] = [] } @@ -158,7 +169,7 @@ const DropdownModelProvider = ({ model }: DropdownModelProviderProps) => { }) return groups - }, [filteredItems]) + }, [filteredItems, providers, searchValue]) const handleSelect = useCallback( (searchableModel: SearchableModel) => { @@ -213,14 +224,14 @@ const DropdownModelProvider = ({ model }: DropdownModelProviderProps) => { -
+
{/* Search input */}
{ const providerInfo = providers.find( (p) => p.provider === providerKey ) + if (!providerInfo) return null return ( @@ -287,48 +299,49 @@ const DropdownModelProvider = ({ model }: DropdownModelProviderProps) => {
{/* Models for this provider */} - {models.map((searchableModel) => { - const isSelected = - selectedModel?.id === searchableModel.model.id && - selectedProvider === searchableModel.provider.provider - const capabilities = - searchableModel.model.capabilities || [] + {models.length === 0 ? ( + // Show message when provider has no available models + <> + ) : ( + models.map((searchableModel) => { + const isSelected = + selectedModel?.id === searchableModel.model.id && + selectedProvider === + searchableModel.provider.provider + const capabilities = + searchableModel.model.capabilities || [] - return ( -
handleSelect(searchableModel)} - className={cn( - 'mx-1 mb-1 px-2 py-1.5 rounded cursor-pointer flex items-center gap-2 transition-all duration-200', - 'hover:bg-main-view-fg/10', - isSelected && 'bg-main-view-fg/15' - )} - > -
- - {isSelected && ( - handleSelect(searchableModel)} + className={cn( + 'mx-1 mb-1 px-2 py-1.5 rounded cursor-pointer flex items-center gap-2 transition-all duration-200', + 'hover:bg-main-view-fg/10', + isSelected && 'bg-main-view-fg/15' + )} + > +
+ - )} -
- {capabilities.length > 0 && ( -
- -
- )} + +
+ {capabilities.length > 0 && ( +
+ +
+ )} +
-
- ) - })} + ) + }) + )}
) })}