char-fork/llama.cpp

git clone https://git.t4t.associates/char-fork/llama.cpp

Aleksander Grygierui: Improve Chat Messages rendering performance (#28460)0afb805b1

char/aliceai-t5-moe
2.6 KiB99 linesraw
1<script lang="ts">
2	import { replaceState } from '$app/navigation';
3	import { page } from '$app/state';
4	import { DialogModelNotAvailable } from '$lib/components/app';
5	import { APP_NAME, URL_PARAMS } from '$lib/constants';
6	import { conversationsStore, modelsStore, serverStore } from '$lib/stores';
7	import { onMount } from 'svelte';
8
9	let qParam = $derived(page.url.searchParams.get(URL_PARAMS.QUERY));
10	let modelParam = $derived(page.url.searchParams.get(URL_PARAMS.MODEL));
11	let loadParam = $derived(page.url.searchParams.get(URL_PARAMS.LOAD));
12
13	let showModelNotAvailable = $state(false);
14	let requestedModelName = $state('');
15	let availableModelNames = $derived(modelsStore.models.map((m) => m.model));
16
17	// Clear params after handling the deep link so a refresh does not replay them
18	function clearUrlParams() {
19		const url = new URL(page.url);
20
21		url.searchParams.delete(URL_PARAMS.QUERY);
22		url.searchParams.delete(URL_PARAMS.MODEL);
23		url.searchParams.delete(URL_PARAMS.LOAD);
24
25		replaceState(url.toString(), {});
26	}
27
28	async function handleUrlParams() {
29		await modelsStore.fetch();
30
31		if (modelParam) {
32			const model = modelsStore.findModelByName(modelParam);
33
34			if (model) {
35				try {
36					await modelsStore.selectModelById(model.id);
37
38					// with ?load=true in router mode, start loading right away so the
39					// model is ready sooner; not awaited so the UI stays usable
40					if (
41						loadParam === 'true' &&
42						serverStore.isRouterMode &&
43						!modelsStore.isModelLoaded(model.id)
44					) {
45						modelsStore.status
46							.load(model.id)
47							.catch((error) => console.error('Failed to load model:', error));
48					}
49				} catch (error) {
50					console.error('Failed to select model:', error);
51					requestedModelName = modelParam;
52					showModelNotAvailable = true;
53
54					return;
55				}
56			} else {
57				requestedModelName = modelParam;
58				showModelNotAvailable = true;
59
60				return;
61			}
62		}
63
64		// ?q= creates the conversation, the chat route sends the prompt once the
65		// conversation id is in the URL
66		if (qParam !== null) {
67			await conversationsStore.createConversation();
68			clearUrlParams();
69		} else if (modelParam) {
70			clearUrlParams();
71		}
72	}
73
74	onMount(async () => {
75		if (!conversationsStore.isInitialized) {
76			await conversationsStore.initialize();
77		}
78
79		conversationsStore.clearActiveConversation();
80
81		await modelsStore.fetch();
82
83		if (qParam !== null || modelParam !== null) {
84			await handleUrlParams();
85		}
86
87		await modelsStore.ensureFirstModelSelected();
88	});
89</script>
90
91<svelte:head>
92	<title>{APP_NAME}</title>
93</svelte:head>
94
95<DialogModelNotAvailable
96	bind:open={showModelNotAvailable}
97	availableModels={availableModelNames}
98	modelName={requestedModelName}
99/>