Browse Source

Merge pull request #675 from HenryHolloway/ollama-webui-full-search

feat: full-context search
Timothy Jaeryang Baek 1 year ago
parent
commit
9fccf72bfc
1 changed files with 28 additions and 11 deletions
  1. 28 11
      src/lib/components/layout/Sidebar.svelte

+ 28 - 11
src/lib/components/layout/Sidebar.svelte

@@ -11,6 +11,7 @@
 	import {
 	import {
 		deleteChatById,
 		deleteChatById,
 		getChatList,
 		getChatList,
+		getChatById,
 		getChatListByTagName,
 		getChatListByTagName,
 		updateChatById
 		updateChatById
 	} from '$lib/apis/chats';
 	} from '$lib/apis/chats';
@@ -31,16 +32,24 @@
 		if (window.innerWidth > 1280) {
 		if (window.innerWidth > 1280) {
 			show = true;
 			show = true;
 		}
 		}
-
 		await chats.set(await getChatList(localStorage.token));
 		await chats.set(await getChatList(localStorage.token));
-
-		tags.subscribe(async (value) => {
-			if (value.length === 0) {
-				await chats.set(await getChatList(localStorage.token));
-			}
-		});
 	});
 	});
 
 
+	// Helper function to fetch and add chat content to each chat
+	const enrichChatsWithContent = async (chatList) => {
+		const enrichedChats = await Promise.all(
+			chatList.map(async (chat) => {
+				const chatDetails = await getChatById(localStorage.token, chat.id).catch((error) => null); // Handle error or non-existent chat gracefully
+				if (chatDetails) {
+					chat.chat = chatDetails.chat; // Assuming chatDetails.chat contains the chat content
+				}
+				return chat;
+			})
+		);
+
+		await chats.set(enrichedChats);
+	};
+
 	const loadChat = async (id) => {
 	const loadChat = async (id) => {
 		goto(`/c/${id}`);
 		goto(`/c/${id}`);
 	};
 	};
@@ -271,6 +280,9 @@
 						class="w-full rounded-r py-1.5 pl-2.5 pr-4 text-sm text-gray-300 bg-gray-950 outline-none"
 						class="w-full rounded-r py-1.5 pl-2.5 pr-4 text-sm text-gray-300 bg-gray-950 outline-none"
 						placeholder="Search"
 						placeholder="Search"
 						bind:value={search}
 						bind:value={search}
+						on:focus={() => {
+							enrichChatsWithContent($chats);
+						}}
 					/>
 					/>
 
 
 					<!-- <div class="self-center pr-3 py-2  bg-gray-900">
 					<!-- <div class="self-center pr-3 py-2  bg-gray-900">
@@ -323,11 +335,16 @@
 						let title = chat.title.toLowerCase();
 						let title = chat.title.toLowerCase();
 						const query = search.toLowerCase();
 						const query = search.toLowerCase();
 
 
-						if (title.includes(query)) {
-							return true;
-						} else {
-							return false;
+						let contentMatches = false;
+						// Access the messages within chat.chat.messages
+						if (chat.chat && chat.chat.messages && Array.isArray(chat.chat.messages)) {
+							contentMatches = chat.chat.messages.some((message) => {
+								// Check if message.content exists and includes the search query
+								return message.content && message.content.toLowerCase().includes(query);
+							});
 						}
 						}
+
+						return title.includes(query) || contentMatches;
 					}
 					}
 				}) as chat, i}
 				}) as chat, i}
 					<div class=" w-full pr-2 relative">
 					<div class=" w-full pr-2 relative">