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() | |