!python -m pip install --upgrade pip !pip install https://pypi.org/simple/bitsandbytes from langchain.llms.huggingface_pipeline import HuggingFacePipeline import torch from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline from transformers import BitsAndBytesConfig import pdfplumber from langchain.prompts import PromptTemplate nf4_config = BitsAndBytesConfig( load_in_4bit=True, bnb_4bit_quant_type="nf4", bnb_4bit_use_double_quant=True, bnb_4bit_compute_dtype=torch.bfloat16 ) model_id = "huggingFaceH4/zephyr-7b-alpha" tokenizer = AutoTokenizer.from_pretrained(model_id) model = AutoModelForCausalLM.from_pretrained( model_id, quantization_config=nf4_config, device_map="auto" ) model.tie_weights() pipe = pipeline("text-generation", model=model, tokenizer=tokenizer, max_new_tokens= 512 ) llm = HuggingFacePipeline(pipeline=pipe) ## LLM Response def get_llm_response(input): res = llm.predict(input) return res def input_pdf_text(uploaded_file): with open(uploaded_file, 'rb') as f: pdf = pdfplumber.open(f) text = "" for page in pdf.pages: text += page.extract_text() return text def Get_Response(upload_pdf,jd): text = input_pdf_text(upload_pdf) prompt_template = PromptTemplate.from_template( """ Hey Act Like a skilled or very experience ATS(Application Tracking System) with a deep understanding of tech field, software engineering, data science, data analyst and big data engineer. Your Task is to evaluate the resume based on the given job description. You must consider the job market is very competitive and you should provide best assistance for the improving the resume. Assisn the percentage Matching based on JD(Job Description) and the missing keywords with high accuracy resume:{text} description:{jd} I want the response in one single tring having the structure {{"JD Match":"%","MissingKeywords:[]","Profile Summary":""}} """) prompt = prompt_template.format(text=text,jd=jd) response = llm.predict(prompt) return response # Define Gradio interface interface = gr.Interface( fn=Get_Response, inputs=["file","text"], # inputs=[ # gr.File("upload_pdf", label="Upload PDF"), # gr.Textbox("jd", label="Job Description"), # ], outputs="text", title="Get ATS-Style Resume Evaluation", description="Upload a resume PDF and provide a job description to get an evaluation with JD match percentage, missing keywords, and profile summary.", ) # Launch the Gradio application interface.launch(debug=True, share=True)