jaothan's picture
Upload 3 files
cab5c74 verified
import os
import streamlit as st
from langchain_community.document_loaders import WebBaseLoader
from LangChainConnect import LangChainConnect
from langchain_community.document_loaders import PyPDFLoader
class CoverLetterGenerator:
def __init__(self):
st.title('Cover letter generator')
self.url_input=st.text_input("Enter the Job URL: *", value=None)
self.tell_about_yourself_name=st.text_input("Your name: *", value=None)
self.tell_about_yourself_experience=st.text_input("Years of experience: *", value=None)
self. resume_file = st.file_uploader(label="Upload your resume in PDF format: *")
self.submit_button = st.button("submit")
self.lang_chain_connect = LangChainConnect()
def check_button_click(self):
if self.submit_button:
if self.url_input is None or self.tell_about_yourself_name is None or self.tell_about_yourself_experience is None or self.resume_file is None:
st.code("Job URL,Name,Experience and Resume are mandatory fields", language='markdown')
exit(0)
try:
cover_letter_content = self.generate_cover_letter()
st.code(f"{cover_letter_content}", language='markdown')
except Exception as e:
raise Exception(f"Exception occured {e}")
def save_resume(self):
if self.resume_file:
file_path = f"./{self.resume_file.name}"
# Save the uploaded file to the working directory
with open(file_path, "wb") as f:
f.write(self.resume_file.getbuffer())
return file_path
else:
st.code("Invalid Resume")
exit(0)
def load_resume_pdf(self, file_path):
pages = []
loader = PyPDFLoader(file_path)
pages_lazy = loader.lazy_load()
for page in pages_lazy:
pages.append(page)
return pages
def generate_cover_letter(self):
loader = WebBaseLoader([self.url_input])
docs=loader.load().pop().page_content
json_content_description = self.lang_chain_connect.extract_job_content(docs)
resume_path = self.save_resume()
pdf_resume = self.load_resume_pdf(resume_path)
resume_content = ""
for page in pdf_resume:
resume_content += page.page_content
resume_content+="\n"
# st.code(f"{resume_content}", language='markdown')
# exit(0)
os.remove(resume_path)
cover_letter_content = self.lang_chain_connect.write_cover_letter(json_content_description,"sample",self.tell_about_yourself_name,self.tell_about_yourself_experience,self.url_input, resume_content)
return cover_letter_content
if __name__ == "__main__":
cover_letter = CoverLetterGenerator()
cover_letter.check_button_click()