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'] | |