This commit is contained in:
hailin 2025-07-08 17:13:23 +08:00
parent 8b8949779d
commit 3722aafdd1
1 changed files with 21 additions and 11 deletions

View File

@ -134,25 +134,35 @@ def toggle_run(
# ---------------- 互斥逻辑 ---------------- # ---------------- 互斥逻辑 ----------------
def enforce_input_exclusive_and_toggle_fields(selected): def enforce_input_exclusive_and_toggle_fields(selected):
order = ["API Models", "Local Models", "Benchmarks", "Custom Datasets"]
group1 = {"API Models", "Local Models"} group1 = {"API Models", "Local Models"}
group2 = {"Benchmarks", "Custom Datasets"} group2 = {"Benchmarks", "Custom Datasets"}
# 在每个互斥组里仅保留最后一次点选的项
def keep_only_one(group): def keep_only_one(group):
filtered = [item for item in selected if item in group] filtered = [item for item in selected if item in group]
return filtered[-1:] return filtered[-1:] # 最后一个(空 list 亦可)
final_selection = set(selected) final_sel = set(selected)
final_selection -= group1 final_sel -= group1
final_selection |= set(keep_only_one(group1)) final_sel |= set(keep_only_one(group1))
final_sel -= group2
final_sel |= set(keep_only_one(group2))
final_selection -= group2 # ① 保证输出顺序固定
final_selection |= set(keep_only_one(group2)) final_list = [itm for itm in order if itm in final_sel]
# ② 只有真正变化时才更新,避免死循环
if list(selected) == final_list:
input_update = gr.update() # 不带 value => 不触发二次 change
else:
input_update = gr.update(value=final_list)
show_api_fields = "API Models" in final_sel
row_update = gr.Row.update(visible=show_api_fields)
return input_update, row_update
show_api_fields = "API Models" in final_selection
return (
gr.update(value=list(final_selection)),
gr.Row.update(visible=show_api_fields)
)
# ---------------- 构建 Gradio UI ---------------- # ---------------- 构建 Gradio UI ----------------