Spaces:
Sleeping
Sleeping
File size: 5,614 Bytes
dc92271 592ae0e dc92271 592ae0e |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 |
import streamlit as st
from utils import run_agent_sync
st.set_page_config(page_title="MCP POC", page_icon="π€", layout="wide")
st.title("Model Context Protocol(MCP) - Learning Path Generator")
# Initialize session state for progress
if 'current_step' not in st.session_state:
st.session_state.current_step = ""
if 'progress' not in st.session_state:
st.session_state.progress = 0
if 'last_section' not in st.session_state:
st.session_state.last_section = ""
if 'is_generating' not in st.session_state:
st.session_state.is_generating = False
# Sidebar for API and URL configuration
st.sidebar.header("Configuration")
# API Key input
google_api_key = st.sidebar.text_input("Google API Key", type="password")
# Pipedream URLs
st.sidebar.subheader("Pipedream URLs")
youtube_pipedream_url = st.sidebar.text_input("YouTube URL (Required)",
placeholder="Enter your Pipedream YouTube URL")
# Secondary tool selection
secondary_tool = st.sidebar.radio(
"Select Secondary Tool:",
["Drive", "Notion"]
)
# Secondary tool URL input
if secondary_tool == "Drive":
drive_pipedream_url = st.sidebar.text_input("Drive URL",
placeholder="Enter your Pipedream Drive URL")
notion_pipedream_url = None
else:
notion_pipedream_url = st.sidebar.text_input("Notion URL",
placeholder="Enter your Pipedream Notion URL")
drive_pipedream_url = None
# Quick guide before goal input
st.info("""
**Quick Guide:**
1. Enter your Google API key and YouTube URL (required)
2. Select and configure your secondary tool (Drive or Notion)
3. Enter a clear learning goal, for example:
- "I want to learn python basics in 3 days"
- "I want to learn data science basics in 10 days"
""")
# Main content area
st.header("Enter Your Goal")
user_goal = st.text_input("Enter your learning goal:",
help="Describe what you want to learn, and we'll generate a structured path using YouTube content and your selected tool.")
# Progress area
progress_container = st.container()
progress_bar = st.empty()
def update_progress(message: str):
"""Update progress in the Streamlit UI"""
st.session_state.current_step = message
# Determine section and update progress
if "Setting up agent with tools" in message:
section = "Setup"
st.session_state.progress = 0.1
elif "Added Google Drive integration" in message or "Added Notion integration" in message:
section = "Integration"
st.session_state.progress = 0.2
elif "Creating AI agent" in message:
section = "Setup"
st.session_state.progress = 0.3
elif "Generating your learning path" in message:
section = "Generation"
st.session_state.progress = 0.5
elif "Learning path generation complete" in message:
section = "Complete"
st.session_state.progress = 1.0
st.session_state.is_generating = False
else:
section = st.session_state.last_section or "Progress"
st.session_state.last_section = section
# Show progress bar
progress_bar.progress(st.session_state.progress)
# Update progress container with current status
with progress_container:
# Show section header if it changed
if section != st.session_state.last_section and section != "Complete":
st.write(f"**{section}**")
# Show message with tick for completed steps
if message == "Learning path generation complete!":
st.success("All steps completed! π")
else:
prefix = "β" if st.session_state.progress >= 0.5 else "β"
st.write(f"{prefix} {message}")
# Generate Learning Path button
if st.button("Generate Learning Path", type="primary", disabled=st.session_state.is_generating):
if not google_api_key:
st.error("Please enter your Google API key in the sidebar.")
elif not youtube_pipedream_url:
st.error("YouTube URL is required. Please enter your Pipedream YouTube URL in the sidebar.")
elif (secondary_tool == "Drive" and not drive_pipedream_url) or (secondary_tool == "Notion" and not notion_pipedream_url):
st.error(f"Please enter your Pipedream {secondary_tool} URL in the sidebar.")
elif not user_goal:
st.warning("Please enter your learning goal.")
else:
try:
# Set generating flag
st.session_state.is_generating = True
# Reset progress
st.session_state.current_step = ""
st.session_state.progress = 0
st.session_state.last_section = ""
result = run_agent_sync(
google_api_key=google_api_key,
youtube_pipedream_url=youtube_pipedream_url,
drive_pipedream_url=drive_pipedream_url,
notion_pipedream_url=notion_pipedream_url,
user_goal=user_goal,
progress_callback=update_progress
)
# Display results
st.header("Your Learning Path")
# print(result)
if result and "messages" in result:
for msg in result["messages"]:
st.markdown(f"π {msg.content}")
else:
st.error("No results were generated. Please try again.")
st.session_state.is_generating = False
except Exception as e:
st.error(f"An error occurred: {str(e)}")
st.error("Please check your API keys and URLs, and try again.")
st.session_state.is_generating = False
|