KYC_Bot / rag_retriever.py
Elbachaik's picture
Update rag_retriever.py
d6cca12 verified
from dotenv import load_dotenv
import os
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
from llama_index.llms.huggingface import HuggingFaceInferenceAPI
from llama_index.core.settings import Settings
from llama_index.core import SimpleDirectoryReader
from llama_index.core.node_parser import SentenceWindowNodeParser
from pinecone import Pinecone
from llama_index.core import VectorStoreIndex, StorageContext
from llama_index.vector_stores.pinecone import PineconeVectorStore
from llama_index.core.postprocessor import MetadataReplacementPostProcessor
from llama_index.core.postprocessor import SentenceTransformerRerank
def initialize_llm():
load_dotenv()
HF_TOKEN = os.getenv("HUGGINGFACE_API_KEY")
Settings.llm = HuggingFaceInferenceAPI(model_name="mistralai/Mixtral-8x7B-Instruct-v0.1", model_kwargs={"temperature": 0.1}, token=HF_TOKEN)
Settings.embed_model = HuggingFaceEmbedding(model_name="BAAI/bge-small-en-v1.5")
def initialize_pinecone():
load_dotenv()
api_key = os.environ["PINECONE_API_KEY"]
index_name = "chatbot"
pc = Pinecone(api_key=api_key)
pinecone_index = pc.Index(index_name)
vector_store = PineconeVectorStore(pinecone_index=pinecone_index)
index = VectorStoreIndex.from_vector_store(vector_store=vector_store)
return index
def create_query_engine(index):
postproc = MetadataReplacementPostProcessor(target_metadata_key="window")
rerank = SentenceTransformerRerank(top_n=2, model="BAAI/bge-reranker-base")
query_engine = index.as_query_engine(similarity_top_k = 6,vector_store_query_mode="hybrid",alpha=0.5,node_postprocessors = [postproc, rerank],
)
return query_engine
def generate_prompt(context, query):
prompt_template = """
You are a highly informed representative of KYC SUD CONSULTING. Your role is to assist users by answering questions about our company with accurate and helpful information. Use the provided context to guide your responses effectively. If a question falls outside your knowledge or the context provided, simply state that you don't have the information.
Given the following context:
{context_str}
Answer the following question in different words while keeping the meaning intact:
{query_str}
Response:
"""
return prompt_template.format(context_str=context, query_str=query)
# Function to process input sentence and return response
def get_response(query_engine, sentence):
retrieved_context = query_engine.query(sentence)
prompt = generate_prompt(retrieved_context, sentence)
response = Settings.llm.complete(prompt) # Use the correct method to generate response
return response.text