lewtun HF staff commited on
Commit
a557d54
β€’
1 Parent(s): 6e384b2
Files changed (5) hide show
  1. .gitignore +141 -0
  2. app.py +27 -0
  3. requirements.txt +2 -0
  4. schema.json +61 -0
  5. validate.py +34 -0
.gitignore ADDED
@@ -0,0 +1,141 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ share/python-wheels/
24
+ *.egg-info/
25
+ .installed.cfg
26
+ *.egg
27
+ MANIFEST
28
+
29
+ # PyInstaller
30
+ # Usually these files are written by a python script from a template
31
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
32
+ *.manifest
33
+ *.spec
34
+
35
+ # Installer logs
36
+ pip-log.txt
37
+ pip-delete-this-directory.txt
38
+
39
+ # Unit test / coverage reports
40
+ htmlcov/
41
+ .tox/
42
+ .nox/
43
+ .coverage
44
+ .coverage.*
45
+ .cache
46
+ nosetests.xml
47
+ coverage.xml
48
+ *.cover
49
+ *.py,cover
50
+ .hypothesis/
51
+ .pytest_cache/
52
+ cover/
53
+
54
+ # Translations
55
+ *.mo
56
+ *.pot
57
+
58
+ # Django stuff:
59
+ *.log
60
+ local_settings.py
61
+ db.sqlite3
62
+ db.sqlite3-journal
63
+
64
+ # Flask stuff:
65
+ instance/
66
+ .webassets-cache
67
+
68
+ # Scrapy stuff:
69
+ .scrapy
70
+
71
+ # Sphinx documentation
72
+ docs/_build/
73
+
74
+ # PyBuilder
75
+ .pybuilder/
76
+ target/
77
+
78
+ # Jupyter Notebook
79
+ .ipynb_checkpoints
80
+
81
+ # IPython
82
+ profile_default/
83
+ ipython_config.py
84
+
85
+ # pyenv
86
+ # For a library or package, you might want to ignore these files since the code is
87
+ # intended to run in multiple environments; otherwise, check them in:
88
+ # .python-version
89
+
90
+ # pipenv
91
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
92
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
93
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
94
+ # install all needed dependencies.
95
+ #Pipfile.lock
96
+
97
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow
98
+ __pypackages__/
99
+
100
+ # Celery stuff
101
+ celerybeat-schedule
102
+ celerybeat.pid
103
+
104
+ # SageMath parsed files
105
+ *.sage.py
106
+
107
+ # Environments
108
+ .env
109
+ .venv
110
+ env/
111
+ venv/
112
+ ENV/
113
+ env.bak/
114
+ venv.bak/
115
+
116
+ # Spyder project settings
117
+ .spyderproject
118
+ .spyproject
119
+
120
+ # Rope project settings
121
+ .ropeproject
122
+
123
+ # mkdocs documentation
124
+ /site
125
+
126
+ # mypy
127
+ .mypy_cache/
128
+ .dmypy.json
129
+ dmypy.json
130
+
131
+ # Pyre type checker
132
+ .pyre/
133
+
134
+ # pytype static type analyzer
135
+ .pytype/
136
+
137
+ # Cython debug symbols
138
+ cython_debug/
139
+
140
+ # Secrets
141
+ .env
app.py ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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:
18
+ data = str(uploaded_file.read(), "utf-8")
19
+ json_data = json.loads(data)
20
+
21
+ token = st.text_input("API token", type="password")
22
+
23
+ submit_button = st.form_submit_button("Submit")
24
+
25
+ validate_submission(json_data)
26
+ user_info = whoami(token)
27
+ user_name = user_info["name"]
requirements.txt ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ huggingface-hub==0.2.1
2
+ python-dotenv
schema.json ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "title": "GEMSchema",
3
+ "description": "The default GEM schema",
4
+ "type": "object",
5
+ "properties": {
6
+ "submission_name": {
7
+ "title": "Submission Name",
8
+ "type": "string"
9
+ },
10
+ "param_count": {
11
+ "title": "Param Count",
12
+ "type": "integer"
13
+ },
14
+ "description": {
15
+ "title": "Description",
16
+ "default": "An optional brief description of the system that will be shown on the website",
17
+ "type": "string"
18
+ },
19
+ "tasks": {
20
+ "title": "Tasks",
21
+ "type": "object",
22
+ "additionalProperties": {
23
+ "$ref": "#/definitions/Task"
24
+ }
25
+ }
26
+ },
27
+ "required": [
28
+ "submission_name",
29
+ "param_count",
30
+ "tasks"
31
+ ],
32
+ "definitions": {
33
+ "Task": {
34
+ "title": "Task",
35
+ "type": "object",
36
+ "properties": {
37
+ "values": {
38
+ "title": "Values",
39
+ "type": "array",
40
+ "items": {
41
+ "type": "string"
42
+ }
43
+ },
44
+ "keys": {
45
+ "title": "Keys",
46
+ "default": [
47
+ "schema_guided_dialog-test-9585",
48
+ "schema_guided_dialog-test-9585"
49
+ ],
50
+ "type": "array",
51
+ "items": {
52
+ "type": "string"
53
+ }
54
+ }
55
+ },
56
+ "required": [
57
+ "values"
58
+ ]
59
+ }
60
+ }
61
+ }
validate.py ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json
2
+ import streamlit as st
3
+
4
+ import jsonschema
5
+
6
+
7
+ def get_schema():
8
+ """This function loads the given schema available"""
9
+ with open("schema.json", "r", encoding="utf8") as file:
10
+ schema = json.load(file)
11
+ return schema
12
+
13
+
14
+ def validate_json(json_data):
15
+ execute_api_schema = get_schema()
16
+ try:
17
+ jsonschema.validate(instance=json_data, schema=execute_api_schema)
18
+ except jsonschema.exceptions.ValidationError as err:
19
+ err = "Submission does not match GEM schema!"
20
+ return False, err
21
+
22
+ message = "Submission matches GEM schema!"
23
+ return True, message
24
+
25
+
26
+ def validate_submission(submission_data):
27
+ is_valid, message = validate_json(submission_data)
28
+
29
+ if is_valid:
30
+ st.write("All submission files validated! ✨ πŸš€ ✨")
31
+ st.write("Now you can make a submission πŸ€—")
32
+ else:
33
+ st.write(message)
34
+ st.write("Please fix the submission files πŸ™ˆ")