Spaces:
Runtime error
Runtime error
File size: 11,856 Bytes
81feeba bc49c7c 025b987 bc49c7c 81feeba d2f51cb bc49c7c d2f51cb bc49c7c d2f51cb bc49c7c d2f51cb bc49c7c d2f51cb bc49c7c d2f51cb bc49c7c d633195 bc49c7c d2f51cb bc49c7c d2f51cb ea3924a d2f51cb ea3924a d2f51cb ea3924a bc49c7c d2f51cb |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 |
import json
import os
import gradio as gr
import requests
import recruiting_assistant
def search_resume(input_text):
url = f"https://n970resrb9.execute-api.eu-west-1.amazonaws.com/dev/prediction" # replace with your API endpoint
headers = {
"Content-Type": "application/json",
"x-api-key": os.environ["API_KEY"],
} # adjust headers as needed
response = requests.post(
url, headers=headers, data=json.dumps({"text": input_text})
)
response_data = response.json()
if "prediction" in response_data:
prediction = response_data["prediction"]
if isinstance(prediction, list):
# Insert a newline after each '.'
# Insert a newline after each '.' and add "Candidate <follow up number>:\n" before each item
updated_prediction = [
f"Candidate {i+1}:\n=============================\n{s}"
for i, s in enumerate(prediction)
]
updated_prediction = [s.replace(". ", ".\n") for s in updated_prediction]
updated_prediction = [s.replace("â¢", "\n - ") for s in updated_prediction]
return "\n\n".join(updated_prediction)
return "No 'prediction' key found in the response or the 'body' is not a list."
examples = [
[
"""
DATA SCIENTIST - GENTIS
========================
I am in contact with a top company in Ghent where they are looking for an additional Data Scientist. Beware... Once you start there, you won't be leaving anytime soon. The company likes to keep their employees happy, so few leave.
The profile
Min of 3 years experience as a Data Scientist
Experience in Python and SQL
Communicative very strong
Experience in coaching and supporting junior collegues
Experience in Google Cloud is a plus
Experience in Machine Learning is a plus
They offer
An opportunity to be part of not only a fast-growing, innovative company, but one where you as a person can grow professionally as fast as the company
A close-knit and diverse team who are all ready to help, listen and give advice to each other
Training opportunities (because they don't stand still, so neither do you)
Trendy and young company where everyone can be their own
A very nice salary package and much more
Lots of remote work and flexibility, so bye bye traffic JAMS!
A renovated office with everything you could dream of full with surprises and extras
If you are interested or want more info, don't hesitate to contact me.
"""
],
[
"""
Payroll, Benefits & Office Manager
================================
Your mission:
As Payroll, Benefits & Office Manager, you will play a crucial role in ensuring an outstanding service to our employees throughout their employee journey.
You will be managing a team of 5, whilst improving systems and processes and providing support to the overall People and Organisation team.
Your responsibilities:
Manage the People Services team to deliver a "first time right " approach to service delivery, coaching and development of key skills and knowledge ensuring adequate cover across all work areas.
Responsibility for ensuring that all HR administrative tasks across the full employee life cycle including pre- and post-employment administration, contract issue, contract amendments.
Your profile:
You have a proven track record in People Management.
Your field of expertise lies in payroll and comp&ben, and experience in Facility Management or Property Management is a strong plus.
What we offer you :
A company on a human scale in which you quickly see the impact of your actions
An attractive salary package with company car, accompanied by various extra-legal benefits (meal vouchers, group insurance, hospitalization insurance, etc.)
39 days off per year
"""
],
]
css = """
.gradio-container {
font-family: 'IBM Plex Sans', sans-serif;
}
.gr-button {
color: white;
border-color: black;
background: black;
}
input[type='range'] {
accent-color: black;
}
.dark input[type='range'] {
accent-color: #dfdfdf;
}
.container {
max-width: 730px;
margin: auto;
padding-top: 1.5rem;
}
#gallery {
min-height: 22rem;
margin-bottom: 15px;
margin-left: auto;
margin-right: auto;
border-bottom-right-radius: .5rem !important;
border-bottom-left-radius: .5rem !important;
}
#gallery>div>.h-full {
min-height: 20rem;
}
.details:hover {
text-decoration: underline;
}
.gr-button {
white-space: nowrap;
}
.gr-button:focus {
border-color: rgb(147 197 253 / var(--tw-border-opacity));
outline: none;
box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
--tw-border-opacity: 1;
--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px var(--tw-ring-offset-width)) var(--tw-ring-color);
--tw-ring-color: rgb(191 219 254 / var(--tw-ring-opacity));
--tw-ring-opacity: .5;
}
#advanced-btn {
font-size: .7rem !important;
line-height: 19px;
margin-top: 12px;
margin-bottom: 12px;
padding: 2px 8px;
border-radius: 14px !important;
}
#advanced-options {
display: none;
margin-bottom: 20px;
}
.footer {
margin-bottom: 45px;
margin-top: 35px;
text-align: center;
border-bottom: 1px solid #e5e5e5;
}
.footer>p {
font-size: .8rem;
display: inline-block;
padding: 0 10px;
transform: translateY(10px);
background: white;
}
.dark .footer {
border-color: #303030;
}
.dark .footer>p {
background: #0b0f19;
}
.acknowledgments h4{
margin: 1.25em 0 .25em 0;
font-weight: bold;
font-size: 115%;
}
.animate-spin {
animation: spin 1s linear infinite;
}
@keyframes spin {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
#share-btn-container {
display: flex; padding-left: 0.5rem !important; padding-right: 0.5rem !important; background-color: #000000; justify-content: center; align-items: center; border-radius: 9999px !important; width: 13rem;
margin-top: 10px;
margin-left: auto;
}
#share-btn {
all: initial; color: #ffffff;font-weight: 600; cursor:pointer; font-family: 'IBM Plex Sans', sans-serif; margin-left: 0.5rem !important; padding-top: 0.25rem !important; padding-bottom: 0.25rem !important;right:0;
}
#share-btn * {
all: unset;
}
#share-btn-container div:nth-child(-n+2){
width: auto !important;
min-height: 0px !important;
}
#share-btn-container .wrap {
display: none !important;
}
.gr-form{
flex: 1 1 50%; border-top-right-radius: 0; border-bottom-right-radius: 0;
}
#prompt-container{
gap: 0;
}
#prompt-text-input, #negative-prompt-text-input{padding: .45rem 0.625rem}
#component-16{border-top-width: 1px!important;margin-top: 1em}
.image_duplication{position: absolute; width: 100px; left: 50px}
"""
demo = gr.Blocks(css=css)
with demo:
gr.HTML(
"""
<div style="text-align: center; margin: 0 auto;">
<div
style="
display: inline-flex;
align-items: center;
gap: 0.8rem;
font-size: 1.75rem;
"
>
<h1 style="font-weight: 900; margin-bottom: 7px;margin-top:5px">
Recruiter Assistent
</h1>
</div>
<p style="margin-bottom: 10px; font-size: 94%; line-height: 23px;">
<b>Helps recruiters to find relevant resumes in a database and write a relevant introduction email to the customer.
</br>We have more than 100 distinct resumes in our database for various type of roles (data scientist / hr / lawyer / ...)\n
</br>We got the resumes from <a style="text-decoration: underline;" href="https://huggingface.co/datasets/Sachinkelenjaguri/Resume_dataset">here</a>
</p>
</div>
"""
)
with gr.Group():
with gr.Box():
with gr.Row(elem_id="prompt-container").style(
mobile_collapse=False, equal_height=True
):
with gr.Column():
gr.Markdown(
"""
## 1. Provide a vacancy and get back relevant resumes from an entire database of resumes for various roles.
"""
)
text_vacancy = gr.Textbox(
hint="Paste here a Vacancy...",
lines=7,
label="Copy/paste here a vacancy",
)
b1 = gr.Button("Search Resume").style(
margin=False,
rounded=(False, True, True, False),
full_width=False,
)
text_search_result = gr.Textbox(
hint="Top resumes will appear here ...",
label="Top resumes found in the database",
)
b1.click(
search_resume, inputs=text_vacancy, outputs=text_search_result
)
gr.Markdown(
"""
## 2. Select an appropriate resume for this vacancy, paste it in the textfield and get a relevant introduction email.
"""
)
text_resume = gr.Textbox(
hint="Paste here a Resume...",
label="Copy / Paste here your prefered resume from above and click the button to write an intro ",
)
b2 = gr.Button("Write a relevant intro").style(
margin=False,
rounded=(False, True, True, False),
full_width=False,
)
gr.Markdown(
"""
## 3. You have a relevant introduction email to send to the customer.
"""
)
text_intro = gr.Textbox(label="Intro Email")
evaluation = gr.Textbox(label="Evaluation of the skills")
b2.click(
recruiting_assistant.create_intro,
inputs=[text_vacancy, text_resume],
outputs=[text_intro, evaluation],
)
gr.Examples(
examples=examples,
fn=search_resume,
inputs=text_vacancy,
outputs=text_search_result,
cache_examples=False,
)
demo.launch()
|