Spaces:
No application file
No application file
| 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 | |
| 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(""" | |
| <style> | |
| .mentor-card { | |
| padding: 20px; | |
| border-radius: 10px; | |
| background: linear-gradient(145deg, #ffffff, #f0f0f0); | |
| box-shadow: 5px 5px 15px rgba(0,0,0,0.1); | |
| margin: 10px 0; | |
| } | |
| .chat-message { | |
| padding: 15px; | |
| border-radius: 10px; | |
| margin: 10px 0; | |
| } | |
| .user-message { | |
| background-color: #e3f2fd; | |
| margin-left: 20%; | |
| } | |
| .mentor-message { | |
| background-color: #f5f5f5; | |
| margin-right: 20%; | |
| } | |
| </style> | |
| """, 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""" | |
| <div class="chat-message {div_class}"> | |
| {msg["content"]} | |
| </div> | |
| """, 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""" | |
| <div class="chat-message mentor-message"> | |
| {response} | |
| </div> | |
| """, 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() | |