-
Notifications
You must be signed in to change notification settings - Fork 2
/
app.py
211 lines (158 loc) · 7.76 KB
/
app.py
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
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
import streamlit as st
import pandas as pd
import plotly.express as px
import time
import ast # To safely evaluate string literals as Python expressions
st.set_page_config(layout="wide")
st.title("Games - Gemini Ultra Simulator")
positions_text = """Agents: Clara (-3,3), Eddie (3,3), Sofia (-3,-3), Alex (3,-3)"""
# Load the positions data from the specified path
positions_df = pd.read_csv('./data/positions.csv')
# Correctly use the 'positions' column name with lowercase 'p' for the ast.literal_eval conversion
positions_df['positions'] = positions_df['positions'].apply(ast.literal_eval)
# Initialize or get the current animation state (paused or playing)
if 'paused' not in st.session_state:
st.session_state['paused'] = False
# Create two columns in the Streamlit app
left_column, right_column = st.columns(2)
# Define the text you want to display in the text box
course_goal = """
I am developing a course focused on conducting effective meetings. To achieve this, I require a team of specialists, each assigned roles that are instrumental in the course development process, such as author, editor, critic, and so forth. I need detailed profiles for these team members, including their names, assigned tasks, goals, and backstories.
"""
course_agents = """
1. Agent Name: Clara "The Conductor" Williams
Role: Lead Author
Tasks:
- Develop core course outline
- Create engaging lesson plans & activities
- Research and integrate best practices
- Write clear and concise scripts
Goals:
- Make meetings a source of productivity, not dread
- Transform meeting culture in workplaces
Backstory: Ex-management consultant frustrated with wasted hours in unproductive meetings. Passionate about efficiency and turning meetings into problem-solving powerhouses.
2. Agent Name: Eddie "Eagle Eye" Thompson
Role: Editor & Quality Control
Tasks:
- Review content for clarity and flow
- Ensure examples are relevant and impactful
- Fact-check all information
- Maintain consistent course voice/tone
Goals:
- Deliver a polished and credible course
- Catch any errors or inconsistencies
Backstory: Former journalist with a keen eye for detail and accuracy. Believes that well-crafted content is essential for effective learning.
3. Agent Name: Sofia "The Skeptic" Ramirez
Role: Critic and User Advocate
Tasks:
- Ask tough questions about content and approach
- Challenge assumptions about learner needs
- Test activities, visuals, and examples for usability
- Provide feedback from a realistic learner's perspective
Goals:
- Bulletproof the course against common pitfalls
- Ensure it resonates with diverse audiences
Backstory: Seasoned HR professional who's seen the good, the bad, and the ugly of workplace meetings. Wants courses to be truly transformative, not just theoretical.
4. Agent Name: Alex "The Innovator" Kim
Role: Multimedia Specialist
Tasks:
- Design engaging visuals (infographics, illustrations)
- Source or create short video clips
- Develop interactive elements
- Ensure seamless integration of multimedia into the course
Goals:
- Break down complex concepts visually
- Make the course dynamic and memorable
Backstory: Graphic designer turned instructional design enthusiast. Believes learning should be as visually appealing as it is informative.
"""
course_outline = """
Module 1: The Meeting Mindset
Step 1: Why Meetings (Sometimes) Get a Bad Rap
Common meeting complaints and frustrations
The true costs of unproductive meetings
The potential benefits of well-run meetings
Step 2: Before You Hit "Schedule": Meeting or Memo?
Decision tree: Does this topic truly need a meeting?
When asynchronous communication is better
Alternatives to traditional meetings (standups, quick huddles, etc.)
Step 3: The Power of Purpose
Defining clear meeting goals (decision-making, information sharing, brainstorming, etc.)
SMART objectives for meetings
Module 2: Preparation is Everything
Step 1: The Anatomy of an Effective Agenda
Template and samples of great agendas
Time allocation and prioritization
Building in time for discussion, not just report-outs
Step 2: Right People, Right Roles
Avoiding the "invite everyone" trap
Identifying essential attendees vs. optional
Assigning pre-meeting prep (if needed)
Step 3: Setting the Stage
Tech checks for smoother virtual meetings
Room setup considerations (in-person)
Module 3: Masterful Meeting Facilitation
Step 1: Strong Starts and Focused Guidance
Opening the meeting with purpose
Ground rules and participation norms
Techniques to keep things on track
Step 2: Inclusive Participation
Encouraging contributions from all attendees
Dealing with dominant personalities tactfully
Handling tangents and side conversations
Step 3: Decision-Making and Action Items
Reaching consensus vs. voting
Clear ownership of action items
Summarizing key takeaways
Module 4: Dealing with Disruptions
Step 1: Common Meeting Derailers
The rambler, the tech difficulties, the unprepared, etc.
Strategies for addressing each with respect
Step 2: Conflict and Difficult Dynamics
Diffusing tension
When to table topics for later
Step 3: Debrief and Improvement
Quick post-meeting evaluation
Implementing feedback for future meetings
"""
# Use the text_area widget to display the information in a non-editable, scrollable text box
common_goal = left_column.text_area("Goal", value=course_goal, height=100)
common_agents = left_column.text_area("Agents", value=course_agents, height=400)
common_outline= left_column.text_area("Chain of Thought Outline", value=course_outline, height=400)
# Move the pause/play button under the common goal on the right side
#if left_column.button('Pause' if not st.session_state['paused'] else 'Play'):
# st.session_state['paused'] = not st.session_state['paused']
# Placeholder for the Plotly chart in the right column
chart_placeholder = right_column.empty()
markdonw_position = right_column.markdown(f"```\n{positions_text}\n```")
animation_speed = right_column.slider("Animation Speed (Seconds per Frame)", 1, 10, 2, key='animation_speed')
# Placeholder for displaying additional data below the chart.
data_placeholder = right_column.empty()
# Placeholder for displaying the data below the animation
data_placeholder = right_column.empty()
# Initialize an index to keep track of the current frame (row) to display
current_frame = 0
while True:
if not st.session_state['paused']:
# Fetch the current row based on the frame index
row = positions_df.iloc[current_frame % len(positions_df)]
positions = row['positions'] # Access the 'positions' column with lowercase 'p'
# Prepare data for plotting
new_data_points = [{'Agent': agent, 'x': position[0], 'y': position[1]} for agent, position in positions.items()]
new_data = pd.DataFrame(new_data_points)
# Create a new Plotly figure for the scatter plot, using Agent names for color distinction
fig = px.scatter(new_data, x='x', y='y', color='Agent', title="Agent Positions")
# Update figure layout
fig.update_layout(xaxis_title='X Axis', yaxis_title='Y Axis', autosize=True, xaxis=dict(range=[-5, 5]), yaxis=dict(range=[-5, 5]))
# Update traces to adjust the appearance of the dots, setting radius to 10 (size 20 for visual effect)
fig.update_traces(marker=dict(size=20))
# Display the figure in the right column
chart_placeholder.plotly_chart(fig, use_container_width=True)
# Clear previous data display and show new data for the current frame
data_display = ""
for column_name, value in row.drop('positions').items():
data_display += f"**{column_name}:** {value}\n\n"
data_placeholder.markdown(data_display)
# Increment the frame index to display the next set of positions
current_frame += 1
# Use the slider value for the sleep duration
time.sleep(st.session_state['animation_speed'])