From ea3a84c930aae808bd33e938c04ed4f24111172a Mon Sep 17 00:00:00 2001 From: Tanmay Deep Sharma Date: Thu, 26 Jun 2025 02:41:19 +0530 Subject: [PATCH] feat: support uploading pdf in document knowledgebase --- .gitignore | 10 + .../dashboard/api/captain/document.js | 8 + .../document/CreateDocumentDialog.vue | 27 +- .../pageComponents/document/DocumentForm.vue | 247 ++++++++++++++++-- .../components-next/fileUpload/FileUpload.vue | 201 ++++++++++++++ .../dashboard/store/captain/document.js | 17 ++ config/routes.rb | 6 +- .../accounts/captain/documents_controller.rb | 62 ++++- .../app/policies/captain/assistant_policy.rb | 4 + .../documents/pdf_uploads_controller_spec.rb | 100 +++++++ .../captain/documents_controller_spec.rb | 65 +++++ spec/fixtures/files/sample.pdf | 53 ++++ spec/fixtures/files/sample.txt | 2 + .../ingest_with_firecrawl_job_spec.rb | 97 +++++++ 14 files changed, 864 insertions(+), 35 deletions(-) create mode 100644 app/javascript/dashboard/components-next/fileUpload/FileUpload.vue create mode 100644 spec/controllers/api/v1/accounts/captain/documents/pdf_uploads_controller_spec.rb create mode 100644 spec/fixtures/files/sample.pdf create mode 100644 spec/fixtures/files/sample.txt create mode 100644 spec/jobs/enterprise/ingest_with_firecrawl_job_spec.rb diff --git a/.gitignore b/.gitignore index c64fb5c1b..d5cd22cf2 100644 --- a/.gitignore +++ b/.gitignore @@ -94,3 +94,13 @@ yarn-debug.log* .vscode .claude/settings.local.json .cursor + +bin/ +local/ +cache/ +gems/ +specifications/ +extensions/ +build_info/ +bin +.pnpm-store/ diff --git a/app/javascript/dashboard/api/captain/document.js b/app/javascript/dashboard/api/captain/document.js index dc22b0c32..a4ec6b23e 100644 --- a/app/javascript/dashboard/api/captain/document.js +++ b/app/javascript/dashboard/api/captain/document.js @@ -15,6 +15,14 @@ class CaptainDocument extends ApiClient { }, }); } + + uploadPdf(formData) { + return axios.post(`${this.url}/upload_pdf`, formData, { + headers: { + 'Content-Type': 'multipart/form-data', + }, + }); + } } export default new CaptainDocument(); diff --git a/app/javascript/dashboard/components-next/captain/pageComponents/document/CreateDocumentDialog.vue b/app/javascript/dashboard/components-next/captain/pageComponents/document/CreateDocumentDialog.vue index 7db74f523..e48631b38 100644 --- a/app/javascript/dashboard/components-next/captain/pageComponents/document/CreateDocumentDialog.vue +++ b/app/javascript/dashboard/components-next/captain/pageComponents/document/CreateDocumentDialog.vue @@ -18,12 +18,29 @@ const i18nKey = 'CAPTAIN.DOCUMENTS.CREATE'; const handleSubmit = async newDocument => { try { - await store.dispatch('captainDocuments/create', newDocument); - useAlert(t(`${i18nKey}.SUCCESS_MESSAGE`)); + if (newDocument.type === 'pdf') { + // Handle PDF upload + const formData = new FormData(); + formData.append('pdf_document', newDocument.pdf_document); + formData.append('assistant_id', newDocument.assistant_id); + + await store.dispatch('captainDocuments/uploadPdf', formData); + useAlert('PDF uploaded successfully! Processing will begin shortly.'); + } else { + // Handle URL creation + await store.dispatch('captainDocuments/create', { + document: { + external_link: newDocument.external_link, + assistant_id: newDocument.assistant_id, + }, + }); + useAlert('Document created successfully!'); + } dialogRef.value.close(); } catch (error) { const errorMessage = - error?.response?.message || t(`${i18nKey}.ERROR_MESSAGE`); + error?.response?.data?.message || + 'Failed to create document. Please try again.'; useAlert(errorMessage); } }; @@ -42,8 +59,8 @@ defineExpose({ dialogRef });