""" Gradio widget builders for the interpretability app. This module provides small UI factory functions: - create_model_selector: dropdown for selecting a model size/name. - create_feature_level_selector: radio control for feature granularity (word/sentence/paragraph). - create_attribution_method_toggle: radio control for attribution method (Shapley/Banzhaf). """ import gradio as gr from typing import List def create_model_selector() -> gr.Dropdown: """ Create a dropdown for model selection. Usage: models = list_models() # from loader/models.py (optional API) """ return gr.Dropdown( choices=[ ("Qwen3 4B Instruct", "small"), ("Mistral 7B Instruct v0.2", "medium"), ("Qwen3 30B Instruct", "large"), ], value="small", label="Model", interactive=True, elem_id="model-selector", elem_classes=["bubble-select"], ) def create_multimodal_model_selector() -> gr.Dropdown: """ Create a dropdown for multimodal (image-capable) model selection. Keys must match loader/models_mm_vllm.py. """ return gr.Dropdown( choices=["vl_small", "vl_large"], value="vl_small", label="Multimodal Model", interactive=True, elem_id="multimodal-model-selector", ) def create_feature_level_selector() -> gr.Radio: """Create the feature granularity selector.""" return gr.Radio( choices=["word", "sentence", "paragraph"], value="sentence", label="Feature Level", interactive=True, ) def create_attribution_method_toggle() -> gr.Radio: """Create the attribution method toggle.""" return gr.Radio( choices=["shapley", "banzhaf", "influence"], value="shapley", label="Attribution Method", interactive=True, )