| """Main Gradio app for moderation model testing.""" |
|
|
| import os |
| import sys |
|
|
| import gradio as gr |
|
|
| sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) |
|
|
| from utils.helpers import get_hf_token |
| from utils.model_interface import extract_model_id, run_test |
| from ui.sidebar import build_sidebar |
| from ui.tab_config import build_config_tab |
| from ui.tab_policy import build_policy_tab |
| from ui.tab_testing import ( |
| build_testing_tab, |
| format_model_info, |
| format_reasoning_info, |
| format_test_result, |
| ) |
|
|
|
|
| |
| |
| |
|
|
| def handle_run_test(test_input, current_policy, model_choice, reasoning_effort, max_tokens, temperature, top_p, system_prompt_val, response_format_val, oauth_token: gr.OAuthToken | None = None): |
| """Handle test execution.""" |
|
|
| if not test_input or not test_input.strip(): |
| model_info = format_model_info(model_choice, reasoning_effort) |
| return model_info, "*Please enter test content*", "*No content*", "*No response yet*", gr.update(value="", visible=False), gr.update(value="", visible=False) |
|
|
| if not current_policy or current_policy == "*No policy loaded*": |
| model_info = format_model_info(model_choice, reasoning_effort) |
| return model_info, "*Please load a policy first*", "*No policy*", "*No response yet*", gr.update(value="", visible=False), gr.update(value="", visible=False) |
|
|
| |
| hf_token, _ = get_hf_token(oauth_token) |
| if hf_token is None: |
| model_info = format_model_info(model_choice, reasoning_effort) |
| return model_info, "*Please log in to use Inference Providers*", "*Authentication required*", "*No response yet*", gr.update(value="", visible=False), gr.update(value="", visible=False) |
|
|
| model_id = extract_model_id(model_choice) |
|
|
| result = run_test( |
| model_id=model_id, |
| test_input=test_input, |
| policy=current_policy, |
| hf_token=hf_token, |
| reasoning_effort=reasoning_effort, |
| max_tokens=int(max_tokens), |
| temperature=float(temperature), |
| top_p=float(top_p), |
| system_prompt=system_prompt_val, |
| response_format=response_format_val, |
| ) |
| label_text, parsed, cat_text, reasoning, raw_response = format_test_result(result) |
| reasoning_visible = bool(reasoning and reasoning.strip()) |
| model_info = format_model_info(model_choice, reasoning_effort) |
| reasoning_info_text, reasoning_info_visible = format_reasoning_info(model_choice, reasoning) |
| |
| return ( |
| model_info, |
| label_text, |
| cat_text, |
| raw_response, |
| gr.update(value=reasoning_info_text, visible=reasoning_info_visible), |
| gr.update(value=reasoning or "", visible=reasoning_visible), |
| ) |
|
|
|
|
| |
| |
| |
|
|
| with gr.Blocks(title="Moderation Model Testing") as demo: |
| gr.Markdown("# Moderation Model Testing Interface") |
| gr.Markdown( |
| "Test moderation models with custom content policies. Define your policy, select a model, " |
| "and evaluate how different models classify content according to your rules. " |
| "Supports reasoning models that provide detailed explanations for their decisions." |
| ) |
|
|
| |
| sidebar_components = build_sidebar() |
| login_button = sidebar_components["login_button"] |
|
|
| |
| with gr.Tabs(): |
| |
| testing_components = build_testing_tab() |
| test_input = testing_components["test_input"] |
| run_test_btn = testing_components["run_test_btn"] |
| model_info_display = testing_components["model_info_display"] |
| label_display = testing_components["label_display"] |
| categories_display = testing_components["categories_display"] |
| model_response_display = testing_components["model_response_display"] |
| reasoning_info = testing_components["reasoning_info"] |
| reasoning_display = testing_components["reasoning_display"] |
|
|
| policy_components = build_policy_tab(os.path.dirname(__file__)) |
| current_policy_state = policy_components["current_policy_state"] |
|
|
| config_components = build_config_tab() |
| model_dropdown = config_components["model_dropdown"] |
| reasoning_effort = config_components["reasoning_effort"] |
| max_tokens = config_components["max_tokens"] |
| temperature = config_components["temperature"] |
| top_p = config_components["top_p"] |
| system_prompt_textbox = config_components["system_prompt_textbox"] |
| response_format_textbox = config_components["response_format_textbox"] |
|
|
| |
| |
| |
|
|
| |
| run_test_btn.click( |
| handle_run_test, |
| inputs=[ |
| test_input, |
| current_policy_state, |
| model_dropdown, |
| reasoning_effort, |
| max_tokens, |
| temperature, |
| top_p, |
| system_prompt_textbox, |
| response_format_textbox, |
| ], |
| outputs=[ |
| model_info_display, |
| label_display, |
| categories_display, |
| model_response_display, |
| reasoning_info, |
| reasoning_display, |
| ], |
| ) |
| |
| model_dropdown.change( |
| format_model_info, |
| inputs=[model_dropdown, reasoning_effort], |
| outputs=model_info_display, |
| ) |
| |
| reasoning_effort.change( |
| format_model_info, |
| inputs=[model_dropdown, reasoning_effort], |
| outputs=model_info_display, |
| ) |
|
|
|
|
| if __name__ == "__main__": |
| demo.launch(ssr_mode=False) |
|
|