feat: Update useMessage hook with website embedding options and improvements

This commit is contained in:
n4ze3m 2024-07-22 00:36:27 +05:30
parent 498f4a02d2
commit 9521707160

View File

@ -44,8 +44,16 @@ export const useMessage = () => {
const { t } = useTranslation("option") const { t } = useTranslation("option")
const [selectedModel, setSelectedModel] = useStorage("selectedModel") const [selectedModel, setSelectedModel] = useStorage("selectedModel")
const currentChatModelSettings = useStoreChatModelSettings() const currentChatModelSettings = useStoreChatModelSettings()
const { setIsSearchingInternet, webSearch, setWebSearch, isSearchingInternet } = const {
useStoreMessageOption() setIsSearchingInternet,
webSearch,
setWebSearch,
isSearchingInternet
} = useStoreMessageOption()
const [chatWithWebsiteEmbedding] = useStorage("chatWithWebsiteEmbedding", true)
const [maxWebsiteContext] = useStorage("maxWebsiteContext", 4028)
const { const {
history, history,
@ -150,35 +158,34 @@ export const useMessage = () => {
setMessages(newMessage) setMessages(newMessage)
let fullText = "" let fullText = ""
let contentToSave = "" let contentToSave = ""
let isAlreadyExistEmbedding: MemoryVectorStore
let embedURL: string, embedHTML: string, embedType: string let embedURL: string, embedHTML: string, embedType: string
let embedPDF: { content: string; page: number }[] = [] let embedPDF: { content: string; page: number }[] = []
if (messages.length === 0) { let isAlreadyExistEmbedding: MemoryVectorStore
const { content: html, url, type, pdf } = await getDataFromCurrentTab() const {
content: html,
url: websiteUrl,
type,
pdf
} = await getDataFromCurrentTab()
embedHTML = html embedHTML = html
embedURL = url embedURL = websiteUrl
embedType = type embedType = type
embedPDF = pdf embedPDF = pdf
setCurrentURL(url)
console.log(embedHTML)
if (messages.length === 0) {
setCurrentURL(websiteUrl)
isAlreadyExistEmbedding = keepTrackOfEmbedding[currentURL] isAlreadyExistEmbedding = keepTrackOfEmbedding[currentURL]
} else { } else {
const { content: html, url, type, pdf } = await getDataFromCurrentTab() if (currentURL !== websiteUrl) {
if (currentURL !== url) { setCurrentURL(websiteUrl)
embedHTML = html
embedURL = url
embedType = type
embedPDF = pdf
setCurrentURL(url)
} else { } else {
embedHTML = html
embedURL = currentURL embedURL = currentURL
embedType = type
embedPDF = pdf
} }
isAlreadyExistEmbedding = keepTrackOfEmbedding[url] isAlreadyExistEmbedding = keepTrackOfEmbedding[websiteUrl]
} }
setMessages(newMessage) setMessages(newMessage)
const ollamaUrl = await getOllamaURL() const ollamaUrl = await getOllamaURL()
const embeddingModle = await defaultEmbeddingModelForRag() const embeddingModle = await defaultEmbeddingModelForRag()
@ -198,6 +205,7 @@ export const useMessage = () => {
vectorstore = isAlreadyExistEmbedding vectorstore = isAlreadyExistEmbedding
console.log("Embedding already exist") console.log("Embedding already exist")
} else { } else {
if (chatWithWebsiteEmbedding) {
vectorstore = await memoryEmbedding({ vectorstore = await memoryEmbedding({
html: embedHTML, html: embedHTML,
keepTrackOfEmbedding: keepTrackOfEmbedding, keepTrackOfEmbedding: keepTrackOfEmbedding,
@ -208,7 +216,7 @@ export const useMessage = () => {
type: embedType, type: embedType,
url: embedURL url: embedURL
}) })
}
console.log("Embedding created") console.log("Embedding created")
} }
let query = message let query = message
@ -247,9 +255,20 @@ export const useMessage = () => {
query = response.content.toString() query = response.content.toString()
} }
let context: string = ""
let source: {
name: any
type: any
mode: string
url: string
pageContent: string
metadata: Record<string, any>
}[] = []
if (chatWithWebsiteEmbedding) {
const docs = await vectorstore.similaritySearch(query, 4) const docs = await vectorstore.similaritySearch(query, 4)
const context = formatDocs(docs) context = formatDocs(docs)
const source = docs.map((doc) => { source = docs.map((doc) => {
return { return {
...doc, ...doc,
name: doc?.metadata?.source || "untitled", name: doc?.metadata?.source || "untitled",
@ -258,14 +277,37 @@ export const useMessage = () => {
url: "" url: ""
} }
}) })
// message = message.trim().replaceAll("\n", " ") } else {
if (type === "html") {
context = embedHTML.slice(0, maxWebsiteContext)
} else {
context = embedPDF
.map((pdf) => pdf.content)
.join(" ")
.slice(0, maxWebsiteContext)
}
source = [
{
name: embedURL,
type: type,
mode: "chat",
url: embedURL,
pageContent: context,
metadata: {
source: embedURL,
url: embedURL
}
}
]
}
let humanMessage = new HumanMessage({ let humanMessage = new HumanMessage({
content: [ content: [
{ {
text: systemPrompt text: systemPrompt
.replace("{context}", context) .replace("{context}", context)
.replace("{question}", message), .replace("{question}", query),
type: "text" type: "text"
} }
] ]
@ -299,7 +341,7 @@ export const useMessage = () => {
}) })
count++ count++
} }
// update the message with the full text
setMessages((prev) => { setMessages((prev) => {
return prev.map((message) => { return prev.map((message) => {
if (message.id === generateMessageId) { if (message.id === generateMessageId) {
@ -976,6 +1018,6 @@ export const useMessage = () => {
regenerateLastMessage, regenerateLastMessage,
webSearch, webSearch,
setWebSearch, setWebSearch,
isSearchingInternet, isSearchingInternet
} }
} }