Spaces:
Sleeping
Sleeping
| import os | |
| import openai | |
| import streamlit as st | |
| from utils.mail_generator import AzureOpenAIEmailGenerator | |
| # Configurazione e costanti | |
| class Config: | |
| PAGE_TITLE = "Draftlytics π§" | |
| PAGE_ICON = "π¬" | |
| HEADER_COLOR = "#9d03fc" | |
| ENGINE = "gpt-4" | |
| CUSTOM_CSS = f""" | |
| <style> | |
| .css-1egvi7u {{ margin-top: -4rem; }} /* Move app further up and remove top padding */ | |
| .css-znku1x a {{ color: {HEADER_COLOR}; }} /* Change hyperlink href link color */ | |
| .css-qrbaxs {{ min-height: 0.0rem; }} /* Change height of text input fields headers */ | |
| .stSpinner > div > div {{ border-top-color: {HEADER_COLOR}; }} /* Change spinner color to primary color */ | |
| .css-15tx938 {{ min-height: 0.0rem; }} /* Change min height of text input box */ | |
| header {{ visibility: hidden; }} /* Hide top header line */ | |
| #MainMenu {{ visibility: hidden; }} /* Hide "made with streamlit" footer menu area */ | |
| footer {{ visibility: hidden; }} /* Hide footer */ | |
| </style> | |
| """ | |
| # Classe principale dell'applicazione | |
| class DraftlyticsApp: | |
| def __init__(self): | |
| self.email_generator = AzureOpenAIEmailGenerator(Config.ENGINE) | |
| self.email_text = "" | |
| def set_page_config(self): | |
| st.set_page_config(page_title=Config.PAGE_TITLE, page_icon=Config.PAGE_ICON) | |
| def apply_custom_css(self): | |
| st.markdown(Config.CUSTOM_CSS, unsafe_allow_html=True) | |
| def display_header(self): | |
| #st.image('images/rephraise_logo.png', width=100) | |
| st.markdown(f"# Welcome to {Config.PAGE_TITLE} π€") | |
| st.write("### Your Expert AI Email Assistant ") | |
| def get_user_input(self): | |
| st.subheader("π What is the main subject of your email?") | |
| with st.expander("βοΈ Email Input", expanded=True): | |
| input_c1 = st.text_input('Provide the main topic of your email', '') | |
| input_c2 = st.text_input('Provide the secondary topic of your email (optional)', '') | |
| col1, col2, col3, space, col4 = st.columns([5, 5, 5, 0.5, 5]) | |
| with col1: | |
| input_sender = st.text_input('Sender Name', '') | |
| with col2: | |
| input_recipient = st.text_input('Recipient Name', '') | |
| with col3: | |
| input_style = st.selectbox('Writing Style', ('formal', 'motivated', 'concerned', 'disappointed'), | |
| index=0) | |
| with col4: | |
| st.write("\n") # add spacing | |
| st.write("\n") # add spacing | |
| if st.button('Generate Email π'): | |
| with st.spinner('Generating your email... β³'): | |
| self.validate_and_generate_email(input_c1, input_c2, input_sender, input_recipient, input_style) | |
| st.write("Note: The generated email will be in English.") | |
| def validate_and_generate_email(self, input_c1, input_c2, input_sender, input_recipient, input_style): | |
| if not input_c1.strip(): | |
| st.error('β οΈ The main topic is required!') | |
| return | |
| if not input_sender.strip(): | |
| st.error('β οΈ The sender name is required!') | |
| return | |
| if not input_recipient.strip(): | |
| st.error('β οΈ The recipient name is required!') | |
| return | |
| input_contents = [input_c1.strip()] | |
| if input_c2.strip(): | |
| input_contents.append(input_c2.strip()) | |
| self.email_text = self.email_generator.generate_mail_format( | |
| input_sender.strip(), input_recipient.strip(), input_style, input_contents | |
| ) | |
| self.display_email() | |
| def display_email(self): | |
| if self.email_text: | |
| st.write('\n') # add spacing | |
| st.markdown(self.email_text) | |
| def run(self): | |
| self.set_page_config() | |
| self.apply_custom_css() | |
| self.display_header() | |
| self.get_user_input() | |
| # Funzione principale per eseguire l'applicazione | |
| def main(): | |
| app = DraftlyticsApp() | |
| app.run() | |
| if __name__ == '__main__': | |
| main() | |