MilanM commited on
Commit
07a3669
·
verified ·
1 Parent(s): f3dee1a

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +61 -50
app.py CHANGED
@@ -10,6 +10,7 @@ from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
10
  from streamlit_tags import st_tags
11
  from streamlit_vertical_slider import vertical_slider
12
  import pdf_generator
 
13
 
14
  # Set page config
15
  st.set_page_config(
@@ -54,12 +55,17 @@ if 'current_page' not in st.session_state:
54
  if 'answers' not in st.session_state:
55
  st.session_state.answers = {
56
  'workload_scope': {
57
- 'time_commitments': '',
58
- 'deadlines': '',
59
- 'feature_prioritization': ''
 
 
 
60
  },
61
  'useful_assets': {
62
- 'assets': []
 
 
63
  },
64
  'pilot_evaluation': {
65
  'metrics': []
@@ -77,7 +83,7 @@ pages = [
77
  'input_type': 'custom'
78
  },
79
  {
80
- 'title': "Useful Assets and Libraries",
81
  'content': """
82
  Discuss the useful assets and libraries that can be utilized for the project. Consider Langchain, Langflow, ChromaDB, Jupyter Notebooks, etc.
83
  """,
@@ -130,62 +136,67 @@ if 'input_key' in current_page and current_page['input_key'] is not None:
130
  st.subheader("Workload Scope")
131
  col1, col2, col3 = st.columns(3)
132
  with col1:
133
- st.session_state.answers['workload_scope']['time_commitments'] = st.text_area(
134
- "Time Commitments:",
135
- value=st.session_state.answers['workload_scope'].get('time_commitments', ""),
136
- key="time_commitments",
137
- height=150
138
- )
139
  with col2:
140
- st.session_state.answers['workload_scope']['deadlines'] = st.text_area(
141
- "Deadlines:",
142
- value=st.session_state.answers['workload_scope'].get('deadlines', ""),
143
- key="deadlines",
144
- height=150
145
- )
146
  with col3:
147
- st.session_state.answers['workload_scope']['feature_prioritization'] = st.text_area(
148
- "Feature Prioritization:",
149
- value=st.session_state.answers['workload_scope'].get('feature_prioritization', ""),
150
- key="feature_prioritization",
151
- height=150
152
- )
153
 
154
  elif current_page['input_key'] == 'useful_assets':
155
- st.subheader("Useful Assets and Libraries")
156
- assets = st_tags(
157
- label='Enter Useful Assets and Libraries:',
158
- text='Press enter to add more',
159
- value=st.session_state.answers['useful_assets'].get('assets', []),
160
- suggestions=[],
161
- maxtags=5,
162
- key='useful_assets'
163
- )
164
- st.session_state.answers['useful_assets']['assets'] = assets
165
 
166
  elif current_page['input_key'] == 'pilot_evaluation':
167
- st.subheader("Pilot Evaluation")
168
- metrics = st_tags(
169
- label='Enter Metrics to Track:',
170
- text='Press enter to add more',
171
- value=st.session_state.answers['pilot_evaluation'].get('metrics', []),
172
- suggestions=[],
173
- maxtags=5,
174
- key='pilot_evaluation'
175
- )
176
- st.session_state.answers['pilot_evaluation']['metrics'] = metrics
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
177
 
178
  # Generate PDF button (only on the last page)
179
  if st.session_state.current_page == len(pages) - 1:
180
  if st.button("Generate and Download PDF", use_container_width=True):
181
  pdf = pdf_generator.generate_pdf(st.session_state)
182
- st.download_button(
183
- label="Download PDF",
184
- data=pdf,
185
- file_name="Pilot_Drafting.pdf",
186
- mime="application/pdf",
187
- use_container_width=True
188
- )
189
 
190
  # Display progress
191
  st.progress((st.session_state.current_page + 1) / len(pages))
 
10
  from streamlit_tags import st_tags
11
  from streamlit_vertical_slider import vertical_slider
12
  import pdf_generator
13
+ import datetime
14
 
15
  # Set page config
16
  st.set_page_config(
 
55
  if 'answers' not in st.session_state:
56
  st.session_state.answers = {
57
  'workload_scope': {
58
+ 'feature_prioritization': ['', '', '', '', ''],
59
+ 'preferred_start_period': '',
60
+ 'team_composition': {
61
+ 'partner': '',
62
+ 'ibm': ''
63
+ }
64
  },
65
  'useful_assets': {
66
+ 'solution_elements': [],
67
+ 'ibm_software': [],
68
+ 'open_source_supports': []
69
  },
70
  'pilot_evaluation': {
71
  'metrics': []
 
83
  'input_type': 'custom'
84
  },
85
  {
86
+ 'title': "Solution Elements",
87
  'content': """
88
  Discuss the useful assets and libraries that can be utilized for the project. Consider Langchain, Langflow, ChromaDB, Jupyter Notebooks, etc.
89
  """,
 
136
  st.subheader("Workload Scope")
137
  col1, col2, col3 = st.columns(3)
138
  with col1:
139
+ st.session_state.answers['workload_scope']['feature_prioritization'] = [st.text_area(f"Feature Prioritization {i+1}", value=st.session_state.answers['workload_scope']['feature_prioritization'][i], height=100) for i in range(5)]
 
 
 
 
 
140
  with col2:
141
+ st.session_state.answers['workload_scope']['preferred_start_period'] = st.date_input("Preferred Start Period", value=(datetime.date.today(), datetime.date.today() + datetime.timedelta(days=30)))
 
 
 
 
 
142
  with col3:
143
+ st.session_state.answers['workload_scope']['team_composition']['partner'] = st.text_area("Partner", value=st.session_state.answers['workload_scope']['team_composition']['partner'], height=150)
144
+ st.session_state.answers['workload_scope']['team_composition']['ibm'] = st.text_area("IBM", value=st.session_state.answers['workload_scope']['team_composition']['ibm'], height=150)
 
 
 
 
145
 
146
  elif current_page['input_key'] == 'useful_assets':
147
+ st.info(st.session_state.answers['workload_scope']['feature_prioritization'])
148
+ st.subheader("Solution Elements")
149
+ col1, col2 = st.columns(2)
150
+ with col1:
151
+ st.session_state.answers['useful_assets']['ibm_software'] = st_tags(label='Enter IBM Software:', text='Press enter to add more', value=st.session_state.answers['useful_assets']['ibm_software'], suggestions=[], maxtags=5, key='ibm_software')
152
+ with col2:
153
+ st.session_state.answers['useful_assets']['open_source_supports'] = st_tags(label='Enter Open Source Supports:', text='Press enter to add more', value=st.session_state.answers['useful_assets']['open_source_supports'], suggestions=[], maxtags=5, key='open_source_supports')
 
 
 
154
 
155
  elif current_page['input_key'] == 'pilot_evaluation':
156
+ st.subheader("Evaluation Criteria")
157
+ col1, col2 = st.columns(2)
158
+ with col1:
159
+ qualitative_criteria = st_tags(label='Enter Qualitative Criteria:', text='Press enter to add more', value=st.session_state.answers['useful_assets'].get('qualitative', []), suggestions=[], maxtags=5, key='qualitative_criteria')
160
+ st.session_state.answers['useful_assets']['qualitative'] = qualitative_criteria
161
+
162
+ # Add description fields for each qualitative criterion
163
+ for i, criterion in enumerate(qualitative_criteria):
164
+ description_key = f'qual_desc_{i}'
165
+ description = st.text_area(f"Description for {criterion}:", value=st.session_state.answers['useful_assets'].get(description_key, ""), key=description_key, height=100)
166
+ st.session_state.answers['useful_assets'][description_key] = description
167
+
168
+ with col2:
169
+ quantitative_criteria = st_tags(label='Enter Quantitative Criteria:', text='Use format: CriteriaName[min - max] (can use %, floats, or integers)', value=st.session_state.answers['useful_assets'].get('quantitative', []), suggestions=[], maxtags=5, key='quantitative_criteria')
170
+ st.session_state.answers['useful_assets']['quantitative'] = quantitative_criteria
171
+
172
+ if quantitative_criteria:
173
+ slider_cols = st.columns(len(quantitative_criteria))
174
+ for i, (criterion, slider_col) in enumerate(zip(quantitative_criteria, slider_cols)):
175
+ parsed = pdf_generator.parse_quantitative_criteria(criterion)
176
+ if parsed:
177
+ name, min_val, max_val, is_percentage, is_integer = parsed
178
+ current_value = st.session_state.answers['useful_assets'].get(f'quant_value_{i}', min_val)
179
+
180
+ with slider_col:
181
+ value = vertical_slider(label=name, key=f"quant_slider_{i}", min_value=min_val, max_value=max_val, step=(max_val - min_val) / 100, default_value=current_value, height=200, thumb_shape="circle", thumb_color="#9999FF", slider_color=('green', 'orange'), value_always_visible=True)
182
+
183
+ st.session_state.answers['useful_assets'][f'quant_value_{i}'] = value
184
+
185
+ if is_percentage:
186
+ st.markdown(f"**{name}: {value*100:.1f}%**")
187
+ elif is_integer:
188
+ st.markdown(f"**{name}: {int(value)}**")
189
+ else:
190
+ st.markdown(f"**{name}: {value:.2f}**")
191
+ else:
192
+ st.warning(f"Invalid format for quantitative criterion: {criterion}")
193
+
194
 
195
  # Generate PDF button (only on the last page)
196
  if st.session_state.current_page == len(pages) - 1:
197
  if st.button("Generate and Download PDF", use_container_width=True):
198
  pdf = pdf_generator.generate_pdf(st.session_state)
199
+ st.download_button(label="Download PDF", data=pdf, file_name="Pilot_Drafting.pdf", mime="application/pdf", use_container_width=True)
 
 
 
 
 
 
200
 
201
  # Display progress
202
  st.progress((st.session_state.current_page + 1) / len(pages))