sancharikadebnath commited on
Commit
66e260e
·
1 Parent(s): cf3a54c

Added all feature file

Browse files
.gitignore ADDED
@@ -0,0 +1 @@
 
 
1
+ .env
__pycache__/ats.cpython-39.pyc ADDED
Binary file (3.96 kB). View file
 
__pycache__/docLoader.cpython-39.pyc ADDED
Binary file (1.45 kB). View file
 
app.py CHANGED
@@ -1,43 +1,103 @@
1
  # app.py
 
2
  import streamlit as st
3
- import pdfplumber
4
- import ats
5
- import docx
 
 
 
 
 
 
 
 
 
 
 
 
6
 
7
- st.set_page_config(page_title='CareerEnchanter', page_icon='🤖', layout='centered')
 
 
 
 
 
 
 
 
 
 
 
 
8
 
9
  st.title("Enchant your Career")
10
 
11
- uploaded_file = st.file_uploader("Choose a document file", type=["pdf", "txt", "csv", "docx"])
12
- text = ''
13
- if uploaded_file is not None:
14
- st.write("File uploaded successfully!")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
 
16
- file_extension = uploaded_file.name.split(".")[-1]
 
 
17
 
18
- if file_extension == "pdf":
19
- with pdfplumber.open(uploaded_file) as pdf:
20
- pages = pdf.pages
21
- for page in pages:
22
- text = page.extract_text()
23
 
24
- elif file_extension == "txt":
25
- text = uploaded_file.getvalue().decode("utf-8")
26
-
27
- elif file_extension == "docx":
28
- docx_text = docx.Document(uploaded_file)
29
- full_text = []
30
- for para in docx_text.paragraphs:
31
- full_text.append(para.text)
32
- text = "\n".join(full_text)
33
-
34
- st.text_area("Extracted From Document",value=text)
35
- st.session_state['doc_text'] = text
36
 
37
- col1, col2, col3 = st.columns([3, 3,3])
38
- option = st.radio("I want to use: ", ("ATS"), horizontal=True)
39
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
 
41
- if option == "ATS":
42
- ats.run_ats(st.session_state['doc_text'])
43
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  # app.py
2
+ import os
3
  import streamlit as st
4
+ from features import (ats,
5
+ analyzer,
6
+ company_recommend,
7
+ cover_letter,
8
+ enhance,
9
+ improve,
10
+ interview,
11
+ linkedin,
12
+ newresume,
13
+ recommend,
14
+ review)
15
+ from components import docLoader
16
+ from dotenv import load_dotenv
17
+ import google.generativeai as genai
18
+ from langchain_google_genai import ChatGoogleGenerativeAI
19
 
20
+ load_dotenv()
21
+
22
+ class CareerEnchanter(object):
23
+ def __init__(self, title="CareerEnchanter"):
24
+ self.title = title
25
+
26
+ @staticmethod
27
+ def model():
28
+ genai.configure(api_key=os.getenv("GOOGLE_API_KEY"))
29
+ return ChatGoogleGenerativeAI(model="gemini-pro")
30
+
31
+ enchanter = CareerEnchanter()
32
+ st.set_page_config(page_title=enchanter.title, page_icon='🤖', layout='centered')
33
 
34
  st.title("Enchant your Career")
35
 
36
+ text = docLoader.load_doc()
37
+ st.session_state['doc_text'] = text
38
+ jd=st.text_area("Job Description: ",key="input")
39
+ with st.sidebar:
40
+ st.title(' :blue[_Career Enchanter_] 🤖')
41
+ option = st.radio("Select an option: ", (
42
+ "ATS Score",
43
+ "Resume Review",
44
+ "Resume Enhancements",
45
+ "Resume Improvements",
46
+ "Recommendation",
47
+ "Keywords",
48
+ "Generate Cover Letter",
49
+ "Resume Generator",
50
+ "Linkedin Profile Update",
51
+ "Posssible Interview Questions",
52
+ "Company Recommendations"
53
+ ))
54
 
55
+
56
+ if option == "ATS Score":
57
+ calculation_method = st.radio("Choose how you want to calculate ATS Score: ", ("Using AI", "Manually (Cosine Similarity)"), horizontal=True)
58
 
59
+ elif option == "Recommendation":
60
+ recommendation_type = st.radio("Select the type of recommendation you want: ", ("Entire Resume", "Section Wise"), horizontal=True)
 
 
 
61
 
62
+ elif option == "Keywords":
63
+ analyz_type = st.radio("Select the type of Keywords Fucntion you want: ", ("Analyse Keywords", "Keyword Synonyms"), horizontal=True)
64
+
65
+ with st.spinner("Loading Model..."):
66
+ llm = enchanter.model()
 
 
 
 
 
 
 
67
 
 
 
68
 
69
+ # Create a dictionary mapping options to functions
70
+ option_functions = {
71
+ "ATS Score": ats.run_ats,
72
+ "Resume Review": review.run_review,
73
+ "Resume Enhancements": enhance.run_enhance,
74
+ "Resume Improvements": improve.run_improve,
75
+ "Recommendation": recommend.run_recommend,
76
+ "Keywords": analyzer.run_analyzer,
77
+ "Generate Cover Letter": cover_letter.run_letter,
78
+ "Resume Generator": newresume.run_newresume,
79
+ "Linkedin Profile Update": linkedin.run_linkedin,
80
+ "Posssible Interview Questions": interview.run_interview,
81
+ "Company Recommendations": company_recommend.run_company
82
+ }
83
 
84
+ # Handle the selected option
85
+ if option in option_functions:
86
+ func = option_functions[option]
87
+ if option == "ATS Score":
88
+ if calculation_method == "Manually (Cosine Similarity)":
89
+ func(llm, st.session_state['doc_text'], jd, manual=True)
90
+ else:
91
+ func(llm, st.session_state['doc_text'], jd)
92
+ elif option == "Recommendation":
93
+ if recommendation_type == "Entire Resume":
94
+ func(llm, st.session_state['doc_text'], jd, section=True)
95
+ else:
96
+ func(llm, st.session_state['doc_text'], jd)
97
+ elif option == "Keywords":
98
+ if analyz_type == "Analyse Keywords":
99
+ func(llm, st.session_state['doc_text'], jd, analysis=True)
100
+ else:
101
+ func(llm, st.session_state['doc_text'], jd)
102
+ else:
103
+ func(llm, st.session_state['doc_text'], jd)
components/__pycache__/ats.cpython-39.pyc ADDED
Binary file (1.03 kB). View file
 
components/__pycache__/docLoader.cpython-39.pyc ADDED
Binary file (2.32 kB). View file
 
components/__pycache__/functions.cpython-39.pyc ADDED
Binary file (4.22 kB). View file
 
components/__pycache__/prompts.cpython-39.pyc ADDED
Binary file (22.3 kB). View file
 
components/docLoader.py ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import pdfplumber
3
+ import docx
4
+ import pylatexenc
5
+
6
+ class docLoader():
7
+ def __init__(self):
8
+ pass
9
+
10
+ def load(self, uploaded_file):
11
+ if uploaded_file is not None:
12
+ st.write("File uploaded successfully!")
13
+
14
+ file_extension = uploaded_file.name.split(".")[-1]
15
+
16
+ load_functions = {
17
+ "pdf": self.load_pdf,
18
+ "txt": self.load_txt,
19
+ "docx": self.load_docx,
20
+ "tex": self.load_tex
21
+ }
22
+
23
+ if file_extension in load_functions:
24
+ text = load_functions[file_extension](uploaded_file)
25
+ st.text_area("Extracted From Document", value=text)
26
+ else:
27
+ st.write("Unsupported file format")
28
+
29
+ else:
30
+ text = ''
31
+ return text
32
+
33
+ def load_pdf(self, uploaded_file):
34
+ with pdfplumber.open(uploaded_file) as pdf:
35
+ pages = pdf.pages
36
+ text = ""
37
+ for page in pages:
38
+ text += page.extract_text()
39
+ return text
40
+
41
+ def load_txt(self, uploaded_file):
42
+ return uploaded_file.getvalue().decode("utf-8")
43
+
44
+ def load_docx(self, uploaded_file):
45
+ docx_text = docx.Document(uploaded_file)
46
+ full_text = [para.text for para in docx_text.paragraphs]
47
+ return "\n".join(full_text)
48
+
49
+ def load_tex(self, uploaded_file):
50
+ with open(uploaded_file.name, 'r') as tex_file:
51
+ tex_content = tex_file.read()
52
+ return pylatexenc.latex2text(tex_content)
53
+
54
+ def load_doc():
55
+ uploaded_file = st.file_uploader("Choose a document file", type=["pdf", "txt", "docx"])
56
+ loader = docLoader()
57
+ return loader.load(uploaded_file)
58
+
59
+ if __name__ == "__main__":
60
+ load_doc()
ats.py → components/functions.py RENAMED
@@ -1,25 +1,24 @@
 
1
  import os
2
  import pyperclip
3
  import streamlit as st
4
- from dotenv import load_dotenv
5
  import speech_recognition as sr
6
- import google.generativeai as genai
7
- from langchain.prompts import PromptTemplate
8
- from langchain_google_genai import ChatGoogleGenerativeAI
9
-
 
 
 
 
 
10
 
11
- class ATS(object):
12
- def __init__(self, title="ATS Tracking System"):
13
- self.title = title
14
 
15
- @staticmethod
16
- def model():
17
- genai.configure(api_key=os.getenv("GOOGLE_API_KEY"))
18
- return ChatGoogleGenerativeAI(model="gemini-pro")
19
 
20
  @staticmethod
21
  def get_gemini_response(llm, input_text, doc, template, info=''):
22
- formated_prompt = template.format(doc=doc, input_text=input_text)
23
  response = llm.invoke(formated_prompt)
24
  return response.content
25
  # return formated_prompt
@@ -55,64 +54,37 @@ class ATS(object):
55
  if isinstance(input_text, str):
56
  st.session_state['input_text'] = input_text
57
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
58
 
59
- def run_ats(doc=''):
60
- load_dotenv()
61
- ats = ATS()
62
- st.header(ats.title + " 🤖", divider='rainbow')
63
- input_text=st.text_area("Job Description: ",key="input")
64
- # uploaded_file=st.file_uploader("Upload your resume(PDF)...",type=["pdf"])
65
-
66
-
67
- # if uploaded_file is not None:
68
- # st.write("PDF Uploaded Successfully")
69
-
70
-
71
- with st.sidebar:
72
- st.title(' :blue[_AI Generated ATS] 🤖')
73
- st.subheader('Parameters')
74
-
75
- with st.spinner("Loading Model..."):
76
- llm = ats.model()
77
- submit1 = st.button("Tell Me About the Resume")
78
-
79
- # submit2 = st.button("How Can I Improvise my Skills")
80
-
81
- submit3 = st.button("Percentage match")
82
-
83
- input_prompt1 = """
84
- You are an experienced Technical Human Resource Manager,your task is to review the provided resume against the job description.
85
- Please share your professional evaluation on whether the candidate's profile aligns with the role.
86
- Highlight the strengths and weaknesses of the applicant in relation to the specified job requirements.
87
-
88
- Job Description: {input_text}
89
- Resume: {doc}
90
- """
91
-
92
- input_prompt3 = """
93
- You are an skilled ATS (Applicant Tracking System) scanner with a deep understanding of data science and ATS functionality,
94
- your task is to evaluate the resume against the provided job description. give me the percentage of match if the resume matches
95
- the job description. First the output should come as percentage and then keywords missing and last final thoughts.
96
-
97
- Job Description: {input_text}
98
- Resume: {doc}
99
- """
100
-
101
- if submit1:
102
- if doc is not None:
103
- response=ats.get_gemini_response(llm=llm,template=input_prompt1,doc=doc,input_text=input_text)
104
- st.subheader("The Repsonse is")
105
- st.write(response)
106
- else:
107
- st.write("Please uplaod the resume")
108
-
109
- elif submit3:
110
- if doc is not None:
111
- response=ats.get_gemini_response(llm=llm,template=input_prompt3,doc=doc,input_text=input_text)
112
- st.subheader("The Repsonse is")
113
- st.write(response)
114
- else:
115
- st.write("Please uplaod the resume")
116
-
117
- if __name__ == "__main__":
118
- run_ats()
 
1
+ #fucntions.py
2
  import os
3
  import pyperclip
4
  import streamlit as st
 
5
  import speech_recognition as sr
6
+ import re
7
+ import numpy as np
8
+ import numpy as np
9
+ import torch
10
+ from nltk.corpus import stopwords
11
+ from nltk.tokenize import word_tokenize
12
+ from transformers import BertTokenizer, BertModel
13
+ # from convert import ExtractPDFText
14
+ import streamlit as st
15
 
 
 
 
16
 
17
+ class Functions():
 
 
 
18
 
19
  @staticmethod
20
  def get_gemini_response(llm, input_text, doc, template, info=''):
21
+ formated_prompt = template.format(doc=doc, input_text=input_text, info=info)
22
  response = llm.invoke(formated_prompt)
23
  return response.content
24
  # return formated_prompt
 
54
  if isinstance(input_text, str):
55
  st.session_state['input_text'] = input_text
56
 
57
+ @staticmethod
58
+ def calculate_ats_score(resume_data, job_description):
59
+ def preprocess_text(text):
60
+ text = text.lower()
61
+ stop_words = set(stopwords.words('english'))
62
+ word_tokens = word_tokenize(text)
63
+ filtered_text = [word for word in word_tokens if word not in stop_words]
64
+ string_text = ' '.join(filtered_text)
65
+ text = re.sub(r'[^a-zA-Z\s]', '', string_text)
66
+ return text
67
+
68
+ def get_bert_embeddings(text):
69
+ tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
70
+ model = BertModel.from_pretrained('bert-base-uncased')
71
+ tokens = tokenizer(text, return_tensors='pt', padding=True, truncation=True)
72
+ with torch.no_grad():
73
+ outputs = model(**tokens)
74
+ embeddings = outputs.last_hidden_state.mean(dim=1)
75
+ return embeddings
76
+
77
+ def calculate_cosine_similarity(embedding1, embedding2):
78
+ sim = np.dot(embedding1[0].numpy(), embedding2[0].numpy()) / (
79
+ np.linalg.norm(embedding1[0].numpy()) * np.linalg.norm(embedding2[0].numpy())
80
+ )
81
+ return sim
82
+
83
+ resume = preprocess_text(resume_data)
84
+ job_desc = preprocess_text(job_description)
85
+ resume_embeddings = get_bert_embeddings(resume)
86
+ job_desc_embeddings = get_bert_embeddings(job_desc)
87
+ similarity_score = calculate_cosine_similarity(resume_embeddings, job_desc_embeddings)
88
+ missing_keywords = [word for word in word_tokenize(job_desc) if word not in word_tokenize(resume)]
89
+ return str(round(similarity_score * 100, 2)), missing_keywords
90
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
components/prompts.py ADDED
@@ -0,0 +1,345 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ resume_review = """
2
+ You are an experienced Technical Human Resource Manager,your task is to review the provided resume against the job description.
3
+ Please share your professional evaluation on whether the candidate's profile aligns with the role.
4
+ Highlight the strengths and weaknesses of the applicant in relation to the specified job requirements.
5
+
6
+ Human-Like Resume Review for {info}
7
+ Job Description: {input_text}
8
+ Resume: {doc}
9
+ Format:
10
+ **Resume Review Context:**
11
+ **Detailed Evaluation:**
12
+ - **Relevance to the Field:** Assess how the candidate's experience and skills match the specific requirements of the job in [User-Specified Field].
13
+ - **Key Strengths:** Identify the strongest aspects of the candidate's resume, such as specific skills, achievements, or experiences that are particularly aligned with the job description.
14
+ - **Areas for Development:** Highlight any areas where the candidate may need further development or additional experience to fully meet the job requirements.
15
+ - **Career Progression:** Analyze the candidate's career trajectory and how it aligns with the expectations for the role.
16
+ - **Education and Certifications:** Evaluate the relevance and level of the candidate's educational background and any professional certifications.
17
+ - **Cultural Fit:** Provide insights on the candidate's potential cultural fit within the organization, based on the information in the resume.
18
+ **Skills and Experience Table:**
19
+ | Skill/Experience | Relevance to Job | Candidate's Proficiency | Notes |
20
+ | ---------------- | ---------------- | ----------------------- | ----- |
21
+ | [Skill 1] | [High/Medium/Low] | [Expert/Intermediate/Novice] | [Any specific notes] |
22
+ | [Skill 2] | [High/Medium/Low] | [Expert/Intermediate/Novice] | [Any specific notes] |
23
+ | ... | ... | ... | ... |
24
+
25
+ **Conclusion:**
26
+ - Summarize the overall suitability of the candidate for the position in [User-Specified Field]. Include recommendations for any additional qualifications or experiences that might Improve the candidate’s profile for this role.
27
+ """
28
+
29
+ ats_resume = """
30
+ ## Human-Like Resume Analysis for {info}
31
+ Job Description: {input_text}
32
+ Resume: {doc}
33
+ Format:
34
+ **Resume Analysis Context:**
35
+ **Automated Evaluation:**
36
+ - **Keyword Matching:** Identify key skills, technologies, and qualifications mentioned in the job description and evaluate the presence and frequency of these keywords in the candidate's resume.
37
+ - **Skills Assessment:** Analyze the candidate's listed skills against those required in the job description. Provide a match percentage or rating.
38
+ - **Experience Relevance:** Calculate the relevance of the candidate's previous job titles, companies, and industries in relation to the job description.
39
+ - **Education and Certifications Matching:** Match the candidate's education level and certifications with the requirements specified in the job description.
40
+ **AI-ATS Analysis Table:**
41
+ | Category | Details from Resume | Match with Job Description | Notes |
42
+ | -------- | ------------------- | -------------------------- | ----- |
43
+ | Skills | [List of skills from resume] | [Match percentage/rating] | [Any specific notes] |
44
+ | Experience | [List of experiences from resume] | [Relevance rating] | [Any specific notes] |
45
+ | Education | [Candidate's education details] | [Match/No Match] | [Any specific notes] |
46
+ | ... | ... | ... | ... |
47
+
48
+ **Conclusion:**
49
+ - Provide an overall rating or score of the candidate’s resume based on the AI/ATS analysis. Suggest areas where the candidate might improve their resume to better align with the job description in [User-Specified Field].
50
+
51
+ """
52
+
53
+ ats_score = """
54
+ You are an skilled ATS (Applicant Tracking System) scanner with a deep understanding of data science and ATS functionality,
55
+ your task is to evaluate the resume against the provided job description. give me the percentage of match if the resume matches
56
+ the job description. First the output should come as percentage and then keywords missing.
57
+
58
+ Job Description: {input_text}
59
+ Resume: {doc}
60
+ """
61
+
62
+ resume_improve = """
63
+ As an experienced Technical Human Resource Manager, evaluating the provided resume against the job description involves a thorough analysis of the candidate's profile, strengths, weaknesses, and alignment with the specified job requirements. Here's a structured approach to provide a professional evaluation and key points for enhancing the resume:
64
+
65
+ 1. **Evaluation of Alignment:**
66
+ - Assess the candidate's qualifications, skills, and experience in relation to the job requirements outlined in the job description.
67
+ - Determine the extent to which the candidate's profile aligns with the technical aspects, HR management responsibilities, and other specified criteria.
68
+
69
+ 2. **Strengths and Weaknesses Assessment:**
70
+ - Highlight the candidate's strengths that directly match the job requirements, such as relevant technical skills, HR management experience, and achievements.
71
+ - Identify any weaknesses or areas where the candidate's profile may fall short in meeting the job requirements, such as lacking specific technical skills or limited experience in certain areas.
72
+
73
+ 3. **Recommendations for Resume Improvement:**
74
+ - For areas of alignment:
75
+ - Emphasize the candidate's relevant technical skills, HR management experience, and achievements prominently in the resume.
76
+ - Provide specific examples or quantifiable results to demonstrate the candidate's contributions and impact in previous roles.
77
+ - For areas needing improvement:
78
+ - Suggest adding relevant technical skills or certifications to Improve the candidate's qualifications.
79
+ - Recommend highlighting transferable skills or experiences that demonstrate adaptability and readiness to learn new technologies or processes.
80
+ - Encourage showcasing any HR management initiatives, projects, or leadership roles that align with the job requirements.
81
+
82
+ 4. **Key Points for Resume Improvement:**
83
+ - Technical Skills:
84
+ - Identify and include key technical skills mentioned in the job description, such as programming languages, software tools, or platforms.
85
+ - Provide details of projects or experiences that demonstrate proficiency in these technical skills.
86
+ - HR Management Experience:
87
+ - Highlight HR management responsibilities, such as recruitment, performance evaluation, training, and employee relations.
88
+ - Showcase leadership skills, teamwork, and collaboration experiences in managing technical teams or projects.
89
+ - Achievements and Impact:
90
+ - Include quantifiable achievements, awards, or recognition received in previous roles.
91
+ - Describe specific contributions or projects that resulted in positive outcomes, cost savings, or process improvements.
92
+
93
+ 5. **Stand-Out Factors:**
94
+ - Provide insights to the candidate on how to differentiate themselves by highlighting unique experiences, innovative approaches, or specialized expertise relevant to the role.
95
+ - Asses adding professional development activities, industry involvement, or contributions to open-source projects to showcase continuous learning and engagement in the field whichever5 is best based on provided resume.
96
+
97
+
98
+
99
+ Job Description: {input_text}
100
+ Resume: {doc}
101
+ """
102
+
103
+ resume_enhance = """
104
+ You are an experienced Technical Human Resource Manager,your task is to Provide specific suggestions in bullet points to tailor the resume to the job description from the provided paragraph.
105
+ Please share your professional suggestions on what to write and how to write the given pargraph so that the candidate's profile aligns with the role.
106
+ Highlight weaknesses of the applicant in relation to the specified job requirements and provide sugestions on how to enhance it and make it strength.
107
+
108
+ Job Description: {input_text}
109
+ Resume: {doc}
110
+ paragraph: {info}
111
+ """
112
+
113
+ resume_recommendation = """
114
+ You are an experienced Technical Human Resource Manager,your task is to Provide specific recommendations to tailor the resume to the job description.
115
+ Suggest possible next steps, certifications, courses or experiences the person could do.
116
+ Make sure the suggestions are all FACTUALLY ACCURATE given the original resume and specify
117
+ which suggestions require further action. Mention where resume is good and where resume lacks. FOR EVERY CHANGE YOU SUGGEST, PROVIDE A SIMPLE EXPLANATION
118
+ FOR WHY< Additionally include critiques on a granular level including strong word choice suggestion etc.
119
+ Output in formatted, aesthetically pleasing markdown text.
120
+ Job Description: {input_text}
121
+ Resume: {doc}
122
+ """
123
+
124
+ recommendation_section = """
125
+ You are an experienced Technical Human Resource Manager,your task is to Provide specific recommendations to tailor the resume to the job description.
126
+ Please share your professional recommendations on what to write and how to write the given pargraph so that the candidate's profile aligns with the role.
127
+ Talk about each section of user's resume and talk good and bad points of it. Recommend how to modify it better.
128
+
129
+ Job Description: {input_text}
130
+ Resume: {doc}
131
+ """
132
+
133
+ keyword_analysis = """
134
+ Perform keyword analysis on both the input job description and the existing resume to identify missing keywords,
135
+ Analyze the provided document for keywords related to the job description.
136
+ Return a list of relevant keywords from the document with their number of occurance.
137
+ If no pages are found containing any of the keywords return "No Matching Keywords Found".
138
+ Output as a Markdown List where missing keywords are listed along with the Keywords presnet in the resume with number of time it occured in resume.
139
+ Job Description: {input_text}
140
+ Resume: {doc}
141
+ """
142
+
143
+ keyword_synonyms = """
144
+ Provide a list of minimum 10 synonums of the given keyword. If there are less than 10
145
+ synonyms provide as many as you can find. The output should be in a markdown numbered list format where the synonyms of the keyword are listed in numbered list,
146
+ return as many as you can provide maximum 15.
147
+ Also suggest synonyms of the keyword based on job description
148
+ Job Description: {input_text}
149
+ Resume: {doc}
150
+ Keyword: {info}
151
+ """
152
+
153
+ resume_update = """
154
+ ## Writing an Updated Resume which is ATS friendly in latex format
155
+
156
+ ### Step-by-Step Guide for the Updated Resume
157
+
158
+ #### 1. Header
159
+ - **Full Name**
160
+ - **Contact Information:** Phone number, Email address, LinkedIn profile (if applicable)
161
+ - **Location:** City, State (optional, depending on privacy preferences)
162
+
163
+ #### 2. Professional Summary
164
+ - Craft a 2-3 sentence summary focusing on key qualifications and alignment with the target job description.
165
+
166
+ #### 3. Skills
167
+ - List skills that are relevant to the job description.
168
+ - Use bullet points and ensure to include keywords from the job description for ATS optimization.
169
+
170
+ #### 4. Professional Experience
171
+ - For each relevant position, include **Job Title**, **Company Name**, **Location**, and **Dates of Employment**.
172
+ - Under each role, list bullet points that detail responsibilities and achievements, emphasizing quantifiable outcomes and incorporating job description keywords.
173
+
174
+ #### 5. Education
175
+ - List degrees obtained, including **Degree Title**, **Institution Name**, **Location**, and **Graduation Date**.
176
+ - Add relevant coursework or projects if they align with the job description.
177
+
178
+ #### 6. Certifications (Optional)
179
+ - Include certifications relevant to the job description.
180
+
181
+ #### 7. Additional Sections (Optional)
182
+ - Sections like Volunteer Experience, Publications, or Awards can be added if they are relevant to the job and add value.
183
+
184
+ #### 8. ATS Compatibility and Formatting
185
+ - Ensure the resume format is simple with a standard, easy-to-read font like Arial or Times New Roman.
186
+ - Avoid complex elements like tables or columns that can confuse ATS systems.
187
+
188
+ #### 9. Final Review
189
+ - Proofread for any spelling or grammatical errors.
190
+ - Check alignment with the job description and ensure all important keywords are included.
191
+
192
+ ### Conclusion:
193
+ - Provide a brief summary highlighting the key changes made to the resume and how they align with the target job description.
194
+ - Offer suggestions for any additional improvements or steps the candidate can take to further tailor their resume for similar roles in the future.
195
+
196
+ ### Example
197
+
198
+ - Create a new resume in the given LaTeX format.
199
+
200
+ **Job Description:** {input_text}
201
+
202
+ **Resume data:** {doc}
203
+
204
+ The output should be first show step by step guide for updated resume after that generate new resume based on provided information
205
+ and then also add the latex format of the generated resume .
206
+ """
207
+
208
+ #info contains company name also
209
+ cover_letter = """
210
+ ## Writing a Cover Letter for {info}
211
+ Job Description: {input_text}
212
+ Resume: {doc}
213
+ ### Step-by-Step Guide for the Cover Letter
214
+ #### 1. Contact Information and Date
215
+ - Include your contact information at the top: Name, Address (optional), Phone Number, Email.
216
+ - Add the date of writing the letter.
217
+ #### 2. Salutation
218
+ - If possible, address the letter to a specific person (e.g., "Dear [Hiring Manager's Name]").
219
+ - If the specific contact is not known, use a general salutation like "Dear Hiring Manager".
220
+ #### 3. Introduction
221
+ - Open with a strong, engaging sentence that captures the reader’s attention.
222
+ - Mention the job title you’re applying for and where you found the job listing.
223
+ - Briefly state why you are interested in the role and the company.
224
+ #### 4. Body of the Letter (1-2 Paragraphs)
225
+ - In the first paragraph, summarize your relevant experience and skills, aligning them with key requirements of the job description.
226
+ - In the second paragraph, provide specific examples from your past work that demonstrate your abilities and successes. Use quantifiable achievements when possible.
227
+ - Explain how your skills and experiences make you an ideal fit for the role and how you can contribute to the company.
228
+ #### 5. Conclusion
229
+ - Reiterate your enthusiasm for the position.
230
+ - Mention any attached documents (like your resume or portfolio).
231
+ - State your availability for an interview and propose the next steps or indicate your intention to follow up.
232
+ #### 6. Sign-off
233
+ - Close the letter with a professional sign-off such as "Sincerely" or "Best regards," followed by your name.
234
+ - If you’re submitting a printed letter, leave space for your handwritten signature above your typed name.
235
+ ### Final Tips:
236
+ - Keep the cover letter concise, ideally not exceeding one page.
237
+ - Tailor the letter to the job and company – avoid using a generic template.
238
+ - Proofread carefully to avoid any spelling or grammatical errors.
239
+ - Use a professional tone, but allow your personality to shine through.
240
+ ## Example:
241
+ - Provide an cover letter also as example
242
+ """
243
+
244
+ linkedin_profile = """
245
+ ## Comprehensive LinkedIn Profile and Headline Update
246
+ Job Description: {input_text}
247
+ Resume: {doc}
248
+ ### Step-by-Step Guide for LinkedIn Update
249
+ #### 1. LinkedIn Headline
250
+ - Create a headline combining your current role or expertise, key skills from your resume, and aspects of the job you are targeting.
251
+ - Example format: “[Current Role/Expertise] with [Key Skills] | Aspiring [Target Job Title]”
252
+ #### 2. Profile Photo and Background Image
253
+ - Choose a professional profile picture and a background image that reflects your professional brand.
254
+ #### 3. About Section
255
+ - Write a summary that includes your professional background, achievements, skills, and career aspirations, tailored to align with your resume and the job description.
256
+ #### 4. Experience Section
257
+ - Update to mirror your resume, highlighting roles, responsibilities, and achievements relevant to your career goals.
258
+ - Use language and keywords from the job description to Improve alignment.
259
+ #### 5. Education
260
+ - Ensure your educational background matches your resume, including relevant courses and certifications.
261
+ #### 6. Skills & Endorsements
262
+ - Add and prioritize skills from your resume and the job description, focusing on those most relevant to your career goals.
263
+ #### 7. Recommendations
264
+ - Request recommendations that reinforce your skills and experiences, particularly those aligning with your target job.
265
+ #### 8. Licenses and Certifications
266
+ - Include any relevant certifications, aligning with both your resume and job description.
267
+ #### 9. Volunteer Experience
268
+ - Add volunteer work if it supports your professional image and career objectives.
269
+ #### 10. Accomplishments
270
+ - Include any relevant publications, patents, projects, honors, and awards.
271
+ #### 11. Customized URL
272
+ - Customize your LinkedIn URL for a professional touch.
273
+ ### Final Steps:
274
+ - Review for consistency in language and tone.
275
+ - Proofread to ensure there are no errors.
276
+ - Update your profile regularly to reflect your current professional status and aspirations.
277
+ ### Conclusion:
278
+ - Your LinkedIn profile should be a dynamic representation of your professional life, showcasing both your experience and personality, and aligned with your career goals and targeted job opportunities.
279
+ """
280
+
281
+ interview = """
282
+ ## Customized Interview Questions and Candidate Questions to Interviewer
283
+ Job Description: {input_text}
284
+ Resume: {doc}
285
+ Role: {info}
286
+ ### Part 1: Tailored Interview Questions Based on Job Description
287
+ #### 1. Role-Specific Technical Questions
288
+ - Generate questions that assess skills and experiences directly related to the key requirements in the job description.
289
+ - Example: "Your resume mentions experience in [specific skill from resume]; can you discuss how you've applied this skill in a past project?"
290
+ #### 2. Behavioral Questions Related to Job Role
291
+ - Formulate questions based on scenarios or challenges outlined in the job description.
292
+ - Example: "The job description emphasizes teamwork. Can you share an experience where you successfully collaborated on a challenging project?"
293
+ #### 3. Scenario-Based Problem-Solving Questions
294
+ - Create questions that relate to potential challenges or tasks in the new role, as described in the job description.
295
+ - Example: "Given a scenario of [specific challenge in the job description], how would you approach solving it?"
296
+ #### 4. Questions Assessing Cultural and Company Fit
297
+ - Based on the company culture hinted at in the job description, prepare questions to evaluate the candidate's fit.
298
+ - Example: "Our company values [specific value from job description]. Can you provide an example of how you've embodied this value in your professional life?"
299
+ ### Part 2: Questions for the Candidate to Ask the Interviewer
300
+ #### 1. Clarifications on Role Responsibilities
301
+ - Suggest questions that seek deeper insights into the daily responsibilities and expectations.
302
+ - Example: "Could you elaborate on the typical day-to-day tasks for someone in this position?"
303
+ #### 2. Inquiries About Team Structure and Dynamics
304
+ - Based on the team information in the job description, propose questions about team collaboration and environment.
305
+ - Example: "Can you tell me more about the team I would be working with?"
306
+ #### 3. Questions About Growth and Development Opportunities
307
+ - Encourage questions about professional development, especially in areas highlighted as important in the job description.
308
+ - Example: "What opportunities for professional growth does the company provide in [area mentioned in the job description]?"
309
+ #### 4. Queries About Success Measurement
310
+ - Suggest questions about how success is measured in the role, relating to performance indicators mentioned in the job description.
311
+ - Example: "What are the key performance indicators for this role, and how are they measured?"
312
+ ### Conclusion:
313
+ - These questions are designed to provide a comprehensive understanding of the candidate's suitability for the role and to help the candidate assess whether the role aligns with their career aspirations.
314
+ - Remind candidates to use these questions as a guide and personalize them to reflect their unique experiences and interests.
315
+ """
316
+
317
+ company_recommendations = """
318
+ ## Company Recommendations Based on Candidate's Resume and Job Description
319
+ Job Description: {input_text}
320
+ Resume: {doc}
321
+ ### Process for Identifying Similar Companies
322
+ #### 1. Analyze the Job Description
323
+ - Identify key industry sectors, job responsibilities, and required skills from the job description.
324
+ - Note any specific company characteristics mentioned (e.g., startup culture, large multinational, specific sector focus).
325
+ #### 2. Review the Candidate's Resume
326
+ - Look for industries, skills, and types of roles the candidate has experience in.
327
+ - Consider the candidate’s career level and preferences indicated by their work history and achievements.
328
+ #### 3. Research and List Similar Companies
329
+ - Based on the collected information, identify companies in similar industries or those that offer similar roles.
330
+ - Consider companies that align with the candidate's experience level and career aspirations.
331
+ #### 4. Provide a Diverse Range of Options
332
+ - Include a mix of large corporations, mid-size companies, and startups, if relevant.
333
+ - Ensure the list covers various sectors within the industry that align with the candidate's skills and experience.
334
+ #### 5. Additional Considerations
335
+ - Take into account the candidate’s geographical preferences or willingness to relocate, if indicated in the resume or job description.
336
+ - Consider the current market trends and the demand for the candidate’s skill set in various companies.
337
+ ### Example Output:
338
+ - Based on a resume with experience in digital marketing and a job description for a Digital Marketing Manager in the tech industry, the recommendations could include:
339
+ - Tech companies with a strong online presence.
340
+ - Marketing agencies specializing in digital strategies for tech clients.
341
+ - Startups in the tech sector looking to build their digital marketing teams.
342
+ ### Conclusion:
343
+ - Provide a list of recommended companies where the candidate might find similar roles to the one they are applying for.
344
+ - Encourage the candidate to research these companies further to find specific job openings that match their skills and career goals.
345
+ """
features/__pycache__/analyzer.cpython-39.pyc ADDED
Binary file (1.29 kB). View file
 
features/__pycache__/ats.cpython-39.pyc ADDED
Binary file (1.21 kB). View file
 
features/__pycache__/company_recommend.cpython-39.pyc ADDED
Binary file (1.04 kB). View file
 
features/__pycache__/cover_letter.cpython-39.pyc ADDED
Binary file (1.09 kB). View file
 
features/__pycache__/enhance.cpython-39.pyc ADDED
Binary file (1.07 kB). View file
 
features/__pycache__/improve.cpython-39.pyc ADDED
Binary file (1.04 kB). View file
 
features/__pycache__/interview.cpython-39.pyc ADDED
Binary file (1.09 kB). View file
 
features/__pycache__/linkedin.cpython-39.pyc ADDED
Binary file (1.01 kB). View file
 
features/__pycache__/newresume.cpython-39.pyc ADDED
Binary file (986 Bytes). View file
 
features/__pycache__/recommend.cpython-39.pyc ADDED
Binary file (1.1 kB). View file
 
features/__pycache__/review.cpython-39.pyc ADDED
Binary file (1.06 kB). View file
 
features/__pycache__/synonym.cpython-39.pyc ADDED
Binary file (1.04 kB). View file
 
features/analyzer.py ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from dotenv import load_dotenv
2
+ from components.functions import Functions
3
+ from components.prompts import keyword_analysis, keyword_synonyms
4
+
5
+ import streamlit as st
6
+
7
+ def run_analyzer(llm, doc='', jd='', analysis=False):
8
+ load_dotenv()
9
+ analyzer = Functions()
10
+
11
+ if analysis:
12
+ message = "Suggesting Keywords to add in your Resume."
13
+ template = keyword_analysis
14
+ else:
15
+ message = "Suggesting Synonyms for Provided Keywords to add in your Resume."
16
+ keyword = st.text_input("Keyword")
17
+ if not keyword:
18
+ st.write("Please provide a keyword for synonyms.")
19
+ return
20
+ template = keyword_synonyms
21
+
22
+ st.write(message)
23
+ submit = st.button("Suggest Keywords" if analysis else "Generate Keywords")
24
+
25
+ if submit:
26
+ if doc is not None:
27
+ with st.spinner("Analyzing..."):
28
+ response = analyzer.get_gemini_response(llm=llm, template=template, doc=doc, input_text=jd, info=keyword)
29
+ st.subheader("The Keywords You Can Add:")
30
+ st.write(response)
31
+ else:
32
+ st.write("Please upload the resume")
33
+
34
+ if __name__ == "__main__":
35
+ analyzer = Functions()
36
+ run_analyzer(analyzer.model())
features/ats.py ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from dotenv import load_dotenv
2
+ from components.functions import Functions
3
+ from components.prompts import ats_resume, ats_score
4
+
5
+ import streamlit as st
6
+
7
+ def run_ats(llm, doc='', jd='', manual=False):
8
+ load_dotenv()
9
+ ats = Functions()
10
+
11
+ submit = st.button("Percentage match")
12
+
13
+ if submit:
14
+ if doc is not None:
15
+ with st.spinner("Calculating Score..."):
16
+ if manual:
17
+ response, keywords = ats.calculate_ats_score(resume_data=doc, job_description=jd)
18
+ st.subheader("The Keywords Missing:")
19
+ for i, keyword in enumerate(keywords):
20
+ st.caption(f"{i+1}. {keyword}")
21
+ else:
22
+ response = ats.get_gemini_response(llm=llm, template=ats_score, doc=doc, input_text=jd)
23
+ extra_response = ats.get_gemini_response(llm=llm, template=ats_resume, doc=doc, input_text=jd)
24
+
25
+ st.subheader("The ATS Score is")
26
+ st.write(response)
27
+ st.write(extra_response)
28
+ else:
29
+ st.write("Please upload the resume")
30
+
31
+ if __name__ == "__main__":
32
+ ats = Functions()
33
+ run_ats(ats.model())
features/company_recommend.py ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #company.py
2
+
3
+ from dotenv import load_dotenv
4
+ from components.functions import Functions
5
+ import streamlit as st
6
+ from components.prompts import company_recommendations
7
+
8
+
9
+
10
+ def run_company(llm,doc='',jd=''):
11
+ load_dotenv()
12
+ company = Functions()
13
+ st.write("Suggesting new New Job Oppertunities based your resume")
14
+ submit = st.button("Recommend New Oppertunities")
15
+
16
+
17
+ if submit:
18
+ if doc is not None:
19
+ with st.spinner("Searching..."):
20
+ response=company.get_gemini_response(llm=llm,template=company_recommendations,doc=doc,input_text=jd)
21
+ st.subheader("The Job Roles You can Apply for:")
22
+ st.write(response)
23
+ else:
24
+ st.write("Please upload the resume")
25
+
26
+
27
+
28
+ if __name__ == "__main__":
29
+ company = Functions()
30
+ run_company(company.model())
features/cover_letter.py ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #letter.py
2
+
3
+ from dotenv import load_dotenv
4
+ from components.functions import Functions
5
+ import streamlit as st
6
+ from components.prompts import cover_letter
7
+
8
+
9
+
10
+ def run_letter(llm,doc='',jd=''):
11
+ load_dotenv()
12
+ letter = Functions()
13
+ st.write("Generate a cover letter based on your resume and Provided Job Description.")
14
+ role=st.text_input("Role you want the cover letter for")
15
+ submit = st.button("Generate Cover Letter")
16
+
17
+
18
+ if submit:
19
+ if doc is not None:
20
+ with st.spinner("Generating..."):
21
+ response = letter.get_gemini_response(llm=llm,template=cover_letter,doc=doc,input_text=jd, info=role)
22
+ st.subheader("Cover Letter")
23
+ st.write(response)
24
+ else:
25
+ st.write("Please upload the resume")
26
+
27
+
28
+
29
+ if __name__ == "__main__":
30
+ letter = Functions()
31
+ run_letter(letter.model())
features/enhance.py ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #enhance.py
2
+
3
+ from dotenv import load_dotenv
4
+ from components.functions import Functions
5
+ import streamlit as st
6
+ from components.prompts import resume_enhance
7
+
8
+
9
+
10
+ def run_enhance(llm,doc='',jd=''):
11
+ load_dotenv()
12
+ enhance = Functions()
13
+ st.write("Providing bullet points for enhancing the given paragraph.")
14
+ bullet = st.text_input("Paragraph for bullet points")
15
+ submit = st.button("Provide Bullet Points")
16
+
17
+ if submit:
18
+ if doc is not None:
19
+ with st.spinner("Processing..."):
20
+ response=enhance.get_gemini_response(llm=llm,template=resume_enhance,doc=doc,input_text=jd, info=bullet)
21
+ st.subheader("The Repsonse is")
22
+ st.write(response)
23
+ else:
24
+ st.write("Please upload the resume")
25
+
26
+
27
+
28
+ if __name__ == "__main__":
29
+ enhance = Functions()
30
+ run_enhance(enhance.model())
features/improve.py ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #improve.py
2
+
3
+ from dotenv import load_dotenv
4
+ from components.functions import Functions
5
+ import streamlit as st
6
+ from components.prompts import resume_improve
7
+
8
+
9
+
10
+ def run_improve(llm,doc='',jd=''):
11
+ load_dotenv()
12
+ improve = Functions()
13
+ st.write("Suggesting new elements to add to your resume based on the existing content.")
14
+ submit = st.button("How Can I Improvise my Skills")
15
+
16
+
17
+ if submit:
18
+ if doc is not None:
19
+ with st.spinner("Generating..."):
20
+ response=improve.get_gemini_response(llm=llm,template=resume_improve,doc=doc,input_text=jd)
21
+ st.subheader("The Required Improvmemts are")
22
+ st.write(response)
23
+ else:
24
+ st.write("Please upload the resume")
25
+
26
+
27
+
28
+ if __name__ == "__main__":
29
+ improve = Functions()
30
+ run_improve(improve.model())
features/interview.py ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #interview.py
2
+
3
+ from dotenv import load_dotenv
4
+ from components.functions import Functions
5
+ import streamlit as st
6
+ from components.prompts import interview as interview_prompt
7
+
8
+
9
+
10
+ def run_interview(llm,doc='',jd=''):
11
+ load_dotenv()
12
+ interview = Functions()
13
+ st.write("Generate Customized Interview Questions.")
14
+ role=st.text_input("Role you want to know questions for")
15
+ submit = st.button("Generate Interview Questions")
16
+
17
+
18
+ if submit:
19
+ if doc is not None:
20
+ with st.spinner("Generating..."):
21
+ response = interview.get_gemini_response(llm=llm,template=interview_prompt,doc=doc,input_text=jd,info=role)
22
+ st.subheader("Customized Interview Questions")
23
+ st.write(response)
24
+ else:
25
+ st.write("Please upload the resume")
26
+
27
+
28
+
29
+ if __name__ == "__main__":
30
+ interview = Functions()
31
+ run_interview(interview.model())
features/linkedin.py ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #linkedin.py
2
+
3
+ from dotenv import load_dotenv
4
+ from components.functions import Functions
5
+ import streamlit as st
6
+ from components.prompts import linkedin_profile
7
+
8
+
9
+
10
+ def run_linkedin(llm,doc='',jd=''):
11
+ load_dotenv()
12
+ linkedin = Functions()
13
+ st.write("Suggesting Comprehensive LinkedIn Profile.")
14
+ submit = st.button("Suggest Profile Details")
15
+
16
+
17
+ if submit:
18
+ if doc is not None:
19
+ with st.spinner("Creating..."):
20
+ response=linkedin.get_gemini_response(llm=llm,template=linkedin_profile,doc=doc,input_text=jd)
21
+ st.subheader("Comprehensive LinkedIn Profile")
22
+ st.write(response)
23
+ else:
24
+ st.write("Please upload the resume")
25
+
26
+
27
+
28
+ if __name__ == "__main__":
29
+ linkedin = Functions()
30
+ run_linkedin(linkedin.model())
features/newresume.py ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #newresume.py
2
+
3
+ from dotenv import load_dotenv
4
+ from components.functions import Functions
5
+ import streamlit as st
6
+ from components.prompts import resume_update
7
+
8
+ def run_newresume(llm,doc='',jd=''):
9
+ load_dotenv()
10
+ newresume = Functions()
11
+ st.write("Generate new resume in LateX Format.")
12
+ submit = st.button("Generate Resume")
13
+
14
+ if submit:
15
+ if doc is not None:
16
+ with st.spinner("Generating..."):
17
+ response=newresume.get_gemini_response(llm=llm,template=resume_update,doc=doc,input_text=jd)
18
+ st.subheader("Resume In LateX Format")
19
+ st.write(response)
20
+ else:
21
+ st.write("Please upload the resume")
22
+
23
+ if __name__ == "__main__":
24
+ newresume = Functions()
25
+ run_newresume(newresume.model())
features/recommend.py ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #recommend.py
2
+
3
+ from dotenv import load_dotenv
4
+ from components.functions import Functions
5
+ import streamlit as st
6
+ from components.prompts import resume_recommendation, recommendation_section
7
+
8
+ def run_recommend(llm,doc='',jd='', section=False):
9
+ load_dotenv()
10
+ recommend = Functions()
11
+ st.write("Recommendations To improve Your Resume.")
12
+ submit = st.button("Recommend Me!!")
13
+
14
+ if submit:
15
+ if doc is not None:
16
+ with st.spinner("Analyzing..."):
17
+ if section:
18
+ response = recommend.get_gemini_response(llm=llm,template=recommendation_section,doc=doc,input_text=jd)
19
+ else:
20
+ response = recommend.get_gemini_response(llm=llm,template=resume_recommendation,doc=doc,input_text=jd)
21
+ st.subheader("The Recommendations you can Apply in your Resume: ")
22
+ st.write(response)
23
+ else:
24
+ st.write("Please upload the resume")
25
+
26
+ if __name__ == "__main__":
27
+ recommend = Functions()
28
+ run_recommend(recommend.model())
features/review.py ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #review.py
2
+
3
+ from dotenv import load_dotenv
4
+ from components.functions import Functions
5
+ import streamlit as st
6
+ from components.prompts import resume_review
7
+
8
+ def run_review(llm,doc='',jd=''):
9
+ load_dotenv()
10
+ review = Functions()
11
+ st.write("Get a review on how well your Resume is")
12
+ role=st.text_input("Role you want to Review for")
13
+ submit = st.button("Tell Me About the Resume")
14
+
15
+ if submit:
16
+ with st.spinner("Reviewing Your Resume..."):
17
+ if doc is not None:
18
+ response=review.get_gemini_response(llm=llm,template=resume_review,doc=doc,input_text=jd, info=role)
19
+ st.subheader("Resume Review: ")
20
+ st.write(response)
21
+ else:
22
+ st.write("Please upload the resume")
23
+
24
+ if __name__ == "__main__":
25
+ review = Functions()
26
+ run_review(review.model())
overleaf.py ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Add this code snippet after generating the resume in main.py
2
+
3
+ import webbrowser
4
+
5
+ def redirect_to_overleaf(resume):
6
+ # Assuming the Overleaf URL for templates is "https://www.overleaf.com/templates"
7
+ overleaf_url = "https://www.overleaf.com/project/new/template/34599?id=533668126&latexEngine=pdflatex&mainFile=main.tex&templateName=Northeastern+University+COS+Faculty+CV+Template&texImage=texlive-full%3A2023.1"
8
+ # Save the generated resume to a file
9
+ # with open("a.tex", "w") as file:
10
+ # file.write(resume)
11
+ # Redirect to Overleaf with the generated resume
12
+ webbrowser.open_new_tab(overleaf_url)
13
+ # webbrowser.open_new_tab("generated_resume.tex")
14
+
15
+ # Call this function after generating the resume
16
+ redirect_to_overleaf("generated_resume")
requirements.txt CHANGED
@@ -8,4 +8,5 @@ python-dotenv
8
  SpeechRecognition
9
  PyAudio
10
  pdfplumber
11
- python-docx
 
 
8
  SpeechRecognition
9
  PyAudio
10
  pdfplumber
11
+ python-docx
12
+ pylatexenc