Spaces:
Runtime error
Runtime error
File size: 2,303 Bytes
e82c85b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
import { useState } from 'react';
import { db } from '@/utils/db-client';
import { DashButton } from './DashButton'
import { FileEmbedder } from './FileEmbedder';
import * as PDFJS from 'pdfjs-dist/build/pdf';
PDFJS.GlobalWorkerOptions.workerSrc = `//cdnjs.cloudflare.com/ajax/libs/pdf.js/${PDFJS.version}/pdf.worker.min.js`;
export default class Pdf {
static async getPageText(pdf, pageNo) {
const page = await pdf.getPage(pageNo);
const tokenizedText = await page.getTextContent();
const pageText = tokenizedText.items.map((token) => token.str).join('');
return pageText;
}
static async getPDFText(source) {
const pdf = await PDFJS.getDocument(source).promise;
const maxPages = pdf.numPages;
const pageTextPromises = [];
for (let pageNo = 1; pageNo <= maxPages; pageNo += 1) {
pageTextPromises.push(Pdf.getPageText(pdf, pageNo));
}
const pageTexts = await Promise.all(pageTextPromises);
return pageTexts.join(' ');
}
}
export const FileLoader = () => {
const [files, setFiles] = useState();
const [uploadStatus, setUploadStatus] = useState("Embed");
const handleEmbed = (files) => {
setFiles(files)
};
return (
<>
<FileEmbedder handleEmbed={handleEmbed} />
<DashButton
handleClick={async () => {
if (files && files.length) {
const file = files[0];
let text;
const blob = new Blob([file], { type: 'text/plain' });
if (file.type === "application/pdf") {
text = await Pdf.getPDFText(URL.createObjectURL(blob));
} else {
text = URL.createObjectURL(blob);
}
const response = await fetch('/api/docHandle', {
method: 'POST',
body: JSON.stringify({ text }),
});
const docChat = await response.json();
console.log('handleDocs-getModels: ', docChat);
const id = await db.docs.add({
fileName: file.name || '',
fileSourceData: pdfText,
model: docChat,
});
setUploadStatus("Embedding Completed");
console.log('handleDocs-setToDb', id);
}
}}
>
<div>{uploadStatus}</div>
</DashButton>
</>
);
};
|