import React, { useMemo } from 'react'; import type { ModelSelectorProps } from '~/common'; import { ModelSelectorProvider, useModelSelectorContext } from './ModelSelectorContext'; import { renderModelSpecs, renderEndpoints, renderSearchResults } 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 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, modelSpecs, selectedValues, mappedEndpoints, }), [localize, 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) ) : ( <> {renderModelSpecs(modelSpecs, selectedValues.modelSpec || '')} {renderEndpoints(mappedEndpoints ?? [])} )}
); } export default function ModelSelector({ startupConfig, modelSpecs }: ModelSelectorProps) { return ( ); }