diff --git a/src/lib/components/admin/Settings/Models.svelte b/src/lib/components/admin/Settings/Models.svelte index 96ed282d5..0fa069891 100644 --- a/src/lib/components/admin/Settings/Models.svelte +++ b/src/lib/components/admin/Settings/Models.svelte @@ -29,6 +29,12 @@ import Wrench from '$lib/components/icons/Wrench.svelte'; import ArrowDownTray from '$lib/components/icons/ArrowDownTray.svelte'; import ManageModelsModal from './Models/ManageModelsModal.svelte'; + import ModelMenu from '$lib/components/admin/Settings/Models/ModelMenu.svelte'; + import EllipsisHorizontal from '$lib/components/icons/EllipsisHorizontal.svelte'; + import EyeSlash from '$lib/components/icons/EyeSlash.svelte'; + import Eye from '$lib/components/icons/Eye.svelte'; + + let shiftKey = false; let importFiles; let modelsImportInputElement: HTMLInputElement; @@ -146,8 +152,62 @@ ); }; + const hideModelHandler = async (model) => { + model.meta = { + ...model.meta, + hidden: !(model?.meta?.hidden ?? false) + }; + + console.log(model); + + toast.success( + model.meta.hidden + ? $i18n.t(`Model {{name}} is now hidden`, { + name: model.id + }) + : $i18n.t(`Model {{name}} is now visible`, { + name: model.id + }) + ); + + upsertModelHandler(model); + }; + + const exportModelHandler = async (model) => { + let blob = new Blob([JSON.stringify([model])], { + type: 'application/json' + }); + saveAs(blob, `${model.id}-${Date.now()}.json`); + }; + onMount(async () => { - init(); + await init(); + + const onKeyDown = (event) => { + if (event.key === 'Shift') { + shiftKey = true; + } + }; + + const onKeyUp = (event) => { + if (event.key === 'Shift') { + shiftKey = false; + } + }; + + const onBlur = () => { + shiftKey = false; + }; + + window.addEventListener('keydown', onKeyDown); + window.addEventListener('keyup', onKeyUp); + window.addEventListener('blur-sm', onBlur); + + return () => { + window.removeEventListener('keydown', onKeyDown); + window.removeEventListener('keyup', onKeyUp); + window.removeEventListener('blur-sm', onBlur); + }; }); @@ -211,7 +271,10 @@ {#if models.length > 0} {#each filteredModels as model, modelIdx (model.id)}
- - -
- - { - toggleModelHandler(model); + {#if shiftKey} + + -
+ {:else} + + + { + exportModelHandler(model); + }} + hideHandler={() => { + hideModelHandler(model); + }} + onClose={() => {}} + > + + + +
+ + { + toggleModelHandler(model); + }} + /> + +
+ {/if}
{/each} diff --git a/src/lib/components/admin/Settings/Models/ModelMenu.svelte b/src/lib/components/admin/Settings/Models/ModelMenu.svelte new file mode 100644 index 000000000..88465e42e --- /dev/null +++ b/src/lib/components/admin/Settings/Models/ModelMenu.svelte @@ -0,0 +1,116 @@ + + + { + if (e.detail === false) { + onClose(); + } + }} +> + + + + +
+ + { + hideHandler(); + }} + > + {#if model?.meta?.hidden ?? false} + + + + {:else} + + + + + {/if} + +
+ {#if model?.meta?.hidden ?? false} + {$i18n.t('Show Model')} + {:else} + {$i18n.t('Hide Model')} + {/if} +
+
+ + { + exportHandler(); + }} + > + + +
{$i18n.t('Export')}
+
+
+
+
diff --git a/src/lib/components/chat/ModelSelector/Selector.svelte b/src/lib/components/chat/ModelSelector/Selector.svelte index 226f5b1bd..47f06f8f5 100644 --- a/src/lib/components/chat/ModelSelector/Selector.svelte +++ b/src/lib/components/chat/ModelSelector/Selector.svelte @@ -458,174 +458,176 @@ {/if} {#each filteredItems as item, index} - + + {#if value === item.value} +
+ +
+ {/if} + + {/if} {:else}
diff --git a/src/lib/components/icons/Eye.svelte b/src/lib/components/icons/Eye.svelte new file mode 100644 index 000000000..5af95a9e7 --- /dev/null +++ b/src/lib/components/icons/Eye.svelte @@ -0,0 +1,20 @@ + + + + + +