Skip to content

Commit 8a4e29f

Browse files
committed
feedback
1 parent c236d07 commit 8a4e29f

File tree

4 files changed

+42
-35
lines changed

4 files changed

+42
-35
lines changed

client/Chat.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ const Chat = () => {
3838

3939
try {
4040
setLoading(true);
41-
const response = await chatServices.chatWithLLM({ userInput });
41+
const { response } = await chatServices.chatWithLLM({ userInput });
4242
setAnswer(response);
4343
} catch (err) {
4444
setError(err);

server/handlers/chat_handler.js

Lines changed: 1 addition & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,4 @@
1-
import path from 'path';
2-
import { HNSWLib } from "langchain/vectorstores/hnswlib";
3-
import { RetrievalQAChain } from 'langchain/chains';
4-
import { OpenAIEmbeddings } from "langchain/embeddings/openai";
5-
import { ContextualCompressionRetriever } from "langchain/retrievers/contextual_compression";
6-
import { LLMChainExtractor } from "langchain/retrievers/document_compressors/chain_extract";
7-
81
import { MODEL_STORES, enabledModel } from '../config/model_store_constants.js';
9-
import { getFileLoader } from '../utils/documentLoader.js';
102

113
class ChatService {
124
constructor () {
@@ -20,31 +12,7 @@ class ChatService {
2012
}
2113

2214
async ingestFile(data) {
23-
const { files } = data;
24-
const { originalFilename, filepath } = files['chat-file'];
25-
const fileExtension = path.extname(originalFilename);
26-
27-
const loader = getFileLoader(fileExtension, filepath);
28-
if (!loader) {
29-
throw Error('bad');
30-
}
31-
32-
const docs = await loader.load();
33-
this.modelService.vectorStore = await HNSWLib.fromDocuments(docs, new OpenAIEmbeddings());
34-
35-
const baseCompressor = LLMChainExtractor.fromLLM(this.modelService.model);
36-
this.modelService.vectorStore = await HNSWLib.fromDocuments(docs, new OpenAIEmbeddings());
37-
this.modelService.retriever = new ContextualCompressionRetriever({
38-
baseCompressor,
39-
baseRetriever: this.modelService.vectorStore.asRetriever(),
40-
});
41-
42-
this.modelService.chain = RetrievalQAChain.fromLLM(
43-
this.modelService.model,
44-
this.modelService.retriever,
45-
{ returnSourceDocuments: true }
46-
);
47-
return { success: true };
15+
return this.modelService.ingestFile(data);
4816
}
4917
}
5018

server/services/hf.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@ class HuggingFaceService {
88
this.model = new HfInference(HUGGINGFACEHUB_API_KEY);
99
}
1010

11+
ingestFile() {
12+
console.log('this is not implement for HuggingFace yet');
13+
}
14+
1115
async call(userInput) {
1216
// TO DO: pass in past_user_inputs for context
1317
const response = await this.model.conversational({

server/services/openai.js

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,14 @@
1+
import path from 'path';
2+
import { HNSWLib } from "langchain/vectorstores/hnswlib";
3+
import { RetrievalQAChain } from 'langchain/chains';
4+
import { OpenAIEmbeddings } from "langchain/embeddings/openai";
5+
import { ContextualCompressionRetriever } from "langchain/retrievers/contextual_compression";
6+
import { LLMChainExtractor } from "langchain/retrievers/document_compressors/chain_extract";
17
import { ConversationChain } from 'langchain/chains';
28
import { PromptTemplate } from 'langchain/prompts';
39
import { ConversationSummaryMemory } from 'langchain/memory';
410
import { OpenAI } from 'langchain/llms/openai';
11+
import { getFileLoader } from '../utils/documentLoader.js';
512

613
class OpenAiService {
714
constructor () {
@@ -35,14 +42,42 @@ class OpenAiService {
3542
return { chain, inputType: 'input', responseType: 'response' };
3643
}
3744

45+
async ingestFile(data) {
46+
const { files } = data;
47+
const { originalFilename, filepath } = files['chat-file'];
48+
const fileExtension = path.extname(originalFilename);
49+
50+
const loader = getFileLoader(fileExtension, filepath);
51+
if (!loader) {
52+
throw Error('bad');
53+
}
54+
55+
const docs = await loader.load();
56+
this.vectorStore = await HNSWLib.fromDocuments(docs, new OpenAIEmbeddings());
57+
58+
const baseCompressor = LLMChainExtractor.fromLLM(this.model);
59+
this.vectorStore = await HNSWLib.fromDocuments(docs, new OpenAIEmbeddings());
60+
this.retriever = new ContextualCompressionRetriever({
61+
baseCompressor,
62+
baseRetriever: this.vectorStore.asRetriever(),
63+
});
64+
65+
this.chain = RetrievalQAChain.fromLLM(
66+
this.model,
67+
this.retriever,
68+
{ returnSourceDocuments: true }
69+
);
70+
return { success: true };
71+
}
72+
3873
call = async (userInput) => {
3974
const { chain, inputType, responseType } = this.assembleChain();
4075

4176
const { [responseType]: response } = await chain.call({
4277
[inputType]: userInput,
4378
});
4479

45-
return response;
80+
return { response };
4681
}
4782
}
4883

0 commit comments

Comments
 (0)