Spaces:
Sleeping
Sleeping
""" | |
Updated create_model_submission_ui function that properly displays benchmark names in dropdown. | |
Replace this function in your evaluation_queue.py file. | |
""" | |
def create_model_submission_ui(evaluation_queue, auth_manager, db_manager): | |
"""Create the model submission UI components. | |
Args: | |
evaluation_queue: Evaluation queue instance | |
auth_manager: Authentication manager instance | |
db_manager: Database manager instance | |
Returns: | |
gr.Blocks: Gradio Blocks component with model submission UI | |
""" | |
with gr.Blocks() as submission_ui: | |
with gr.Tab("Submit Model"): | |
gr.Markdown(f""" | |
### Model Size Restrictions | |
Models must fit within {evaluation_queue.memory_limit_gb}GB of RAM for evaluation. | |
Large models will be rejected to ensure all evaluations can complete successfully. | |
""", elem_classes=["info-text"]) | |
with gr.Row(): | |
with gr.Column(scale=2): | |
model_id_input = gr.Textbox( | |
placeholder="HuggingFace model ID (e.g., 'gpt2', 'facebook/opt-350m')", | |
label="Model ID" | |
) | |
check_size_button = gr.Button("Check Model Size") | |
size_check_result = gr.Markdown("") | |
model_name_input = gr.Textbox( | |
placeholder="Display name for your model", | |
label="Model Name" | |
) | |
model_description_input = gr.Textbox( | |
placeholder="Brief description of your model", | |
label="Description", | |
lines=3 | |
) | |
model_parameters_input = gr.Number( | |
label="Number of Parameters (billions)", | |
precision=2 | |
) | |
with gr.Column(scale=1): | |
model_tag_input = gr.Dropdown( | |
choices=evaluation_queue.model_tags, | |
label="Model Tag", | |
info="Select one category that best describes your model" | |
) | |
# Fixed benchmark dropdown to properly show names | |
benchmark_dropdown = gr.Dropdown( | |
label="Benchmark", | |
info="Select a benchmark to evaluate your model on", | |
choices=[("none", "Loading benchmarks...")], | |
value=None | |
) | |
refresh_benchmarks_button = gr.Button("Refresh Benchmarks") | |
submit_model_button = gr.Button("Submit for Evaluation") | |
submission_status = gr.Markdown("") | |
with gr.Tab("Evaluation Queue"): | |
refresh_queue_button = gr.Button("Refresh Queue") | |
with gr.Row(): | |
with gr.Column(scale=1): | |
queue_stats = gr.JSON( | |
label="Queue Statistics" | |
) | |
with gr.Column(scale=2): | |
queue_status = gr.Dataframe( | |
headers=["ID", "Model", "Benchmark", "Status", "Submitted"], | |
label="Recent Evaluations" | |
) | |
with gr.Row(visible=True) as progress_container: | |
with gr.Column(): | |
current_eval_info = gr.Markdown("No evaluation currently running") | |
# Use a simple text display for progress instead of Progress component | |
progress_display = gr.Markdown("Progress: 0%") | |
# Event handlers | |
def check_model_size_handler(model_id): | |
if not model_id: | |
return "Please enter a HuggingFace model ID." | |
try: | |
will_fit, message = evaluation_queue.check_model_size(model_id) | |
if will_fit: | |
return f"β {message}" | |
else: | |
return f"β {message}" | |
except Exception as e: | |
return f"Error checking model size: {str(e)}" | |
def refresh_benchmarks_handler(): | |
benchmarks = db_manager.get_benchmarks() | |
# Format for dropdown - properly formatted to display names | |
choices = [] | |
for b in benchmarks: | |
# Add as tuple of (id, name) to ensure proper display | |
choices.append((str(b["id"]), b["name"])) | |
if not choices: | |
choices = [("none", "No benchmarks available - add some first")] | |
return gr.update(choices=choices) | |
def submit_model_handler(model_id, model_name, model_description, model_parameters, model_tag, benchmark_id, request: gr.Request): | |
# Check if user is logged in | |
user = auth_manager.check_login(request) | |
if not user: | |
return "Please log in to submit a model." | |
if not model_id or not model_name or not model_tag or not benchmark_id: | |
return "Please fill in all required fields." | |
if benchmark_id == "none": | |
return "Please select a valid benchmark." | |
try: | |
# Check if model will fit in RAM | |
will_fit, size_message = evaluation_queue.check_model_size(model_id) | |
if not will_fit: | |
return f"β {size_message}" | |
# Add model to database | |
model_db_id = db_manager.add_model( | |
name=model_name, | |
hf_model_id=model_id, | |
user_id=user["id"], | |
tag=model_tag, | |
parameters=str(model_parameters) if model_parameters else None, | |
description=model_description | |
) | |
if not model_db_id: | |
return "Failed to add model to database." | |
# Submit for evaluation | |
eval_id, message = evaluation_queue.submit_evaluation( | |
model_id=model_db_id, | |
benchmark_id=benchmark_id, | |
user_id=user["id"] | |
) | |
if eval_id: | |
return f"β Model submitted successfully. {size_message}\nEvaluation ID: {eval_id}" | |
else: | |
return message | |
except Exception as e: | |
return f"Error submitting model: {str(e)}" | |
def refresh_queue_handler(): | |
# Get queue statistics | |
stats = evaluation_queue.get_queue_status() | |
# Get recent evaluations (all statuses, limited to 20) | |
evals = db_manager.get_evaluation_results(limit=20) | |
# Format for dataframe | |
eval_data = [] | |
for eval in evals: | |
eval_data.append([ | |
eval["id"], | |
eval["model_name"], | |
eval["benchmark_name"], | |
eval["status"], | |
eval["submitted_at"] | |
]) | |
# Also update progress display | |
current_eval, progress = evaluation_queue.get_current_progress() | |
if current_eval: | |
model_info = db_manager.get_model(current_eval['model_id']) | |
benchmark_info = db_manager.get_benchmark(current_eval['benchmark_id']) | |
if model_info and benchmark_info: | |
eval_info = f"**Currently Evaluating:** {model_info['name']} on {benchmark_info['name']}" | |
progress_text = f"Progress: {progress}%" | |
return stats, eval_data, eval_info, progress_text | |
return stats, eval_data, "No evaluation currently running", "Progress: 0%" | |
# Connect event handlers | |
check_size_button.click( | |
fn=check_model_size_handler, | |
inputs=[model_id_input], | |
outputs=[size_check_result] | |
) | |
refresh_benchmarks_button.click( | |
fn=refresh_benchmarks_handler, | |
inputs=[], | |
outputs=[benchmark_dropdown] | |
) | |
submit_model_button.click( | |
fn=submit_model_handler, | |
inputs=[ | |
model_id_input, | |
model_name_input, | |
model_description_input, | |
model_parameters_input, | |
model_tag_input, | |
benchmark_dropdown | |
], | |
outputs=[submission_status] | |
) | |
refresh_queue_button.click( | |
fn=refresh_queue_handler, | |
inputs=[], | |
outputs=[queue_stats, queue_status, current_eval_info, progress_display] | |
) | |
# Initialize on load | |
submission_ui.load( | |
fn=refresh_benchmarks_handler, | |
inputs=[], | |
outputs=[benchmark_dropdown] | |
) | |
submission_ui.load( | |
fn=refresh_queue_handler, | |
inputs=[], | |
outputs=[queue_stats, queue_status, current_eval_info, progress_display] | |
) | |
return submission_ui |