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 |
+
)
|