forked from open-webui/open-webui
feat: convo tag filtering
This commit is contained in:
parent
1eec176313
commit
220530c450
10 changed files with 214 additions and 27 deletions
|
@ -93,6 +93,68 @@ export const getAllChats = async (token: string) => {
|
|||
return res;
|
||||
};
|
||||
|
||||
export const getAllChatTags = async (token: string) => {
|
||||
let error = null;
|
||||
|
||||
const res = await fetch(`${WEBUI_API_BASE_URL}/chats/tags/all`, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
Accept: 'application/json',
|
||||
'Content-Type': 'application/json',
|
||||
...(token && { authorization: `Bearer ${token}` })
|
||||
}
|
||||
})
|
||||
.then(async (res) => {
|
||||
if (!res.ok) throw await res.json();
|
||||
return res.json();
|
||||
})
|
||||
.then((json) => {
|
||||
return json;
|
||||
})
|
||||
.catch((err) => {
|
||||
error = err;
|
||||
console.log(err);
|
||||
return null;
|
||||
});
|
||||
|
||||
if (error) {
|
||||
throw error;
|
||||
}
|
||||
|
||||
return res;
|
||||
};
|
||||
|
||||
export const getChatListByTagName = async (token: string = '', tagName: string) => {
|
||||
let error = null;
|
||||
|
||||
const res = await fetch(`${WEBUI_API_BASE_URL}/chats/tags/tag/${tagName}`, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
Accept: 'application/json',
|
||||
'Content-Type': 'application/json',
|
||||
...(token && { authorization: `Bearer ${token}` })
|
||||
}
|
||||
})
|
||||
.then(async (res) => {
|
||||
if (!res.ok) throw await res.json();
|
||||
return res.json();
|
||||
})
|
||||
.then((json) => {
|
||||
return json;
|
||||
})
|
||||
.catch((err) => {
|
||||
error = err;
|
||||
console.log(err);
|
||||
return null;
|
||||
});
|
||||
|
||||
if (error) {
|
||||
throw error;
|
||||
}
|
||||
|
||||
return res;
|
||||
};
|
||||
|
||||
export const getChatById = async (token: string, id: string) => {
|
||||
let error = null;
|
||||
|
||||
|
|
|
@ -6,7 +6,6 @@
|
|||
import { getChatById } from '$lib/apis/chats';
|
||||
import { chatId, modelfiles } from '$lib/stores';
|
||||
import ShareChatModal from '../chat/ShareChatModal.svelte';
|
||||
import { stringify } from 'postcss';
|
||||
|
||||
export let initNewChat: Function;
|
||||
export let title: string = 'Ollama Web UI';
|
||||
|
|
|
@ -6,9 +6,14 @@
|
|||
|
||||
import { goto, invalidateAll } from '$app/navigation';
|
||||
import { page } from '$app/stores';
|
||||
import { user, chats, settings, showSettings, chatId } from '$lib/stores';
|
||||
import { user, chats, settings, showSettings, chatId, tags } from '$lib/stores';
|
||||
import { onMount } from 'svelte';
|
||||
import { deleteChatById, getChatList, updateChatById } from '$lib/apis/chats';
|
||||
import {
|
||||
deleteChatById,
|
||||
getChatList,
|
||||
getChatListByTagName,
|
||||
updateChatById
|
||||
} from '$lib/apis/chats';
|
||||
|
||||
let show = false;
|
||||
let navElement;
|
||||
|
@ -28,6 +33,12 @@
|
|||
}
|
||||
|
||||
await chats.set(await getChatList(localStorage.token));
|
||||
|
||||
tags.subscribe(async (value) => {
|
||||
if (value.length === 0) {
|
||||
await chats.set(await getChatList(localStorage.token));
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
const loadChat = async (id) => {
|
||||
|
@ -281,6 +292,29 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
{#if $tags.length > 0}
|
||||
<div class="px-2.5 mt-0.5 mb-2 flex gap-1 flex-wrap">
|
||||
<button
|
||||
class="px-2.5 text-xs font-medium bg-gray-900 hover:bg-gray-800 transition rounded-full"
|
||||
on:click={async () => {
|
||||
await chats.set(await getChatList(localStorage.token));
|
||||
}}
|
||||
>
|
||||
all
|
||||
</button>
|
||||
{#each $tags as tag}
|
||||
<button
|
||||
class="px-2.5 text-xs font-medium bg-gray-900 hover:bg-gray-800 transition rounded-full"
|
||||
on:click={async () => {
|
||||
await chats.set(await getChatListByTagName(localStorage.token, tag.name));
|
||||
}}
|
||||
>
|
||||
{tag.name}
|
||||
</button>
|
||||
{/each}
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div class="pl-2.5 my-2 flex-1 flex flex-col space-y-1 overflow-y-auto">
|
||||
{#each $chats.filter((chat) => {
|
||||
if (search === '') {
|
||||
|
|
|
@ -10,6 +10,7 @@ export const theme = writable('dark');
|
|||
export const chatId = writable('');
|
||||
|
||||
export const chats = writable([]);
|
||||
export const tags = writable([]);
|
||||
export const models = writable([]);
|
||||
|
||||
export const modelfiles = writable([]);
|
||||
|
|
|
@ -20,7 +20,8 @@
|
|||
models,
|
||||
modelfiles,
|
||||
prompts,
|
||||
documents
|
||||
documents,
|
||||
tags
|
||||
} from '$lib/stores';
|
||||
import { REQUIRED_OLLAMA_VERSION, WEBUI_API_BASE_URL } from '$lib/constants';
|
||||
|
||||
|
@ -29,6 +30,7 @@
|
|||
import { checkVersion } from '$lib/utils';
|
||||
import ShortcutsModal from '$lib/components/chat/ShortcutsModal.svelte';
|
||||
import { getDocs } from '$lib/apis/documents';
|
||||
import { getAllChatTags } from '$lib/apis/chats';
|
||||
|
||||
let ollamaVersion = '';
|
||||
let loaded = false;
|
||||
|
@ -106,6 +108,7 @@
|
|||
await modelfiles.set(await getModelfiles(localStorage.token));
|
||||
await prompts.set(await getPrompts(localStorage.token));
|
||||
await documents.set(await getDocs(localStorage.token));
|
||||
await tags.set(await getAllChatTags(localStorage.token));
|
||||
|
||||
modelfiles.subscribe(async () => {
|
||||
// should fetch models
|
||||
|
|
|
@ -6,7 +6,16 @@
|
|||
import { goto } from '$app/navigation';
|
||||
import { page } from '$app/stores';
|
||||
|
||||
import { models, modelfiles, user, settings, chats, chatId, config } from '$lib/stores';
|
||||
import {
|
||||
models,
|
||||
modelfiles,
|
||||
user,
|
||||
settings,
|
||||
chats,
|
||||
chatId,
|
||||
config,
|
||||
tags as _tags
|
||||
} from '$lib/stores';
|
||||
import { copyToClipboard, splitStream } from '$lib/utils';
|
||||
|
||||
import { generateChatCompletion, cancelChatCompletion, generateTitle } from '$lib/apis/ollama';
|
||||
|
@ -14,6 +23,7 @@
|
|||
addTagById,
|
||||
createNewChat,
|
||||
deleteTagById,
|
||||
getAllChatTags,
|
||||
getChatList,
|
||||
getTagsById,
|
||||
updateChatById
|
||||
|
@ -695,6 +705,8 @@
|
|||
chat = await updateChatById(localStorage.token, $chatId, {
|
||||
tags: tags
|
||||
});
|
||||
|
||||
_tags.set(await getAllChatTags(localStorage.token));
|
||||
};
|
||||
|
||||
const deleteTag = async (tagName) => {
|
||||
|
@ -704,6 +716,8 @@
|
|||
chat = await updateChatById(localStorage.token, $chatId, {
|
||||
tags: tags
|
||||
});
|
||||
|
||||
_tags.set(await getAllChatTags(localStorage.token));
|
||||
};
|
||||
|
||||
const setChatTitle = async (_chatId, _title) => {
|
||||
|
|
|
@ -6,7 +6,16 @@
|
|||
import { goto } from '$app/navigation';
|
||||
import { page } from '$app/stores';
|
||||
|
||||
import { models, modelfiles, user, settings, chats, chatId, config } from '$lib/stores';
|
||||
import {
|
||||
models,
|
||||
modelfiles,
|
||||
user,
|
||||
settings,
|
||||
chats,
|
||||
chatId,
|
||||
config,
|
||||
tags as _tags
|
||||
} from '$lib/stores';
|
||||
import { copyToClipboard, splitStream, convertMessagesToHistory } from '$lib/utils';
|
||||
|
||||
import { generateChatCompletion, generateTitle } from '$lib/apis/ollama';
|
||||
|
@ -14,6 +23,7 @@
|
|||
addTagById,
|
||||
createNewChat,
|
||||
deleteTagById,
|
||||
getAllChatTags,
|
||||
getChatById,
|
||||
getChatList,
|
||||
getTagsById,
|
||||
|
@ -709,8 +719,10 @@
|
|||
tags = await getTags();
|
||||
|
||||
chat = await updateChatById(localStorage.token, $chatId, {
|
||||
tags: tags.map((tag) => tag.name)
|
||||
tags: tags
|
||||
});
|
||||
|
||||
_tags.set(await getAllChatTags(localStorage.token));
|
||||
};
|
||||
|
||||
const deleteTag = async (tagName) => {
|
||||
|
@ -718,8 +730,10 @@
|
|||
tags = await getTags();
|
||||
|
||||
chat = await updateChatById(localStorage.token, $chatId, {
|
||||
tags: tags.map((tag) => tag.name)
|
||||
tags: tags
|
||||
});
|
||||
|
||||
_tags.set(await getAllChatTags(localStorage.token));
|
||||
};
|
||||
|
||||
onMount(async () => {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue