""" AI Letter Writer - Main Module This module provides a comprehensive interface for generating various types of letters using AI assistance. It supports multiple letter formats, styles, and use cases. It uses Streamlit for the user interface. """ import streamlit as st # Assuming these modules exist in a package structure from .letter_types import ( business_letters, personal_letters, formal_letters, cover_letters, recommendation_letters, complaint_letters, thank_you_letters, invitation_letters ) # Assuming these utility functions exist from .utils.letter_formatter import format_letter from .utils.letter_analyzer import analyze_letter_tone, check_formality from .utils.letter_templates import get_template_by_type # Define the letter types and their properties LETTER_TYPES_CONFIG = [ { "id": "business", "name": "Business Letters", "icon": "💼", "description": "Professional correspondence for business contexts.", "color": "#1E88E5", # Blue 600 "module": business_letters }, { "id": "personal", "name": "Personal Letters", "icon": "💌", "description": "Heartfelt messages for friends and family.", "color": "#43A047", # Green 600 "module": personal_letters }, { "id": "formal", "name": "Formal Letters", "icon": "📜", "description": "Official correspondence for institutions and authorities.", "color": "#5E35B1", # Deep Purple 600 "module": formal_letters }, { "id": "cover", "name": "Cover Letters", "icon": "📋", "description": "Job application letters to showcase your qualifications.", "color": "#FB8C00", # Orange 600 "module": cover_letters }, { "id": "recommendation", "name": "Recommendation Letters", "icon": "👍", "description": "Endorse colleagues, students, or employees.", "color": "#00ACC1", # Cyan 600 "module": recommendation_letters }, { "id": "complaint", "name": "Complaint Letters", "icon": "⚠️", "description": "Address issues with products, services, or situations.", "color": "#E53935", # Red 600 "module": complaint_letters }, { "id": "thank_you", "name": "Thank You Letters", "icon": "🙏", "description": "Express gratitude for various occasions.", "color": "#8E24AA", # Purple 600 "module": thank_you_letters }, { "id": "invitation", "name": "Invitation Letters", "icon": "🎉", "description": "Invite people to events, interviews, or gatherings.", "color": "#FFB300", # Amber 600 "module": invitation_letters } ] # Map letter type IDs to their modules for easy access LETTER_MODULES_MAP = {config["id"]: config["module"] for config in LETTER_TYPES_CONFIG} def initialize_session_state() -> None: """Initializes necessary Streamlit session state variables.""" if "letter_type" not in st.session_state: st.session_state.letter_type = None if "letter_subtype" not in st.session_state: st.session_state.letter_subtype = None # Useful if a letter type has subtypes if "generated_letter" not in st.session_state: st.session_state.generated_letter = None if "letter_metadata" not in st.session_state: # Store information like sender, recipient, date, subject, tone, etc. st.session_state.letter_metadata = {} if "letter_input_data" not in st.session_state: # Store user inputs for letter generation st.session_state.letter_input_data = {} def display_letter_type_selection() -> None: """Displays the letter type selection interface using a grid of styled containers with buttons.""" st.markdown("## Select Letter Type") # Create a grid layout for the cards (3 columns) cols = st.columns(3) # Display each letter type as a card with a button below it for i, letter_type_config in enumerate(LETTER_TYPES_CONFIG): with cols[i % 3]: # Use markdown to create a styled container for the card appearance st.markdown( f"""
{letter_type_config['description']}