Spaces:
Sleeping
Sleeping
| """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, | |
| } | |