hercorners / app.py
walaa2022's picture
Upload 6 files
52d27b3 verified
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("""
<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()