Spaces:
Sleeping
Sleeping
Update cv_prompt.py
Browse files- cv_prompt.py +32 -40
cv_prompt.py
CHANGED
@@ -4,7 +4,6 @@ from langchain_core.pydantic_v1 import BaseModel, Field
|
|
4 |
from langchain.output_parsers import PydanticOutputParser
|
5 |
from langchain_core.prompts import PromptTemplate
|
6 |
|
7 |
-
|
8 |
def load_json_file(filename):
|
9 |
try:
|
10 |
with open(filename, 'r', encoding='utf-8') as f:
|
@@ -52,6 +51,37 @@ class ResumeQualityEvaluation(BaseModel):
|
|
52 |
work_experience: WorkExperience = Field(description="Evaluation of the work experience section")
|
53 |
profile: Profile = Field(description="Evaluation of the profile section")
|
54 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
55 |
def get_content_quality_prompt(text):
|
56 |
parser = PydanticOutputParser(pydantic_object=ResumeQualityEvaluation)
|
57 |
|
@@ -86,42 +116,6 @@ Provide an overall score for each section on a scale of 0-10 based on the presen
|
|
86 |
|
87 |
return prompt.format(resume=text)
|
88 |
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
def get_personal_info_prompt(text):
|
93 |
-
return f"""<s>[INST]Extract the personal information from the following CV text. The text may be in any language. Respond with a JSON object in the format {{"name": "extracted name", "email": "extracted email", "phone": "extracted phone number", "location": "extracted location"}}. If you can't find any of the information, set the value to null.
|
94 |
-
|
95 |
-
CV text:
|
96 |
-
{text}[/INST]"""
|
97 |
-
|
98 |
-
def get_spelling_grammar_prompt(text):
|
99 |
-
return f"""<s>[INST]Analyze the following text for spelling and grammar errors. The text may be in any language. Do not correct the errors, just count them. Calculate the percentage of errors.
|
100 |
-
|
101 |
-
Text to analyze:
|
102 |
-
{text}
|
103 |
-
|
104 |
-
Respond with a JSON object containing the key 'error_percentage' with the calculated percentage (0-100) of errors.[/INST]"""
|
105 |
-
|
106 |
-
def get_section_detection_prompt(text):
|
107 |
-
if cv_sections is None:
|
108 |
-
return None
|
109 |
-
sections_list = ", ".join(cv_sections['sections'].keys())
|
110 |
-
return f"""<s>[INST] Analyze this CV text and identify which of the following sections are present: {sections_list}.
|
111 |
-
A section is considered present if its content is identifiable, even without an explicit title.
|
112 |
-
Consider synonyms and alternative phrasings for section titles.
|
113 |
-
|
114 |
-
Sections to look for:
|
115 |
-
{sections_list}
|
116 |
-
|
117 |
-
CV text:
|
118 |
-
{text}
|
119 |
-
|
120 |
-
Respond with a JSON object with a key "present_sections" containing an array of the identified sections.
|
121 |
-
Only include sections that are actually present in the CV. [/INST]"""
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
def calculate_section_detection_score(detected_sections):
|
126 |
total_score = 0
|
127 |
for section in detected_sections:
|
@@ -142,6 +136,4 @@ def calculate_overall_score(evaluation: ResumeQualityEvaluation) -> float:
|
|
142 |
|
143 |
return round(overall_score, 2)
|
144 |
|
145 |
-
__all__ = ['ResumeQualityEvaluation', 'get_personal_info_prompt', 'get_spelling_grammar_prompt',
|
146 |
-
'get_section_detection_prompt', 'get_content_quality_prompt',
|
147 |
-
'calculate_section_detection_score', 'calculate_overall_score']
|
|
|
4 |
from langchain.output_parsers import PydanticOutputParser
|
5 |
from langchain_core.prompts import PromptTemplate
|
6 |
|
|
|
7 |
def load_json_file(filename):
|
8 |
try:
|
9 |
with open(filename, 'r', encoding='utf-8') as f:
|
|
|
51 |
work_experience: WorkExperience = Field(description="Evaluation of the work experience section")
|
52 |
profile: Profile = Field(description="Evaluation of the profile section")
|
53 |
|
54 |
+
def get_personal_info_prompt(text):
|
55 |
+
return f"""<s>[INST]Extract the personal information from the following CV text. The text may be in any language. Respond with a JSON object in the format {{"city": {{"extracted city name": true/false}}, "country": {{"extracted country name": true/false}}}}. If you can't find the information, set the value to false.
|
56 |
+
|
57 |
+
Text:
|
58 |
+
{text}[/INST]"""
|
59 |
+
|
60 |
+
def get_spelling_grammar_prompt(text):
|
61 |
+
return f"""<s>[INST]Analyze the following text for spelling and grammar errors. The text may be in any language. Do not correct the errors, just count them. Calculate the percentage of errors.
|
62 |
+
|
63 |
+
Text to analyze:
|
64 |
+
{text}
|
65 |
+
|
66 |
+
Respond with a JSON object containing the key 'error_percentage' with the calculated percentage (0-100) of errors.[/INST]"""
|
67 |
+
|
68 |
+
def get_section_detection_prompt(text):
|
69 |
+
if cv_sections is None:
|
70 |
+
return None
|
71 |
+
sections_list = ", ".join(cv_sections['sections'].keys())
|
72 |
+
return f"""<s>[INST] Analyze this CV text and identify which of the following sections are present: {sections_list}.
|
73 |
+
A section is considered present if its content is identifiable, even without an explicit title.
|
74 |
+
Consider synonyms and alternative phrasings for section titles.
|
75 |
+
|
76 |
+
Sections to look for:
|
77 |
+
{sections_list}
|
78 |
+
|
79 |
+
CV text:
|
80 |
+
{text}
|
81 |
+
|
82 |
+
Respond with a JSON object with a key "present_sections" containing an array of the identified sections.
|
83 |
+
Only include sections that are actually present in the CV. [/INST]"""
|
84 |
+
|
85 |
def get_content_quality_prompt(text):
|
86 |
parser = PydanticOutputParser(pydantic_object=ResumeQualityEvaluation)
|
87 |
|
|
|
116 |
|
117 |
return prompt.format(resume=text)
|
118 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
119 |
def calculate_section_detection_score(detected_sections):
|
120 |
total_score = 0
|
121 |
for section in detected_sections:
|
|
|
136 |
|
137 |
return round(overall_score, 2)
|
138 |
|
139 |
+
__all__ = ['ResumeQualityEvaluation', 'get_personal_info_prompt', 'get_spelling_grammar_prompt',
|
|
|
|