Spaces:
Sleeping
Sleeping
Download src/streamlit_app.py from rahulmolasi/SmartDayAI: direct link, hf CLI and curl.
- Browser
- Download file 6.89 kB
-
https://huggingface.co/spaces/rahulmolasi/SmartDayAI/resolve/main/src/streamlit_app.py
- Command line
-
hf download hf://spaces/rahulmolasi/SmartDayAI/src/streamlit_app.py
-
curl -L -o streamlit_app.py https://huggingface.co/spaces/rahulmolasi/SmartDayAI/resolve/main/src/streamlit_app.py
6.89 kB
| import streamlit as st | |
| import sqlite3 | |
| from datetime import datetime, timedelta | |
| import os | |
| import json | |
| import requests | |
| # ----------------------------- | |
| # CONFIG | |
| # ----------------------------- | |
| st.set_page_config( | |
| page_title="SmartDay.AI", | |
| page_icon="🌸", | |
| layout="wide", | |
| initial_sidebar_state="expanded" | |
| ) | |
| # Theme Colors | |
| PRIMARY_COLOR = "#FF6F61" # Coral | |
| BG_COLOR = "#FFFFFF" # White | |
| # Database setup | |
| DB_FILE = "smartday_ai.db" | |
| def init_db(): | |
| conn = sqlite3.connect(DB_FILE) | |
| c = conn.cursor() | |
| c.execute('''CREATE TABLE IF NOT EXISTS users | |
| (username TEXT PRIMARY KEY, password TEXT)''') | |
| c.execute('''CREATE TABLE IF NOT EXISTS journal | |
| (username TEXT, date TEXT, entry TEXT)''') | |
| c.execute('''CREATE TABLE IF NOT EXISTS planner | |
| (username TEXT, date TEXT, task TEXT, status TEXT)''') | |
| conn.commit() | |
| conn.close() | |
| init_db() | |
| # ----------------------------- | |
| # AUTHENTICATION | |
| # ----------------------------- | |
| def register_user(username, password): | |
| conn = sqlite3.connect(DB_FILE) | |
| c = conn.cursor() | |
| try: | |
| c.execute("INSERT INTO users VALUES (?,?)", (username, password)) | |
| conn.commit() | |
| return True | |
| except: | |
| return False | |
| finally: | |
| conn.close() | |
| def login_user(username, password): | |
| conn = sqlite3.connect(DB_FILE) | |
| c = conn.cursor() | |
| c.execute("SELECT * FROM users WHERE username=? AND password=?", (username, password)) | |
| result = c.fetchone() | |
| conn.close() | |
| return result is not None | |
| # ----------------------------- | |
| # GROQ AI INTEGRATION | |
| # ----------------------------- | |
| def groq_chat(prompt): | |
| """Call Groq API - key saved in Hugging Face Secrets""" | |
| api_key = os.environ.get("GROQ_API_KEY") | |
| if not api_key: | |
| return "⚠️ No API key found. Please set GROQ_API_KEY in Secrets." | |
| url = "https://api.groq.com/openai/v1/chat/completions" | |
| headers = {"Authorization": f"Bearer {api_key}", "Content-Type": "application/json"} | |
| data = { | |
| "model": "llama-3.1-8b-instant", | |
| "messages": [{"role": "user", "content": prompt}], | |
| "temperature": 0.5 | |
| } | |
| response = requests.post(url, headers=headers, json=data) | |
| if response.status_code == 200: | |
| return response.json()["choices"][0]["message"]["content"] | |
| else: | |
| return f"Error: {response.text}" | |
| # ----------------------------- | |
| # DASHBOARD COMPONENTS | |
| # ----------------------------- | |
| def learning_journal(username): | |
| st.header("📖 Learning Journal") | |
| today = datetime.today().strftime("%Y-%m-%d") | |
| conn = sqlite3.connect(DB_FILE) | |
| c = conn.cursor() | |
| entry = st.text_area("Write today’s reflection or learning:", height=150) | |
| if st.button("Save Entry"): | |
| c.execute("INSERT INTO journal VALUES (?,?,?)", (username, today, entry)) | |
| conn.commit() | |
| st.success("Journal saved!") | |
| st.subheader("Past Entries") | |
| c.execute("SELECT date, entry FROM journal WHERE username=? ORDER BY date DESC", (username,)) | |
| rows = c.fetchall() | |
| for r in rows: | |
| st.markdown(f"**{r[0]}** — {r[1]}") | |
| conn.close() | |
| def smart_day_planner(username): | |
| st.header("🧠 Smart Day Planner") | |
| conn = sqlite3.connect(DB_FILE) | |
| c = conn.cursor() | |
| task = st.text_input("Add a new task:") | |
| if st.button("Add Task"): | |
| c.execute("INSERT INTO planner VALUES (?,?,?,?)", (username, datetime.today().strftime("%Y-%m-%d"), task, "Pending")) | |
| conn.commit() | |
| st.success("Task added!") | |
| st.subheader("Today’s Tasks") | |
| c.execute("SELECT task, status FROM planner WHERE username=? AND date=?", (username, datetime.today().strftime("%Y-%m-%d"),)) | |
| tasks = c.fetchall() | |
| for t in tasks: | |
| if st.checkbox(f"{t[0]} — {t[1]}", value=(t[1]=="Done")): | |
| c.execute("UPDATE planner SET status='Done' WHERE username=? AND task=?", (username, t[0])) | |
| conn.commit() | |
| conn.close() | |
| def weekly_summary(username): | |
| st.header("📅 Weekly Summary & Insights") | |
| conn = sqlite3.connect(DB_FILE) | |
| c = conn.cursor() | |
| week_start = (datetime.today() - timedelta(days=7)).strftime("%Y-%m-%d") | |
| c.execute("SELECT date, entry FROM journal WHERE username=? AND date>=?", (username, week_start)) | |
| data = c.fetchall() | |
| if not data: | |
| st.info("No entries found for this week.") | |
| return | |
| combined_text = "\n".join([f"{d[0]}: {d[1]}" for d in data]) | |
| st.write("Here’s your AI-powered reflection summary 👇") | |
| summary = groq_chat(f"Summarize and analyze this weekly journal:\n{combined_text}") | |
| st.markdown(summary) | |
| conn.close() | |
| def ai_assistant(): | |
| st.header("🤖 Ask SmartDay.AI") | |
| query = st.text_area("What would you like help with?", height=100) | |
| if st.button("Ask AI"): | |
| response = groq_chat(query) | |
| st.markdown(f"**Answer:** {response}") | |
| # ----------------------------- | |
| # MAIN APP | |
| # ----------------------------- | |
| def main(): | |
| st.markdown( | |
| f""" | |
| <style> | |
| body {{ | |
| background-color: {BG_COLOR}; | |
| color: #333; | |
| }} | |
| .stButton>button {{ | |
| background-color: {PRIMARY_COLOR}; | |
| color: white; | |
| border-radius: 8px; | |
| padding: 0.6em 1.2em; | |
| }} | |
| </style> | |
| """, | |
| unsafe_allow_html=True | |
| ) | |
| st.sidebar.title("🌸 SmartDay.AI") | |
| menu = ["Login", "Register"] | |
| choice = st.sidebar.selectbox("Menu", menu) | |
| if choice == "Register": | |
| st.subheader("Create Account") | |
| new_user = st.text_input("Username") | |
| new_pass = st.text_input("Password", type="password") | |
| if st.button("Register"): | |
| if register_user(new_user, new_pass): | |
| st.success("Account created! Please go to Login.") | |
| else: | |
| st.error("User already exists.") | |
| elif choice == "Login": | |
| st.subheader("User Login") | |
| username = st.text_input("Username") | |
| password = st.text_input("Password", type="password") | |
| if st.button("Login"): | |
| if login_user(username, password): | |
| st.session_state["user"] = username | |
| st.success(f"Welcome, {username}!") | |
| else: | |
| st.error("Invalid credentials.") | |
| if "user" in st.session_state: | |
| username = st.session_state["user"] | |
| st.sidebar.success(f"Logged in as {username}") | |
| page = st.sidebar.radio("Navigate", ["Learning Journal", "Smart Day Planner", "Weekly Summary", "AI Assistant"]) | |
| if page == "Learning Journal": | |
| learning_journal(username) | |
| elif page == "Smart Day Planner": | |
| smart_day_planner(username) | |
| elif page == "Weekly Summary": | |
| weekly_summary(username) | |
| elif page == "AI Assistant": | |
| ai_assistant() | |
| if __name__ == "__main__": | |
| main() | |