diff --git a/week1/community-contributions/resume_based_job_recommender.py b/week1/community-contributions/resume_based_job_recommender.py new file mode 100644 index 0000000..7daef4f --- /dev/null +++ b/week1/community-contributions/resume_based_job_recommender.py @@ -0,0 +1,104 @@ +from openai import OpenAI +from dotenv import load_dotenv +import os +import pypdf + +class ResumeBasedJobRecommendation: + def __init__(self, path: str): + self.resume_path = path + + # method to read the content from the resume and use it for the user prompt + def read_resume(self): + """method to read the content from the resume and use it for the user prompt. + + Returns: + content (str): returns the content of the resume. + """ + try: + pdfreader = pypdf.PdfReader(self.resume_path) + data = "" + for page_number in range(pdfreader.get_num_pages()): + page = pdfreader.pages[page_number] + data += page.extract_text() + except FileNotFoundError as e: + print(f"Issue with the resume file path: {str(e)}") + return + except Exception as e: + print(f"Couldn't able to parse the pdf : {str(e)}") + return + return data + + # + def message_prompt(self, data: str, job_sites: list, location: str): + """method suggests the appropriate job roles and provides the search link from job sites based on users input of resume data, job boards and location. + + Args: + data (str): resume content for user prompt + job_sites (list): job searching sites for user prompt + location (str): location of job search + + Returns: + content (str): Provides summary of resume with suggested job roles and links using gpt 4.o model. + """ + self.message = [ + {"role": "system", + "content": "You are an assistant that analysizes the resume data and summarize it. \ + Based on the summarization, you suggest the appropriate job roles \ + and provide the appropriate job search links for each suggested roles from the job sites based on filtering by the \ + location provided. " + }, + { + "role": "user", + "content": f"Below is my resume content, kindly look for the appropriate job openings in \ + {job_sites} for location {location}:\n{data}" + }] + self.response = openai.chat.completions.create(model='gpt-4o-mini', messages=self.message) + return self.response.choices[0].message.content + + +if __name__ == '__main__': + # load the api key from .env and check if it is valid. + load_dotenv() + + api_key = os.getenv('OPENAI_API_KEY') + + if api_key is None: + print("No api key was found.") + exit() + elif not api_key.startswith('sk-proj-'): + print("api key is present but it is not matching with the openai api key pattern starting with sk-proj-. Please check it.") + exit() + elif api_key.strip() != api_key: + print("api key is good but it seems it has the spaces at starting or the end. Please check and remove it.") + exit() + else: + print("api key is found and it looks good.") + + openai = OpenAI() + + #Provide the valid resume path + file_path = input("Kindly enter the resume path:\n") + if not file_path: + print("Resume path is not provided. Kindly provide the valid path.") + exit() + + obj = ResumeBasedJobRecommendation(file_path) + data = obj.read_resume() + + if not data: + pass + else: + #provide the input for the job sites to search and valid job location + job_sites = input("Enter the job sites with space between each other: ") + if not job_sites: + print("Didn't provided the job sites to search for. Going with Linkedin, Indeed, Glassdoor and Naukri as defaults.") + job_sites = ['LinkedIn', 'Indeed', 'Naukri', 'Glassdoor'] + else: + job_sites = job_sites.split(' ') + location = input("Enter the job location:") + if not location: + print("No location has been provided. Default will consider as United States.") + location = 'United States' + + response = obj.message_prompt(data, job_sites, location) + print(response)