import streamlit as st import google.generativeai as genai from transformers import AutoTokenizer, AutoModelForCausalLM import torch import os import sounddevice as sd import numpy as np import librosa import io from PIL import Image import json import requests from datetime import datetime from streamlit_lottie import st_lottie # Configure page st.set_page_config(page_title="HerCorners", page_icon="👑", layout="wide") # Initialize Gemini genai.configure(api_key=st.secrets["GEMINI_API_KEY"]) # Initialize Gemma @st.cache_resource def load_gemma_model(): tokenizer = AutoTokenizer.from_pretrained("google/gemma-7b") model = AutoModelForCausalLM.from_pretrained("google/gemma-7b") return tokenizer, model tokenizer, gemma_model = load_gemma_model() # Mentor profiles MENTORS = { "Oprah Winfrey": { "role": "Media Mogul & Philanthropist", "topics": ["leadership", "personal growth", "media"], "style": "inspiring and wise", "prompt_style": "warm, encouraging, and empowering" }, "Sara Blakely": { "role": "Founder of Spanx", "topics": ["entrepreneurship", "innovation", "business"], "style": "practical and motivating", "prompt_style": "direct, practical, with real business examples" } } # Custom CSS st.markdown(""" """, unsafe_allow_html=True) class HerCorners: def __init__(self): self.initialize_session_state() def initialize_session_state(self): if 'messages' not in st.session_state: st.session_state.messages = [] if 'current_corner' not in st.session_state: st.session_state.current_corner = None if 'current_mentor' not in st.session_state: st.session_state.current_mentor = None def generate_mentor_response(self, mentor, message): """Generate response using Gemini""" model = genai.GenerativeModel('gemini-pro') prompt = f""" You are {mentor}, {MENTORS[mentor]['role']}. Your communication style is {MENTORS[mentor]['style']}. Respond to this message: {message} Keep your response personal, authentic, and in your voice. """ response = model.generate_content(prompt) return response.text def generate_support_response(self, story): """Generate emotional support response using Gemma""" prompt = f"As a supportive friend, respond with empathy to this story: {story}" inputs = tokenizer(prompt, return_tensors="pt") outputs = gemma_model.generate(**inputs, max_length=200) response = tokenizer.decode(outputs[0]) return response def she_legends_corner(self): st.title("👑 She-Legends") st.subheader("Chat with Inspiring Women Leaders") # Mentor selection mentor = st.selectbox("Choose your mentor", list(MENTORS.keys())) if mentor: st.session_state.current_mentor = mentor # Chat interface message = st.text_input("Your message:") if st.button("Send"): response = self.generate_mentor_response(mentor, message) st.session_state.messages.append({"role": "user", "content": message}) st.session_state.messages.append({"role": "assistant", "content": response}) # Display chat history for msg in st.session_state.messages: div_class = "user-message" if msg["role"] == "user" else "mentor-message" st.markdown(f"""
""", unsafe_allow_html=True) def she_melted_mascara_corner(self): st.title("💕 She-Melted Mascara") st.subheader("Safe Space for Sharing") # Story sharing options share_method = st.radio("How would you like to share?", ["Text", "Voice Note", "Upload Image"]) if share_method == "Text": story = st.text_area("Share your story...") if st.button("Share Anonymously"): response = self.generate_support_response(story) st.markdown(f""" """, unsafe_allow_html=True) elif share_method == "Voice Note": if st.button("Start Recording"): # Implement voice recording st.write("Recording... (feature in development)") elif share_method == "Upload Image": uploaded_file = st.file_uploader("Upload your image") if uploaded_file is not None: image = Image.open(uploaded_file) st.image(image, caption="Your shared image") def she_glows_corner(self): st.title("✨ She-Glows") st.subheader("Economic Education Hub") # Learning modules modules = { "Financial Literacy": ["Budgeting Basics", "Investment 101", "Credit Management"], "Entrepreneurship": ["Business Planning", "Marketing Basics", "Funding Sources"], "Leadership": ["Communication Skills", "Team Management", "Decision Making"] } selected_topic = st.selectbox("Choose your learning path", list(modules.keys())) selected_module = st.selectbox("Select module", modules[selected_topic]) if st.button("Start Learning"): # Generate educational content using Gemini model = genai.GenerativeModel('gemini-pro') prompt = f"Create a beginner-friendly lesson about {selected_module}" response = model.generate_content(prompt) st.write(response.text) def she_fuels_corner(self): st.title("⚡ She-Fuels") st.subheader("Community Support & Achievements") # Achievement sharing achievement = st.text_area("Share your achievement") if st.button("Share with Community"): st.success("Achievement shared successfully!") # Display community achievements st.subheader("Recent Community Achievements") # Placeholder for community achievements achievements = [ "Started my first business!", "Completed financial literacy course", "Secured first investment" ] for achievement in achievements: st.markdown(f"🌟 {achievement}") def main(self): st.sidebar.title("HerCorners") corner = st.sidebar.radio("Choose your corner", ["She-Legends", "She-Melted Mascara", "She-Glows", "She-Fuels"]) if corner == "She-Legends": self.she_legends_corner() elif corner == "She-Melted Mascara": self.she_melted_mascara_corner() elif corner == "She-Glows": self.she_glows_corner() elif corner == "She-Fuels": self.she_fuels_corner() if __name__ == "__main__": app = HerCorners() app.main()