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

60 lines
1.5 KiB
Svelte
Raw Normal View History

2024-06-09 23:34:34 +00:00
<script lang="ts">
import { getContext } from 'svelte';
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';
2024-06-09 23:34:34 +00:00
export let knowledge = [];
const i18n = getContext('i18n');
</script>
<div>
<div class="flex w-full justify-between mb-1">
<div class=" self-center text-sm font-semibold">{$i18n.t('Knowledge')}</div>
</div>
<div class=" text-xs dark:text-gray-500">
2024-10-02 06:21:33 +00:00
{$i18n.t('To attach knowledge base here, add them to the "Knowledge" workspace first.')}
2024-06-09 23:34:34 +00:00
</div>
<div class="flex flex-col">
2024-10-02 06:21:33 +00:00
{#if knowledge?.length > 0}
2024-06-10 00:17:35 +00:00
<div class=" flex items-center gap-2 mt-2">
{#each knowledge as file, fileIdx}
2024-10-02 06:21:33 +00:00
<FileItem
{file}
dismissible
on:dismiss={(e) => {
knowledge = knowledge.filter((_, idx) => idx !== fileIdx);
}}
/>
2024-06-10 00:17:35 +00:00
{/each}
</div>
2024-06-09 23:34:34 +00:00
{/if}
<div class="flex flex-wrap text-sm font-medium gap-1.5 mt-2">
2024-10-02 06:21:33 +00:00
<Selector
bind:knowledge
on:select={(e) => {
const item = e.detail;
if (!knowledge.find((k) => k.name === item.name)) {
knowledge = [
...knowledge,
{
...item,
type: item?.type ?? 'doc'
}
];
}
}}
>
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-300 dark:outline-gray-800 rounded-3xl"
2024-10-02 06:21:33 +00:00
type="button">{$i18n.t('Select Knowledge')}</button
2024-06-10 00:17:35 +00:00
>
</Selector>
2024-06-09 23:34:34 +00:00
</div>
<!-- {knowledge} -->
</div>
</div>