File size: 3,400 Bytes
6ce4ca6
 
 
 
2d0da8c
 
6ce4ca6
 
2d0da8c
6ce4ca6
 
 
2d0da8c
6ce4ca6
2d0da8c
 
6ce4ca6
2d0da8c
 
6ce4ca6
2d0da8c
 
 
 
 
3cdf7b9
2d0da8c
 
6ce4ca6
 
2d0da8c
 
 
6ce4ca6
 
2d0da8c
 
 
6ce4ca6
 
2d0da8c
 
 
6ce4ca6
 
 
2d0da8c
6ce4ca6
 
 
2d0da8c
 
8173aa6
6ce4ca6
 
 
 
 
 
 
 
 
 
 
 
3cdf7b9
6ce4ca6
 
 
2d0da8c
6ce4ca6
 
 
8173aa6
 
 
6ce4ca6
 
 
 
 
 
 
 
 
 
 
 
 
2d0da8c
 
 
 
 
6ce4ca6
2d0da8c
 
 
 
 
 
 
6ce4ca6
2d0da8c
 
 
6ce4ca6
3cdf7b9
2d0da8c
 
 
 
 
 
 
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
<script lang="ts">
	import { Button } from "@/components/ui/button";
	import * as DropdownMenu from "@/components/ui/dropdown-menu";
	import { cn } from "$lib/utils";
	import { MODEL_TYPES, type ModelType } from "$lib/elements/compute";
	import AIModelConfigurationModal from "@/components/3d/elements/compute/modal/AIModelConfigurationModal.svelte";

	interface Props {
		workspaceId: string;
		open?: boolean;
	}

	let { open = $bindable(), workspaceId }: Props = $props();

	let isConfigModalOpen = $state(false);
	let selectedModelType = $state<ModelType>('act');

	// Get available model types
	const availableModels = Object.values(MODEL_TYPES).filter(model => model.enabled);

	function openConfigModal(modelType: ModelType) {
		selectedModelType = modelType;
		isConfigModalOpen = true;
		open = false; // Close the dropdown
	}

	function quickAddACT() {
		openConfigModal('act');
	}

	function formatModelType(modelType: string): string {
		const config = MODEL_TYPES[modelType as ModelType];
		return config ? config.label : modelType;
	}

	function getModelDescription(modelType: string): string {
		const config = MODEL_TYPES[modelType as ModelType];
		return config ? config.description : "AI model";
	}

	function getModelIcon(modelType: string): string {
		const config = MODEL_TYPES[modelType as ModelType];
		return config ? config.icon : "icon-[mdi--brain]";
	}
</script>

<!-- Main Add Button (ACT Model - Quick Add) -->
<Button
	variant="default"
	size="sm"
	onclick={quickAddACT}
	disabled={true}
	class="group rounded-r-none border-0 bg-purple-500 text-white transition-all duration-200 hover:bg-purple-400 dark:bg-purple-600 dark:hover:bg-purple-500"
>
	<span
		class={[
			"mr-2 size-4 transition-transform duration-200",
			"icon-[mdi--plus] group-hover:rotate-90"
		]}
	></span>
	Add Model
</Button>

<!-- Dropdown Menu Button -->
<DropdownMenu.Root bind:open>
	<DropdownMenu.Trigger>
		{#snippet child({ props })}
			<Button
				{...props}
				disabled={true}
				variant="default"
				size="sm"
				class={cn(
					"rounded-l-none border-0 border-l border-purple-400/30 bg-purple-500 px-2 text-white transition-all duration-200 hover:bg-purple-400",
					"dark:border-purple-500/30 dark:bg-purple-600 dark:hover:bg-purple-500",
					open && "bg-purple-600 shadow-inner dark:bg-purple-700"
				)}
			>
				<span
					class={cn(
						"size-4 transition-transform duration-200",
						"icon-[mdi--chevron-down]",
						open && "rotate-180"
					)}
				></span>
			</Button>
		{/snippet}
	</DropdownMenu.Trigger>

	<DropdownMenu.Content class="w-64 bg-slate-100 border-slate-300 dark:bg-slate-900 dark:border-slate-600">
		{#each availableModels as model}
			<DropdownMenu.Item
				class="flex items-center gap-3 p-3 cursor-pointer hover:bg-purple-100 dark:hover:bg-purple-900/30"
				onclick={() => openConfigModal(model.id)}
			>
				<span class="{model.icon} size-5 text-purple-500 dark:text-purple-400"></span>
				<div class="flex-1">
					<div class="font-medium text-slate-900 dark:text-slate-100">
						{model.label}
					</div>
					<div class="text-xs text-slate-600 dark:text-slate-400">
						{model.description}
					</div>
				</div>
			</DropdownMenu.Item>
		{/each}
	</DropdownMenu.Content>
</DropdownMenu.Root>

<!-- Configuration Modal -->
<AIModelConfigurationModal 
	bind:open={isConfigModalOpen} 
	{workspaceId}
	initialModelType={selectedModelType}
/>