lewtun HF staff commited on
Commit
c00ae85
1 Parent(s): a557d54

Add AutoNLP trigger

Browse files
Files changed (4) hide show
  1. .gitignore +4 -1
  2. app.py +71 -4
  3. requirements.txt +3 -2
  4. validate.py +1 -1
.gitignore CHANGED
@@ -138,4 +138,7 @@ dmypy.json
138
  cython_debug/
139
 
140
  # Secrets
141
- .env
 
 
 
 
138
  cython_debug/
139
 
140
  # Secrets
141
+ .env
142
+
143
+ # Submissions
144
+ submission_repo/
app.py CHANGED
@@ -1,17 +1,32 @@
1
- import streamlit as st
2
  import json
3
- from validate import validate_submission
4
- from huggingface_hub import whoami, create_repo, Repository
5
  import os
 
 
 
 
6
  from pathlib import Path
 
 
7
  from dotenv import load_dotenv
 
 
 
8
 
9
  if Path(".env").is_file():
10
  load_dotenv(".env")
11
 
12
- hf_token = os.getenv("HF_TOKEN")
 
 
 
 
 
 
 
13
 
14
  with st.form(key="form"):
 
 
15
  uploaded_file = st.file_uploader("Upload a submission.json file", type=["json"])
16
 
17
  if uploaded_file is not None:
@@ -25,3 +40,55 @@ with st.form(key="form"):
25
  validate_submission(json_data)
26
  user_info = whoami(token)
27
  user_name = user_info["name"]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  import json
 
 
2
  import os
3
+ import re
4
+ import shutil
5
+ import subprocess
6
+ from datetime import datetime
7
  from pathlib import Path
8
+
9
+ import streamlit as st
10
  from dotenv import load_dotenv
11
+ from huggingface_hub import Repository, whoami
12
+
13
+ from validate import validate_submission
14
 
15
  if Path(".env").is_file():
16
  load_dotenv(".env")
17
 
18
+ HF_TOKEN = os.getenv("HF_TOKEN")
19
+
20
+ # AutoNLP login
21
+ autonlp_login = subprocess.run(["autonlp", "login", f"--api-key {HF_TOKEN}"], stdout=subprocess.PIPE)
22
+ if autonlp_login.returncode == -1:
23
+ raise Exception(f"AutoNLP login failed with return code {autonlp_login.returncode}")
24
+
25
+ LOCAL_REPO = "submission_repo"
26
 
27
  with st.form(key="form"):
28
+ # Flush local repo
29
+ shutil.rmtree(LOCAL_REPO, ignore_errors=True)
30
  uploaded_file = st.file_uploader("Upload a submission.json file", type=["json"])
31
 
32
  if uploaded_file is not None:
 
40
  validate_submission(json_data)
41
  user_info = whoami(token)
42
  user_name = user_info["name"]
43
+ submission_name = json_data["submission_name"]
44
+
45
+ # Create submission dataset under benchmarks ORG
46
+ dataset_repo_url = f"https://huggingface.co/datasets/benchmarks/gem-{user_name}"
47
+ repo = Repository(
48
+ local_dir=LOCAL_REPO, clone_from=dataset_repo_url, repo_type="dataset", private=True, use_auth_token=HF_TOKEN
49
+ )
50
+ submission_metadata = {"benchmark": "gem", "type": "prediction", "submission_name": submission_name}
51
+ repo.repocard_metadata_save(submission_metadata)
52
+
53
+ with open(f"{LOCAL_REPO}/submission.json", "w", encoding="utf-8") as f:
54
+ json.dump(json_data, f)
55
+
56
+ # TODO: add informative commit msg
57
+ commit_url = repo.push_to_hub()
58
+ if commit_url is not None:
59
+ commit_sha = commit_url.split("/")[-1]
60
+ else:
61
+ commit_sha = repo.git_head_commit_url().split("/")[-1]
62
+
63
+ submission_time = str(int(datetime.now().timestamp()))
64
+ submission_id = submission_name + "__" + commit_sha + "__" + submission_time
65
+ process = subprocess.run(
66
+ [
67
+ "autonlp",
68
+ "benchmark",
69
+ "--eval_name",
70
+ "gem",
71
+ "--dataset",
72
+ "GEM/references",
73
+ "--submission",
74
+ f"gem-{user_name}",
75
+ "--submission_id",
76
+ f"{submission_id}",
77
+ ],
78
+ stdout=subprocess.PIPE,
79
+ )
80
+ if process.returncode == -1:
81
+ st.write("Error laucnhing AutoNLP job")
82
+ else:
83
+ try:
84
+ match_job_id = re.search(r"# (\d+)", process.stdout.decode("utf-8"))
85
+ job_id = match_job_id.group(1)
86
+ st.write(f"Successfully launched evaluation job #{job_id} for submission {submission_name}!")
87
+ except Exception as e:
88
+ st.write(f"Could not extract AutoNLP job ID due to error: {e}")
89
+
90
+ st.write(json_data["submission_name"])
91
+ st.write(commit_sha)
92
+
93
+ # Flush local repo
94
+ shutil.rmtree(LOCAL_REPO, ignore_errors=True)
requirements.txt CHANGED
@@ -1,2 +1,3 @@
1
- huggingface-hub==0.2.1
2
- python-dotenv
 
 
1
+ # huggingface-hub==0.2.1
2
+ python-dotenv
3
+ autonlp>=0.3.4
validate.py CHANGED
@@ -1,7 +1,7 @@
1
  import json
2
- import streamlit as st
3
 
4
  import jsonschema
 
5
 
6
 
7
  def get_schema():
 
1
  import json
 
2
 
3
  import jsonschema
4
+ import streamlit as st
5
 
6
 
7
  def get_schema():