maker_lab_2 / brain.py
ahan bose
Modularized app: added brain, admin, and recruiter modules with secure password check
5db4327
import os
import streamlit as st
from langchain_community.document_loaders import TextLoader, DirectoryLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_community.vectorstores import FAISS
from langchain_huggingface import HuggingFaceEmbeddings, HuggingFaceEndpoint, ChatHuggingFace
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough
from langchain_core.output_parsers import StrOutputParser
@st.cache_resource
def setup_vector_db():
loader = DirectoryLoader('./knowledge_base/', glob="./*.txt", loader_cls=TextLoader)
docs = loader.load()
splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
splits = splitter.split_documents(docs)
embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")
vectorstore = FAISS.from_documents(splits, embeddings)
return vectorstore.as_retriever()
def get_llm(hf_token):
llm_endpoint = HuggingFaceEndpoint(
repo_id="mistralai/Mistral-7B-Instruct-v0.2",
task="conversational",
huggingfacehub_api_token=hf_token,
temperature=0.5
)
return ChatHuggingFace(llm=llm_endpoint)
def get_rag_chain(retriever, llm):
template = """You are Ahan Bose's AI Twin. Answer based only on the context provided:
{context}
Question: {question}
"""
prompt = ChatPromptTemplate.from_template(template)
chain = (
{"context": retriever, "question": RunnablePassthrough()}
| prompt
| llm
| StrOutputParser()
)
return chain