|
|
|
|
|
def prompt_weights(default_weights: dict) -> dict:
|
|
|
"""
|
|
|
Interactively collect weights from the user (in %) and validate that they sum to 100.
|
|
|
Press Enter to keep defaults.
|
|
|
"""
|
|
|
print("\\n⚖️ Set Weights (press Enter to keep default values)")
|
|
|
new_w = {}
|
|
|
for key, val in default_weights.items():
|
|
|
try:
|
|
|
raw = input(f" {key.replace('_WEIGHT','').title()} (%), default {val}: ").strip()
|
|
|
new_w[key] = val if raw == "" else int(raw)
|
|
|
except ValueError:
|
|
|
print(f" Invalid input for {key}, keeping default {val}.")
|
|
|
new_w[key] = val
|
|
|
|
|
|
total = sum(new_w.values())
|
|
|
if total != 100:
|
|
|
print(f" Weights sum to {total}, normalizing to 100 proportionally.")
|
|
|
factor = 100.0 / total if total else 0
|
|
|
for k in new_w:
|
|
|
new_w[k] = int(round(new_w[k] * factor))
|
|
|
|
|
|
drift = 100 - sum(new_w.values())
|
|
|
if drift != 0:
|
|
|
largest_key = max(new_w.keys(), key=new_w.get)
|
|
|
new_w[largest_key] += drift
|
|
|
|
|
|
print(" Final Weights:", new_w)
|
|
|
return new_w |