resume-api / Ars /ai_functions.py
Nattyboi's picture
debug 4 (#23)
eacbd9b verified
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(contents) -> ResumeData:
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