import React, { useMemo } from 'react'; import type { ModelSelectorProps } from '~/common'; import { ModelSelectorProvider, useModelSelectorContext } from './ModelSelectorContext'; import { ModelSelectorChatProvider } from './ModelSelectorChatContext'; import { renderModelSpecs, renderEndpoints, renderSearchResults, renderCustomGroups, } from './components'; import { getSelectedIcon, getDisplayValue } from './utils'; import { CustomMenu as Menu } from './CustomMenu'; import DialogManager from './DialogManager'; import { useLocalize } from '~/hooks'; function ModelSelectorContent() { const localize = useLocalize(); const { // LibreChat agentsMap, modelSpecs, mappedEndpoints, endpointsConfig, // State searchValue, searchResults, selectedValues, // Functions setSearchValue, setSelectedValues, // Dialog keyDialogOpen, onOpenChange, keyDialogEndpoint, } = useModelSelectorContext(); const selectedIcon = useMemo( () => getSelectedIcon({ mappedEndpoints: mappedEndpoints ?? [], selectedValues, modelSpecs, endpointsConfig, }), [mappedEndpoints, selectedValues, modelSpecs, endpointsConfig], ); const selectedDisplayValue = useMemo( () => getDisplayValue({ localize, agentsMap, modelSpecs, selectedValues, mappedEndpoints, }), [localize, agentsMap, modelSpecs, selectedValues, mappedEndpoints], ); const trigger = ( ); return (
) => { setSelectedValues({ endpoint: values.endpoint || '', model: values.model || '', modelSpec: values.modelSpec || '', }); }} onSearch={(value) => setSearchValue(value)} combobox={} trigger={trigger} > {searchResults ? ( renderSearchResults(searchResults, localize, searchValue) ) : ( <> {/* Render ungrouped modelSpecs (no group field) */} {renderModelSpecs( modelSpecs?.filter((spec) => !spec.group) || [], selectedValues.modelSpec || '', )} {/* Render endpoints (will include grouped specs matching endpoint names) */} {renderEndpoints(mappedEndpoints ?? [])} {/* Render custom groups (specs with group field not matching any endpoint) */} {renderCustomGroups(modelSpecs || [], mappedEndpoints ?? [])} )}
); } export default function ModelSelector({ startupConfig }: ModelSelectorProps) { return ( ); }