Spaces:
Sleeping
Sleeping
| from smolagents import CodeAgent, LiteLLMModel, tool | |
| from pypdf import PdfReader | |
| import google.generativeai as genai | |
| import os | |
| from typing import List | |
| from utils import CURRENT_RESUME_LATEX | |
| import os | |
| import json | |
| config = json.load(open("config.json")) | |
| os.environ["GOOGLE_API_KEY"] = config["GOOGLE_API_KEY"] | |
| def header_details(name: str, mobile_number: str, email_id: str, linkedin_profile_link : str, github_link: str) -> str: | |
| """ | |
| Generates header details of the person. It will display the name, mobile_number, email_id, linkedin profile and github profile | |
| Args: | |
| name(str): Name of the candidate | |
| mobile_number(str): Mobile number of the candidate | |
| email_id(str): email_id | |
| linkedin_profile_link(str): Linkedin profile link of the candidate. | |
| github_link(str): github link of the candidate. | |
| Returns: | |
| str: Instruction for the next steps | |
| """ | |
| header_latex = r""" | |
| \begin{center} | |
| \textbf{\Huge \scshape """ | |
| header_latex+= name + r"""} \\ \vspace{1pt} | |
| \small""" + mobile_number + r""" $|$ \href{mailto:[email protected]}{\underline{""" | |
| header_latex+= email_id + r"""}} $|$ | |
| \href{https://linkedin.com/in/...}{\underline{""" | |
| header_latex+=linkedin_profile_link + r"""}} $|$ | |
| \href{https://github.com/...}{\underline{""" | |
| header_latex+=github_link + r"""}} | |
| \end{center} | |
| """ | |
| global CURRENT_RESUME_LATEX | |
| CURRENT_RESUME_LATEX += header_latex | |
| response_message = "Now call professional_summary_tool" | |
| return response_message | |
| def professional_summary(summary: str) -> str: | |
| """ | |
| Creates a Professional Experience summary section of the candidate. | |
| Args: | |
| summary (str): The generated summary should be in less than 4 lines. It should follow the STAR method while generating the summary. It should speak about the experience and the role he is applying for. | |
| (e.g: Accomplished Gen AI Specialist with expertise in machine learning (ML), deep learning (DL), generative AI, and AI Agents, proficient in end-to end development from design to deployment. Skilled in problem-solving, data structures and algorithms (DSA), strong analytical abilities, and debugging complex systems. Passionate about optimizing ML model performance to deliver efficient, high-impact AI solutions. Adept at leveraging the full AI stack to drive innovation and achieve business objectives in fast-paced, technology-focused environments) | |
| Returns: | |
| str: Instruction for the next steps | |
| """ | |
| summary_latex = """ | |
| \section{Professional Summary} | |
| """ | |
| summary_latex += rf""" | |
| {{{summary}}} | |
| """ | |
| summary_latex = summary_latex.replace("%","\%") | |
| global CURRENT_RESUME_LATEX | |
| CURRENT_RESUME_LATEX += summary_latex | |
| response_message = "Now call the professional_experience_tool" | |
| return response_message | |
| def professional_experience(experiences: List[dict]) -> str: | |
| """ | |
| Creates an Experience section for a user.Processes the user work experiences across different companies and generates a string in latex form which will be used in further steps | |
| Args: | |
| experiences (list of dict): A list where each dict contains: | |
| - company_name (required) (str): Name of the company. | |
| - place (Optional) (str): Location of the company. If not mentioned in the resume then keep it as empty string "". | |
| - period (required) (str): Employment duration (e.g., "Jan 2020 - Dec 2022"). | |
| - role (required) (str): Title or designation. | |
| - bullet_points (required) (list of str): Key achievements/responsibilities. These points must be in ATS friendly format, quantifying things and following the STAR method(situation, task , action and result)(eg. reduced latency by 5ms, improved accuracy by 50%). | |
| Returns: | |
| str: Instruction for the next steps | |
| """ | |
| Experience_latex = r""" | |
| \section{Professional Experience} | |
| \resumeSubHeadingListStart | |
| """ | |
| for exp in experiences: | |
| company = exp['company_name'] | |
| period = exp['period'] | |
| place = exp['place'] | |
| role = exp['role'] | |
| bullet_points = exp['bullet_points'] | |
| Experience_latex += rf""" | |
| \resumeSubheading | |
| {{{role}}}{{{period}}} | |
| {{{company}}}{{{place}}} | |
| \resumeItemListStart | |
| """ | |
| for item in bullet_points: | |
| Experience_latex += rf""" | |
| \resumeItem{{{item}}} | |
| """ | |
| Experience_latex += r""" | |
| \resumeItemListEnd | |
| \resumeSubHeadingListEnd | |
| """ | |
| Experience_latex = Experience_latex.replace("%","\%") | |
| global CURRENT_RESUME_LATEX | |
| CURRENT_RESUME_LATEX += Experience_latex | |
| response_message = "Now call the projects tool" | |
| return response_message | |
| def projects(projects: List[dict]) -> str : | |
| """ | |
| Creates an projects section for a user. Processes the projects and generates a string in latex form which will be used in further steps | |
| Args: | |
| projects (list of dict): A list where each dict contains: | |
| - project_name (required) (str): Name of the project. | |
| - tools_used (required)(list[str]): Tools and technologies used in the project (eg Python, Flask, React, PostgreSQL, Docker). It is a list of strings. | |
| - period (required)(str): Employment duration (e.g., "Jan 2020 - Dec 2022"). | |
| - bullet_points (required) (list of str): Key achievements/responsibilities.These points must be in ATS friendly format, quantifying things and following the STAR method(situation, task , action and result)(eg. reduced latency by 5ms, improved accuracy by 50%). | |
| Returns: | |
| str: Instruction for the next steps | |
| """ | |
| Projects_latex = r""" | |
| \section{Projects} | |
| \resumeSubHeadingListStart | |
| """ | |
| for project in projects: | |
| project_name = project['project_name'] | |
| period = project['period'] | |
| tools = ", ".join(project['tools_used']) | |
| bullet_points = project['bullet_points'] | |
| Projects_latex += rf""" | |
| \resumeProjectHeading | |
| {{\textbf{{{project_name}}} \textit{{| {tools}}}}}{{}} | |
| \resumeItemListStart""" | |
| for item in bullet_points: | |
| Projects_latex += rf"""\resumeItem{{{item}}}""" | |
| Projects_latex += r"""\resumeItemListEnd""" | |
| Projects_latex += r"""\resumeSubHeadingListEnd""" | |
| Projects_latex = Projects_latex.replace("%","\%") | |
| global CURRENT_RESUME_LATEX | |
| CURRENT_RESUME_LATEX += Projects_latex | |
| response_message = "Now call the skills tool" | |
| return response_message | |
| def Education(education : List[dict]) -> str: | |
| """ | |
| Generates an Education section for the candidate. It generates a string which will be processed in the further steps. | |
| Args: | |
| education (list of dict): A list where each dict contains: | |
| - Institute (required) (str): Name of the Institute. | |
| - place (required)(str): Location of the Institute. | |
| - period (required)(str): Education duration (e.g., "Jan 2020 - Dec 2022"). | |
| - specialization (required) (str): Specialization of education (e.g., "Bachelors in computer science", "Intermediate", "High School") | |
| Returns: | |
| str: Instruction for the next steps | |
| """ | |
| Education_latex = r""" | |
| \section{Education} | |
| \resumeSubHeadingListStart | |
| """ | |
| for edu in education: | |
| institute_name = edu["Institute"] | |
| place = edu["place"] | |
| period = edu["period"] | |
| specialization = edu["specialization"] | |
| studies = rf""" | |
| \resumeSubheading | |
| {{{institute_name}}}{{{place}}} | |
| {{{specialization}}}{{{period}}} | |
| """ | |
| Education_latex+=studies | |
| Education_latex = Education_latex.replace("%","\%") | |
| global CURRENT_RESUME_LATEX | |
| CURRENT_RESUME_LATEX += Education_latex | |
| response_message = "Now call the achievements tool" | |
| return response_message | |
| def achievements(achievements : List[str]) -> str: | |
| """ | |
| Generates an achievements section for the candidate's resume in LaTeX format. | |
| Args: | |
| achievements (List[str]): List of achievement strings to be included in the resume | |
| Returns: | |
| str: Instruction for the next steps | |
| """ | |
| achievements_latex = r""" | |
| \section{Achievements} | |
| \resumeItemListStart""" | |
| for achievement in achievements: | |
| achievements_latex += rf""" | |
| \resumeItem{{{achievement}}}""" | |
| achievements_latex += r""" | |
| \resumeItemListEnd | |
| \end{document} | |
| """ | |
| achievements_latex = achievements_latex.replace("%","\%") | |
| global CURRENT_RESUME_LATEX | |
| CURRENT_RESUME_LATEX += achievements_latex | |
| response_message = "Created a file in your pc" | |
| return response_message | |
| def create_resume_agent(prompt: str): | |
| try: | |
| model = LiteLLMModel(model_id="gemini/gemini-2.0-flash-exp", | |
| api_key=os.getenv("GOOGLE_API_KEY")) | |
| resume_agent =CodeAgent( | |
| tools = [header_details,professional_summary,professional_experience,projects,skills,Education,achievements], | |
| model = model | |
| ) | |
| print(resume_agent) | |
| resume_agent.run(prompt) | |
| global CURRENT_RESUME_LATEX | |
| print(CURRENT_RESUME_LATEX) | |
| return CURRENT_RESUME_LATEX | |
| except Exception as e: | |
| return e |