import os import openai import PyPDF2 import gradio as gr import docx import re import plotly.graph_objects as go class Resume_Overall: def __init__(self): pass def extract_text_from_file(self,file_path): # Get the file extension file_extension = os.path.splitext(file_path)[1] if file_extension == '.pdf': with open(file_path, 'rb') as file: # Create a PDF file reader object reader = PyPDF2.PdfFileReader(file) # Create an empty string to hold the extracted text extracted_text = "" # Loop through each page in the PDF and extract the text for page_number in range(reader.getNumPages()): page = reader.getPage(page_number) extracted_text += page.extractText() return extracted_text elif file_extension == '.txt': with open(file_path, 'r') as file: # Just read the entire contents of the text file return file.read() elif file_extension == '.docx': doc = docx.Document(file_path) text = [] for paragraph in doc.paragraphs: text.append(paragraph.text) return '\n'.join(text) else: return "Unsupported file type" def course_response(self,resume_path): resume_path = resume_path.name resume = self.extract_text_from_file(resume_path) # Define the prompt or input for the model prompt = f"""Analyze the resume to generate online courses with website links to improve skills following resume delimitted by triple backticks. Generate atmost five courses. result format should be: course:[course]. website link:[website link] ```{resume}``` """ # Generate a response from the GPT-3 model response = openai.Completion.create( engine='text-davinci-003', prompt=prompt, max_tokens=200, temperature=0, n=1, stop=None, ) # Extract the generated text from the API response generated_text = response.choices[0].text.strip() return generated_text def summary_response(self,resume_path): resume_path = resume_path.name resume = self.extract_text_from_file(resume_path) # Define the prompt or input for the model prompt = f"""Analyze the resume to write the summary for following resume delimitted by triple backticks. ```{resume}``` """ # Generate a response from the GPT-3 model response = openai.Completion.create( engine='text-davinci-003', prompt=prompt, max_tokens=200, temperature=0, n=1, stop=None, ) # Extract the generated text from the API response generated_text = response.choices[0].text.strip() return generated_text def skill_response(self,job_description_path): job_description_path = job_description_path.name resume = self.extract_text_from_file(job_description_path) # Define the prompt or input for the model prompt = f"""Find Education Gaps in given resume. Find Skills in resume. ```{resume}``` """ # Generate a response from the GPT-3 model response = openai.Completion.create( engine='text-davinci-003', # Choose the GPT-3 engine you want to use prompt=prompt, max_tokens=100, # Set the maximum number of tokens in the generated response temperature=0, # Controls the randomness of the output. Higher values = more random, lower values = more focused n=1, # Generate a single response stop=None, # Specify an optional stop sequence to limit the length of the response ) # Extract the generated text from the API response generated_text = response.choices[0].text.strip() return generated_text def _generate_job_list(self, resume: str) -> str: prompt = f"List out perfect job roles for based on resume informations:{resume}" response = openai.Completion.create( engine='text-davinci-003', prompt=prompt, max_tokens=100, temperature=0, n=1, stop=None, ) generated_text = response.choices[0].text.strip() return generated_text def job_list_interface(self, file) -> str: resume_text = self.extract_text_from_file(file.name) job_list = self._generate_job_list(resume_text) return job_list def show_file(self,file_path): return file_path.name def launch_gradio_interface(self, share: bool = True): with gr.Blocks(css="style.css",theme='karthikeyan-adople/hudsonhayes-gray') as app: with gr.Tabs("Resume"): with gr.Row(): with gr.Column(elem_id="col-container"): gr.HTML("""