-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathdevelopment_program.py
More file actions
148 lines (125 loc) · 6.43 KB
/
development_program.py
File metadata and controls
148 lines (125 loc) · 6.43 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 datetime import datetime, timedelta
from program_generator import ProgramGenerator
import plotly.graph_objects as go
import plotly.express as px
# Initialize the program generator
if 'program_generator' not in st.session_state:
st.session_state.program_generator = ProgramGenerator()
st.title("Development Program")
# Check if a profile is selected
if 'current_profile' not in st.session_state or not st.session_state.current_profile:
st.info("Please select a profile from the main page to view the development program.")
else:
profile = st.session_state.current_profile
# Create tabs for different program aspects
program_tab, progress_tab, resources_tab = st.tabs([
"Weekly Program", "Progress Tracking", "Resources & Guides"
])
with program_tab:
st.markdown(f"### {profile.name}'s Weekly Program")
# Generate new program button
if st.button("Generate New Weekly Program"):
with st.spinner("Creating personalized program..."):
weekly_program = st.session_state.program_generator.generate_weekly_program(profile)
st.session_state.current_program = weekly_program
# Display current program if it exists
if hasattr(st.session_state, 'current_program'):
for day in st.session_state.current_program:
with st.expander(f"{day['day']} Activities"):
for activity in day['activities']:
st.markdown(f"**{activity['name']}** ({activity['duration']})")
st.write(activity['description'])
col1, col2 = st.columns(2)
with col1:
if st.button("View Detailed Guide", key=f"guide_{activity['name']}"):
guide = st.session_state.program_generator.generate_visual_guide(activity)
st.markdown(guide)
with col2:
if st.button("Mark Complete", key=f"complete_{activity['name']}"):
st.text_area("How did it go? (Optional)", key=f"notes_{activity['name']}")
if st.button("Submit", key=f"submit_{activity['name']}"):
notes = st.session_state[f"notes_{activity['name']}"]
assessment = st.session_state.program_generator.assess_activity_completion(
profile,
f"Activity: {activity['name']}\nNotes: {notes}"
)
st.success("Activity logged!")
st.write(assessment['assessment'])
with progress_tab:
st.markdown("### Progress Tracking")
# Create progress visualization
if profile.progress_history:
# Create timeline of completed milestones
fig = go.Figure()
for entry in profile.progress_history:
fig.add_trace(go.Scatter(
x=[entry['date']],
y=[entry['milestone']],
mode='markers+text',
name=entry['milestone'],
text=[entry['milestone']],
textposition="top center"
))
fig.update_layout(
title="Milestone Timeline",
xaxis_title="Date",
yaxis_title="Milestones",
showlegend=False
)
st.plotly_chart(fig)
# Progress by category
categories = {}
for milestone in profile.milestones.values():
if milestone.category not in categories:
categories[milestone.category] = {"completed": 0, "total": 0}
categories[milestone.category]["total"] += 1
if milestone.completed:
categories[milestone.category]["completed"] += 1
# Create progress bars
for category, data in categories.items():
st.write(f"**{category}**")
progress = data["completed"] / data["total"]
st.progress(progress)
st.write(f"{data['completed']}/{data['total']} completed")
# Activity log
st.markdown("### Recent Activities")
if hasattr(st.session_state, 'program_generator') and \
profile.profile_id in st.session_state.program_generator.programs:
program = st.session_state.program_generator.programs[profile.profile_id]
for note in program.progress_notes[-5:]: # Show last 5 activities
with st.expander(f"Activity on {note['date']}"):
st.write("**Log:**", note['log'])
st.write("**Assessment:**", note['assessment'])
with resources_tab:
st.markdown("### Resources & Guides")
# Add resource categories
resource_type = st.selectbox(
"Select Resource Type",
["Activity Guides", "Development Information", "Parent Support", "Professional Resources"]
)
# Generate relevant resources based on profile and selection
context = f"""
Generate resources for:
Resource Type: {resource_type}
Child's Age: {profile.age_months} months
Current Focus: {', '.join(profile.current_focus_areas)}
Please provide:
1. Relevant reading materials
2. Activity suggestions
3. Professional resources
4. Support groups or communities
"""
with st.spinner("Loading resources..."):
resources = st.session_state.rag_system.query_knowledge_base(context)
st.markdown(resources)
# Add feedback section
st.markdown("### Feedback")
feedback = st.text_area("How are the current activities working? Any challenges?")
if st.button("Submit Feedback"):
with st.spinner("Adjusting program..."):
adjustments = st.session_state.program_generator.adjust_program_difficulty(
profile, feedback
)
st.write("**Recommended Adjustments:**")
st.write(adjustments['adjustments'])