jobassistant / app.py
jaik256's picture
Update app.py
15072d3 verified
import streamlit as st
from reportlab.pdfgen import canvas
from io import BytesIO
import os
from groq import Groq
from transformers import pipeline
# ========== API Keys ==========
GROQ_API_KEY = st.secrets["GROQ_API_KEY"]
# ========== Groq Client ==========
client = Groq(api_key=GROQ_API_KEY)
# ========== Hugging Face Summarizer (optional) ==========
summarizer = pipeline("summarization", model="facebook/bart-large-cnn")
# ========== Resume Parser ==========
def parse_resume(uploaded_file):
return uploaded_file.read().decode("utf-8")
# ========== Groq Prompt Engine ==========
def query_groq(prompt, model="llama3-8b-8192"):
chat_completion = client.chat.completions.create(
model=model,
messages=[{"role": "user", "content": prompt}]
)
return chat_completion.choices[0].message.content
# ========== Resume Tip Generator ==========
def generate_resume_tips(resume_text, exp_level, salary, grad_year, stream, job_desc=None):
if job_desc:
prompt = f"""Give resume improvement suggestions for this resume based on this job description:
Resume:\n{resume_text}\n\nJob Description:\n{job_desc}"""
else:
prompt = f"""Provide tips to improve the resume based on experience level: {exp_level}, expected salary: {salary}, graduation year: {grad_year}, graduation stream: {stream}.
Resume:\n{resume_text}"""
return query_groq(prompt)
# ========== Cover Letter Generator ==========
def generate_cover_letter(resume_text, job_title, word_limit):
prompt = f"""Create a professional cover letter for the job '{job_title}' based on this resume. Limit it to {word_limit} words.\nResume:\n{resume_text}"""
return query_groq(prompt)
def create_pdf(text, filename="cover_letter.pdf"):
buffer = BytesIO()
c = canvas.Canvas(buffer)
text_object = c.beginText(40, 800)
for line in text.split('\n'):
text_object.textLine(line)
c.drawText(text_object)
c.save()
buffer.seek(0)
return buffer
# ========== Roadmap Generator ==========
def generate_roadmap(job_profile):
prompt = f"Generate a module-wise detailed roadmap to become a skilled {job_profile}. Divide it into weeks or phases with topics."
roadmap = query_groq(prompt)
summarized = summarizer(roadmap, max_length=300, min_length=150, do_sample=False)[0]["summary_text"]
return summarized, roadmap
# ========== UI ==========
st.set_page_config(page_title="Smart Career Chatbot", layout="wide")
st.title("🧠 Smart Career Chatbot")
st.sidebar.header("User Inputs")
uploaded_resume = st.sidebar.file_uploader("Upload Resume (Text format only)", type=["txt"])
exp_level = st.sidebar.selectbox("Experience Level", ["Fresher", "Junior", "Mid", "Senior"])
salary = st.sidebar.text_input("Expected Salary (in β‚Ή)", "600000")
grad_year = st.sidebar.text_input("Graduation Year", "2023")
grad_stream = st.sidebar.text_input("Graduation Stream", "Computer Science")
if uploaded_resume:
resume_text = parse_resume(uploaded_resume)
st.subheader("πŸ“„ Uploaded Resume Preview")
st.text_area("Resume Content", resume_text, height=300)
st.subheader("πŸ’‘ Get Resume Tips")
job_desc = st.text_area("Optional: Paste a Job Description for Custom Tips")
if st.button("Get Resume Tips"):
tips = generate_resume_tips(resume_text, exp_level, salary, grad_year, grad_stream, job_desc)
st.success("Resume Tips Generated:")
st.write(tips)
st.subheader("βœ‰οΈ Generate Cover Letter")
job_title = st.text_input("Target Job Title", "Software Engineer")
word_limit = st.slider("Word Limit", min_value=100, max_value=600, value=300)
if st.button("Generate Cover Letter"):
cover_letter = generate_cover_letter(resume_text, job_title, word_limit)
st.text_area("Generated Cover Letter", cover_letter, height=300)
pdf_file = create_pdf(cover_letter)
st.download_button("Download Cover Letter PDF", pdf_file, file_name="cover_letter.pdf")
st.subheader("πŸ—ΊοΈ Generate Career Roadmap")
target_profile = st.text_input("Enter Job Profile (e.g., Data Scientist, Full Stack Developer)")
if st.button("Generate Roadmap"):
summary, full_roadmap = generate_roadmap(target_profile)
st.info("πŸ“Œ Summary:")
st.write(summary)
with st.expander("πŸ” Full Roadmap"):
st.write(full_roadmap)
else:
st.warning("Please upload your resume to start.")