Spaces:
Sleeping
Sleeping
File size: 8,017 Bytes
4abd232 0d98f00 4abd232 0d98f00 4abd232 0d98f00 4abd232 0d98f00 4abd232 0d98f00 4abd232 0d98f00 4abd232 0d98f00 4abd232 0d98f00 4abd232 0d98f00 4abd232 0d98f00 4abd232 0d98f00 4abd232 |
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 |
import gradio as gr
import pandas as pd
import datetime
import numpy as np
import docx
from PyPDF2 import PdfReader
from sentence_transformers import SentenceTransformer, util
class AIHRAgent:
def __init__(self):
# Advanced model for semantic similarity
self.resume_model = SentenceTransformer("sentence-transformers/all-MiniLM-L6-v2")
self.employee_records = pd.DataFrame(columns=["Name", "Position", "Start Date", "Attendance", "Performance", "Leaves"])
self.company_policies = "Employees are entitled to 24 annual leaves and must adhere to company policies regarding attendance and punctuality."
def extract_text_from_file(self, file_path):
"""Extract text from uploaded file (PDF or DOCX)."""
try:
if file_path.name.endswith(".pdf"):
pdf_reader = PdfReader(file_path)
text = " ".join(page.extract_text() for page in pdf_reader.pages if page.extract_text())
elif file_path.name.endswith(".docx"):
doc = docx.Document(file_path)
text = " ".join(paragraph.text for paragraph in doc.paragraphs)
else:
raise ValueError("Unsupported file format. Please upload a PDF or DOCX file.")
return text
except Exception as e:
return f"Error extracting text from file: {e}"
def screen_resume(self, resume_text, job_description):
"""Advanced resume screening using sentence embeddings."""
try:
if not resume_text or not job_description:
return "Please provide both the resume text and job description."
# Semantic similarity scoring
job_embedding = self.resume_model.encode(job_description, convert_to_tensor=True)
resume_embedding = self.resume_model.encode(resume_text, convert_to_tensor=True)
similarity = util.pytorch_cos_sim(job_embedding, resume_embedding).item()
return f"Relevance Score: {similarity:.2f} for the position of {job_description}."
except Exception as e:
return f"Error during resume screening: {e}"
def onboarding_guide(self, employee_name, position):
"""Automated onboarding guide generation."""
return (f"Welcome {employee_name}!\n"
f"As a {position}, your onboarding plan includes:\n"
f"1. Orientation session.\n"
f"2. Team introductions.\n"
f"3. Work system setup.\n"
f"4. Initial training and goal setting.")
def add_employee(self, name, position, start_date):
new_employee = {
"Name": name,
"Position": position,
"Start Date": start_date,
"Attendance": 0,
"Performance": "Not Reviewed",
"Leaves": 0
}
self.employee_records = self.employee_records.append(new_employee, ignore_index=True)
return f"Employee {name} added successfully."
def track_attendance(self, employee_name):
if employee_name in self.employee_records["Name"].values:
self.employee_records.loc[self.employee_records["Name"] == employee_name, "Attendance"] += 1
return f"Attendance recorded for {employee_name}."
return f"Employee {employee_name} not found."
def process_payroll(self, employee_name, base_salary):
if employee_name in self.employee_records["Name"].values:
tax = base_salary * 0.1
net_salary = base_salary - tax
return f"Payroll Processed: Gross Salary = {base_salary}, Tax = {tax}, Net Salary = {net_salary}."
return f"Employee {employee_name} not found."
def pulse_survey(self):
return "Pulse Survey: On a scale of 1-5, how satisfied are you with your current role?"
def feedback_analysis(self, feedback_scores):
avg_score = np.mean(feedback_scores)
return f"Average Engagement Score: {avg_score:.2f}. Action Needed: {'Yes' if avg_score < 3 else 'No'}."
def performance_review(self, employee_name, review_score):
if employee_name in self.employee_records["Name"].values:
self.employee_records.loc[self.employee_records["Name"] == employee_name, "Performance"] = review_score
return f"Performance of {employee_name} updated to {review_score}."
return f"Employee {employee_name} not found."
def get_policy(self):
return self.company_policies
def exit_interview(self, employee_name, feedback):
if employee_name in self.employee_records["Name"].values:
self.employee_records = self.employee_records[self.employee_records["Name"] != employee_name]
return f"Exit interview recorded for {employee_name}. Feedback: {feedback}"
return f"Employee {employee_name} not found."
# AI HR Agent Instance
ai_hr = AIHRAgent()
# Gradio Interface
def gradio_interface():
with gr.Blocks() as interface:
gr.Markdown("# **Advanced AI HR Agent**")
gr.Markdown("This AI automates all HR tasks and provides advanced features such as resume screening and policy management.")
with gr.Tab("Recruitment and Onboarding"):
with gr.Row():
with gr.Column():
resume_upload = gr.File(label="Upload Resume (PDF/DOCX)")
job_description_input = gr.Textbox(label="Job Description")
resume_screen_output = gr.Textbox(label="Screening Result")
screen_button = gr.Button("Screen Resume")
with gr.Column():
onboarding_name = gr.Textbox(label="Employee Name")
onboarding_position = gr.Textbox(label="Position")
onboarding_output = gr.Textbox(label="Onboarding Guide")
onboarding_button = gr.Button("Generate Onboarding Guide")
with gr.Tab("Employee Management"):
add_name = gr.Textbox(label="Employee Name")
add_position = gr.Textbox(label="Position")
add_start_date = gr.Textbox(label="Start Date (YYYY-MM-DD)")
add_output = gr.Textbox(label="Add Employee Result")
add_button = gr.Button("Add Employee")
attendance_name = gr.Textbox(label="Employee Name for Attendance")
attendance_output = gr.Textbox(label="Attendance Result")
attendance_button = gr.Button("Record Attendance")
with gr.Tab("Payroll Management"):
payroll_name = gr.Textbox(label="Employee Name")
payroll_salary = gr.Number(label="Base Salary")
payroll_output = gr.Textbox(label="Payroll Result")
payroll_button = gr.Button("Process Payroll")
with gr.Tab("Exit Management"):
exit_name = gr.Textbox(label="Employee Name")
exit_feedback = gr.Textbox(label="Exit Feedback")
exit_output = gr.Textbox(label="Exit Interview Result")
exit_button = gr.Button("Record Exit Interview")
# Button Actions
screen_button.click(
lambda file, job_desc: ai_hr.screen_resume(ai_hr.extract_text_from_file(file), job_desc) if file else "No resume file uploaded.",
inputs=[resume_upload, job_description_input],
outputs=resume_screen_output,
)
onboarding_button.click(ai_hr.onboarding_guide, inputs=[onboarding_name, onboarding_position], outputs=onboarding_output)
add_button.click(ai_hr.add_employee, inputs=[add_name, add_position, add_start_date], outputs=add_output)
attendance_button.click(ai_hr.track_attendance, inputs=attendance_name, outputs=attendance_output)
payroll_button.click(ai_hr.process_payroll, inputs=[payroll_name, payroll_salary], outputs=payroll_output)
exit_button.click(ai_hr.exit_interview, inputs=[exit_name, exit_feedback], outputs=exit_output)
return interface
# Launch Interface
interface = gradio_interface()
interface.launch(share=True) |