Spaces:
Build error
Build error
| import gradio as gr | |
| import requests | |
| import json | |
| import os | |
| from sentence_transformers import util | |
| # Set up API endpoint and API Key | |
| api_key = os.getenv("GOOGLE_API_KEY") # Store your API Key in environment variables | |
| api_url = "https://generativelanguage.googleapis.com/v1beta/models/gemini-1-2:embedText" # Adjust as per your model version | |
| headers = { | |
| "Authorization": f"Bearer {api_key}", | |
| "Content-Type": "application/json" | |
| } | |
| def get_gemini_embeddings(text): | |
| data = { | |
| "model": "gemini-1-2", # Replace with the actual model you are using | |
| "text": text | |
| } | |
| # Send POST request to Gemini API | |
| response = requests.post(api_url, headers=headers, json=data) | |
| if response.status_code == 200: | |
| response_data = response.json() | |
| return response_data.get("embeddings", []) | |
| else: | |
| print(f"Error: {response.status_code} - {response.text}") | |
| return [] | |
| def extract_text_from_resume(resume_file): | |
| # Extract text from resume (you can use libraries like PyPDF2 or textract for PDFs) | |
| return "Sample resume text" | |
| def extract_leadership_experience(resume_text): | |
| # Logic to extract leadership experience from resume text | |
| return "Leadership Experience Example" | |
| def extract_entities_via_gemini(resume_text): | |
| # Logic to extract named entities (e.g., Name, Email, Contact) using Gemini API | |
| return {"name": "John Doe", "email": "john.doe@example.com", "contact": "123-456-7890"} | |
| def save_results_to_csv(results): | |
| import csv | |
| csv_file_path = "/tmp/results.csv" | |
| with open(csv_file_path, mode='w', newline='') as file: | |
| writer = csv.writer(file) | |
| writer.writerow(["Resume Name", "Similarity Score (%)", "Eligibility", "Name", "Leadership Experience", "Email", "Contact"]) | |
| for result in results: | |
| writer.writerow(result) | |
| return csv_file_path | |
| def check_similarity(job_description, resume_files): | |
| results = [] | |
| # Get embeddings for the job description using Gemini | |
| job_emb = get_gemini_embeddings(job_description) | |
| if not job_emb: | |
| return "Error in embedding job description using Gemini API." | |
| for resume_file in resume_files: | |
| resume_text = extract_text_from_resume(resume_file) | |
| if not resume_text: | |
| results.append((resume_file.name, 0, "Not Eligible", None, "No leadership experience", "No Email", "No Contact")) | |
| continue | |
| # Get embeddings for the resume using Gemini | |
| resume_emb = get_gemini_embeddings(resume_text) | |
| if not resume_emb: | |
| results.append((resume_file.name, 0, "Not Eligible", None, "No leadership experience", "No Email", "No Contact")) | |
| continue | |
| # Calculate similarity score between job description and resume | |
| similarity_score = util.pytorch_cos_sim(job_emb, resume_emb)[0][0].item() | |
| similarity_percentage = similarity_score * 100 | |
| leadership_experience = extract_leadership_experience(resume_text) | |
| contact_info = extract_entities_via_gemini(resume_text) | |
| if similarity_score >= 0.50: | |
| candidate_name = contact_info.get('name', 'Unknown Candidate') | |
| results.append(( | |
| resume_file.name, | |
| similarity_percentage, | |
| "Eligible", | |
| candidate_name, | |
| leadership_experience, | |
| contact_info.get('email', 'No Email'), | |
| contact_info.get('contact', 'No Contact') | |
| )) | |
| else: | |
| results.append(( | |
| resume_file.name, | |
| similarity_percentage, | |
| "Not Eligible", | |
| None, | |
| leadership_experience, | |
| contact_info.get('email', 'No Email'), | |
| contact_info.get('contact', 'No Contact') | |
| )) | |
| csv_file_path = save_results_to_csv(results) | |
| return results, csv_file_path | |
| def download_results(results): | |
| return save_results_to_csv(results) | |
| # Gradio UI | |
| with gr.Blocks() as demo: | |
| with gr.Row(): | |
| job_desc_input = gr.Textbox(label="Job Description", lines=3) | |
| resume_input = gr.Files(label="Upload Resumes", file_count="multiple", file_types=[".pdf", ".txt"]) | |
| results_output = gr.Dataframe(headers=["Resume Name", "Similarity Score (%)", "Eligibility", "Name", "Leadership Experience", "Email", "Contact"]) | |
| check_button = gr.Button("Check Similarity") | |
| # Set up button's action | |
| check_button.click( | |
| check_similarity, | |
| inputs=[job_desc_input, resume_input], | |
| outputs=[results_output, gr.File(label="Download CSV", value=download_results)] | |
| ) | |
| demo.launch() | |