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