File size: 2,951 Bytes
8f82834
 
 
 
 
 
 
 
 
 
425c047
8f82834
 
425c047
8f82834
425c047
 
 
 
1587db6
425c047
7376b4e
425c047
 
 
 
1587db6
425c047
 
29a9356
 
 
1587db6
 
 
 
425c047
 
 
 
1587db6
 
 
 
 
 
 
 
 
 
 
e21f174
425c047
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1587db6
425c047
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import asyncio
import re
from pydantic_ai.result import ResultData, RunResult
import streamlit as st
from pydantic_ai import Agent,RunContext, Tool
from pydantic_ai.models.groq import GroqModel
import nest_asyncio
from pydantic_ai.messages import ModelMessage
import pdfplumber
import os
from streamlit_pdf_viewer import pdf_viewer
from dataclasses import dataclass

#api_key
#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

api_key = os.getenv("api_key")

data = []
user_input = ""


model = GroqModel("llama3-groq-70b-8192-tool-use-preview", api_key = api_key)

async def resume_AI(data):
    agent = Agent(model=model,
        deps_type=str,
        system_prompt=(
            "You are an expert in making resume",
            "Review this resume and identify areas for improvement in structure, content, and formatting. Suggest specific changes to make it more professional and effective.",
            "Rewrite the following bullet points to make them more impactful, concise, and result-oriented. Use action verbs and quantify achievements wherever possible.",
            "Review this resume for grammar, clarity, and conciseness. Suggest edits to improve readability and professionalism.",
            "Optimize this resume with keywords and phrases relevant to specific job description from 'getJobDetail' to improve its chances of passing through Applicant Tracking Systems (ATS)",
            "Revise this resume to align with the requirements of [specific job role] from 'getJobDetail' in [industry] from 'getJobDetail' . Highlight relevant skills, experiences, and achievements that match the job description.",
            "Your answer should be a new and improve resume in markdown formate",
            "Rewrite this resume to focus on transferable skills and experiences that would be relevant for transitioning to [new industry or role]."
        )
        
    )

    @agent.tool
    async def getJobDetail(ctx: RunContext) -> str:
        
        """

        This method return job description 
        that resume needs to be update to 
        """
        return ctx.deps

    result = agent.run_sync(user_prompt=f"Improve this resume: {data}",deps=user_input)
    st.markdown(result.data)

def extract_data(feed):
    
    with pdfplumber.open(feed) as pdf:
        pages = pdf.pages
        for p in pages:
            data.append(p.extract_text())
        
        
    return None 

def ai_resume(data):
    asyncio.run(resume_AI(data=data))

def main():
    uploaded_file = st.file_uploader('Choose your .pdf file', type="pdf")
    user_input = st.text_input(label="Enter job detail")
    if uploaded_file is not None:
        extract_data(uploaded_file)
        binary_data = uploaded_file.getvalue()
        pdf_viewer(input=binary_data,
                width=700)
    if st.button("Improve Resume"):
        ai_resume(data)



if __name__ == '__main__':
    import asyncio
    nest_asyncio.apply()
    main()