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()