Maharshi Gor
commited on
Commit
·
09f6a16
1
Parent(s):
bd9e200
Duplicate submission check
Browse files- 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"
|