char-fork/llama.cpp
git clone https://git.t4t.associates/char-fork/llama.cpp
d86c7d62d
char/aliceai-t5-moe
1import { setChatMessageEditContext } from '$lib/contexts' ; 2import { MessageRole } from '$lib/enums' ; 3import { parseFilesToMessageExtras } from '$lib/utils/convert-files-to-extra' ; 4 5interface UseChatMessageEditContextOptions { 6getContent :() => string ; 7getExtras :() => DatabaseMessageExtra []; 8showSaveOnlyOption ?:boolean ; 9onSave :( content :string , extras ?:DatabaseMessageExtra []) => void ; 10} 11 12export function useChatMessageEditContext ( options :UseChatMessageEditContextOptions ) { 13let isEditing = $state ( false ); 14let editedContent = $state ( '' ); 15let editedExtras = $state < DatabaseMessageExtra []>([]); 16let editedUploadedFiles = $state < ChatUploadedFile []>([]); 17 18function handleEdit () { 19editedContent = options . getContent (); 20editedExtras = [ ...options . getExtras ()]; 21editedUploadedFiles = []; 22isEditing = true ; 23} 24 25async function handleSaveEdit () { 26const trimmed = editedContent . trim (); 27 28if ( ! trimmed && editedExtras . length === 0 && editedUploadedFiles . length === 0 ) return ; 29 30let finalExtras :DatabaseMessageExtra [] = $state . snapshot ( editedExtras ); 31 32if ( editedUploadedFiles . length > 0 ) { 33const plainFiles = $state . snapshot ( editedUploadedFiles ); 34const result = await parseFilesToMessageExtras ( plainFiles ); 35const newExtras = result ?. extras || []; 36 37finalExtras = [ ...finalExtras , ...newExtras ]; 38} 39 40options . onSave ( trimmed , finalExtras . length > 0 ?finalExtras :undefined ); 41isEditing = false ; 42} 43 44function handleCancelEdit () { 45isEditing = false ; 46} 47 48setChatMessageEditContext ({ 49cancel :handleCancelEdit , 50get editedContent () { 51return editedContent ; 52}, 53get editedExtras () { 54return editedExtras ; 55}, 56get editedUploadedFiles () { 57return editedUploadedFiles ; 58}, 59get isEditing () { 60return isEditing ; 61}, 62get messageRole () { 63return MessageRole . USER ; 64}, 65get originalContent () { 66return options . getContent (); 67}, 68get originalExtras () { 69return options . getExtras (); 70}, 71save :handleSaveEdit , 72saveOnly :handleSaveEdit , 73setContent :( c :string ) => { 74editedContent = c ; 75}, 76setExtras :( e :DatabaseMessageExtra []) => { 77editedExtras = e ; 78}, 79setUploadedFiles :( f :ChatUploadedFile []) => { 80editedUploadedFiles = f ; 81}, 82get shouldBranchAfterEdit () { 83return false ; 84}, 85get showBranchAfterEditOption () { 86return false ; 87}, 88get showSaveOnlyOption () { 89return options . showSaveOnlyOption ?? false ; 90}, 91startEdit :handleEdit 92}); 93 94return { 95 handleCancelEdit, 96 handleEdit, 97 handleSaveEdit, 98get isEditing () { 99return isEditing ; 100} 101}; 102}