File size: 2,620 Bytes
41b4cca
 
 
 
636a003
41b4cca
 
 
 
 
 
 
 
 
 
 
 
d7bc503
41b4cca
7f79530
41b4cca
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0db7d9f
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

from dotenv import load_dotenv
import os
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
from llama_index.llms.huggingface_api 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()
    HUGGINGFACE_API_KEY = os.getenv("HUGGINGFACE_API_KEY")
    
    Settings.llm = HuggingFaceInferenceAPI(model_name="HuggingFaceH4/zephyr-7b-alpha", token=HUGGINGFACE_API_KEY)
    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 :
    {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