Spaces:
Running on CPU Upgrade
Running on CPU Upgrade
Fix a bug with state change that can make index out of range
Browse files
state.py
CHANGED
|
@@ -121,13 +121,21 @@ def updateCategoryOptions(token_display_map=None):
|
|
| 121 |
if st.session_state.resetResult:
|
| 122 |
return
|
| 123 |
display_to_raw = token_display_map or {}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 124 |
for i, category in enumerate(st.session_state.categories):
|
| 125 |
ms_key = f"multiselect_{category}"
|
| 126 |
display_vals = list(st.session_state.get(ms_key, []))
|
| 127 |
-
# Translate display labels back to raw tokens for the data model
|
| 128 |
raw_vals = [display_to_raw.get(t, t) for t in display_vals]
|
| 129 |
st.session_state.categorySelect[i] = raw_vals
|
| 130 |
-
|
| 131 |
# Recompute unusedSpeakers for all files
|
| 132 |
all_assigned_tokens = {
|
| 133 |
token
|
|
@@ -137,12 +145,15 @@ def updateCategoryOptions(token_display_map=None):
|
|
| 137 |
for fname, result in st.session_state.results.items():
|
| 138 |
if len(result) != 2:
|
| 139 |
continue
|
| 140 |
-
|
| 141 |
-
|
| 142 |
-
|
| 143 |
-
|
| 144 |
-
|
| 145 |
-
|
|
|
|
|
|
|
|
|
|
| 146 |
|
| 147 |
|
| 148 |
# ---------------------------------------------------------------------------
|
|
|
|
| 121 |
if st.session_state.resetResult:
|
| 122 |
return
|
| 123 |
display_to_raw = token_display_map or {}
|
| 124 |
+
|
| 125 |
+
# Guard: ensure categorySelect has exactly one slot per category.
|
| 126 |
+
# Rapid interactions (e.g. addCategory firing mid-callback) can leave
|
| 127 |
+
# the two lists temporarily out of sync.
|
| 128 |
+
while len(st.session_state.categorySelect) < len(st.session_state.categories):
|
| 129 |
+
st.session_state.categorySelect.append([])
|
| 130 |
+
while len(st.session_state.categorySelect) > len(st.session_state.categories):
|
| 131 |
+
st.session_state.categorySelect.pop()
|
| 132 |
+
|
| 133 |
for i, category in enumerate(st.session_state.categories):
|
| 134 |
ms_key = f"multiselect_{category}"
|
| 135 |
display_vals = list(st.session_state.get(ms_key, []))
|
|
|
|
| 136 |
raw_vals = [display_to_raw.get(t, t) for t in display_vals]
|
| 137 |
st.session_state.categorySelect[i] = raw_vals
|
| 138 |
+
|
| 139 |
# Recompute unusedSpeakers for all files
|
| 140 |
all_assigned_tokens = {
|
| 141 |
token
|
|
|
|
| 145 |
for fname, result in st.session_state.results.items():
|
| 146 |
if len(result) != 2:
|
| 147 |
continue
|
| 148 |
+
try:
|
| 149 |
+
annotation, _ = result
|
| 150 |
+
unused = [
|
| 151 |
+
sp for sp in annotation.labels()
|
| 152 |
+
if f"{fname}: {sp}" not in all_assigned_tokens
|
| 153 |
+
]
|
| 154 |
+
st.session_state.unusedSpeakers[fname] = unused
|
| 155 |
+
except Exception:
|
| 156 |
+
pass
|
| 157 |
|
| 158 |
|
| 159 |
# ---------------------------------------------------------------------------
|