|
import streamlit as st |
|
from langchain_community.document_loaders import WebBaseLoader |
|
from chains import Chain |
|
from portfolio import Portfolio |
|
from utils import clean_text |
|
|
|
|
|
chain = Chain() |
|
portfolio = Portfolio() |
|
|
|
def create_streamlit_app(llm, portfolio, clean_text): |
|
st.set_page_config(layout="wide", page_title="Cold Email Generator", page_icon="π§") |
|
st.title("π§ Cold Mail Generator") |
|
|
|
|
|
url_input = st.text_input("Enter a Job URL:", value="https://atliq.keka.com/careers/jobdetails/51326") |
|
username = st.text_input("Your Name (Default: John)", value="John") |
|
client_name = st.text_input("Recipient's Name (Default: Hiring Manager)", value="Hiring Manager") |
|
|
|
|
|
num_emails = st.selectbox("Select Number of Emails to Generate", options=[1, 2, 3], index=0) |
|
|
|
|
|
email_style = st.selectbox("Choose Email Style", options=["Formal", "Casual", "Persuasive"], index=0) |
|
|
|
submit_button = st.button("Generate Cold Emails") |
|
|
|
if submit_button: |
|
try: |
|
st.info("π Extracting job details...") |
|
|
|
|
|
loader = WebBaseLoader([url_input]) |
|
page_content = loader.load().pop().page_content |
|
cleaned_data = clean_text(page_content) |
|
|
|
|
|
jobs = llm.extract_jobs(cleaned_data) |
|
|
|
if not jobs: |
|
st.warning("β οΈ No job postings found. Please check the URL.") |
|
return |
|
|
|
|
|
for idx, job in enumerate(jobs, start=1): |
|
job_title = job.get("role", "Unknown Role") |
|
experience = job.get("experience", "Not Specified") |
|
skills = ", ".join(job.get("skills", [])) if job.get("skills") else "Not Specified" |
|
job_description = job.get("description", "No description available.") |
|
|
|
|
|
st.subheader(f"π Job {idx}: {job_title}") |
|
st.write(f"**Experience Required:** {experience}") |
|
st.write(f"**Skills:** {skills}") |
|
st.write(f"**Description:** {job_description}") |
|
st.divider() |
|
|
|
|
|
skills_list = job.get("skills", []) |
|
portfolio_links = [link for link in portfolio.query_links(skills_list) if link] |
|
|
|
|
|
for i in range(num_emails): |
|
st.subheader(f"π© Email {i+1} ({email_style} Style)") |
|
email = llm.write_mail(job, portfolio_links, username, client_name, email_style) |
|
|
|
if email: |
|
st.code(email, language="markdown") |
|
else: |
|
st.error("β οΈ Email generation failed.") |
|
|
|
except Exception as e: |
|
st.error(f"β An Error Occurred: {str(e)}") |
|
|
|
|
|
if __name__ == "__main__": |
|
create_streamlit_app(chain, portfolio, clean_text) |
|
|