+
+
{$i18n.t('Attach Webpage')}
-
diff --git a/src/lib/components/workspace/Knowledge/KnowledgeBase.svelte b/src/lib/components/workspace/Knowledge/KnowledgeBase.svelte
index d09e608d51..49381dd7fd 100644
--- a/src/lib/components/workspace/Knowledge/KnowledgeBase.svelte
+++ b/src/lib/components/workspace/Knowledge/KnowledgeBase.svelte
@@ -33,6 +33,7 @@
updateFileFromKnowledgeById,
updateKnowledgeById
} from '$lib/apis/knowledge';
+ import { processWeb } from '$lib/apis/retrieval';
import { blobToFile } from '$lib/utils';
import Spinner from '$lib/components/common/Spinner.svelte';
@@ -209,6 +210,73 @@
}
};
+ const uploadWebBatchHandler = async (urls) => {
+ for (const url of urls) {
+ const tempItemId = uuidv4();
+ const fileItem = {
+ type: 'file',
+ file: '',
+ id: null,
+ url: url,
+ name: url,
+ collection_name: '',
+ status: 'uploading',
+ size: 0,
+ error: '',
+ itemId: tempItemId
+ };
+
+ knowledge.files = [...(knowledge.files ?? []), fileItem];
+
+ try {
+ const res = await processWeb(localStorage.token, '', url).catch((e) => {
+ toast.error(`${e}`);
+ return null;
+ });
+
+ if (res) {
+ console.log(res);
+
+ const content = res.file.data.content;
+ const filename = res.filename || url;
+
+ // Create a safe filename for the File object to avoid filesystem issues
+ const safeFilename = `web_content_${uuidv4()}.txt`;
+
+ const file = new File([content], safeFilename, { type: 'text/plain' });
+ const uploadedFile = await uploadFile(localStorage.token, file, { name: filename });
+
+ if (uploadedFile) {
+ knowledge.files = knowledge.files.map((item) => {
+ if (item.itemId === tempItemId) {
+ item.id = uploadedFile.id;
+ item.name = filename; // Use the URL/filename as the title
+ item.size = uploadedFile.size;
+ item.status = 'uploaded';
+ }
+ return item;
+ });
+
+ await addFileHandler(uploadedFile.id);
+ } else {
+ knowledge.files = knowledge.files.map((item) => {
+ if (item.itemId === tempItemId) {
+ item.status = 'failed';
+ item.error = 'Failed to upload file';
+ }
+ return item;
+ });
+ }
+ } else {
+ knowledge.files = knowledge.files.filter((item) => item.itemId !== tempItemId);
+ }
+ } catch (e) {
+ toast.error(`${e}`);
+ knowledge.files = knowledge.files.filter((item) => item.itemId !== tempItemId);
+ }
+ }
+ };
+
const uploadDirectoryHandler = async () => {
// Check if File System Access API is supported
const isFileSystemAccessSupported = 'showDirectoryPicker' in window;
@@ -920,16 +988,30 @@
{
- if (e.detail.type === 'directory') {
+ if (e.detail.type === 'files') {
+ const input = document.createElement('input');
+ input.type = 'file';
+ input.multiple = true;
+ input.onchange = async (e) => {
+ if (e.target.files) {
+ for (const file of e.target.files) {
+ uploadFileHandler(file);
+ }
+ }
+ };
+ input.click();
+ } else if (e.detail.type === 'directory') {
uploadDirectoryHandler();
} else if (e.detail.type === 'text') {
showAddTextContentModal = true;
- } else {
- document.getElementById('files-input').click();
+ } else if (e.detail.type === 'web') {
+ uploadWebBatchHandler(e.detail.data);
}
}}
on:sync={(e) => {
- showSyncConfirmModal = true;
+ if (e.detail.type === 'directory') {
+ showSyncConfirmModal = true;
+ }
}}
/>
diff --git a/src/lib/components/workspace/Knowledge/KnowledgeBase/AddContentMenu.svelte b/src/lib/components/workspace/Knowledge/KnowledgeBase/AddContentMenu.svelte
index a617e45854..844d1af795 100644
--- a/src/lib/components/workspace/Knowledge/KnowledgeBase/AddContentMenu.svelte
+++ b/src/lib/components/workspace/Knowledge/KnowledgeBase/AddContentMenu.svelte
@@ -10,14 +10,25 @@
import BarsArrowUp from '$lib/components/icons/BarsArrowUp.svelte';
import FolderOpen from '$lib/components/icons/FolderOpen.svelte';
import ArrowPath from '$lib/components/icons/ArrowPath.svelte';
+ import GlobeAlt from '$lib/components/icons/GlobeAlt.svelte';
+
+ import AttachWebpageModal from '$lib/components/chat/MessageInput/AttachWebpageModal.svelte';
const i18n = getContext('i18n');
export let onClose: Function = () => {};
let show = false;
+ let showAttachWebpageModal = false;
+
{
+ dispatch('upload', e);
+ }}
+/>
+
{
@@ -93,6 +104,16 @@
+ {
+ showAttachWebpageModal = true;
+ }}
+ >
+
+ {$i18n.t('Add from Website')}
+
+
{