|
""" |
|
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" |
|
) |
|
|
|
|
|
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") |
|
|
|
progress_display = gr.Markdown("Progress: 0%") |
|
|
|
|
|
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() |
|
|
|
|
|
choices = [] |
|
for b in benchmarks: |
|
|
|
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): |
|
|
|
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: |
|
|
|
will_fit, size_message = evaluation_queue.check_model_size(model_id) |
|
|
|
if not will_fit: |
|
return f"❌ {size_message}" |
|
|
|
|
|
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." |
|
|
|
|
|
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(): |
|
|
|
stats = evaluation_queue.get_queue_status() |
|
|
|
|
|
evals = db_manager.get_evaluation_results(limit=20) |
|
|
|
|
|
eval_data = [] |
|
for eval in evals: |
|
eval_data.append([ |
|
eval["id"], |
|
eval["model_name"], |
|
eval["benchmark_name"], |
|
eval["status"], |
|
eval["submitted_at"] |
|
]) |
|
|
|
|
|
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%" |
|
|
|
|
|
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] |
|
) |
|
|
|
|
|
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 |