Maharshi Gor commited on
Commit
20b6852
·
1 Parent(s): 09f6a16

Fix for dup sub

Browse files
Files changed (1) hide show
  1. src/submission/submit.py +15 -15
src/submission/submit.py CHANGED
@@ -17,15 +17,14 @@ from shared.workflows.structs import TossupWorkflow, Workflow
17
  from submission.structs import CompetitionType, Submission, SubmissionStatus, SubmissionType
18
 
19
 
20
- def make_unique_submission_key(submission: dict) -> str:
21
- stype = submission["submission_type"]
22
  if stype == "simple_workflow":
23
- workflow = submission["workflow"]
24
- workflow["steps"].sort(key=lambda x: x["id"])
25
- wstr = json.dumps(workflow, sort_keys=True, ensure_ascii=False)
26
  return f"workflow:{wstr}"
27
  elif stype == "hf_pipeline":
28
- return f"hf:{submission['model_name']}"
29
  else:
30
  raise ValueError(f"Unsupported submission type {stype}")
31
 
@@ -213,17 +212,17 @@ def submit_agent(
213
  if len(get_user_submissions_today(username, competition_type)) >= DAILY_SUBMISSION_LIMIT_PER_USER:
214
  time_str = get_time_until_next_submission()
215
  return styled_error(
216
- f"Daily submission limit of {DAILY_SUBMISSION_LIMIT_PER_USER} reached. Please try again in \n {time_str}."
217
  )
218
 
219
  if f"{username}/{model_name}" in get_user_submission_names(competition_type, profile):
220
  return styled_error(
221
- f"Submission Error!<br>'{model_name}' already exists. Please use a different name for your submission."
222
  )
223
 
224
  is_valid, error_msg = validate_model_name(model_name)
225
  if not is_valid:
226
- return styled_error(f"Submission Error! Invalid model name '{model_name}'.<br>{error_msg}")
227
 
228
  try:
229
  if submission_type == "simple_workflow":
@@ -247,13 +246,14 @@ def submit_agent(
247
  # Convert to dictionary format
248
  submission_dict = submission.to_dict()
249
 
250
- user_submissions = [s.model_dump() for s in get_user_submissions(username, competition_type)]
251
- unq_keys = {make_unique_submission_key(s): s["model_name"] for s in user_submissions}
252
- submission_key = make_unique_submission_key(submission_dict)
253
  if submission_key in unq_keys:
254
- similar_model = unq_keys[submission_key]
255
  return styled_error(
256
- f"Duplicate submission!<br> You submission is equivalent to your previous submission '{similar_model}'."
 
257
  )
258
 
259
  # Create output directory path
@@ -275,7 +275,7 @@ def submit_agent(
275
  )
276
 
277
  return styled_message(
278
- f"Successfully submitted {competition_type} {submission_type} model!<br>"
279
  f"Submission name: {username}/{model_name}<br>"
280
  f"Please wait for up to one day for the model to show up on the leaderboard."
281
  )
 
17
  from submission.structs import CompetitionType, Submission, SubmissionStatus, SubmissionType
18
 
19
 
20
+ def make_unique_submission_key(submission: Submission) -> str:
21
+ stype = submission.submission_type
22
  if stype == "simple_workflow":
23
+ workflow = submission.workflow
24
+ wstr = json.dumps(workflow.model_dump(), sort_keys=True, ensure_ascii=False)
 
25
  return f"workflow:{wstr}"
26
  elif stype == "hf_pipeline":
27
+ return f"hf:{submission.model_name}"
28
  else:
29
  raise ValueError(f"Unsupported submission type {stype}")
30
 
 
212
  if len(get_user_submissions_today(username, competition_type)) >= DAILY_SUBMISSION_LIMIT_PER_USER:
213
  time_str = get_time_until_next_submission()
214
  return styled_error(
215
+ f"‼️ Daily submission limit of {DAILY_SUBMISSION_LIMIT_PER_USER} reached. <br>⏳ Please try again in \n {time_str}."
216
  )
217
 
218
  if f"{username}/{model_name}" in get_user_submission_names(competition_type, profile):
219
  return styled_error(
220
+ f"⚠️ Submission Error!<br>Name '{username}/{model_name}' already exists. Please use a different name for your submission."
221
  )
222
 
223
  is_valid, error_msg = validate_model_name(model_name)
224
  if not is_valid:
225
+ return styled_error(f"🙅🏻‍♂️ Submission Error! Invalid model name '{model_name}'.<br>{error_msg}")
226
 
227
  try:
228
  if submission_type == "simple_workflow":
 
246
  # Convert to dictionary format
247
  submission_dict = submission.to_dict()
248
 
249
+ user_submissions = get_user_submissions(username, competition_type)
250
+ unq_keys = {make_unique_submission_key(s): s for s in user_submissions}
251
+ submission_key = make_unique_submission_key(submission)
252
  if submission_key in unq_keys:
253
+ sim_submission = unq_keys[submission_key]
254
  return styled_error(
255
+ f"⚠️ Duplicate submission!<br> You submission is equivalent to your previous submission "
256
+ f"'{sim_submission.model_name}'."
257
  )
258
 
259
  # Create output directory path
 
275
  )
276
 
277
  return styled_message(
278
+ f"Successfully submitted {competition_type} {submission_type} model!<br>"
279
  f"Submission name: {username}/{model_name}<br>"
280
  f"Please wait for up to one day for the model to show up on the leaderboard."
281
  )