Spaces:
Sleeping
Sleeping
handle single variant study
Browse files- src/data.py +9 -13
src/data.py
CHANGED
|
@@ -178,34 +178,30 @@ def _assign_from_category(category: str, n: int, cfg: dict) -> list:
|
|
| 178 |
return assigned
|
| 179 |
|
| 180 |
def _assign_variants(cfg: dict, n: int) -> list:
|
| 181 |
-
"""
|
| 182 |
-
Return a list of n variant dicts (one per item), alternating the
|
| 183 |
-
personalized/base split across users.
|
| 184 |
-
"""
|
| 185 |
variants = cfg.get("model_variants")
|
| 186 |
if not variants:
|
| 187 |
-
#
|
| 188 |
return [{"model_name": cfg["model_name"], "prompt_variant": cfg["prompt_variant"]}] * n
|
| 189 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 190 |
lock = FileLock(str(_data_dir(cfg) / "variant_counter.lock"))
|
| 191 |
with lock:
|
| 192 |
ctr = _read_counter(_data_dir(cfg) / "variant_counter.txt")
|
| 193 |
_write_counter(_data_dir(cfg) / "variant_counter.txt", ctr + 1)
|
| 194 |
|
| 195 |
-
# Swap counts on every other user
|
| 196 |
v0, v1 = variants[0], variants[1]
|
| 197 |
if ctr % 2 == 1:
|
| 198 |
v0, v1 = v1, v0
|
| 199 |
|
| 200 |
-
|
| 201 |
-
|
| 202 |
-
for a, b in zip_longest([v0] * v0["count"], [v1] * v1["count"]):
|
| 203 |
-
if a: interleaved.append(a)
|
| 204 |
-
if b: interleaved.append(b)
|
| 205 |
-
assigned = interleaved
|
| 206 |
print(f"[VARIANTS] user {ctr}: {[v['name'] for v in assigned]}")
|
| 207 |
return assigned
|
| 208 |
-
|
| 209 |
def _compute_counts(cfg: dict) -> dict:
|
| 210 |
"""
|
| 211 |
Determine how many items to assign from each category for one user.
|
|
|
|
| 178 |
return assigned
|
| 179 |
|
| 180 |
def _assign_variants(cfg: dict, n: int) -> list:
|
|
|
|
|
|
|
|
|
|
|
|
|
| 181 |
variants = cfg.get("model_variants")
|
| 182 |
if not variants:
|
| 183 |
+
# Old-style config with top-level model_name/prompt_variant
|
| 184 |
return [{"model_name": cfg["model_name"], "prompt_variant": cfg["prompt_variant"]}] * n
|
| 185 |
|
| 186 |
+
if len(variants) == 1:
|
| 187 |
+
# Single variant — assign it to all items, no alternation needed
|
| 188 |
+
return [variants[0]] * n
|
| 189 |
+
|
| 190 |
+
# Two-variant alternation
|
| 191 |
lock = FileLock(str(_data_dir(cfg) / "variant_counter.lock"))
|
| 192 |
with lock:
|
| 193 |
ctr = _read_counter(_data_dir(cfg) / "variant_counter.txt")
|
| 194 |
_write_counter(_data_dir(cfg) / "variant_counter.txt", ctr + 1)
|
| 195 |
|
|
|
|
| 196 |
v0, v1 = variants[0], variants[1]
|
| 197 |
if ctr % 2 == 1:
|
| 198 |
v0, v1 = v1, v0
|
| 199 |
|
| 200 |
+
assigned = [v0] * v0["count"] + [v1] * v1["count"]
|
| 201 |
+
random.shuffle(assigned)
|
|
|
|
|
|
|
|
|
|
|
|
|
| 202 |
print(f"[VARIANTS] user {ctr}: {[v['name'] for v in assigned]}")
|
| 203 |
return assigned
|
| 204 |
+
|
| 205 |
def _compute_counts(cfg: dict) -> dict:
|
| 206 |
"""
|
| 207 |
Determine how many items to assign from each category for one user.
|