thamani commited on
Commit
dd17abf
Β·
verified Β·
1 Parent(s): d04d842

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +77 -0
app.py ADDED
@@ -0,0 +1,77 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ from langchain_community.document_loaders import WebBaseLoader
3
+ from chains import Chain
4
+ from portfolio import Portfolio
5
+ from utils import clean_text
6
+
7
+ # Initialize backend services
8
+ chain = Chain()
9
+ portfolio = Portfolio()
10
+
11
+ def create_streamlit_app(llm, portfolio, clean_text):
12
+ st.set_page_config(layout="wide", page_title="Cold Email Generator", page_icon="πŸ“§")
13
+ st.title("πŸ“§ Cold Mail Generator")
14
+
15
+ # User Inputs
16
+ url_input = st.text_input("Enter a Job URL:", value="https://atliq.keka.com/careers/jobdetails/51326")
17
+ username = st.text_input("Your Name (Default: John)", value="John")
18
+ client_name = st.text_input("Recipient's Name (Default: Hiring Manager)", value="Hiring Manager")
19
+
20
+ # Dropdown to select number of emails to generate
21
+ num_emails = st.selectbox("Select Number of Emails to Generate", options=[1, 2, 3], index=0)
22
+
23
+ # Dropdown to select email style
24
+ email_style = st.selectbox("Choose Email Style", options=["Formal", "Casual", "Persuasive"], index=0)
25
+
26
+ submit_button = st.button("Generate Cold Emails")
27
+
28
+ if submit_button:
29
+ try:
30
+ st.info("πŸ”„ Extracting job details...")
31
+
32
+ # Load and clean job description
33
+ loader = WebBaseLoader([url_input])
34
+ page_content = loader.load().pop().page_content
35
+ cleaned_data = clean_text(page_content)
36
+
37
+ # Extract job details
38
+ jobs = llm.extract_jobs(cleaned_data)
39
+
40
+ if not jobs:
41
+ st.warning("⚠️ No job postings found. Please check the URL.")
42
+ return
43
+
44
+ # Process extracted jobs
45
+ for idx, job in enumerate(jobs, start=1):
46
+ job_title = job.get("role", "Unknown Role")
47
+ experience = job.get("experience", "Not Specified")
48
+ skills = ", ".join(job.get("skills", [])) if job.get("skills") else "Not Specified"
49
+ job_description = job.get("description", "No description available.")
50
+
51
+ # Display job details
52
+ st.subheader(f"πŸ“Œ Job {idx}: {job_title}")
53
+ st.write(f"**Experience Required:** {experience}")
54
+ st.write(f"**Skills:** {skills}")
55
+ st.write(f"**Description:** {job_description}")
56
+ st.divider()
57
+
58
+ # Fetch relevant portfolio links
59
+ skills_list = job.get("skills", [])
60
+ portfolio_links = [link for link in portfolio.query_links(skills_list) if link]
61
+
62
+ # Generate multiple cold emails based on user selection
63
+ for i in range(num_emails):
64
+ st.subheader(f"πŸ“© Email {i+1} ({email_style} Style)")
65
+ email = llm.write_mail(job, portfolio_links, username, client_name, email_style)
66
+
67
+ if email:
68
+ st.code(email, language="markdown")
69
+ else:
70
+ st.error("⚠️ Email generation failed.")
71
+
72
+ except Exception as e:
73
+ st.error(f"❌ An Error Occurred: {str(e)}")
74
+
75
+
76
+ if __name__ == "__main__":
77
+ create_streamlit_app(chain, portfolio, clean_text)