From ac347a397026d3cf4760f5c0b2074fd3ff84a851 Mon Sep 17 00:00:00 2001 From: n4ze3m Date: Fri, 5 Apr 2024 20:28:29 +0530 Subject: [PATCH] Update dependencies and fix import paths --- bun.lockb | Bin 0 -> 404730 bytes package.json | 3 + src/assets/locale/en/knownledge.json | 3 + src/assets/locale/en/playground.json | 3 +- src/assets/locale/en/settings.json | 4 + src/assets/locale/ja-JP/knownledge.json | 1 + src/assets/locale/ja-JP/playground.json | 3 +- src/assets/locale/ml/knownledge.json | 1 + src/assets/locale/ml/playground.json | 3 +- src/assets/locale/zh/knownledge.json | 1 + src/assets/locale/zh/playground.json | 3 +- src/assets/tailwind.css | 10 + src/components/Common/ShareBtn.tsx | 2 +- src/components/Layouts/Layout.tsx | 2 +- .../Layouts/SettingsOptionLayout.tsx | 4 +- .../Option/Knowledge/AddKnowledge.tsx | 139 ++++++++++++ .../Option/Knowledge/KnowledgeSelect.tsx | 51 +++++ src/components/Option/Knowledge/index.tsx | 138 ++++++++++++ .../Option/Playground/PlaygroundForm.tsx | 7 +- src/components/Option/Prompt/index.tsx | 2 +- src/components/Option/Settings/other.tsx | 2 +- src/components/Option/Share/index.tsx | 2 +- src/components/Option/Sidebar.tsx | 2 +- src/{libs/db.ts => db/index.ts} | 0 src/db/knowledge.ts | 192 +++++++++++++++++ src/db/vector.ts | 131 ++++++++++++ src/entries/background.ts | 54 +++-- src/hooks/chat-helper/index.ts | 2 +- src/hooks/useMessageOption.tsx | 2 +- src/i18n/lang/en.ts | 5 +- src/i18n/lang/ja.ts | 4 +- src/i18n/lang/ml.ts | 5 +- src/i18n/lang/zh.ts | 4 +- src/libs/PageAssistVectorStore.ts | 201 ++++++++++++++++++ src/libs/get-html.ts | 26 +-- src/libs/pdf.ts | 29 +++ src/libs/process-knowledge.ts | 55 +++++ src/loader/pdf-url.ts | 49 +++++ src/loader/pdf.ts | 53 +++-- src/queue/index.ts | 6 + src/routes/option-settings-knowledge.tsx | 3 +- src/utils/to-source.ts | 32 +++ wxt.config.ts | 2 +- 43 files changed, 1142 insertions(+), 99 deletions(-) create mode 100644 bun.lockb create mode 100644 src/assets/locale/en/knownledge.json create mode 100644 src/assets/locale/ja-JP/knownledge.json create mode 100644 src/assets/locale/ml/knownledge.json create mode 100644 src/assets/locale/zh/knownledge.json create mode 100644 src/components/Option/Knowledge/AddKnowledge.tsx create mode 100644 src/components/Option/Knowledge/KnowledgeSelect.tsx create mode 100644 src/components/Option/Knowledge/index.tsx rename src/{libs/db.ts => db/index.ts} (100%) create mode 100644 src/db/knowledge.ts create mode 100644 src/db/vector.ts create mode 100644 src/libs/PageAssistVectorStore.ts create mode 100644 src/libs/pdf.ts create mode 100644 src/libs/process-knowledge.ts create mode 100644 src/loader/pdf-url.ts create mode 100644 src/queue/index.ts create mode 100644 src/utils/to-source.ts diff --git a/bun.lockb b/bun.lockb new file mode 100644 index 0000000000000000000000000000000000000000..15224d079cec3c254eef016d4bc45072dc3611d1 GIT binary patch literal 404730 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≶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 ETeA<;3_9At!0Y4Mxfqoq%uEE$>c(xnu^Ni1TJ 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 KHInlG=<~mju@rj% literal 0 HcmV?d00001 diff --git a/package.json b/package.json index 8f62d6c..1988dfa 100644 --- a/package.json +++ b/package.json @@ -35,8 +35,10 @@ "i18next-browser-languagedetector": "^7.2.0", "langchain": "^0.1.28", "lucide-react": "^0.350.0", + "ml-distance": "^4.0.1", "pdfjs-dist": "^4.0.379", "property-information": "^6.4.1", + "pubsub-js": "^1.9.4", "react": "18.2.0", "react-dom": "18.2.0", "react-i18next": "^14.1.0", @@ -55,6 +57,7 @@ "@types/chrome": "0.0.259", "@types/html-to-text": "^9.0.4", "@types/node": "20.11.9", + "@types/pubsub-js": "^1.8.6", "@types/react": "18.2.48", "@types/react-dom": "18.2.18", "@types/react-syntax-highlighter": "^15.5.11", diff --git a/src/assets/locale/en/knownledge.json b/src/assets/locale/en/knownledge.json new file mode 100644 index 0000000..2ff6db7 --- /dev/null +++ b/src/assets/locale/en/knownledge.json @@ -0,0 +1,3 @@ +{ + "addBtn": "Add New Knowledge" +} \ No newline at end of file diff --git a/src/assets/locale/en/playground.json b/src/assets/locale/en/playground.json index 6a91280..1d0794d 100644 --- a/src/assets/locale/en/playground.json +++ b/src/assets/locale/en/playground.json @@ -21,7 +21,8 @@ "searchInternet": "Search Internet", "speechToText": "Speech to Text", "uploadImage": "Upload Image", - "stopStreaming": "Stop Streaming" + "stopStreaming": "Stop Streaming", + "knowledge": "Knowledge" }, "sendWhenEnter": "Send when Enter pressed" } \ No newline at end of file diff --git a/src/assets/locale/en/settings.json b/src/assets/locale/en/settings.json index 2aa6083..677fe2b 100644 --- a/src/assets/locale/en/settings.json +++ b/src/assets/locale/en/settings.json @@ -242,5 +242,9 @@ "koFi": "Support on Ko-fi", "githubSponsor": "Sponsor on GitHub", "githubRepo": "GitHub Repository" + }, + "manageKnowledge": { + "title": "Manage Knowledge", + "heading": "Configure Knowledge Base" } } \ No newline at end of file diff --git a/src/assets/locale/ja-JP/knownledge.json b/src/assets/locale/ja-JP/knownledge.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/src/assets/locale/ja-JP/knownledge.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/assets/locale/ja-JP/playground.json b/src/assets/locale/ja-JP/playground.json index d26dd66..a559d18 100644 --- a/src/assets/locale/ja-JP/playground.json +++ b/src/assets/locale/ja-JP/playground.json @@ -21,7 +21,8 @@ "searchInternet": "インターネットを検索", "speechToText": "音声入力", "uploadImage": "画像をアップロード", - "stopStreaming": "ストリーミングを停止" + "stopStreaming": "ストリーミングを停止", + "knowledge": "知識" }, "sendWhenEnter": "Enterキーを押すと送信" } \ No newline at end of file diff --git a/src/assets/locale/ml/knownledge.json b/src/assets/locale/ml/knownledge.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/src/assets/locale/ml/knownledge.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/assets/locale/ml/playground.json b/src/assets/locale/ml/playground.json index 7334837..0c6b7ee 100644 --- a/src/assets/locale/ml/playground.json +++ b/src/assets/locale/ml/playground.json @@ -21,7 +21,8 @@ "searchInternet": "ഇന്റര്‍നെറ്റ് തിരയുക", "speechToText": "സംഭാഷണം ടെക്സ്റ്റായി", "uploadImage": "ഇമേജ് അപ്‌ലോഡ് ചെയ്യുക", - "stopStreaming": "സ്ട്രീമിംഗ് നിർത്തുക" + "stopStreaming": "സ്ട്രീമിംഗ് നിർത്തുക", + "knowledge": "അറിവ്" }, "sendWhenEnter": "എന്റര്‍ അമര്‍ത്തുമ്പോള്‍ അയയ്ക്കുക" } \ No newline at end of file diff --git a/src/assets/locale/zh/knownledge.json b/src/assets/locale/zh/knownledge.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/src/assets/locale/zh/knownledge.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/assets/locale/zh/playground.json b/src/assets/locale/zh/playground.json index 0b9d9a4..84a591c 100644 --- a/src/assets/locale/zh/playground.json +++ b/src/assets/locale/zh/playground.json @@ -21,7 +21,8 @@ "searchInternet": "搜索互联网", "speechToText": "语音到文本", "uploadImage": "上传图片", - "stopStreaming": "停止流媒体" + "stopStreaming": "停止流媒体", + "knowledge": "知识" }, "sendWhenEnter": "按Enter发送" } \ No newline at end of file diff --git a/src/assets/tailwind.css b/src/assets/tailwind.css index f55882d..11ff412 100644 --- a/src/assets/tailwind.css +++ b/src/assets/tailwind.css @@ -55,3 +55,13 @@ background-position: 0% 50%; } } +/* Hide scrollbar for Chrome, Safari and Opera */ +.no-scrollbar::-webkit-scrollbar { + display: none; +} + +/* Hide scrollbar for IE, Edge and Firefox */ +.no-scrollbar { + -ms-overflow-style: none; /* IE and Edge */ + scrollbar-width: none; /* Firefox */ +} \ No newline at end of file diff --git a/src/components/Common/ShareBtn.tsx b/src/components/Common/ShareBtn.tsx index 1dfdc5f..98dddb1 100644 --- a/src/components/Common/ShareBtn.tsx +++ b/src/components/Common/ShareBtn.tsx @@ -7,7 +7,7 @@ import React from "react" import { useMutation } from "@tanstack/react-query" import { getPageShareUrl } from "~/services/ollama" import { cleanUrl } from "~/libs/clean-url" -import { getUserId, saveWebshare } from "~/libs/db" +import { getUserId, saveWebshare } from "@/db" import { useTranslation } from "react-i18next" type Props = { diff --git a/src/components/Layouts/Layout.tsx b/src/components/Layouts/Layout.tsx index 23e36db..f5455c1 100644 --- a/src/components/Layouts/Layout.tsx +++ b/src/components/Layouts/Layout.tsx @@ -15,7 +15,7 @@ import { SquarePen, ZapIcon } from "lucide-react" -import { getAllPrompts } from "~/libs/db" +import { getAllPrompts } from "@/db" import { ShareBtn } from "~/components/Common/ShareBtn" import { useTranslation } from "react-i18next" import { OllamaIcon } from "../Icons/Ollama" diff --git a/src/components/Layouts/SettingsOptionLayout.tsx b/src/components/Layouts/SettingsOptionLayout.tsx index 372dc0d..2fcb681 100644 --- a/src/components/Layouts/SettingsOptionLayout.tsx +++ b/src/components/Layouts/SettingsOptionLayout.tsx @@ -68,12 +68,12 @@ export const SettingsLayout = ({ children }: { children: React.ReactNode }) => { current={location.pathname} icon={BrainCircuit} /> - {/* */} + /> > +} + +export const AddKnowledge = ({ open, setOpen }: Props) => { + const { t } = useTranslation("knowledge") + const [form] = Form.useForm() + + const onUploadHandler = async (data: { + title: string + file: UploadFile[] + }) => { + const defaultEM = await defaultEmbeddingModelForRag() + + if (!defaultEM) { + throw new Error(t("noEmbeddingModel")) + } + + const source: Source[] = [] + + for (const file of data.file) { + const data = await convertToSource(file) + source.push(data) + } + + const knowledge = await createKnowledge({ + embedding_model: defaultEM, + source, + title: data.title + }) + + return knowledge.id + } + + const { mutate: saveKnowledge, isPending: isSaving } = useMutation({ + mutationFn: onUploadHandler, + onError: (error) => { + message.error(error.message) + }, + onSuccess: async (id) => { + message.success(t("form.success")) + PubSub.publish(KNOWLEDGE_QUEUE, id) + setOpen(false) + } + }) + + return ( + setOpen(false)}> +

+ + + + { + if (Array.isArray(e)) { + return e + } + return e?.fileList + }}> + { + const allowedTypes = [ + "application/pdf", + // "application/vnd.openxmlformats-officedocument.wordprocessingml.document", + "text/csv", + "text/plain" + ] + .map((type) => type.toLowerCase()) + .join(", ") + + if (!allowedTypes.includes(file.type.toLowerCase())) { + message.error( + t("form.uploadFile.uploadError", { allowedTypes }) + ) + return Upload.LIST_IGNORE + } + + return false + }}> +
+

+ +

+

+ {t("form.uploadFile.uploadText")} +

+

+ {t("form.uploadFile.uploadHint")} +

+
+
+
+ + + + + + + ) +} diff --git a/src/components/Option/Knowledge/KnowledgeSelect.tsx b/src/components/Option/Knowledge/KnowledgeSelect.tsx new file mode 100644 index 0000000..2ab6ca8 --- /dev/null +++ b/src/components/Option/Knowledge/KnowledgeSelect.tsx @@ -0,0 +1,51 @@ +import { getAllKnowledge } from "@/db/knowledge" +import { useQuery } from "@tanstack/react-query" +import { Dropdown, Tooltip } from "antd" +import { Blocks } from "lucide-react" +import React from "react" +import { useTranslation } from "react-i18next" + +export const KnowledgeSelect: React.FC = () => { + const { t } = useTranslation("playground") + const { data } = useQuery({ + queryKey: ["getAllKnowledge"], + queryFn: async () => { + const data = await getAllKnowledge("finished") + return data + }, + refetchInterval: 1000 + }) + + return ( + ({ + key: d.id, + label: ( +
+
+ +
+ {d.title} +
+ ), + onClick: () => {} + })) || [], + style: { + maxHeight: 500, + overflowY: "scroll" + }, + // hidescrollbars: true + className: "no-scrollbar" + }} + placement={"topLeft"} + trigger={["click"]}> + + + +
+ ) +} diff --git a/src/components/Option/Knowledge/index.tsx b/src/components/Option/Knowledge/index.tsx new file mode 100644 index 0000000..a3198bd --- /dev/null +++ b/src/components/Option/Knowledge/index.tsx @@ -0,0 +1,138 @@ +import { useState } from "react" +import { useTranslation } from "react-i18next" +import { AddKnowledge } from "./AddKnowledge" +import { + useMutation, + useQuery, + useQueryClient +} from "@tanstack/react-query" +import { deleteKnowledge, getAllKnowledge } from "@/db/knowledge" +import { Skeleton, Table, Tag, Tooltip, message } from "antd" +import { Trash2 } from "lucide-react" + +export const KnowledgeSettings = () => { + const { t } = useTranslation(["knownledge", "common"]) + const [open, setOpen] = useState(false) + const queryClient = useQueryClient() + + const { data, status } = useQuery({ + queryKey: ["fetchAllKnowledge"], + queryFn: () => getAllKnowledge(), + refetchInterval: 1000 + }) + + const { mutate: deleteKnowledgeMutation, isPending: isDeleting } = + useMutation({ + mutationFn: deleteKnowledge, + onSuccess: () => { + queryClient.invalidateQueries({ + queryKey: ["fetchAllKnowledge"] + }) + + message.success(t("deleteSuccess")) + }, + onError: (error) => { + message.error(error.message) + } + }) + + return ( +
+
+ {/* Add new model button */} +
+
+
+ +
+
+
+ {status === "pending" && } + + {status === "success" && ( + ( + {t(`status.${text}`)} + ) + }, + { + title: t("columns.embeddings"), + dataIndex: "embedding_model", + key: "embedding_model" + }, + { + title: t("columns.createdAt"), + dataIndex: "createdAt", + key: "createdAt", + render: (text: number) => new Date(text).toLocaleString() + }, + { + title: t("columns.action"), + key: "action", + render: (text: string, record: any) => ( +
+ + + +
+ ) + } + ]} + expandable={{ + expandedRowRender: (record) => ( +
+ ), + defaultExpandAllRows: false + }} + bordered + dataSource={data} + rowKey={(record) => `${record.name}-${record.id}`} + /> + )} + + + + + ) +} diff --git a/src/components/Option/Playground/PlaygroundForm.tsx b/src/components/Option/Playground/PlaygroundForm.tsx index 87c6005..4eec48c 100644 --- a/src/components/Option/Playground/PlaygroundForm.tsx +++ b/src/components/Option/Playground/PlaygroundForm.tsx @@ -4,7 +4,7 @@ import React from "react" import useDynamicTextareaSize from "~/hooks/useDynamicTextareaSize" import { toBase64 } from "~/libs/to-base64" import { useMessageOption } from "~/hooks/useMessageOption" -import { Checkbox, Dropdown, Switch, Tooltip } from "antd" +import { Checkbox, Dropdown, Select, Switch, Tooltip } from "antd" import { Image } from "antd" import { useSpeechRecognition } from "~/hooks/useSpeechRecognition" import { useWebUI } from "~/store/webui" @@ -12,6 +12,7 @@ import { defaultEmbeddingModelForRag } from "~/services/ollama" import { ImageIcon, MicIcon, StopCircleIcon, X } from "lucide-react" import { getVariable } from "~/utils/select-varaible" import { useTranslation } from "react-i18next" +import { KnowledgeSelect } from "../Knowledge/KnowledgeSelect" type Props = { dropedFile: File | undefined @@ -249,6 +250,7 @@ export const PlaygroundForm = ({ dropedFile }: Props) => {
+ + - + {!isSending ? ( { const queryClient = useQueryClient() diff --git a/src/components/Option/Settings/other.tsx b/src/components/Option/Settings/other.tsx index a608f98..3ae298b 100644 --- a/src/components/Option/Settings/other.tsx +++ b/src/components/Option/Settings/other.tsx @@ -1,7 +1,7 @@ import { useQueryClient } from "@tanstack/react-query" import { useDarkMode } from "~/hooks/useDarkmode" import { useMessageOption } from "~/hooks/useMessageOption" -import { PageAssitDatabase } from "~/libs/db" +import { PageAssitDatabase } from "@/db" import { Select } from "antd" import { SUPPORTED_LANGUAGES } from "~/utils/supporetd-languages" import { MoonIcon, SunIcon } from "lucide-react" diff --git a/src/components/Option/Share/index.tsx b/src/components/Option/Share/index.tsx index 5b1c3cb..8239a67 100644 --- a/src/components/Option/Share/index.tsx +++ b/src/components/Option/Share/index.tsx @@ -3,7 +3,7 @@ import { Form, Input, Skeleton, Table, Tooltip, message } from "antd" import { Trash2 } from "lucide-react" import { Trans, useTranslation } from "react-i18next" import { SaveButton } from "~/components/Common/SaveButton" -import { deleteWebshare, getAllWebshares, getUserId } from "~/libs/db" +import { deleteWebshare, getAllWebshares, getUserId } from "@/db" import { getPageShareUrl, setPageShareUrl } from "~/services/ollama" import { verifyPageShareURL } from "~/utils/verify-page-share" diff --git a/src/components/Option/Sidebar.tsx b/src/components/Option/Sidebar.tsx index 87628ff..e18f567 100644 --- a/src/components/Option/Sidebar.tsx +++ b/src/components/Option/Sidebar.tsx @@ -5,7 +5,7 @@ import { formatToMessage, deleteByHistoryId, updateHistory -} from "~/libs/db" +} from "@/db" import { Empty, Skeleton } from "antd" import { useMessageOption } from "~/hooks/useMessageOption" import { PencilIcon, Trash2 } from "lucide-react" diff --git a/src/libs/db.ts b/src/db/index.ts similarity index 100% rename from src/libs/db.ts rename to src/db/index.ts diff --git a/src/db/knowledge.ts b/src/db/knowledge.ts new file mode 100644 index 0000000..b853ead --- /dev/null +++ b/src/db/knowledge.ts @@ -0,0 +1,192 @@ +import { deleteVector, deleteVectorByFileId } from "./vector" + +export type Source = { + source_id: string + type: string + filename?: string + content: string +} + +export type Knowledge = { + id: string + db_type: string + title: string + status: string + embedding_model: string + source: Source[] + knownledge: any + createdAt: number +} +export const generateID = () => { + return "pa_knowledge_xxxx-xxxx-xxx-xxxx".replace(/[x]/g, () => { + const r = Math.floor(Math.random() * 16) + return r.toString(16) + }) +} +export class PageAssistKnowledge { + db: chrome.storage.StorageArea + + constructor() { + this.db = chrome.storage.local + } + + getAll = async (): Promise => { + return new Promise((resolve, reject) => { + this.db.get(null, (result) => { + if (chrome.runtime.lastError) { + reject(chrome.runtime.lastError) + } else { + const data = Object.keys(result).map((key) => result[key]) + resolve(data) + } + }) + }) + } + + getById = async (id: string): Promise => { + return new Promise((resolve, reject) => { + this.db.get(id, (result) => { + if (chrome.runtime.lastError) { + reject(chrome.runtime.lastError) + } else { + resolve(result[id]) + } + }) + }) + } + + create = async (knowledge: Knowledge): Promise => { + return new Promise((resolve, reject) => { + this.db.set({ [knowledge.id]: knowledge }, () => { + if (chrome.runtime.lastError) { + reject(chrome.runtime.lastError) + } else { + resolve() + } + }) + }) + } + + update = async (knowledge: Knowledge): Promise => { + return new Promise((resolve, reject) => { + this.db.set({ [knowledge.id]: knowledge }, () => { + if (chrome.runtime.lastError) { + reject(chrome.runtime.lastError) + } else { + resolve() + } + }) + }) + } + + delete = async (id: string): Promise => { + return new Promise((resolve, reject) => { + this.db.remove(id, () => { + if (chrome.runtime.lastError) { + reject(chrome.runtime.lastError) + } else { + resolve() + } + }) + }) + } + + deleteSource = async (id: string, source_id: string): Promise => { + return new Promise((resolve, reject) => { + this.db.get(id, (result) => { + if (chrome.runtime.lastError) { + reject(chrome.runtime.lastError) + } else { + const data = result[id] as Knowledge + data.source = data.source.filter((s) => s.source_id !== source_id) + this.db.set({ [id]: data }, () => { + if (chrome.runtime.lastError) { + reject(chrome.runtime.lastError) + } else { + resolve() + } + }) + } + }) + }) + } +} + +export const createKnowledge = async ({ + source, + title, + embedding_model +}: { + title: string + source: Source[] + embedding_model: string +}) => { + const db = new PageAssistKnowledge() + const id = generateID() + const knowledge: Knowledge = { + id, + title, + db_type: "knowledge", + source, + status: "pending", + knownledge: {}, + embedding_model, + createdAt: Date.now() + } + await db.create(knowledge) + return knowledge +} + +export const getKnowledgeById = async (id: string) => { + const db = new PageAssistKnowledge() + return db.getById(id) +} + +export const updateKnowledgeStatus = async (id: string, status: string) => { + const db = new PageAssistKnowledge() + const knowledge = await db.getById(id) + await db.update({ + ...knowledge, + status + }) +} + +export const getAllKnowledge = async (status?: string) => { + const db = new PageAssistKnowledge() + const data = await db.getAll() + + if (status) { + return data + .filter((d) => d.db_type === "knowledge") + .filter((d) => d.status === status) + .map((d) => { + d.source.forEach((s) => { + delete s.content + }) + return d + }) + .sort((a, b) => b.createdAt - a.createdAt) + } + + return data + .filter((d) => d.db_type === "knowledge") + .map((d) => { + d.source.forEach((s) => { + delete s.content + }) + return d + }) + .sort((a, b) => b.createdAt - a.createdAt) +} + +export const deleteKnowledge = async (id: string) => { + const db = new PageAssistKnowledge() + await db.delete(id) + await deleteVector(`vector:${id}`) +} + +export const deleteSource = async (id: string, source_id: string) => { + const db = new PageAssistKnowledge() + await db.deleteSource(id, source_id) + await deleteVectorByFileId(`vector:${id}`, source_id) +} diff --git a/src/db/vector.ts b/src/db/vector.ts new file mode 100644 index 0000000..0feb3b7 --- /dev/null +++ b/src/db/vector.ts @@ -0,0 +1,131 @@ +interface PageAssistVector { + file_id: string + content: string + embedding: number[] + metadata: Record +} + +export type VectorData = { + id: string + vectors: PageAssistVector[] +} + +export class PageAssistVectorDb { + db: chrome.storage.StorageArea + + constructor() { + this.db = chrome.storage.local + } + + insertVector = async ( + id: string, + vector: PageAssistVector[] + ): Promise => { + return new Promise((resolve, reject) => { + this.db.get(id, (result) => { + if (chrome.runtime.lastError) { + reject(chrome.runtime.lastError) + } else { + const data = result[id] as VectorData + if (!data) { + console.log("Creating new vector") + this.db.set({ [id]: { id, vectors: [vector] } }, () => { + if (chrome.runtime.lastError) { + reject(chrome.runtime.lastError) + } else { + resolve() + } + }) + } else { + console.log("Concatenating vectors") + this.db.set( + { + [id]: { + ...data, + vectors: data.vectors.concat(vector) + } + }, + () => { + if (chrome.runtime.lastError) { + reject(chrome.runtime.lastError) + } else { + resolve() + } + } + ) + } + } + }) + }) + } + + deleteVector = async (id: string): Promise => { + return new Promise((resolve, reject) => { + this.db.remove(id, () => { + if (chrome.runtime.lastError) { + reject(chrome.runtime.lastError) + } else { + resolve() + } + }) + }) + } + + deleteVectorByFileId = async (id: string, file_id: string): Promise => { + return new Promise((resolve, reject) => { + this.db.get(id, (result) => { + if (chrome.runtime.lastError) { + reject(chrome.runtime.lastError) + } else { + const data = result[id] as VectorData + data.vectors = data.vectors.filter((v) => v.file_id !== file_id) + this.db.set({ [id]: data }, () => { + if (chrome.runtime.lastError) { + reject(chrome.runtime.lastError) + } else { + resolve() + } + }) + } + }) + }) + } + + getVector = async (id: string): Promise => { + return new Promise((resolve, reject) => { + this.db.get(id, (result) => { + if (chrome.runtime.lastError) { + reject(chrome.runtime.lastError) + } else { + resolve(result[id] as VectorData) + } + }) + }) + } +} + +export const insertVector = async ( + id: string, + vector: PageAssistVector[] +): Promise => { + const db = new PageAssistVectorDb() + return db.insertVector(id, vector) +} + +export const getVector = async (id: string): Promise => { + const db = new PageAssistVectorDb() + return db.getVector(id) +} + +export const deleteVector = async (id: string): Promise => { + const db = new PageAssistVectorDb() + return db.deleteVector(id) +} + +export const deleteVectorByFileId = async ( + id: string, + file_id: string +): Promise => { + const db = new PageAssistVectorDb() + return db.deleteVectorByFileId(id, file_id) +} diff --git a/src/entries/background.ts b/src/entries/background.ts index d4f075b..5767b7c 100644 --- a/src/entries/background.ts +++ b/src/entries/background.ts @@ -1,4 +1,4 @@ - +import { processKnowledge } from "@/libs/process-knowledge" import { getOllamaURL, isOllamaRunning } from "../services/ollama" const progressHuman = (completed: number, total: number) => { return ((completed / total) * 100).toFixed(0) + "%" @@ -78,13 +78,16 @@ export default defineBackground({ main() { chrome.runtime.onMessage.addListener(async (message) => { if (message.type === "sidepanel") { - chrome.tabs.query({ active: true, currentWindow: true }, async (tabs) => { - const tab = tabs[0] - chrome.sidePanel.open({ - // tabId: tab.id!, - windowId: tab.windowId!, - }) - }) + chrome.tabs.query( + { active: true, currentWindow: true }, + async (tabs) => { + const tab = tabs[0] + chrome.sidePanel.open({ + // tabId: tab.id!, + windowId: tab.windowId! + }) + } + ) } else if (message.type === "pull_model") { const ollamaURL = await getOllamaURL() @@ -93,8 +96,7 @@ export default defineBackground({ if (!isRunning) { chrome.action.setBadgeText({ text: "E" }) chrome.action.setBadgeBackgroundColor({ color: "#FF0000" }) - chrome.action.setTitle({ title: "Ollama is not running" - }) + chrome.action.setTitle({ title: "Ollama is not running" }) setTimeout(() => { clearBadge() }, 5000) @@ -111,12 +113,15 @@ export default defineBackground({ chrome.commands.onCommand.addListener((command) => { switch (command) { case "execute_side_panel": - chrome.tabs.query({ active: true, currentWindow: true }, async (tabs) => { - const tab = tabs[0] - chrome.sidePanel.open({ - windowId: tab.windowId! - }) - }) + chrome.tabs.query( + { active: true, currentWindow: true }, + async (tabs) => { + const tab = tabs[0] + chrome.sidePanel.open({ + windowId: tab.windowId! + }) + } + ) break default: break @@ -131,14 +136,17 @@ export default defineBackground({ chrome.contextMenus.onClicked.addListener((info, tab) => { if (info.menuItemId === "open-side-panel-pa") { - chrome.tabs.query({ active: true, currentWindow: true }, async (tabs) => { - const tab = tabs[0] - await chrome.sidePanel.open({ - windowId: tab.windowId!, - }) - }) + chrome.tabs.query( + { active: true, currentWindow: true }, + async (tabs) => { + const tab = tabs[0] + await chrome.sidePanel.open({ + windowId: tab.windowId! + }) + } + ) } }) }, persistent: true -}) \ No newline at end of file +}) diff --git a/src/hooks/chat-helper/index.ts b/src/hooks/chat-helper/index.ts index 51d320c..15562ec 100644 --- a/src/hooks/chat-helper/index.ts +++ b/src/hooks/chat-helper/index.ts @@ -1,4 +1,4 @@ -import { saveHistory, saveMessage } from "@/libs/db" +import { saveHistory, saveMessage } from "@/db" import { ChatHistory } from "@/store/option" export const saveMessageOnError = async ({ diff --git a/src/hooks/useMessageOption.tsx b/src/hooks/useMessageOption.tsx index f0b0d63..880757e 100644 --- a/src/hooks/useMessageOption.tsx +++ b/src/hooks/useMessageOption.tsx @@ -15,7 +15,7 @@ import { getPromptById, removeMessageUsingHistoryId, updateMessageByIndex -} from "~/libs/db" +} from "@/db" import { useNavigate } from "react-router-dom" import { notification } from "antd" import { getSystemPromptForWeb } from "~/web/web" diff --git a/src/i18n/lang/en.ts b/src/i18n/lang/en.ts index 182fc03..dd5a801 100644 --- a/src/i18n/lang/en.ts +++ b/src/i18n/lang/en.ts @@ -3,12 +3,13 @@ import playground from "@/assets/locale/en/playground.json"; import common from "@/assets/locale/en/common.json"; import sidepanel from "@/assets/locale/en/sidepanel.json"; import settings from "@/assets/locale/en/settings.json"; - +import knownledge from "@/assets/locale/en/knownledge.json"; export const en = { option, playground, common, sidepanel, - settings + settings, + knownledge } \ No newline at end of file diff --git a/src/i18n/lang/ja.ts b/src/i18n/lang/ja.ts index 2026585..37095a3 100644 --- a/src/i18n/lang/ja.ts +++ b/src/i18n/lang/ja.ts @@ -3,6 +3,7 @@ import playground from "@/assets/locale/ja-JP/playground.json"; import common from "@/assets/locale/ja-JP/common.json"; import sidepanel from "@/assets/locale/ja-JP/sidepanel.json"; import settings from "@/assets/locale/ja-JP/settings.json"; +import knownledge from "@/assets/locale/ja-JP/knownledge.json"; export const ja = { @@ -10,5 +11,6 @@ export const ja = { playground, common, sidepanel, - settings + settings, + knownledge } \ No newline at end of file diff --git a/src/i18n/lang/ml.ts b/src/i18n/lang/ml.ts index 315e9c4..1cb8e7d 100644 --- a/src/i18n/lang/ml.ts +++ b/src/i18n/lang/ml.ts @@ -3,12 +3,13 @@ import playground from "@/assets/locale/ml/playground.json"; import common from "@/assets/locale/ml/common.json"; import sidepanel from "@/assets/locale/ml/sidepanel.json"; import settings from "@/assets/locale/ml/settings.json"; - +import knownledge from "@/assets/locale/ml/knownledge.json"; export const ml = { option, playground, common, sidepanel, - settings + settings, + knownledge } \ No newline at end of file diff --git a/src/i18n/lang/zh.ts b/src/i18n/lang/zh.ts index 0b816dc..2d55196 100644 --- a/src/i18n/lang/zh.ts +++ b/src/i18n/lang/zh.ts @@ -3,6 +3,7 @@ import playground from "@/assets/locale/zh/playground.json"; import common from "@/assets/locale/zh/common.json"; import sidepanel from "@/assets/locale/zh/sidepanel.json"; import settings from "@/assets/locale/zh/settings.json"; +import knownledge from "@/assets/locale/zh/knownledge.json"; export const zh = { @@ -10,5 +11,6 @@ export const zh = { playground, common, sidepanel, - settings + settings, + knownledge } \ No newline at end of file diff --git a/src/libs/PageAssistVectorStore.ts b/src/libs/PageAssistVectorStore.ts new file mode 100644 index 0000000..f3ae7b4 --- /dev/null +++ b/src/libs/PageAssistVectorStore.ts @@ -0,0 +1,201 @@ +import { similarity as ml_distance_similarity } from "ml-distance" +import { VectorStore } from "@langchain/core/vectorstores" +import type { EmbeddingsInterface } from "@langchain/core/embeddings" +import { Document } from "@langchain/core/documents" +import { getVector, insertVector } from "@/db/vector" + +/** + * Interface representing a vector in memory. It includes the content + * (text), the corresponding embedding (vector), and any associated + * metadata. + */ +interface PageAssistVector { + content: string + embedding: number[] + metadata: Record +} + +/** + * Interface for the arguments that can be passed to the + * `MemoryVectorStore` constructor. It includes an optional `similarity` + * function. + */ +export interface MemoryVectorStoreArgs { + knownledge_id: string + file_id?: string + similarity?: typeof ml_distance_similarity.cosine +} + +/** + * Class that extends `VectorStore` to store vectors in memory. Provides + * methods for adding documents, performing similarity searches, and + * creating instances from texts, documents, or an existing index. + */ +export class PageAssistVectorStore extends VectorStore { + declare FilterType: (doc: Document) => boolean + + knownledge_id: string + + file_id?: string + + // memoryVectors: PageAssistVector[] = [] + + similarity: typeof ml_distance_similarity.cosine + + _vectorstoreType(): string { + return "memory" + } + + constructor(embeddings: EmbeddingsInterface, args: MemoryVectorStoreArgs) { + super(embeddings, args) + + this.similarity = args?.similarity ?? ml_distance_similarity.cosine + + this.knownledge_id = args?.knownledge_id! + + this.file_id = args?.file_id + } + + /** + * Method to add documents to the memory vector store. It extracts the + * text from each document, generates embeddings for them, and adds the + * resulting vectors to the store. + * @param documents Array of `Document` instances to be added to the store. + * @returns Promise that resolves when all documents have been added. + */ + async addDocuments(documents: Document[]): Promise { + const texts = documents.map(({ pageContent }) => pageContent) + return this.addVectors( + await this.embeddings.embedDocuments(texts), + documents + ) + } + + /** + * Method to add vectors to the memory vector store. It creates + * `PageAssistVector` instances for each vector and document pair and adds + * them to the store. + * @param vectors Array of vectors to be added to the store. + * @param documents Array of `Document` instances corresponding to the vectors. + * @returns Promise that resolves when all vectors have been added. + */ + async addVectors(vectors: number[][], documents: Document[]): Promise { + const memoryVectors = vectors.map((embedding, idx) => ({ + content: documents[idx].pageContent, + embedding, + metadata: documents[idx].metadata, + file_id: this.file_id + })) + console.log(`vector:${this.knownledge_id}`) + await insertVector(`vector:${this.knownledge_id}`, memoryVectors) + } + + /** + * Method to perform a similarity search in the memory vector store. It + * calculates the similarity between the query vector and each vector in + * the store, sorts the results by similarity, and returns the top `k` + * results along with their scores. + * @param query Query vector to compare against the vectors in the store. + * @param k Number of top results to return. + * @param filter Optional filter function to apply to the vectors before performing the search. + * @returns Promise that resolves with an array of tuples, each containing a `Document` and its similarity score. + */ + async similaritySearchVectorWithScore( + query: number[], + k: number, + filter?: this["FilterType"] + ): Promise<[Document, number][]> { + const filterFunction = (memoryVector: PageAssistVector) => { + if (!filter) { + return true + } + + const doc = new Document({ + metadata: memoryVector.metadata, + pageContent: memoryVector.content + }) + return filter(doc) + } + const pgVector = await getVector(`vector:${this.knownledge_id}`) + const filteredMemoryVectors = pgVector.vectors.filter(filterFunction) + const searches = filteredMemoryVectors + .map((vector, index) => ({ + similarity: this.similarity(query, vector.embedding), + index + })) + .sort((a, b) => (a.similarity > b.similarity ? -1 : 0)) + .slice(0, k) + + const result: [Document, number][] = searches.map((search) => [ + new Document({ + metadata: filteredMemoryVectors[search.index].metadata, + pageContent: filteredMemoryVectors[search.index].content + }), + search.similarity + ]) + + return result + } + + /** + * Static method to create a `MemoryVectorStore` instance from an array of + * texts. It creates a `Document` for each text and metadata pair, and + * adds them to the store. + * @param texts Array of texts to be added to the store. + * @param metadatas Array or single object of metadata corresponding to the texts. + * @param embeddings `Embeddings` instance used to generate embeddings for the texts. + * @param dbConfig Optional `MemoryVectorStoreArgs` to configure the `MemoryVectorStore` instance. + * @returns Promise that resolves with a new `MemoryVectorStore` instance. + */ + static async fromTexts( + texts: string[], + metadatas: object[] | object, + embeddings: EmbeddingsInterface, + dbConfig?: MemoryVectorStoreArgs + ): Promise { + const docs: Document[] = [] + for (let i = 0; i < texts.length; i += 1) { + const metadata = Array.isArray(metadatas) ? metadatas[i] : metadatas + const newDoc = new Document({ + pageContent: texts[i], + metadata + }) + docs.push(newDoc) + } + return PageAssistVectorStore.fromDocuments(docs, embeddings, dbConfig) + } + + /** + * Static method to create a `MemoryVectorStore` instance from an array of + * `Document` instances. It adds the documents to the store. + * @param docs Array of `Document` instances to be added to the store. + * @param embeddings `Embeddings` instance used to generate embeddings for the documents. + * @param dbConfig Optional `MemoryVectorStoreArgs` to configure the `MemoryVectorStore` instance. + * @returns Promise that resolves with a new `MemoryVectorStore` instance. + */ + static async fromDocuments( + docs: Document[], + embeddings: EmbeddingsInterface, + dbConfig?: MemoryVectorStoreArgs + ): Promise { + const instance = new this(embeddings, dbConfig) + await instance.addDocuments(docs) + return instance + } + + /** + * Static method to create a `MemoryVectorStore` instance from an existing + * index. It creates a new `MemoryVectorStore` instance without adding any + * documents or vectors. + * @param embeddings `Embeddings` instance used to generate embeddings for the documents. + * @param dbConfig Optional `MemoryVectorStoreArgs` to configure the `MemoryVectorStore` instance. + * @returns Promise that resolves with a new `MemoryVectorStore` instance. + */ + static async fromExistingIndex( + embeddings: EmbeddingsInterface, + dbConfig?: MemoryVectorStoreArgs + ): Promise { + const instance = new this(embeddings, dbConfig) + return instance + } +} diff --git a/src/libs/get-html.ts b/src/libs/get-html.ts index 465e480..bed1f43 100644 --- a/src/libs/get-html.ts +++ b/src/libs/get-html.ts @@ -1,28 +1,4 @@ -import { pdfDist } from "./pdfjs" - -export const getPdf = async (data: ArrayBuffer) => { - const pdf = pdfDist.getDocument({ - data, - useWorkerFetch: false, - isEvalSupported: false, - useSystemFonts: true, - }); - - pdf.onPassword = (callback: any) => { - const password = prompt("Enter the password: ") - if (!password) { - throw new Error("Password required to open the PDF."); - } - callback(password); - }; - - - const pdfDocument = await pdf.promise; - - - return pdfDocument - -} +import { getPdf } from "./pdf" const _getHtml = async () => { const url = window.location.href diff --git a/src/libs/pdf.ts b/src/libs/pdf.ts new file mode 100644 index 0000000..d1eede4 --- /dev/null +++ b/src/libs/pdf.ts @@ -0,0 +1,29 @@ +import { pdfDist } from "./pdfjs" + +export const getPdf = async (data: ArrayBuffer) => { + const pdf = pdfDist.getDocument({ + data, + useWorkerFetch: false, + isEvalSupported: false, + useSystemFonts: true + }) + + pdf.onPassword = (callback: any) => { + const password = prompt("Enter the password: ") + if (!password) { + throw new Error("Password required to open the PDF.") + } + callback(password) + } + + const pdfDocument = await pdf.promise + + return pdfDocument +} + +export const processPdf = async (base64: string) => { + const res = await fetch(base64) + const data = await res.arrayBuffer() + const pdf = await getPdf(data) + return pdf +} diff --git a/src/libs/process-knowledge.ts b/src/libs/process-knowledge.ts new file mode 100644 index 0000000..d98cf17 --- /dev/null +++ b/src/libs/process-knowledge.ts @@ -0,0 +1,55 @@ +import { getKnowledgeById, updateKnowledgeStatus } from "@/db/knowledge" +import { PageAssistPDFUrlLoader } from "@/loader/pdf-url" +import { + defaultEmbeddingChunkOverlap, + defaultEmbeddingChunkSize +} from "@/services/ollama" +import { OllamaEmbeddings } from "@langchain/community/embeddings/ollama" +import { RecursiveCharacterTextSplitter } from "langchain/text_splitter" +import { PageAssistVectorStore } from "./PageAssistVectorStore" + +export const processKnowledge = async (msg: any, id: string): Promise => { + console.log(`Processing knowledge with id: ${id}`) + try { + const knowledge = await getKnowledgeById(id) + + if (!knowledge) { + console.error(`Knowledge with id ${id} not found`) + return + } + + await updateKnowledgeStatus(id, "processing") + + const ollamaEmbedding = new OllamaEmbeddings({ + model: knowledge.embedding_model + }) + const chunkSize = await defaultEmbeddingChunkSize() + const chunkOverlap = await defaultEmbeddingChunkOverlap() + const textSplitter = new RecursiveCharacterTextSplitter({ + chunkSize, + chunkOverlap + }) + + for (const doc of knowledge.source) { + if (doc.type === "pdf" || doc.type === "application/pdf") { + const loader = new PageAssistPDFUrlLoader({ + name: doc.filename, + url: doc.content + }) + let docs = await loader.load() + const chunks = await textSplitter.splitDocuments(docs) + await PageAssistVectorStore.fromDocuments(chunks, ollamaEmbedding, { + knownledge_id: knowledge.id, + file_id: doc.source_id + }) + } + } + + await updateKnowledgeStatus(id, "finished") + } catch (error) { + console.error(`Error processing knowledge with id: ${id}`, error) + await updateKnowledgeStatus(id, "failed") + } finally { + console.log(`Finished processing knowledge with id: ${id}`) + } +} diff --git a/src/loader/pdf-url.ts b/src/loader/pdf-url.ts new file mode 100644 index 0000000..3124085 --- /dev/null +++ b/src/loader/pdf-url.ts @@ -0,0 +1,49 @@ +import { BaseDocumentLoader } from "langchain/document_loaders/base" +import { Document } from "@langchain/core/documents" +import { processPdf } from "@/libs/pdf" +export interface WebLoaderParams { + url: string + name: string +} + +export class PageAssistPDFUrlLoader + extends BaseDocumentLoader + implements WebLoaderParams +{ + pdf: { content: string; page: number }[] + url: string + name: string + + constructor({ url, name }: WebLoaderParams) { + super() + this.url = url + this.name = name + } + + async load(): Promise>[]> { + const documents: Document[] = [] + + const data = await processPdf(this.url) + + for (let i = 1; i <= data.numPages; i += 1) { + const page = await data.getPage(i) + const content = await page.getTextContent() + + if (content?.items.length === 0) { + continue + } + + const text = content?.items + .map((item: any) => item.str) + .join("\n") + .replace(/\x00/g, "") + .trim() + documents.push({ + pageContent: text, + metadata: { source: this.name, page: i } + }) + } + + return documents + } +} diff --git a/src/loader/pdf.ts b/src/loader/pdf.ts index 097460b..d17fd79 100644 --- a/src/loader/pdf.ts +++ b/src/loader/pdf.ts @@ -1,37 +1,36 @@ import { BaseDocumentLoader } from "langchain/document_loaders/base" import { Document } from "@langchain/core/documents" export interface WebLoaderParams { - pdf: { content: string, page: number }[] - url: string + pdf: { content: string; page: number }[] + url: string } export class PageAssistPDFLoader - extends BaseDocumentLoader - implements WebLoaderParams { - pdf: { content: string, page: number }[] - url: string + extends BaseDocumentLoader + implements WebLoaderParams +{ + pdf: { content: string; page: number }[] + url: string - constructor({ pdf, url }: WebLoaderParams) { - super() - this.pdf = pdf - this.url = url + constructor({ pdf, url }: WebLoaderParams) { + super() + this.pdf = pdf + this.url = url + } + + async load(): Promise>[]> { + const documents: Document[] = [] + + for (const page of this.pdf) { + const metadata = { source: this.url, page: page.page } + documents.push(new Document({ pageContent: page.content, metadata })) } - async load(): Promise>[]> { - const documents: Document[] = []; - - for (const page of this.pdf) { - const metadata = { source: this.url, page: page.page } - documents.push(new Document({ pageContent: page.content, metadata })) - } - - return [ - new Document({ - pageContent: documents.map((doc) => doc.pageContent).join("\n\n"), - metadata: documents.map((doc) => doc.metadata), - }), - ]; - - - } + return [ + new Document({ + pageContent: documents.map((doc) => doc.pageContent).join("\n\n"), + metadata: documents.map((doc) => doc.metadata) + }) + ] + } } diff --git a/src/queue/index.ts b/src/queue/index.ts new file mode 100644 index 0000000..f35a382 --- /dev/null +++ b/src/queue/index.ts @@ -0,0 +1,6 @@ +import { processKnowledge } from "@/libs/process-knowledge" +import PubSub from "pubsub-js" + +export const KNOWLEDGE_QUEUE = Symbol("queue") + +PubSub.subscribe(KNOWLEDGE_QUEUE, processKnowledge) diff --git a/src/routes/option-settings-knowledge.tsx b/src/routes/option-settings-knowledge.tsx index 0d8c573..aedddd3 100644 --- a/src/routes/option-settings-knowledge.tsx +++ b/src/routes/option-settings-knowledge.tsx @@ -1,11 +1,12 @@ import { SettingsLayout } from "~/components/Layouts/SettingsOptionLayout" import OptionLayout from "~/components/Layouts/Layout" +import { KnowledgeSettings } from "@/components/Option/Knowledge" export const OptionKnowledgeBase = () => { return ( - hey + ) diff --git a/src/utils/to-source.ts b/src/utils/to-source.ts new file mode 100644 index 0000000..ecc5454 --- /dev/null +++ b/src/utils/to-source.ts @@ -0,0 +1,32 @@ +import { Source } from "@/db/knowledge" +import { UploadFile } from "antd" + +export const toBase64 = (file: File | Blob): Promise => { + return new Promise((resolve, reject) => { + const reader = new FileReader() + reader.readAsDataURL(file) + reader.onload = () => resolve(reader.result as string) + reader.onerror = (error) => reject(error) + }) +} + +export const toArrayBufferFromBase64 = async (base64: string) => { + const res = await fetch(base64) + const blob = await res.blob() + return await blob.arrayBuffer() +} + +export const generateSourceId = () => { + return "XXXXXXXX-XXXX-4XXX-YXXX-XXXXXXXXXXXX".replace(/[XY]/g, (c) => { + const r = (Math.random() * 16) | 0 + const v = c === "X" ? r : (r & 0x3) | 0x8 + return v.toString(16) + }) +} + +export const convertToSource = async (file: UploadFile): Promise => { + let type = file.type + let filename = file.name + const content = await toBase64(file.originFileObj) + return { content, type, filename, source_id: generateSourceId() } +} diff --git a/wxt.config.ts b/wxt.config.ts index 05526d4..954dfb9 100644 --- a/wxt.config.ts +++ b/wxt.config.ts @@ -24,7 +24,7 @@ export default defineConfig({ srcDir: "src", outDir: "build", manifest: { - version: "1.1.1", + version: "1.1.2", name: '__MSG_extName__', description: '__MSG_extDescription__', default_locale: 'en',