Spaces:
Sleeping
Sleeping
from langchain.chains.combine_documents import create_stuff_documents_chain | |
from langchain_core.prompts import ChatPromptTemplate | |
from langchain.chains import create_retrieval_chain | |
from langchain.chains.summarize.chain import load_summarize_chain | |
from langchain_community.llms.huggingface_hub import HuggingFaceHub | |
from langchain.retrievers.document_compressors import LLMChainExtractor | |
from langchain.retrievers import ContextualCompressionRetriever | |
from langchain.chains.question_answering import load_qa_chain | |
#from Api_Key import google_plam | |
from langchain_groq import ChatGroq | |
import os | |
from dotenv import load_dotenv | |
load_dotenv() | |
def prompt_template_to_analyze_resume(): | |
template = """ | |
You are provided with the Resume of the Candidate in the context below . | |
As an Talent Aquistion bot , your task is to provide insights about the candidate in precise manner. | |
\n\n:{context} | |
""" | |
prompt = ChatPromptTemplate.from_messages( | |
[ | |
('system',template), | |
('human','input'), | |
] | |
) | |
return prompt | |
def prompt_template_for_relaibility(): | |
template =""" | |
You are provided with the Resume of the Candidate in the context below | |
If asked about reliability , check How frequently the candidate has switched from one company to another. | |
Grade him on the given basis: | |
If less than 2 Year - very less Reliable | |
if more than 2 years but less than 5 years - Reliable | |
if more than 5 Years - Highly Reliable | |
and generate verdict . | |
\n\n:{context} | |
""" | |
prompt = ChatPromptTemplate.from_messages( | |
[ | |
('system',template), | |
('human','input'), | |
] | |
) | |
return prompt | |
def summarize(documents,llm): | |
summarize_chain = load_summarize_chain(llm=llm, chain_type='refine', verbose = True) | |
results = summarize_chain.invoke({'input_documents':documents}) | |
return results['output_text'] | |
def get_hugging_face_model(model_id='mistralai/Mistral-7B-Instruct-v0.2',temperature=0.01,max_tokens=4096,api_key=None): | |
llm = HuggingFaceHub( | |
huggingfacehub_api_token =api_key, | |
repo_id=model_id, | |
model_kwargs={"temperature":temperature, "max_new_tokens":max_tokens} | |
) | |
return llm | |
def get_groq_model(api_key): | |
os.environ["GROQ_API_KEY"] = api_key | |
llm = ChatGroq(model="llama3-8b-8192") # (model="gemma2-9b-it") | |
return llm | |
def Q_A(vectorstore,question,API_KEY,compressor=False): | |
if API_KEY.startswith('gsk'): | |
chat_llm = get_groq_model(api_key=API_KEY) | |
elif API_KEY.startswith('hf'): | |
chat_llm = get_hugging_face_model(api_key=API_KEY) | |
# Create a retriever | |
retriever = vectorstore.as_retriever(search_type = 'similarity',search_kwargs = {'k':2},) | |
if compressor: | |
#Create a contextual compressor | |
compressor = LLMChainExtractor.from_llm(chat_llm) | |
compression_retriever = ContextualCompressionRetriever(base_compressor=compressor,base_retriever=retriever) | |
retriever = compression_retriever | |
if 'reliable' in question.lower() or 'relaibility' in question.lower(): | |
prompt = prompt_template_for_relaibility() | |
else: | |
prompt = prompt_template_to_analyze_resume() | |
# question_answer_chain = load_qa_chain(chat_llm, chain_type="stuff", prompt=prompt) | |
question_answer_chain = create_stuff_documents_chain(chat_llm, prompt) | |
chain = create_retrieval_chain(retriever, question_answer_chain) | |
result = chain.invoke({'input':question}) | |
return result['answer'] | |