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

Duplicate submission check

Browse files
Files changed (1) hide show
  1. src/submission/submit.py +22 -0
src/submission/submit.py CHANGED
@@ -17,6 +17,19 @@ from shared.workflows.structs import TossupWorkflow, Workflow
17
  from submission.structs import CompetitionType, Submission, SubmissionStatus, SubmissionType
18
 
19
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20
  def get_user_submissions(username: str, competition_type: str, pattern: str = None) -> list[Submission]:
21
  """Get all submissions for a user."""
22
  out_dir = f"{LOCAL_REQUESTS_PATH}/{username}"
@@ -234,6 +247,15 @@ def submit_agent(
234
  # Convert to dictionary format
235
  submission_dict = submission.to_dict()
236
 
 
 
 
 
 
 
 
 
 
237
  # Create output directory path
238
 
239
  rel_filepath = f"{username}/{submission.id}.json"
 
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
+
32
+
33
  def get_user_submissions(username: str, competition_type: str, pattern: str = None) -> list[Submission]:
34
  """Get all submissions for a user."""
35
  out_dir = f"{LOCAL_REQUESTS_PATH}/{username}"
 
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
260
 
261
  rel_filepath = f"{username}/{submission.id}.json"