|
import logging |
|
import uuid |
|
import os |
|
import pathlib |
|
import json |
|
from datetime import datetime |
|
from typing import Any, Dict, Iterable, List, Optional, Tuple, Union |
|
from langchain.vectorstores import FAISS |
|
from langchain.embeddings import HuggingFaceEmbeddings, SentenceTransformerEmbeddings |
|
from langchain.prompts import PromptTemplate |
|
|
|
from langchain.chains import RetrievalQA |
|
from langchain.chat_models import ChatOpenAI |
|
|
|
logging.basicConfig(level=logging.INFO, format='=========== %(asctime)s :: %(levelname)s :: %(message)s') |
|
MetadataFilter = Dict[str, Union[str, int, bool]] |
|
|
|
class FaissIndex(): |
|
def __init__(self): |
|
self.COLLECTION_NAME = "vector_store" |
|
logging.info(f"Loading Embedding model: all-mpnet-base-v2") |
|
self.embedding = HuggingFaceEmbeddings(model_name = "all-mpnet-base-v2") |
|
self.vector_store = FAISS.load_local("vector_store",self.embedding) |
|
logging.info(f"Loaded Vector Store: {self.COLLECTION_NAME}") |
|
self.template = """You are an AI assistant tailored for Ashwin Rachha. Your capabilities include: |
|
- Providing insights and details about Ashwin Rachha's past experiences and achievements. |
|
- Sharing information regarding professional endeavors and projects. |
|
- Offering advice or recommendations based on Ashwin's preferences and interests. |
|
- Sharing anecdotes or stories from Ashwin Rachha's life that are relevant to the question asked. |
|
- Answering any question related to Ashwin Rachha's professional or personal life. |
|
- Answer it all in first person |
|
Question = {question} |
|
{context} |
|
""" |
|
self.prompt = PromptTemplate(template = self.template, input_variables=['context', 'question']) |
|
self.chain_type_kwargs = {"prompt": self.prompt} |
|
logging.info(f"Initializing LLM") |
|
self.llm = ChatOpenAI(model_name = "gpt-3.5-turbo", temperature = 0.2) |
|
logging.info(f"Initializing Retrieval QA Chain") |
|
self.qa_chain = RetrievalQA.from_chain_type(self.llm, retriever = self.vector_store.as_retriever(), chain_type = "stuff", chain_type_kwargs=self.chain_type_kwargs) |
|
|
|
|
|
|