From 99ae8f6998f954a98e855f861875561151551108 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns Date: Wed, 24 Apr 2024 10:08:40 +0530 Subject: [PATCH] feat(agents): embed docs & query together Embed documents and query together to reduce the time taken for retrieving the sources ~1 seconds. --- README.md | 6 +++--- docker-compose.yaml | 1 + src/agents/academicSearchAgent.ts | 9 ++++----- src/agents/redditSearchAgent.ts | 9 ++++----- src/agents/webSearchAgent.ts | 9 ++++----- src/agents/youtubeSearchAgent.ts | 9 ++++----- 6 files changed, 20 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index fae0c7a..f9eaa22 100644 --- a/README.md +++ b/README.md @@ -30,9 +30,9 @@ Perplexica is an open-source AI-powered searching tool or an AI-powered search e - **Copilot Mode:** (In development) Boosts search by generating different queries to find more relevant internet sources. Like normal search instead of just using the context by SearxNG, it visits the top matches and tries to find relevant sources to the user's query directly from the page. - **Normal Mode:** Processes your query and performs a web search. - **Focus Modes:** Special modes to better answer specific types of questions. Perplexica currently has 6 focus modes: - - **All Mode:** Searches the entire web to find the best results. - - **Writing Assistant Mode:** Helpful for writing tasks that does not require searching the web. - - **Academic Search Mode:** Finds articles and papers, ideal for academic research. + - **All Mode:** Searches the entire web to find the best results. + - **Writing Assistant Mode:** Helpful for writing tasks that does not require searching the web. + - **Academic Search Mode:** Finds articles and papers, ideal for academic research. - **YouTube Search Mode:** Finds YouTube videos based on the search query. - **Wolfram Alpha Search Mode:** Answers queries that need calculations or data analysis using Wolfram Alpha. - **Reddit Search Mode:** Searches Reddit for discussions and opinions related to the query. diff --git a/docker-compose.yaml b/docker-compose.yaml index 3a73660..2ca3ca5 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -9,6 +9,7 @@ services: - 4000:8080 networks: - perplexica-network + perplexica-backend: build: context: . diff --git a/src/agents/academicSearchAgent.ts b/src/agents/academicSearchAgent.ts index e944946..ac2aa8c 100644 --- a/src/agents/academicSearchAgent.ts +++ b/src/agents/academicSearchAgent.ts @@ -166,11 +166,10 @@ const createBasicAcademicSearchAnsweringChain = ( (doc) => doc.pageContent && doc.pageContent.length > 0, ); - const docEmbeddings = await embeddings.embedDocuments( - docsWithContent.map((doc) => doc.pageContent), - ); - - const queryEmbedding = await embeddings.embedQuery(query); + const [docEmbeddings, queryEmbedding] = await Promise.all([ + embeddings.embedDocuments(docsWithContent.map((doc) => doc.pageContent)), + embeddings.embedQuery(query), + ]); const similarity = docEmbeddings.map((docEmbedding, i) => { const sim = computeSimilarity(queryEmbedding, docEmbedding); diff --git a/src/agents/redditSearchAgent.ts b/src/agents/redditSearchAgent.ts index 9b460da..4fee20a 100644 --- a/src/agents/redditSearchAgent.ts +++ b/src/agents/redditSearchAgent.ts @@ -161,11 +161,10 @@ const createBasicRedditSearchAnsweringChain = ( (doc) => doc.pageContent && doc.pageContent.length > 0, ); - const docEmbeddings = await embeddings.embedDocuments( - docsWithContent.map((doc) => doc.pageContent), - ); - - const queryEmbedding = await embeddings.embedQuery(query); + const [docEmbeddings, queryEmbedding] = await Promise.all([ + embeddings.embedDocuments(docsWithContent.map((doc) => doc.pageContent)), + embeddings.embedQuery(query), + ]); const similarity = docEmbeddings.map((docEmbedding, i) => { const sim = computeSimilarity(queryEmbedding, docEmbedding); diff --git a/src/agents/webSearchAgent.ts b/src/agents/webSearchAgent.ts index 4141d0b..7b8e877 100644 --- a/src/agents/webSearchAgent.ts +++ b/src/agents/webSearchAgent.ts @@ -159,11 +159,10 @@ const createBasicWebSearchAnsweringChain = ( (doc) => doc.pageContent && doc.pageContent.length > 0, ); - const docEmbeddings = await embeddings.embedDocuments( - docsWithContent.map((doc) => doc.pageContent), - ); - - const queryEmbedding = await embeddings.embedQuery(query); + const [docEmbeddings, queryEmbedding] = await Promise.all([ + embeddings.embedDocuments(docsWithContent.map((doc) => doc.pageContent)), + embeddings.embedQuery(query), + ]); const similarity = docEmbeddings.map((docEmbedding, i) => { const sim = computeSimilarity(queryEmbedding, docEmbedding); diff --git a/src/agents/youtubeSearchAgent.ts b/src/agents/youtubeSearchAgent.ts index 9bb24ed..31ba660 100644 --- a/src/agents/youtubeSearchAgent.ts +++ b/src/agents/youtubeSearchAgent.ts @@ -161,11 +161,10 @@ const createBasicYoutubeSearchAnsweringChain = ( (doc) => doc.pageContent && doc.pageContent.length > 0, ); - const docEmbeddings = await embeddings.embedDocuments( - docsWithContent.map((doc) => doc.pageContent), - ); - - const queryEmbedding = await embeddings.embedQuery(query); + const [docEmbeddings, queryEmbedding] = await Promise.all([ + embeddings.embedDocuments(docsWithContent.map((doc) => doc.pageContent)), + embeddings.embedQuery(query), + ]); const similarity = docEmbeddings.map((docEmbedding, i) => { const sim = computeSimilarity(queryEmbedding, docEmbedding);