Spaces:
Sleeping
Sleeping
| from pdfminer.high_level import extract_text_to_fp | |
| from io import BytesIO | |
| from Ars.objects import ai,ResumeData,AutomationRiskResult,AutomationRiskInput,RealWorldQuestion,SkillDepthResult,SkillDepthInput,BreakDownByDomainUpdate,FlaggedRiskAreasUpdate,BoostSuggestionsUpdate,AICollabReadinessInput | |
| from Ars.embedDoc import search_pinecone_text | |
| from fastapi import UploadFile | |
| def extract_text_from_bytes(pdf_bytes: bytes) -> str: | |
| output_string = BytesIO() | |
| with BytesIO(pdf_bytes) as input_stream: | |
| extract_text_to_fp(input_stream, output_string) | |
| return output_string.getvalue().decode() | |
| async def resume_analysis(upload_file:UploadFile) -> ResumeData: | |
| contents = await upload_file.read() | |
| resume = extract_text_from_bytes(pdf_bytes=contents) | |
| if resume: | |
| prompt = f""" | |
| You are an AI resume parser. Read the following resume and extract the following structured information from the resume below if any was found: | |
| 1. Work experience details: job titles and descriptions.(max3) | |
| 2. List of technical skills (technologies, tools, platforms, etc.).(max4) | |
| 3. Soft and transferable skills: | |
| - Leadership and collaboration | |
| - Critical thinking and problem-solving | |
| - Communication skills | |
| - Cross-functional/interdisciplinary experience | |
| - Initiative and adaptability | |
| 4. Career path details: | |
| - Current or intended role/field | |
| - Industry and sector context | |
| - Career trajectory trends | |
| 5. Project experience (if any): project titles, descriptions, role.(max3) | |
| 6. Evidence of upskilling (optional): certifications, courses, learning projects, hackathons. | |
| Return the extracted data as a JSON object that matches this schema: | |
| Here is the resume: | |
| {resume} | |
| """ | |
| result =ai.chat(prompt=prompt,output_schema=ResumeData) | |
| return result | |
| def calculate_automation_risk(resume:ResumeData): | |
| def generate_real_world_data(resume:ResumeData): | |
| prompt=f"Generata a search query using the resume details below I want to check some text that has data on future jobs reports using semantic searches Here is the resume data: {resume} " | |
| result = ai.chat(prompt=prompt,output_schema=RealWorldQuestion) | |
| search_result =search_pinecone_text(query_text=result.question) | |
| return search_result | |
| real_world_data=generate_real_world_data(resume=resume) | |
| prompt = f""" | |
| You are an Automation Risk Calculator AI. Your task is to analyze the user's resume and any provided real-world data to estimate how automatable their skills and job titles are. | |
| For each of the following factors, please evaluate on a scale from 0 to 5, where: | |
| 0 = Not present or irrelevant | |
| 1 = Very low presence or impact | |
| 2 = Low presence or impact | |
| 3 = Moderate presence or impact | |
| 4 = High presence or impact | |
| 5 = Very high presence or impact | |
| Factors to score: | |
| - repetitiveness of tasks | |
| - creativity required | |
| - emotional intelligence needed | |
| - reliance on data-driven tasks | |
| - physical/manual work involved | |
| - level of autonomous decision-making | |
| - need for strategic thinking | |
| - importance of collaboration | |
| - current use of AI tools in the role | |
| - recent upskilling or adaptability | |
| The real-world data may contain labor market trends, automation probabilities, or other relevant insights — use it if helpful. | |
| After scoring all factors, calculate an overall automation risk score between 0 and 100, where: | |
| - 100 means very low automation risk (skills are highly resilient to automation), | |
| - 0 means very high automation risk (skills are highly automatable). | |
| Return only the final integer risk score (0 to 100) — no explanations or extra text. | |
| Here is the resume: | |
| ( | |
| {resume} | |
| ) | |
| Here is the real-world data: | |
| ( | |
| {real_world_data} | |
| ) | |
| """ | |
| result = ai.chat(prompt=prompt, output_schema=AutomationRiskInput) | |
| return result | |
| def calculate_skill_depth(resume:ResumeData): | |
| prompt = f""" | |
| You are a Skill Depth Calculator AI. Your task is to analyze the user's resume data and score various skill-related factors. | |
| For each of the following factors, please score on a scale from 0 to 5, where: | |
| 0 = Not present or no depth | |
| 1 = Very shallow experience or presence | |
| 2 = Basic or limited experience | |
| 3 = Moderate experience or involvement | |
| 4 = Strong experience or senior level | |
| 5 = Expert or highly advanced experience | |
| Factors to score include (but are not limited to): | |
| - Years of experience per skill | |
| - Seniority level in roles held | |
| - Number and relevance of certifications | |
| - Breadth of skills (variety and diversity) | |
| - Depth in core technical skills | |
| - Depth in leadership or management skills | |
| - Involvement in complex projects | |
| - Contributions to strategic initiatives | |
| - Frequency of skill usage in recent roles | |
| - Evidence of continuous learning or upskilling | |
| - Cross-functional collaboration skills | |
| - Recognition or awards related to skills | |
| - Public speaking or training experience | |
| - Publications or patents (if any) | |
| - Industry-specific expertise depth | |
| - Mentoring or coaching experience | |
| - Ability to innovate using skills | |
| - Adaptability to new technologies | |
| - Problem-solving skills depth | |
| - Communication skills related to technical content | |
| Here is the resume: | |
| ( | |
| {resume} | |
| ) | |
| """ | |
| result=ai.chat(prompt=prompt,output_schema=SkillDepthInput) | |
| return result | |
| def calculate_Ai_collab_readiness(resume:ResumeData): | |
| prompt = f""" | |
| You are an AI Collaboration Readiness Calculator. Your task is to read the following resume and assess how ready the individual is to **collaborate with AI tools**, not just compete against them. | |
| Score the user on the following 10 readiness traits, each on a scale from 0 to 5: | |
| 0 = Not mentioned or no evidence | |
| 1 = Very minimal evidence or weak relevance | |
| 2 = Some mention, limited depth | |
| 3 = Moderate use or awareness | |
| 4 = Strong use or understanding | |
| 5 = Expert use or deep integration | |
| Traits to evaluate: | |
| - Mention of AI tools (e.g., ChatGPT, GitHub Copilot, Midjourney, etc.) | |
| - Adaptability to AI-enhanced workflows | |
| - Willingness to learn and adopt AI tools | |
| - Understanding of AI ethics and responsible use | |
| - Demonstrated collaboration with AI (not just use) | |
| - Use of AI for problem-solving | |
| - Creativity in applying AI to new tasks or contexts | |
| - Speed in learning and applying new AI technologies | |
| - Communication skills related to explaining or using AI | |
| - Integration of AI into work/study processes | |
| Here is the resume: | |
| ( | |
| {resume} | |
| ) | |
| """ | |
| result=ai.chat(prompt=prompt,output_schema=AICollabReadinessInput) | |
| return result | |
| def generate_domain_breakdown(resume:ResumeData,**helpful_key_data): | |
| prompt = f""" | |
| You have one clear objective: analyze the following resume and produce a domain skills breakdown based on the taxonomy below. | |
| **Task:** | |
| Classify and score the candidate’s skills/domains on a scale from 0 to 100, where 0 means no proficiency and 100 means expert-level proficiency. | |
| **Example output format:** | |
| - Technical: 65 | |
| - Creative: 80 | |
| - Strategy: 75 | |
| - Collaboration: 60 | |
| **Domains to consider (but not limited to):** | |
| - Technical (e.g., software development, programming) | |
| - Creative (e.g., design, content creation) | |
| - Strategy (e.g., planning, business analysis) | |
| - Collaboration (e.g., teamwork, communication) | |
| **Requirements:** | |
| - Return only the domain names and their scores as shown in the example. | |
| - Scores must be integers between 0 and 100. | |
| - Provide 4–6 domain categories relevant to the resume content. | |
| - Use your best judgment based on the resume to assign scores reflecting demonstrated skills and experience. | |
| Here is the resume to analyze: | |
| ({resume}) | |
| **Analysis data to aid evaluation**: | |
| **{helpful_key_data}** | |
| """ | |
| result=ai.chat(prompt=prompt,output_schema=BreakDownByDomainUpdate) | |
| return result | |
| def generate_flagged_risk_areas(resume:ResumeData,**helpful_key_data): | |
| prompt = f""" | |
| **You are an AI Resume Risk Evaluator.** | |
| Your job is to review the following resume and flag potential *career resilience risks*. Focus strictly on: | |
| 1. **Missing recent/up-to-date certifications** | |
| 2. **Lack of AI or automation tool usage** | |
| 3. **Dependence on easily automatable tasks** (e.g., repetitive data entry, basic spreadsheets) | |
| For each issue identified, return **a concise 1–2 sentence explanation** with clear language. | |
| **Response Format (Examples)**: | |
| * "Heavy reliance on spreadsheet tasks, which are easily automated." | |
| * "No evidence of recent certifications to stay current in the field." | |
| * "Resume lacks any mention of AI or automation tools." | |
| **Resume to evaluate**: | |
| ``` | |
| ({resume}) | |
| ``` | |
| **Analysis data to aid evaluation**: | |
| **{helpful_key_data}** | |
| """ | |
| result=ai.chat(prompt=prompt,output_schema=FlaggedRiskAreasUpdate) | |
| return result | |
| def generate_boost_suggestion(resume:ResumeData,**helpful_key_data): | |
| prompt = f""" | |
| You are a Resume Enhancement AI. Analyze the resume below and generate 2 to 4 clear, actionable suggestions to help the user strengthen their profile by addressing skill or experience gaps. | |
| Focus on practical, AI-driven improvements such as: | |
| - Mastering relevant AI tools | |
| - Enrolling in advanced or specialized courses | |
| - Expanding the complexity or impact of projects | |
| - Obtaining up-to-date certifications | |
| **Examples**: | |
| - "Learn ChatGPT to boost your coding efficiency." | |
| - "Enhance your Python skills through an advanced course." | |
| - "Add recent certifications to demonstrate continuous growth." | |
| - "Integrate AI tools into your project portfolio." | |
| **Guidelines**: | |
| - Suggestions must be specific, relevant, and directly tied to the resume content. | |
| - Keep each suggestion concise (1–2 sentences). | |
| - Avoid generic advice; prioritize actionable, targeted improvements. | |
| Resume to analyze: | |
| ({resume}) | |
| **Analysis data to aid evaluation**: | |
| **{helpful_key_data}** | |
| """ | |
| result=ai.chat(prompt=prompt,output_schema=BoostSuggestionsUpdate) | |
| return result | |