File size: 4,101 Bytes
66e260e
4a2e94e
c9d8014
 
 
 
66e260e
 
 
 
c9d8014
4a2e94e
1744fe5
66e260e
 
c9d8014
 
66e260e
 
 
eecd090
66e260e
 
1744fe5
eecd090
 
 
c9d8014
 
4a2e94e
1744fe5
c9d8014
1744fe5
 
c9d8014
4a2e94e
c9d8014
66e260e
 
1744fe5
c9d8014
 
 
 
 
 
1f8a38d
c9d8014
1f8a38d
 
1744fe5
66e260e
c9d8014
 
 
 
 
 
 
 
 
 
 
 
4a2e94e
1744fe5
c9d8014
 
4a2e94e
c9d8014
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4a2e94e
1744fe5
66e260e
c9d8014
 
 
 
 
 
66e260e
c9d8014
 
 
66e260e
 
4a2e94e
66e260e
 
 
c9d8014
66e260e
 
 
 
c9d8014
66e260e
 
 
 
c9d8014
 
66e260e
 
 
 
1f8a38d
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
import os
import streamlit as st
from features import (
    ats, analyzer, company_recommend, cover_letter, enhance, improve,
    interview, linkedin, newresume, recommend, review
)
from components import docLoader
from dotenv import load_dotenv
import google.generativeai as genai
from langchain_google_genai import ChatGoogleGenerativeAI
import asyncio

# Load environment variables
load_dotenv()

class CareerNavigator:
    def __init__(self, title="Career Navigator"):
        self.title = title

    @staticmethod
    async def async_model():
        genai.configure(api_key=os.getenv("GOOGLE_API_KEY"))
        return ChatGoogleGenerativeAI(model="gemini-pro")

    def model(self):
        return asyncio.run(self.async_model())

# Initialize CareerNavigator instance
navigator = CareerNavigator()

# Set Streamlit page configuration
st.set_page_config(page_title=navigator.title, page_icon='🧑‍💼', layout='wide')

# Main title
st.title("Welcome to Career Navigator")

# Load and display document
text = docLoader.load_doc()
st.session_state['doc_text'] = text

jd_col, doc_col = st.columns(2)
with jd_col:
    jd = st.text_area("Enter Job Description:", key="input")
if text:
    with doc_col:
        st.text_area("Extracted Data From Resume:", value=st.session_state['doc_text'], height=300)

role = st.text_input("Desired Role:", placeholder="e.g., Software Engineer")
st.session_state['role'] = role

# Sidebar options
with st.sidebar:
    st.title('Career Navigator Menu')
    st.subheader('Choose an Option:')
    option = st.radio(
        "Navigate to:",
        (
            "Calculate ATS Score", "Review Resume", "Enhance Resume",
            "Improve Resume", "Get Recommendations", "Analyze Keywords",
            "Generate Cover Letter", "Generate Resume",
            "Update LinkedIn Profile", "Prepare for Interview",
            "Company Recommendations"
        )
    )

    # Load model
    with st.spinner("Initializing Model..."):
        llm = navigator.model()

# Option-specific configurations
if option == "Calculate ATS Score":
    calculation_method = st.radio(
        "Select ATS Score Calculation Method:",
        ("Using AI", "Manually (Cosine Similarity)"),
        horizontal=True
    )

elif option == "Get Recommendations":
    recommendation_type = st.radio(
        "Select Recommendation Type:",
        ("Entire Resume", "Section Wise"),
        horizontal=True
    )

elif option == "Analyze Keywords":
    analyz_type = st.radio(
        "Select Keywords Function:",
        ("Analyze Keywords", "Keyword Synonyms"),
        horizontal=True
    )

# Dictionary mapping options to functions
option_functions = {
    "Calculate ATS Score": ats.run_ats,
    "Review Resume": review.run_review,
    "Enhance Resume": enhance.run_enhance,
    "Improve Resume": improve.run_improve,
    "Get Recommendations": recommend.run_recommend,
    "Analyze Keywords": analyzer.run_analyzer,
    "Generate Cover Letter": cover_letter.run_letter,
    "Generate Resume": newresume.run_newresume,
    "Update LinkedIn Profile": linkedin.run_linkedin,
    "Prepare for Interview": interview.run_interview,
    "Company Recommendations": company_recommend.run_company
}

# Handle the selected option
if option in option_functions:
    func = option_functions[option]
    if option == "Calculate ATS Score":
        if calculation_method == "Manually (Cosine Similarity)":
            func(llm, st.session_state['doc_text'], jd, manual=True)
        else:
            func(llm, st.session_state['doc_text'], jd)
    elif option == "Get Recommendations":
        if recommendation_type == "Entire Resume":
            func(llm, st.session_state['doc_text'], jd, section=True)
        else:
            func(llm, st.session_state['doc_text'], jd)
    elif option == "Analyze Keywords":
        if analyz_type == "Analyze Keywords":
            func(llm, st.session_state['doc_text'], jd, analysis=True)
        else:
            func(llm, st.session_state['doc_text'], jd)
    else:
        func(llm, st.session_state['doc_text'], jd, role=st.session_state['role'])