-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmodel.py
More file actions
70 lines (43 loc) · 1.91 KB
/
Copy pathmodel.py
File metadata and controls
70 lines (43 loc) · 1.91 KB
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
import os
from langchain_huggingface import HuggingFaceEndpoint
from langchain_core.prompts import PromptTemplate
from langchain.chains import RetrievalQA
from langchain_huggingface import HuggingFaceEmbeddings
from langchain_community.vectorstores import FAISS
HF_TOKEN = os.environ.get("HF_TOKEN")
HUGGINGFACE_REPO_ID = "mistralai/Mistral-7B-Instruct-v0.3"
def load_llm(huggingface_repo_id):
llm = HuggingFaceEndpoint(
repo_id=huggingface_repo_id,
task="text-generation",
temperature=0.5,
huggingfacehub_api_token=HF_TOKEN,
model_kwargs={"max_length": 512}
)
return llm
CUSTOM_PROMPT_TEMPLATE = """
Use the pieces of information provided in the context to answer the user's question.
If you don't know the answer, just say that you don't know, don't try to make up an answer.
Don't provide anything out of the given context.
Context: {context}
Question: {question}
Start the answer directly. No small talk, please.
"""
def set_custom_prompt(custom_prompt_template):
prompt = PromptTemplate(template=custom_prompt_template, input_variables=["context", "question"])
return prompt
DB_FAISS_PATH = "vectorstore/db_faiss"
embedding_model = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")
db = FAISS.load_local(DB_FAISS_PATH, embedding_model, allow_dangerous_deserialization=True)
llm_instance = load_llm(HUGGINGFACE_REPO_ID)
qa_chain = RetrievalQA.from_chain_type(
llm=llm_instance,
chain_type="stuff",
retriever=db.as_retriever(search_kwargs={'k': 3}),
return_source_documents=True,
chain_type_kwargs={'prompt': set_custom_prompt(CUSTOM_PROMPT_TEMPLATE)}
)
user_query = input("Write Query Here: ")
normalized_query = user_query.strip("?").strip()
response = qa_chain.invoke({'query': normalized_query})
print("RESULT: ", response["result"])