Spaces:
Sleeping
Sleeping
File size: 3,257 Bytes
e562ce4 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
"""Policy definition tab UI components."""
import os
import sys
import gradio as gr
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from utils.helpers import load_policy_from_file, load_preset_policy
def build_policy_tab(base_dir: str) -> dict:
"""Build the policy definition tab UI."""
with gr.Tab("📋 Policy Definition"):
input_method = gr.Radio(label="Input Method", choices=["Upload Markdown", "Enter Manually", "Select Preset"], value="Select Preset")
upload_file = gr.File(label="Upload Markdown File", file_types=[".md"], visible=False)
upload_preview = gr.Textbox(label="File Preview", lines=10, interactive=False, visible=False)
load_upload_btn = gr.Button("Load Policy", visible=False)
manual_text = gr.Textbox(label="Policy Text", placeholder="Enter policy markdown...", lines=20, visible=False)
save_manual_btn = gr.Button("Save Policy", visible=False)
preset_dropdown = gr.Dropdown(
label="Select Preset", choices=["Hate Speech Policy", "Violence Policy", "Toxicity Policy"], value="Hate Speech Policy", visible=True
)
preset_preview = gr.Markdown(value="*Select a preset to preview*", visible=True)
load_preset_btn = gr.Button("Load Preset", visible=True)
gr.Markdown("---")
gr.Markdown("### Current Policy")
current_policy = gr.Markdown(value="*No policy loaded*")
clear_policy_btn = gr.Button("Clear Policy", variant="secondary")
current_policy_state = gr.State(value="")
def update_ui(method):
return (
gr.update(visible=(method == "Upload Markdown")),
gr.update(visible=(method == "Upload Markdown")),
gr.update(visible=(method == "Upload Markdown")),
gr.update(visible=(method == "Enter Manually")),
gr.update(visible=(method == "Enter Manually")),
gr.update(visible=(method == "Select Preset")),
gr.update(visible=(method == "Select Preset")),
gr.update(visible=(method == "Select Preset")),
)
input_method.change(update_ui, inputs=input_method, outputs=[upload_file, upload_preview, load_upload_btn, manual_text, save_manual_btn, preset_dropdown, preset_preview, load_preset_btn])
# Policy loading handlers
load_preset_btn.click(
lambda name: load_preset_policy(name, base_dir),
inputs=preset_dropdown,
outputs=[current_policy_state, current_policy],
)
load_upload_btn.click(
lambda f: load_policy_from_file(f.name) if f else ("", ""),
inputs=upload_file,
outputs=[current_policy_state, current_policy],
)
upload_file.change(lambda f: open(f.name).read() if f else "", inputs=upload_file, outputs=upload_preview)
save_manual_btn.click(lambda t: (t, t), inputs=manual_text, outputs=[current_policy_state, current_policy])
clear_policy_btn.click(lambda: ("", "*No policy loaded*"), outputs=[current_policy_state, current_policy])
return {
"current_policy_state": current_policy_state,
"current_policy": current_policy,
}
|