Spaces:
Running
Running
Updated streamlit app - removed parallel function
Browse files- 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 |
-
|
263 |
-
|
264 |
-
|
265 |
-
|
|
|
|
|
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 |
-
|
280 |
-
|
281 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
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 |
-
|
287 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 |
+
)
|