Tomatillo commited on
Commit
20723b1
·
verified ·
1 Parent(s): 682a939

Updated streamlit app - removed parallel function

Browse files
Files changed (1) hide show
  1. src/streamlit_app.py +28 -19
src/streamlit_app.py CHANGED
@@ -21,7 +21,6 @@ Usage:
21
  import streamlit as st
22
  import io
23
  import csv
24
- import concurrent.futures
25
  from segments import SegmentsClient
26
  from datetime import datetime
27
  import sys
@@ -228,8 +227,6 @@ if api_key and dataset_identifier:
228
  if is_multisensor:
229
  sensor_select = st.selectbox("Choose sensor (optional)", options=['All sensors'] + sensor_names)
230
 
231
- # Concurrency control
232
- parallel_workers = st.slider("Parallel requests", min_value=1, max_value=32, value=8, help="Increase to speed up processing; lower if you hit API limits.")
233
 
234
  if run_button:
235
  st.session_state.csv_content = None
@@ -254,15 +251,17 @@ if run_button:
254
  target_set = set(target_classes)
255
  metrics = []
256
  # Update loader after dataset type check
 
257
  if status_ctx is not None:
258
- status_ctx.update(label="Dataset type checked. Processing samples...", state="running")
259
  progress = st.progress(0)
260
- total = len(samples_objects)
261
  done = 0
262
- with concurrent.futures.ThreadPoolExecutor(max_workers=parallel_workers) as executor:
263
- futures = [
264
- executor.submit(
265
- compute_metrics_for_sample,
 
 
266
  sample,
267
  api_key,
268
  target_set,
@@ -270,21 +269,31 @@ if run_button:
270
  is_multisensor,
271
  sensor_select,
272
  )
273
- for sample in samples_objects
274
- ]
275
- for future in concurrent.futures.as_completed(futures):
276
- rows = future.result()
277
  if rows:
278
  metrics.extend(rows)
279
- done += 1
280
- if total:
281
- progress.progress(min(done / total, 1.0))
 
 
 
 
 
 
282
  if not metrics:
283
  st.session_state.error = "No metrics could be generated for the dataset."
284
  else:
285
  st.session_state.csv_content = generate_csv(metrics, dataset_identifier, target_classes)
286
- if status_ctx is not None:
287
- status_ctx.update(label="CSV generated!", state="complete")
 
 
 
 
 
 
 
 
288
  except Exception as e:
289
  st.session_state.error = f"An error occurred: {e}"
290
  if status_ctx is not None:
@@ -301,4 +310,4 @@ if st.session_state.csv_content:
301
  data=st.session_state.csv_content,
302
  file_name=filename,
303
  mime="text/csv"
304
- )
 
21
  import streamlit as st
22
  import io
23
  import csv
 
24
  from segments import SegmentsClient
25
  from datetime import datetime
26
  import sys
 
227
  if is_multisensor:
228
  sensor_select = st.selectbox("Choose sensor (optional)", options=['All sensors'] + sensor_names)
229
 
 
 
230
 
231
  if run_button:
232
  st.session_state.csv_content = None
 
251
  target_set = set(target_classes)
252
  metrics = []
253
  # Update loader after dataset type check
254
+ total = len(samples_objects)
255
  if status_ctx is not None:
256
+ status_ctx.update(label=f"Dataset type checked. Processing {total} samples...", state="running")
257
  progress = st.progress(0)
 
258
  done = 0
259
+ failed_samples = []
260
+
261
+ # Process samples sequentially instead of in parallel
262
+ for i, sample in enumerate(samples_objects):
263
+ try:
264
+ rows = compute_metrics_for_sample(
265
  sample,
266
  api_key,
267
  target_set,
 
269
  is_multisensor,
270
  sensor_select,
271
  )
 
 
 
 
272
  if rows:
273
  metrics.extend(rows)
274
+ else:
275
+ failed_samples.append(f"Sample {sample.uuid}: No metrics generated")
276
+ except Exception as e:
277
+ failed_samples.append(f"Sample {sample.uuid}: {str(e)}")
278
+
279
+ done += 1
280
+ if total:
281
+ progress.progress(min(done / total, 1.0))
282
+
283
  if not metrics:
284
  st.session_state.error = "No metrics could be generated for the dataset."
285
  else:
286
  st.session_state.csv_content = generate_csv(metrics, dataset_identifier, target_classes)
287
+ success_msg = f"CSV generated! Processed {len(metrics)} samples"
288
+ if failed_samples:
289
+ success_msg += f" ({len(failed_samples)} samples failed)"
290
+ if status_ctx is not None:
291
+ status_ctx.update(label=success_msg, state="complete")
292
+
293
+ if failed_samples:
294
+ st.warning(f"{len(failed_samples)} samples failed processing. First few errors:")
295
+ for failure in failed_samples[:5]: # Show first 5 failures
296
+ st.text(failure)
297
  except Exception as e:
298
  st.session_state.error = f"An error occurred: {e}"
299
  if status_ctx is not None:
 
310
  data=st.session_state.csv_content,
311
  file_name=filename,
312
  mime="text/csv"
313
+ )