import streamlit as st import datetime import json import requests import os from streamlit_option_menu import option_menu # For better navigation # OpenAI API Configuration TimeCapsuleGroq = os.getenv("TimeCapsuleGroq") # Set this in Hugging Face Secrets TimeCapsuleGroq = "https://api.openai.com/v1/chat/completions" 'curl https://api.groq.com/openai/v1/chat/completions -s \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $GROQ_API_KEY" \ -d '{ "model": "llama-3.3-70b-versatile", "messages": [{ "role": "user", "content": "Explain the importance of fast language models" }] } # Function to call OpenAI API def generate_time_capsule_content(prompt): headers = { "Authorization": f"Bearer {TimeCapsuleGroq}", "Content-Type": "application/json", } data = { "model": "gpt-3.5-turbo", # Use GPT-3.5 or GPT-4 "messages": [{"role": "user", "content": prompt}], "max_tokens": 500, } response = requests.post(OPENAI_API_URL, headers=headers, json=data) if response.status_code == 200: return response.json()["choices"][0]["message"]["content"] else: st.error(f"🚨 Error calling OpenAI API: {response.status_code} - {response.text}") return None # Initialize session state for capsules if "capsules" not in st.session_state: st.session_state.capsules = [] # Navigation Menu with st.sidebar: selected_tab = option_menu( menu_title="Main Menu", options=["Create Capsule", "My Capsules", "Unbox Capsule", "Share"], icons=["capsule", "archive", "gift", "share"], default_index=0, ) # Tab 1: Create Capsule if selected_tab == "Create Capsule": st.header("📦 Create Your Time Capsule") st.write("Tell us about your life, dreams, and thoughts. The AI will create a unique time capsule for you.") # User Input Fields name = st.text_input("Your Name", placeholder="John Doe") email = st.text_input("Your Email (for future delivery)", placeholder="john.doe@example.com") capsule_date = st.date_input("When should we deliver your time capsule?", min_value=datetime.date.today()) theme = st.selectbox("Choose a Theme", ["Nostalgic", "Futuristic", "Inspirational", "Adventurous"]) current_life = st.text_area("What's happening in your life right now?", placeholder="I'm currently studying computer science and dreaming of starting my own startup...") goals = st.text_area("What are your goals and dreams?", placeholder="I want to build a successful AI startup and travel the world...") thoughts = st.text_area("What's on your mind?", placeholder="I feel a bit overwhelmed but excited about the future...") # Generate Time Capsule if st.button("Create Time Capsule"): if name and email and current_life and goals and thoughts: with st.spinner("🪄 Creating your time capsule..."): # Combine user input into a single prompt prompt = f""" Name: {name} Current Life: {current_life} Goals: {goals} Thoughts: {thoughts} Theme: {theme} Generate: 1. A reflective summary of this person's current state. 2. Fun predictions about their future. 3. A heartfelt letter from their past self to their future self. """ # Call OpenAI API to generate the time capsule content capsule_content = generate_time_capsule_content(prompt) if capsule_content: # Save the time capsule to session state capsule_data = { "name": name, "email": email, "delivery_date": capsule_date.strftime("%Y-%m-%d"), "theme": theme, "content": capsule_content, "created_at": datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"), } st.session_state.capsules.append(capsule_data) # Display the time capsule content st.success("🎉 Your time capsule is ready!") st.subheader("✨ Reflective Summary") st.write(capsule_content.split("1. ")[1].split("2. ")[0].strip()) st.subheader("🔮 Future Predictions") st.write(capsule_content.split("2. ")[1].split("3. ")[0].strip()) st.subheader("💌 Letter from Your Past Self") st.write(capsule_content.split("3. ")[1].strip()) # Option to download the time capsule st.download_button( label="Download Your Time Capsule", data=json.dumps(capsule_data, indent=2), file_name=f"time_capsule_{name.replace(' ', '_')}.json", mime="application/json", ) else: st.warning("Please fill in all fields and click 'Create Time Capsule'.") # Tab 2: My Capsules elif selected_tab == "My Capsules": st.header("📚 My Time Capsules") if st.session_state.capsules: for i, capsule in enumerate(st.session_state.capsules): with st.expander(f"Capsule {i+1}: {capsule['name']} - {capsule['delivery_date']}", expanded=False): st.write(f"**Theme:** {capsule['theme']}") st.write(f"**Reflective Summary:** {capsule['content'].split('1. ')[1].split('2. ')[0].strip()}") st.write(f"**Future Predictions:** {capsule['content'].split('2. ')[1].split('3. ')[0].strip()}") st.write(f"**Letter from Your Past Self:** {capsule['content'].split('3. ')[1].strip()}") else: st.info("You haven't created any time capsules yet. Go to the 'Create Capsule' tab to get started!") # Tab 3: Unbox Capsule elif selected_tab == "Unbox Capsule": st.header("🎁 Unbox Your Time Capsule") if st.session_state.capsules: selected_capsule = st.selectbox("Select a Capsule to Unbox", [capsule["name"] for capsule in st.session_state.capsules]) capsule_index = [capsule["name"] for capsule in st.session_state.capsules].index(selected_capsule) capsule = st.session_state.capsules[capsule_index] st.write(f"Unboxing Capsule: **{capsule['name']}**") st.write(f"**Theme:** {capsule['theme']}") st.write(f"**Reflective Summary:** {capsule['content'].split('1. ')[1].split('2. ')[0].strip()}") st.write(f"**Future Predictions:** {capsule['content'].split('2. ')[1].split('3. ')[0].strip()}") st.write(f"**Letter from Your Past Self:** {capsule['content'].split('3. ')[1].strip()}") # Interactive Unboxing: Generate a new reflection if st.button("Generate New Reflection"): with st.spinner("🪄 Generating a new reflection..."): prompt = f""" Past Reflection: {capsule['content'].split('1. ')[1].split('2. ')[0].strip()} Current Life: {st.session_state.get("current_life", "No current life details available.")} Generate: 1. A comparison of the user's past and present. 2. Insights on how the user has grown or changed. """ new_reflection = generate_time_capsule_content(prompt) if new_reflection: st.success("🎉 New reflection generated!") st.subheader("✨ Past vs. Present Comparison") st.write(new_reflection.split("1. ")[1].split("2. ")[0].strip()) st.subheader("🔮 Insights on Growth") st.write(new_reflection.split("2. ")[1].strip()) else: st.info("You haven't created any time capsules yet. Go to the 'Create Capsule' tab to get started!") # Tab 4: Share elif selected_tab == "Share": st.header("📤 Share Your Time Capsule") if st.session_state.capsules: selected_capsule = st.selectbox("Select a Capsule to Share", [capsule["name"] for capsule in st.session_state.capsules]) capsule_index = [capsule["name"] for capsule in st.session_state.capsules].index(selected_capsule) capsule = st.session_state.capsules[capsule_index] st.write(f"Sharing Capsule: **{capsule['name']}**") st.write(f"**Theme:** {capsule['theme']}") st.write(f"**Reflective Summary:** {capsule['content'].split('1. ')[1].split('2. ')[0].strip()}") st.write(f"**Future Predictions:** {capsule['content'].split('2. ')[1].split('3. ')[0].strip()}") st.write(f"**Letter from Your Past Self:** {capsule['content'].split('3. ')[1].strip()}") # Social Media Sharing Options st.subheader("Share on Social Media") share_text = f"Check out my Time Capsule: {capsule['name']} - {capsule['content'].split('1. ')[1].split('2. ')[0].strip()}" share_url = "https://huggingface.co/spaces/AamirMalik/Time_Capsule" # Replace with your app's URL # Facebook Button facebook_url = f"https://www.facebook.com/sharer/sharer.php?u={share_url}" st.markdown(f""" """, unsafe_allow_html=True) # WhatsApp Button whatsapp_url = f"https://wa.me/?text={share_text} {share_url}" st.markdown(f""" """, unsafe_allow_html=True) # Instagram Button st.markdown(f""" """, unsafe_allow_html=True) st.caption("Paste this link in your Instagram bio or story.") # LinkedIn Button linkedin_url = f"https://www.linkedin.com/sharing/share-offsite/?url={share_url}" st.markdown(f""" """, unsafe_allow_html=True) else: st.info("You haven't created any time capsules yet. Go to the 'Create Capsule' tab to get started!") # Footer st.markdown("---") st.markdown("Built with ❤️ using [DeepSeek](https://deepseek.com/.com) / [OpenAI](https://openai.com) and [Streamlit](https://streamlit.io).")