import gradio as gr from apscheduler.schedulers.background import BackgroundScheduler from typing import Optional import logging from config import CONFIG from data_manager import data_manager from utils import filter_leaderboard, search_responses, plot_section_results, validate_model_submission logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) def create_app() -> gr.Blocks: """Create and configure the Gradio application.""" with gr.Blocks(css=CONFIG["ui"].css, theme=CONFIG["ui"].theme) as app: gr.HTML(f"

{CONFIG['ui'].title}

") gr.Markdown(CONFIG["ui"].description) with gr.Tabs() as tabs: # Leaderboard Tab with gr.TabItem("📊 Leaderboard"): with gr.Row(): family_filter = gr.Dropdown( choices=data_manager.leaderboard_data["family"].unique().tolist(), label="Filter by Family", multiselect=False ) quantization_filter = gr.Dropdown( choices=data_manager.leaderboard_data["quantization_level"].unique().tolist(), label="Filter by Quantization Level" ) filter_btn = gr.Button("Apply Filters", variant="primary") leaderboard_table = gr.DataFrame( value=data_manager.leaderboard_data, interactive=False ) filter_btn.click( filter_leaderboard, inputs=[family_filter, quantization_filter], outputs=leaderboard_table ) # Model Responses Tab with gr.TabItem("🔍 Model Responses"): with gr.Row(): model_dropdown = gr.Dropdown( choices=data_manager.leaderboard_data["model"].unique().tolist(), label="Select Model" ) query_input = gr.Textbox( label="Search Query", placeholder="Enter search terms..." ) search_btn = gr.Button("Search", variant="primary") responses_table = gr.DataFrame() search_btn.click( search_responses, inputs=[query_input, model_dropdown], outputs=responses_table ) # Section Results Tab with gr.TabItem("📈 Section Results"): gr.Plot(value=plot_section_results) gr.DataFrame(value=data_manager.section_results_data) # Submit Model Tab with gr.TabItem("➕ Submit Model"): gr.Markdown("### Submit Your Model for Evaluation") with gr.Group(): model_name = gr.Textbox(label="Model Name", placeholder="Enter unique model name") base_model = gr.Textbox(label="Base Model", placeholder="Enter base model name") revision = gr.Textbox(label="Revision", value="main") with gr.Row(): precision = gr.Dropdown( choices=CONFIG["model"].precision_options, label="Precision", value="float16" ) weight_type = gr.Dropdown( choices=CONFIG["model"].weight_types, label="Weight Type", value="Original" ) model_type = gr.Dropdown( choices=CONFIG["model"].model_types, label="Model Type", value="Transformer" ) submit_btn = gr.Button("Submit Model", variant="primary") submission_output = gr.Markdown() def handle_submission(*args): is_valid, message = validate_model_submission(*args) if not is_valid: return f"❌ {message}" return "✅ Model submitted successfully!" submit_btn.click( handle_submission, inputs=[model_name, base_model, revision, precision, weight_type, model_type], outputs=submission_output ) return app def main(): # Initialize scheduler for data refresh scheduler = BackgroundScheduler() scheduler.add_job( data_manager.refresh_datasets, "interval", seconds=CONFIG["dataset"].refresh_interval ) scheduler.start() # Create and launch app app = create_app() app.queue(default_concurrency_limit=40).launch() if __name__ == "__main__": main()