|
|
|
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)
|
|
|
|
|
|
|
|
|
|
def get_response(query_engine, sentence):
|
|
retrieved_context = query_engine.query(sentence)
|
|
prompt = generate_prompt(retrieved_context, sentence)
|
|
response = Settings.llm.complete(prompt)
|
|
return response.text |