open-webui/src/lib/components/workspace/Models/Knowledge.svelte

86 lines
2.1 KiB
Svelte
Raw Normal View History

2024-06-09 23:34:34 +00:00
<script lang="ts">
import { getContext, onMount } from 'svelte';
import { knowledge } from '$lib/stores';
2024-06-10 00:17:35 +00:00
import Selector from './Knowledge/Selector.svelte';
2024-10-02 06:21:33 +00:00
import FileItem from '$lib/components/common/FileItem.svelte';
import { getKnowledgeBases } from '$lib/apis/knowledge';
2024-06-09 23:34:34 +00:00
2025-07-10 21:34:24 +00:00
export let selectedItems = [];
2024-06-09 23:34:34 +00:00
const i18n = getContext('i18n');
let loaded = false;
onMount(async () => {
if (!$knowledge) {
knowledge.set(await getKnowledgeBases(localStorage.token));
}
loaded = true;
});
2024-06-09 23:34:34 +00:00
</script>
<div>
<slot name="label">
<div class="mb-2">
<div class="flex w-full justify-between mb-1">
<div class=" self-center text-sm font-semibold">
{$i18n.t('Knowledge')}
</div>
</div>
2024-06-09 23:34:34 +00:00
<div class=" text-xs dark:text-gray-500">
{$i18n.t('To attach knowledge base here, add them to the "Knowledge" workspace first.')}
</div>
</div>
</slot>
2024-06-09 23:34:34 +00:00
<div class="flex flex-col">
2025-07-10 21:34:24 +00:00
{#if selectedItems?.length > 0}
<div class=" flex flex-wrap items-center gap-2 mb-2.5">
2025-07-10 21:34:24 +00:00
{#each selectedItems as file, fileIdx}
2024-10-02 06:21:33 +00:00
<FileItem
{file}
item={file}
2024-10-04 23:53:25 +00:00
name={file.name}
modal={true}
edit={true}
2024-10-04 23:53:25 +00:00
type={file?.legacy
? `Legacy${file.type ? ` ${file.type}` : ''}`
: (file?.type ?? 'Collection')}
2024-10-02 06:21:33 +00:00
dismissible
on:dismiss={(e) => {
2025-07-10 21:34:24 +00:00
selectedItems = selectedItems.filter((_, idx) => idx !== fileIdx);
2024-10-02 06:21:33 +00:00
}}
/>
2024-06-10 00:17:35 +00:00
{/each}
</div>
2024-06-09 23:34:34 +00:00
{/if}
{#if loaded}
<div class="flex flex-wrap text-sm font-medium gap-1.5">
<Selector
knowledgeItems={$knowledge || []}
on:select={(e) => {
const item = e.detail;
2024-10-02 06:21:33 +00:00
if (!selectedItems.find((k) => k.id === item.id)) {
selectedItems = [
...selectedItems,
{
...item
}
];
}
}}
2024-06-10 00:17:35 +00:00
>
<button
class=" px-3.5 py-1.5 font-medium hover:bg-black/5 dark:hover:bg-white/5 outline outline-1 outline-gray-100 dark:outline-gray-850 rounded-3xl"
type="button">{$i18n.t('Select Knowledge')}</button
>
</Selector>
</div>
{/if}
2024-06-09 23:34:34 +00:00
<!-- {knowledge} -->
</div>
</div>