import streamlit as st # from newsletter_gen.crew import NewsletterGenCrew from crew import NewsletterGenCrew # JB class NewsletterGenUI: def load_html_template(self): # with open("src/newsletter_gen/config/newsletter_template.html", "r") as file: with open("newsletter_template.html", "r") as file: html_template = file.read() return html_template def generate_newsletter(self, topic, personal_message): inputs = { "topic": topic, "personal_message": personal_message, "html_template": self.load_html_template(), } return NewsletterGenCrew().crew().kickoff(inputs=inputs) def newsletter_generation(self): if st.session_state.generating: st.session_state.newsletter = self.generate_newsletter( st.session_state.topic, st.session_state.personal_message ) if st.session_state.newsletter and st.session_state.newsletter != "": with st.container(): st.write("Newsletter generated successfully!") st.download_button( label="Download HTML file", data=st.session_state.newsletter, file_name="newsletter.html", mime="text/html", ) st.session_state.generating = False def sidebar(self): with st.sidebar: st.title("Newsletter Generator") st.write( """ To generate a newsletter, enter a topic and a personal message. \n Your team of AI agents will generate a newsletter for you! """ ) st.text_input("Topic", key="topic", placeholder="USA Stock Market") st.text_area( "Your personal message (to include at the top of the newsletter)", key="personal_message", placeholder="Dear readers, welcome to the newsletter!", ) if st.button("Generate Newsletter"): st.session_state.generating = True def render(self): st.set_page_config(page_title="Newsletter Generation", page_icon="📧") if "topic" not in st.session_state: st.session_state.topic = "" if "personal_message" not in st.session_state: st.session_state.personal_message = "" if "newsletter" not in st.session_state: st.session_state.newsletter = "" if "generating" not in st.session_state: st.session_state.generating = False self.sidebar() self.newsletter_generation() if __name__ == "__main__": NewsletterGenUI().render()