Quazim0t0 commited on
Commit
0efb72a
·
verified ·
1 Parent(s): c0181f0

Update evaluation_queue.py

Browse files
Files changed (1) hide show
  1. evaluation_queue.py +108 -25
evaluation_queue.py CHANGED
@@ -68,23 +68,57 @@ class EvaluationQueue:
68
  # Query model info from the HuggingFace API
69
  model_info_obj = self.hf_api.model_info(model_id)
70
 
71
- # Check if model size information is available
 
 
 
72
  if hasattr(model_info_obj, 'safetensors') and model_info_obj.safetensors:
73
- # Calculate size in GB (divided by 1024^3)
74
- total_size_gb = sum(
75
- file.size for file in model_info_obj.safetensors.values()
76
- ) / (1024 * 1024 * 1024)
77
- elif hasattr(model_info_obj, 'siblings'):
78
- # Legacy method - calculate from file siblings
79
- total_size_gb = sum(
80
- sibling.size for sibling in model_info_obj.siblings
81
- if sibling.rfilename.endswith(('.bin', '.safetensors', '.pt'))
82
- ) / (1024 * 1024 * 1024)
83
- else:
84
- # Can't determine size
85
- return False, "Unable to determine model size. Please ensure model is under 14GB."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
86
 
87
- # Account for memory overhead (tokenizer, processing, etc.)
88
  estimated_ram_needed = total_size_gb * 1.3 # 30% overhead
89
 
90
  # Check against limit
@@ -92,11 +126,15 @@ class EvaluationQueue:
92
  return False, f"Model is too large (approximately {total_size_gb:.1f}GB, needs {estimated_ram_needed:.1f}GB RAM). Maximum allowed is {self.memory_limit_gb}GB."
93
 
94
  return True, f"Model size check passed ({total_size_gb:.1f}GB, estimated {estimated_ram_needed:.1f}GB RAM usage)"
95
-
96
  except Exception as e:
97
  print(f"Model size check error: {e}")
98
- # If we can't check, be cautious
99
- return False, f"Error checking model size: {str(e)}. Please ensure your model is under {self.memory_limit_gb}GB."
 
 
 
 
100
 
101
  def _process_queue(self):
102
  """Process the evaluation queue in a separate thread."""
@@ -809,6 +847,27 @@ def create_model_submission_ui(evaluation_queue, auth_manager, db_manager):
809
  gr.Blocks: Gradio Blocks component with model submission UI
810
  """
811
  with gr.Blocks() as submission_ui:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
812
  with gr.Tab("Submit Model"):
813
  gr.Markdown(f"""
814
  ### Model Size Restrictions
@@ -826,8 +885,7 @@ def create_model_submission_ui(evaluation_queue, auth_manager, db_manager):
826
 
827
  check_size_button = gr.Button("Check Model Size")
828
  size_check_result = gr.Markdown("")
829
-
830
- model_name_input = gr.Textbox(
831
  placeholder="Display name for your model",
832
  label="Model Name"
833
  )
@@ -862,6 +920,7 @@ def create_model_submission_ui(evaluation_queue, auth_manager, db_manager):
862
 
863
  submit_model_button = gr.Button("Submit for Evaluation")
864
  submission_status = gr.Markdown("")
 
865
 
866
  with gr.Tab("Evaluation Queue"):
867
  refresh_queue_button = gr.Button("Refresh Queue")
@@ -897,11 +956,14 @@ def create_model_submission_ui(evaluation_queue, auth_manager, db_manager):
897
  else:
898
  return f"❌ {message}"
899
  except Exception as e:
 
 
 
900
  return f"Error checking model size: {str(e)}"
901
 
902
  def refresh_benchmarks_handler():
903
  benchmarks = db_manager.get_benchmarks()
904
-
905
  # Format for dropdown - properly formatted to display names
906
  choices = []
907
  for b in benchmarks:
@@ -913,10 +975,8 @@ def create_model_submission_ui(evaluation_queue, auth_manager, db_manager):
913
 
914
  return gr.update(choices=choices)
915
 
916
- def submit_model_handler(model_id, model_name, model_description, model_parameters, model_tag, benchmark_id, request: gr.Request):
917
  # Check if user is logged in
918
- user = auth_manager.check_login(request)
919
-
920
  if not user:
921
  return "Please log in to submit a model."
922
 
@@ -958,6 +1018,9 @@ def create_model_submission_ui(evaluation_queue, auth_manager, db_manager):
958
  else:
959
  return message
960
  except Exception as e:
 
 
 
961
  return f"Error submitting model: {str(e)}"
962
 
963
  def refresh_queue_handler():
@@ -991,6 +1054,13 @@ def create_model_submission_ui(evaluation_queue, auth_manager, db_manager):
991
 
992
  return stats, eval_data, "No evaluation currently running", "Progress: 0%"
993
 
 
 
 
 
 
 
 
994
  # Connect event handlers
995
  check_size_button.click(
996
  fn=check_model_size_handler,
@@ -1012,7 +1082,8 @@ def create_model_submission_ui(evaluation_queue, auth_manager, db_manager):
1012
  model_description_input,
1013
  model_parameters_input,
1014
  model_tag_input,
1015
- benchmark_dropdown
 
1016
  ],
1017
  outputs=[submission_status]
1018
  )
@@ -1024,6 +1095,18 @@ def create_model_submission_ui(evaluation_queue, auth_manager, db_manager):
1024
  )
1025
 
1026
  # Initialize on load
 
 
 
 
 
 
 
 
 
 
 
 
1027
  submission_ui.load(
1028
  fn=refresh_benchmarks_handler,
1029
  inputs=[],
 
68
  # Query model info from the HuggingFace API
69
  model_info_obj = self.hf_api.model_info(model_id)
70
 
71
+ # Initialize total size
72
+ total_size_gb = 0
73
+
74
+ # Try different approaches to get model size based on API response structure
75
  if hasattr(model_info_obj, 'safetensors') and model_info_obj.safetensors:
76
+ # New API format with safetensors dict
77
+ for file_info in model_info_obj.safetensors.values():
78
+ if hasattr(file_info, 'size'):
79
+ total_size_gb += file_info.size / (1024 * 1024 * 1024)
80
+ elif isinstance(file_info, dict) and 'size' in file_info:
81
+ total_size_gb += file_info['size'] / (1024 * 1024 * 1024)
82
+
83
+ # Fallback to siblings method
84
+ if total_size_gb == 0 and hasattr(model_info_obj, 'siblings'):
85
+ for sibling in model_info_obj.siblings:
86
+ if hasattr(sibling, 'size'):
87
+ if sibling.rfilename.endswith(('.bin', '.safetensors', '.pt')):
88
+ total_size_gb += sibling.size / (1024 * 1024 * 1024)
89
+ elif isinstance(sibling, dict) and 'size' in sibling:
90
+ if sibling.get('rfilename', '').endswith(('.bin', '.safetensors', '.pt')):
91
+ total_size_gb += sibling['size'] / (1024 * 1024 * 1024)
92
+
93
+ # If we still couldn't determine size, try a reasonable guess based on model name
94
+ if total_size_gb == 0:
95
+ # Try to guess from model name (e.g., if it has "7b" in the name)
96
+ model_name = model_id.lower()
97
+ size_indicators = {
98
+ "1b": 1, "2b": 2, "3b": 3, "5b": 5, "7b": 7, "8b": 8,
99
+ "10b": 10, "13b": 13, "20b": 20, "30b": 30, "65b": 65, "70b": 70
100
+ }
101
+
102
+ for indicator, size in size_indicators.items():
103
+ if indicator in model_name.replace("-", "").replace("_", ""):
104
+ total_size_gb = size * 2 # Rough estimate: param count × 2 for size in GB
105
+ break
106
+
107
+ # If we still couldn't determine size, use a default
108
+ if total_size_gb == 0:
109
+ # Try direct API method
110
+ try:
111
+ print(f"Checking model size with direct method for {model_id}")
112
+ # Print out the entire structure for debugging
113
+ print(f"Model info: {model_info_obj.__dict__}")
114
+
115
+ # Default to a conservative estimate
116
+ total_size_gb = 5 # Assume a 5GB model as default
117
+ except Exception as e:
118
+ print(f"Direct size check failed: {e}")
119
+ return True, "Unable to determine model size accurately, but allowing submission with caution"
120
 
121
+ # Account for memory overhead
122
  estimated_ram_needed = total_size_gb * 1.3 # 30% overhead
123
 
124
  # Check against limit
 
126
  return False, f"Model is too large (approximately {total_size_gb:.1f}GB, needs {estimated_ram_needed:.1f}GB RAM). Maximum allowed is {self.memory_limit_gb}GB."
127
 
128
  return True, f"Model size check passed ({total_size_gb:.1f}GB, estimated {estimated_ram_needed:.1f}GB RAM usage)"
129
+
130
  except Exception as e:
131
  print(f"Model size check error: {e}")
132
+ # Log more details for debugging
133
+ import traceback
134
+ traceback.print_exc()
135
+
136
+ # Allow submission with warning
137
+ return True, f"Warning: Could not verify model size ({str(e)}). Please ensure your model is under {self.memory_limit_gb}GB."
138
 
139
  def _process_queue(self):
140
  """Process the evaluation queue in a separate thread."""
 
847
  gr.Blocks: Gradio Blocks component with model submission UI
848
  """
849
  with gr.Blocks() as submission_ui:
850
+ # Store user authentication state
851
+ user_state = gr.State(None)
852
+
853
+ # Check authentication on load
854
+ def check_auth_on_load(request: gr.Request):
855
+ if request:
856
+ # Special handling for HF Spaces OAuth
857
+ if 'SPACE_ID' in os.environ:
858
+ username = request.headers.get("HF-User")
859
+ if username:
860
+ user = db_manager.get_user_by_username(username)
861
+ if user:
862
+ print(f"User authenticated via HF Spaces OAuth: {username}")
863
+ return user
864
+ else:
865
+ # Standard token-based auth
866
+ user = auth_manager.check_login(request)
867
+ if user:
868
+ return user
869
+ return None
870
+
871
  with gr.Tab("Submit Model"):
872
  gr.Markdown(f"""
873
  ### Model Size Restrictions
 
885
 
886
  check_size_button = gr.Button("Check Model Size")
887
  size_check_result = gr.Markdown("")
888
+ model_name_input = gr.Textbox(
 
889
  placeholder="Display name for your model",
890
  label="Model Name"
891
  )
 
920
 
921
  submit_model_button = gr.Button("Submit for Evaluation")
922
  submission_status = gr.Markdown("")
923
+ auth_message = gr.Markdown("")
924
 
925
  with gr.Tab("Evaluation Queue"):
926
  refresh_queue_button = gr.Button("Refresh Queue")
 
956
  else:
957
  return f"❌ {message}"
958
  except Exception as e:
959
+ print(f"Model size check error: {e}")
960
+ import traceback
961
+ traceback.print_exc()
962
  return f"Error checking model size: {str(e)}"
963
 
964
  def refresh_benchmarks_handler():
965
  benchmarks = db_manager.get_benchmarks()
966
+
967
  # Format for dropdown - properly formatted to display names
968
  choices = []
969
  for b in benchmarks:
 
975
 
976
  return gr.update(choices=choices)
977
 
978
+ def submit_model_handler(model_id, model_name, model_description, model_parameters, model_tag, benchmark_id, user):
979
  # Check if user is logged in
 
 
980
  if not user:
981
  return "Please log in to submit a model."
982
 
 
1018
  else:
1019
  return message
1020
  except Exception as e:
1021
+ print(f"Error submitting model: {str(e)}")
1022
+ import traceback
1023
+ traceback.print_exc()
1024
  return f"Error submitting model: {str(e)}"
1025
 
1026
  def refresh_queue_handler():
 
1054
 
1055
  return stats, eval_data, "No evaluation currently running", "Progress: 0%"
1056
 
1057
+ # Update authentication status
1058
+ def update_auth_message(user):
1059
+ if user:
1060
+ return f"Logged in as {user['username']}"
1061
+ else:
1062
+ return "Please log in to submit a model."
1063
+
1064
  # Connect event handlers
1065
  check_size_button.click(
1066
  fn=check_model_size_handler,
 
1082
  model_description_input,
1083
  model_parameters_input,
1084
  model_tag_input,
1085
+ benchmark_dropdown,
1086
+ user_state
1087
  ],
1088
  outputs=[submission_status]
1089
  )
 
1095
  )
1096
 
1097
  # Initialize on load
1098
+ submission_ui.load(
1099
+ fn=check_auth_on_load,
1100
+ inputs=[],
1101
+ outputs=[user_state]
1102
+ )
1103
+
1104
+ submission_ui.load(
1105
+ fn=lambda user: update_auth_message(user),
1106
+ inputs=[user_state],
1107
+ outputs=[auth_message]
1108
+ )
1109
+
1110
  submission_ui.load(
1111
  fn=refresh_benchmarks_handler,
1112
  inputs=[],