import streamlit as st
import groq
from prompts import analyze_job_fit, optimize_latex_resume,evaluate_resume,generate_cover_letter
import json
def main():
st.set_page_config(
layout="wide",
page_title="Resume Enhancer",
initial_sidebar_state="collapsed"
)
file_path = 'latex.txt'
with open(file_path, 'r') as f:
latex_template = f.read()
MODELS = [
"deepseek-r1-distill-llama-70b",
"gemma2-9b-it",
"llama-3.2-1b-preview",
"llama-3.2-3b-preview",
"llama-3.3-70b-versatile",
"llama-guard-3-8b",
"llama3-70b-8192",
"mixtral-8x7b-32768"]
# Custom CSS with reduced text sizes
st.markdown("""
""", unsafe_allow_html=True)
# Header with smaller text
st.markdown("""
Resume and CV crafter
""", unsafe_allow_html=True)
st.markdown("""
Smart Resume Builder: One profile, endless possibilities - powered by multiple AI agents
""", unsafe_allow_html=True)
st.markdown("---")
# Initialize variables
resume_text = None
job_description = None
original_file = None
# Side-by-side inputs with equal width
col1, col2 = st.columns(2)
with col1:
st.markdown("##### Upload your biodata as JSON file (for sample format check the sample.json in the files section)")
resume = st.file_uploader(
"Drop your resume file here",
type=['json']
)
if resume is not None:
resume_text = json.load(resume)
with col2:
st.markdown("##### Job Description")
job_description = st.text_area(
"Paste job description",
placeholder="Paste the job description here...",
height=220,
label_visibility="collapsed"
)
# Centered API key input first
key = st.text_input(
"GROQ API Key",
type="password",
placeholder="Enter your GROQ API key...",
help="Your API key will not be stored"
)
selected_model =st.selectbox("Select Model", MODELS)
st.markdown("The selected model will be used for the major tasks such as latex code generation for resume and cover letter")
if key:
client = groq.Client(api_key=key)
# Centered action buttons
col_buttons, _, _ = st.columns([200,1,1])
with col_buttons:
col_b1, col_b2, col_b3 = st.columns(3)
process_quick = col_b1.button("Quick Analysis")
generate_reusme = col_b2.button("Generate Latex code for Resume")
geenrate_coverletter = col_b3.button("Generate latex code Cover Letter")
#to check if any of the buttons are clicked
if any([process_quick, generate_reusme, generate_cover_letter]):
if not resume_text:
st.error("Please upload your resume data in JSON format.")
elif not job_description:
st.error("Please paste provide the job description.")
else:
try:
with st.spinner("Processing your resume..."):
if process_quick:
analysis = analyze_job_fit(client, resume_text, job_description)
st.markdown("### Quick Analysis Results")
st.markdown(analysis)
elif generate_reusme:
with st.spinner(f"Optimizing LaTeX Resume using {selected_model}..."):
analysis = analyze_job_fit(client, resume_text, job_description)
optimized_latex = optimize_latex_resume(
client, analysis, latex_template, resume_text, selected_model)
st.subheader("Optimized LaTeX Resume")
st.code(optimized_latex, language="latex")
resume_evalaution = evaluate_resume(client, latex_template, optimized_latex, job_description, selected_model)
st.subheader("Resume Evaluation")
st.markdown(resume_evalaution)
else: # generate cover letter
cv_latex = generate_cover_letter(client, resume_text, job_description, selected_model)
st.subheader("latex code for Cover Letter")
st.code(cv_latex, language="latex")
except groq.RateLimitError as e:
st.error("API rate limit exceeded. Please try again later or use a different API key.")
except Exception as e:
st.error(f"An error occurred: {e}")
else:
st.info("👆 Please enter your GROQ API key to get started.")
if __name__ == "__main__":
main()