Model Services: Duplicates removal

This commit is contained in:
Enrico Ros
2026-01-29 20:40:45 -08:00
parent 02197f4ee6
commit 3cd2df0b50
2 changed files with 27 additions and 2 deletions
@@ -27,6 +27,7 @@ export type GlobalOverlayId = // string - disabled so we keep an orderliness
| 'livefile-overwrite'
| 'shortcuts-confirm-close'
| 'blocks-off-enhance-code'
| 'llms-remove-clones'
| 'llms-reset-parameters'
| 'llms-service-remove'
| 'composer-unsupported-attachments' // The LLM does not seem to support this mime type - continue anyway?
@@ -64,6 +64,7 @@ export function ModelsConfiguratorModal(props: {
?? null;
const activeService = modelsServices.find(s => s.id === activeServiceId);
// const hasClones = useModelsStore(({ llms }) => llms.some(llm => llm.sId === activeServiceId && llm.isUserClone));
const hasAnyServices = !!modelsServices.length;
const isTabWizard = tab === 'wizard';
@@ -119,6 +120,16 @@ export function ModelsConfiguratorModal(props: {
).then(() => llmsStoreActions().resetServiceUserParameters(activeServiceId)).catch(() => null /* ignore closure */);
}, [activeService?.label, activeServiceId, showPromisedOverlay]);
const handleRemoveClones = React.useCallback(() => {
showPromisedOverlay('llms-remove-clones', {}, ({ onResolve, onUserReject }) =>
<ConfirmationModal
open onClose={onUserReject} onPositive={() => onResolve(true)}
confirmationText={`Remove all user-cloned models from ${activeService?.label ?? 'this service'}?`}
positiveActionText='Remove'
/>,
).then(() => llmsStoreActions().removeCustomModels(activeServiceId)).catch(() => null /* ignore closure */);
}, [activeService?.label, activeServiceId, showPromisedOverlay]);
const handleDeleteService = React.useCallback((serviceId: DModelsServiceId, skipConfirmation: boolean) => {
const targetService = modelsServices.find(s => s.id === serviceId);
if (!targetService) return;
@@ -158,7 +169,14 @@ export function ModelsConfiguratorModal(props: {
<MenuButton slots={{ root: IconButton }} slotProps={{ root: { variant: 'soft', sx: { backgroundColor: 'background.surface' } } }}>
<MoreVertIcon sx={{ fontSize: 'xl' }} />
</MenuButton>
<Menu placement='bottom-start' disablePortal sx={{ minWidth: 240 }}>
<Menu placement='bottom-start' disablePortal sx={{ minWidth: 240, pt: 0 }}>
{/* Service Name Header */}
{/*<ListItem sx={{ '--ListItem-minHeight': '2.5rem' }}>*/}
{/* <ListItemDecorator><LLMVendorIcon vendorId={activeService?.vId} /></ListItemDecorator>*/}
{/* <div>{activeService?.label ?? ''}</div>*/}
{/*</ListItem>*/}
{/*<ListDivider sx={{ mt: 0 }} />*/}
{/* Refresh Models */}
<MenuItem disabled={isRefreshing} onClick={handleRefreshModels}>
@@ -174,6 +192,12 @@ export function ModelsConfiguratorModal(props: {
Reset Customizations
</MenuItem>
{/* Remove Cloned Models */}
<MenuItem disabled={false /* unnecessary: !hasClones */} onClick={handleRemoveClones}>
<ListItemDecorator><DeleteOutlineIcon /></ListItemDecorator>
Remove Duplicate Models
</MenuItem>
<ListDivider />
{/* View toggles */}
@@ -199,7 +223,7 @@ export function ModelsConfiguratorModal(props: {
);
return undefined;
}, [handleRefreshModels, handleResetAllParameters, handleShowAdvanced, handleShowWizard, hasAnyServices, hasLLMs, isMobile, isRefreshing, isTabSetup, isTabWizard, setShowModelsHidden, showModelsHidden]);
}, [handleRefreshModels, handleRemoveClones, handleResetAllParameters, handleShowAdvanced, handleShowWizard, hasAnyServices, hasLLMs, isMobile, isRefreshing, isTabSetup, isTabWizard, setShowModelsHidden, showModelsHidden]);
// custom done button for wizard mode (combines start and close buttons)