Spaces:
Sleeping
Sleeping
File size: 2,070 Bytes
e8700b8 fe3e1db e8700b8 de8eb79 2d9278d fe3e1db e8700b8 e509579 dd979ff e509579 e8700b8 dd979ff e509579 e8700b8 de8eb79 dd979ff e8700b8 2d9278d e8700b8 5fe840a fe3e1db 5fe840a e8700b8 e509579 2d9278d e8700b8 de8eb79 fe3e1db de8eb79 043242c e8700b8 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | <script lang="ts">
import { X } from '@lucide/svelte';
import { Button } from '$lib/components/ui/button';
import SettingsModel from './SettingsModel.svelte';
import { modelsState } from '$lib/state/models.svelte';
import { mode } from 'mode-watcher';
import ModelImageInput from './ModelImageInput.svelte';
let {
selectedModels,
showSelector = false,
onToggleModel
}: {
selectedModels: string[];
showSelector?: boolean;
onToggleModel?: (model: string) => void;
} = $props();
</script>
{#each selectedModels as model (model)}
{@const modelData = modelsState.models.find((m) => m.id === model)}
{#if !showSelector}
<div
class="group relative inline-flex h-8 shrink-0 items-center justify-center gap-1.5 rounded-md border bg-background px-3 text-sm font-normal! text-primary has-[>svg]:px-2.5 dark:bg-secondary dark:text-secondary-foreground"
>
<img
src={`https://huggingface.co/api/avatars/${model.split('/')[0]}`}
alt={model.split('/')[0]}
class="size-3.5 rounded"
/>
{model.split('/').pop() ?? model}
{#if modelData?.architecture?.input_modalities?.includes('image')}
<ModelImageInput />
{/if}
</div>
{:else}
<SettingsModel {model} {selectedModels} {onToggleModel}>
<Button
variant={mode.current === 'dark' ? 'secondary' : 'outline'}
size="sm"
class="group relative font-normal! shadow-none!"
>
<img
src={`https://huggingface.co/api/avatars/${model.split('/')[0]}`}
alt={model.split('/')[0]}
class="size-3.5 rounded"
/>
{model.split('/').pop() ?? model}
{#if modelData?.architecture?.input_modalities?.includes('image')}
<ModelImageInput />
{/if}
<Button
variant="default"
size="icon-3xs"
class="!shadow-none! absolute -top-1 -right-1 rounded-full! opacity-0 transition-opacity duration-300 group-hover:opacity-100"
onclick={(e) => {
e.preventDefault();
e.stopPropagation();
onToggleModel?.(model);
}}
>
<X class="size-3" />
</Button>
</Button>
</SettingsModel>
{/if}
{/each}
|