mayafree commited on
Commit
9ea3e06
ยท
verified ยท
1 Parent(s): 1dde438

Upload app.py with huggingface_hub

Browse files
Files changed (1) hide show
  1. app.py +92 -43
app.py CHANGED
@@ -1,43 +1,92 @@
1
- # -*- coding: utf-8 -*-
2
- """๋‹ต๋ณ€ ๊ฒ€์ฆ๊ธฐ ๋ฆฌ๋”๋ณด๋“œ โ€” ์šด์˜ MAYAFREE
3
-
4
- ํ™”๋ฉด์€ index.html ์ด ์ „๋ถ€๋‹ค. gradio ๊ธฐ๋ณธ UI ๋ฅผ ์“ฐ์ง€ ์•Š๋Š”๋‹ค.
5
- ์„œ๋ฒ„๋Š” gradio ์˜ Server(FastAPI)๋ฅผ ์“ด๋‹ค โ€” Spaces ์˜ gradio SDK ์œ„์—์„œ ๋„๋Š” ๊ฐ€์žฅ ์–‡์€ ๊ธธ์ด๋‹ค.
6
-
7
- ๐Ÿ”‘ ํ‘œ๋Š” ํ•˜๋‚˜๋กœ ์„ธ์šฐ๋˜ **ใ€Œ๋ฐ›์€ ์ž๋ฃŒใ€๋ฅผ ์นธ์œผ๋กœ ๋‘”๋‹ค**.
8
- ์ž๋ฃŒ๋ฅผ ๋ฐ›์€ ๊ฒƒ๊ณผ ์•ˆ ๋ฐ›์€ ๊ฒƒ์ด ์„ž์—ฌ ์žˆ์œผ๋‹ˆ, ๊ทธ ์‚ฌ์‹ค์ด ํ‘œ ์•ˆ์— ๋ณด์—ฌ์•ผ ํ•œ๋‹ค.
9
-
10
- ๐Ÿ”ด ์ด ์ค„์ด ์—†์œผ๋ฉด Spaces ๋Š” app.py ๋ฅผ ์‹คํ–‰๋งŒ ํ•˜๊ณ  ๋๋‚œ๋‹ค(์„œ๋ฒ„๊ฐ€ ์•ˆ ๋œจ๊ณ  ๋กœ๊ทธ๋„ ๋นˆ๋‹ค).
11
- โ†’ ํŒŒ์ผ ๋งจ ์•„๋ž˜ app.launch()
12
- """
13
- import json
14
- import os
15
-
16
- from fastapi.responses import HTMLResponse, JSONResponse
17
- from gradio import Server as App
18
-
19
- HERE = os.path.dirname(os.path.abspath(__file__))
20
- app = App()
21
- _INDEX = None
22
-
23
-
24
- def board():
25
- return json.load(open(os.path.join(HERE, "leaderboard.json"), encoding="utf-8"))
26
-
27
-
28
- @app.get("/data")
29
- def data():
30
- """ํ™”๋ฉด์ด ์ฝ๋Š” ์œ ์ผํ•œ ์ž๋ฃŒ. ์‹ค์ธก๊ฐ’ ๊ทธ๋Œ€๋กœ ๋‚ด๋ณด๋‚ธ๋‹ค."""
31
- return JSONResponse(board())
32
-
33
-
34
- @app.get("/", response_class=HTMLResponse)
35
- async def index():
36
- global _INDEX
37
- if _INDEX is None:
38
- _INDEX = open(os.path.join(HERE, "index.html"), encoding="utf-8").read()
39
- return _INDEX
40
-
41
-
42
- if __name__ == "__main__":
43
- app.launch()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # -*- coding: utf-8 -*-
2
+ """๋‹ต๋ณ€ ๊ฒ€์ฆ๊ธฐ ๋ฆฌ๋”๋ณด๋“œ โ€” ์šด์˜ MAYAFREE
3
+
4
+ ํ™”๋ฉด์€ index.html ์ด ์ „๋ถ€๋‹ค. gradio ๊ธฐ๋ณธ UI ๋ฅผ ์“ฐ์ง€ ์•Š๋Š”๋‹ค.
5
+ ์„œ๋ฒ„๋Š” gradio ์˜ Server(FastAPI)๋ฅผ ์“ด๋‹ค โ€” Spaces ์˜ gradio SDK ์œ„์—์„œ ๋„๋Š” ๊ฐ€์žฅ ์–‡์€ ๊ธธ์ด๋‹ค.
6
+
7
+ ๐Ÿ”‘ ํ‘œ๋Š” ํ•˜๋‚˜๋กœ ์„ธ์šฐ๋˜ **ใ€Œ๋ฐ›์€ ์ž๋ฃŒใ€๋ฅผ ์นธ์œผ๋กœ ๋‘”๋‹ค**.
8
+ ์ž๋ฃŒ๋ฅผ ๋ฐ›์€ ๊ฒƒ๊ณผ ์•ˆ ๋ฐ›์€ ๊ฒƒ์ด ์„ž์—ฌ ์žˆ์œผ๋‹ˆ, ๊ทธ ์‚ฌ์‹ค์ด ํ‘œ ์•ˆ์— ๋ณด์—ฌ์•ผ ํ•œ๋‹ค.
9
+
10
+ ๐Ÿ”ด ์ด ์ค„์ด ์—†์œผ๋ฉด Spaces ๋Š” app.py ๋ฅผ ์‹คํ–‰๋งŒ ํ•˜๊ณ  ๋๋‚œ๋‹ค(์„œ๋ฒ„๊ฐ€ ์•ˆ ๋œจ๊ณ  ๋กœ๊ทธ๋„ ๋นˆ๋‹ค).
11
+ โ†’ ํŒŒ์ผ ๋งจ ์•„๋ž˜ app.launch()
12
+ """
13
+ import json
14
+ import os
15
+ import time
16
+ import uuid
17
+
18
+ from fastapi.responses import HTMLResponse, JSONResponse
19
+ from gradio import Server as App
20
+ from huggingface_hub import HfApi
21
+
22
+ HERE = os.path.dirname(os.path.abspath(__file__))
23
+ # ๐Ÿ”‘ ๋“ฑ์žฌ ์‹ ์ฒญ์„ ๋ฐ›๋Š”๋‹ค. ๋‚จ์ด ใ€Œ์šฐ๋ฆฌ ๊ฒƒ๋„ ์žฌ๋‹ฌ๋ผใ€๊ณ  ํ•˜๋Š” ์ˆœ๊ฐ„ ์ด ํ‘œ๋Š” ์—…๊ณ„ ํ‘œ์ค€์ด ๋œ๋‹ค.
24
+ # ๐Ÿ”ด ์—ฐ๋ฝ์ฒ˜๊ฐ€ ๋“ค์–ด์˜ค๋ฏ€๋กœ **๋น„๊ณต๊ฐœ ๋ฐ์ดํ„ฐ์…‹์—๋งŒ** ์ ๋Š”๋‹ค. ํ™”๋ฉด์—๋„ ๋กœ๊ทธ์—๋„ ๋‚จ๊ธฐ์ง€ ์•Š๋Š”๋‹ค.
25
+ SUB_REPO = os.environ.get("SUB_REPO", "mayafree/typed-decision-submissions")
26
+ SUB_TOKEN = os.environ.get("HF_TOKEN")
27
+ MAXLEN = {"system": 200, "org": 200, "contact": 200, "how_to_run": 4000, "notes": 4000}
28
+ app = App()
29
+ _INDEX = None
30
+
31
+
32
+ def board():
33
+ return json.load(open(os.path.join(HERE, "leaderboard.json"), encoding="utf-8"))
34
+
35
+
36
+ # ๐Ÿ”‘ ๋“ฑ์žฌ ์‹ ์ฒญ์„ ๋ฐ›๋Š”๋‹ค. ๋‚จ์ด ใ€Œ์šฐ๋ฆฌ ๊ฒƒ๋„ ์žฌ๋‹ฌ๋ผใ€๊ณ  ํ•˜๋Š” ์ˆœ๊ฐ„ ์ด ํ‘œ๋Š” ์—…๊ณ„ ํ‘œ์ค€์ด ๋œ๋‹ค.
37
+ # ๐Ÿ”ด ์—ฐ๋ฝ์ฒ˜๊ฐ€ ๋“ค์–ด์˜ค๋ฏ€๋กœ **๋น„๊ณต๊ฐœ ๋ฐ์ดํ„ฐ์…‹์—๋งŒ** ์ ๋Š”๋‹ค. ํ™”๋ฉด์—๋„ ๋กœ๊ทธ์—๋„ ๋‚จ๊ธฐ์ง€ ์•Š๋Š”๋‹ค.
38
+ SUB_REPO = os.environ.get("SUB_REPO", "mayafree/typed-decision-submissions")
39
+ SUB_TOKEN = os.environ.get("HF_TOKEN")
40
+ MAXLEN = {"system": 200, "org": 200, "contact": 200, "how_to_run": 4000, "notes": 4000}
41
+
42
+
43
+ def submit(system: str, org: str = "", contact: str = "",
44
+ how_to_run: str = "", notes: str = "", website: str = "") -> dict:
45
+ """๋“ฑ์žฌ ์‹ ์ฒญ์„ ๋น„๊ณต๊ฐœ ์ €์žฅ์†Œ์— ํ•œ ๊ฑด์”ฉ ์ ๋Š”๋‹ค.
46
+
47
+ ๐Ÿ”ด ํ•œ ๊ฑด๋‹น ํŒŒ์ผ ํ•˜๋‚˜๋กœ ์“ด๋‹ค โ€” ์ด์–ด๋ถ™์ด๋ฉด ๋™์‹œ ์‹ ์ฒญ์ด ์„œ๋กœ๋ฅผ ๋ฎ์–ด์“ด๋‹ค.
48
+ ๐Ÿ”ด ํ™”๋ฉดยท๋กœ๊ทธ์— ์—ฐ๋ฝ์ฒ˜๋ฅผ ๋‚จ๊ธฐ์ง€ ์•Š๋Š”๋‹ค.
49
+ """
50
+ if (website or "").strip():
51
+ return {"ok": True} # ์‚ฌ๋žŒ์€ ๋น„์›Œ ๋‘๋Š” ์นธ. ๊ฐ’์ด ์žˆ์œผ๋ฉด ๋ด‡ โ€” ๋ฐ›์€ ์ฒ™ํ•˜๊ณ  ๋ฒ„๋ฆฐ๋‹ค
52
+ d = {"system": (system or "").strip(), "org": (org or "").strip(),
53
+ "contact": (contact or "").strip(), "how_to_run": (how_to_run or "").strip(),
54
+ "notes": (notes or "").strip()}
55
+ if not d["system"] or not (d["how_to_run"] or d["notes"]):
56
+ return {"ok": False, "error": "need_system_and_how_to_run"}
57
+ for k, n in MAXLEN.items():
58
+ if len(d[k]) > n:
59
+ return {"ok": False, "error": "too_long:" + k}
60
+ if not SUB_TOKEN:
61
+ return {"ok": False, "error": "not_configured"}
62
+ d["ts"] = int(time.time()); d["source"] = "leaderboard"
63
+ name = "submissions/%d_%s.json" % (d["ts"], uuid.uuid4().hex[:8])
64
+ try:
65
+ HfApi(token=SUB_TOKEN).upload_file(
66
+ path_or_fileobj=json.dumps(d, ensure_ascii=False).encode("utf-8"),
67
+ path_in_repo=name, repo_id=SUB_REPO, repo_type="dataset",
68
+ commit_message="submission")
69
+ except Exception as e: # noqa: BLE001
70
+ return {"ok": False, "error": type(e).__name__}
71
+ return {"ok": True}
72
+
73
+
74
+ app.api(name="submit")(submit)
75
+
76
+
77
+ @app.get("/data")
78
+ def data():
79
+ """ํ™”๋ฉด์ด ์ฝ๋Š” ์œ ์ผํ•œ ์ž๋ฃŒ. ์‹ค์ธก๊ฐ’ ๊ทธ๋Œ€๋กœ ๋‚ด๋ณด๋‚ธ๋‹ค."""
80
+ return JSONResponse(board())
81
+
82
+
83
+ @app.get("/", response_class=HTMLResponse)
84
+ async def index():
85
+ global _INDEX
86
+ if _INDEX is None:
87
+ _INDEX = open(os.path.join(HERE, "index.html"), encoding="utf-8").read()
88
+ return _INDEX
89
+
90
+
91
+ if __name__ == "__main__":
92
+ app.launch()