-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapp.py
More file actions
148 lines (126 loc) · 5.48 KB
/
app.py
File metadata and controls
148 lines (126 loc) · 5.48 KB
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
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