File size: 1,580 Bytes
e8700b8
 
 
 
 
 
 
e509579
dd979ff
e509579
e8700b8
 
dd979ff
e509579
e8700b8
 
 
 
dd979ff
e8700b8
 
 
 
 
 
 
 
 
 
 
e509579
e8700b8
 
 
 
 
 
 
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
<script lang="ts">
	import { X } from '@lucide/svelte';

	import { Button } from '$lib/components/ui/button';
	import SettingsModel from './SettingsModel.svelte';

	let {
		selectedModels,
		showSelector = false,
		onToggleModel
	}: {
		selectedModels: string[];
		showSelector?: boolean;
		onToggleModel?: (model: string) => void;
	} = $props();
</script>

{#each selectedModels as 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-gray-600 has-[>svg]:px-2.5 dark:border-input dark:bg-input/30 dark:text-gray-400"
		>
			<img
				src={`https://huggingface.co/api/avatars/${model.split('/')[0]}`}
				alt={model.split('/')[0]}
				class="size-3.5 rounded"
			/>
			{model.split('/').pop() ?? model}
		</div>
	{:else}
		<SettingsModel {model} {selectedModels} {onToggleModel}>
			<Button variant="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}
				<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}