Spaces:
Paused
Paused
update app
Browse files
app.py
CHANGED
@@ -1,15 +1,18 @@
|
|
|
|
1 |
import gradio as gr
|
2 |
import pandas as pd
|
3 |
import random
|
4 |
import openai
|
5 |
import os
|
6 |
import requests
|
7 |
-
from datetime import datetime, timedelta, timezone
|
8 |
-
from enum import Enum
|
9 |
import sqlite3
|
10 |
import string
|
11 |
import hashlib
|
12 |
import dotenv
|
|
|
|
|
|
|
|
|
13 |
|
14 |
dotenv.load_dotenv()
|
15 |
openai_api_key = os.getenv("OPENAI_API_KEY")
|
@@ -18,19 +21,43 @@ discord_webhook_url_easy = os.getenv("DISCORD_WEBHOOK_URL_EASY")
|
|
18 |
|
19 |
secret_key = os.getenv("CTF_SECRET_KEY", "ctf_secret_key")
|
20 |
hard_challenge_secret = os.getenv("HARD_CHALLENGE_SECRET", "hard_challenge_secret")
|
21 |
-
|
22 |
-
DB_FILE = "./data.db"
|
23 |
-
db = sqlite3.connect(DB_FILE)
|
24 |
-
|
25 |
|
26 |
class Env(str, Enum):
|
27 |
PLAYGROUND = "playground"
|
28 |
-
CHALLENGE_EASY = "
|
29 |
-
CHALLENGE_HARD = "
|
30 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
31 |
|
32 |
# Create table if it doesn't already exist
|
33 |
def create_tables():
|
|
|
34 |
for level in [Env.PLAYGROUND, Env.CHALLENGE_EASY, Env.CHALLENGE_HARD]:
|
35 |
try:
|
36 |
db.execute(f"SELECT * FROM {level.value}").fetchall()
|
@@ -48,8 +75,10 @@ def create_tables():
|
|
48 |
|
49 |
# Add review to the db
|
50 |
def add_review_db(level: str, name: str, feedback: str, summary: str):
|
|
|
51 |
db = sqlite3.connect(DB_FILE)
|
52 |
-
db.
|
|
|
53 |
f"INSERT INTO {level} (name, feedback, summary) VALUES (?, ?, ?)",
|
54 |
(name, feedback, summary),
|
55 |
)
|
@@ -129,11 +158,14 @@ def summarize_feedback(rows: list[list[str]], env: Env, username: str) -> str:
|
|
129 |
|
130 |
prompt = f"Read all received user feedback and summarize three most positive comments:\n{text}"
|
131 |
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
|
|
|
|
|
|
137 |
|
138 |
add_review_db(env.value, user, feedback, summary)
|
139 |
|
|
|
1 |
+
import huggingface_hub
|
2 |
import gradio as gr
|
3 |
import pandas as pd
|
4 |
import random
|
5 |
import openai
|
6 |
import os
|
7 |
import requests
|
|
|
|
|
8 |
import sqlite3
|
9 |
import string
|
10 |
import hashlib
|
11 |
import dotenv
|
12 |
+
import shutil
|
13 |
+
from apscheduler.schedulers.background import BackgroundScheduler
|
14 |
+
from datetime import datetime, timedelta, timezone
|
15 |
+
from enum import Enum
|
16 |
|
17 |
dotenv.load_dotenv()
|
18 |
openai_api_key = os.getenv("OPENAI_API_KEY")
|
|
|
21 |
|
22 |
secret_key = os.getenv("CTF_SECRET_KEY", "ctf_secret_key")
|
23 |
hard_challenge_secret = os.getenv("HARD_CHALLENGE_SECRET", "hard_challenge_secret")
|
24 |
+
hf_ctf_sync_token = os.getenv("HF_CTF_SYNC_TOKEN")
|
|
|
|
|
|
|
25 |
|
26 |
class Env(str, Enum):
|
27 |
PLAYGROUND = "playground"
|
28 |
+
CHALLENGE_EASY = "ctf_easy"
|
29 |
+
CHALLENGE_HARD = "ctf_hard"
|
30 |
|
31 |
+
DB_FILE = "./reviews.db"
|
32 |
+
|
33 |
+
repo = huggingface_hub.Repository(
|
34 |
+
local_dir="hf_data",
|
35 |
+
repo_type="dataset",
|
36 |
+
clone_from="https://huggingface.co/datasets/mislavb/test-ctf",
|
37 |
+
use_auth_token=hf_ctf_sync_token,
|
38 |
+
)
|
39 |
+
repo.git_pull()
|
40 |
+
shutil.copyfile("./hf_data/reviews.db", DB_FILE)
|
41 |
+
|
42 |
+
def backup_db():
|
43 |
+
db = sqlite3.connect(DB_FILE)
|
44 |
+
cur = db.cursor()
|
45 |
+
shutil.copyfile(DB_FILE, "./hf_data/reviews.db")
|
46 |
+
print("here")
|
47 |
+
for level in [Env.PLAYGROUND, Env.CHALLENGE_EASY, Env.CHALLENGE_HARD]:
|
48 |
+
reviews = cur.execute(f"SELECT * FROM {level.value}").fetchall()
|
49 |
+
pd_data = pd.DataFrame(reviews, columns=["id", "timestamp", "name", "feedback", "summary"])
|
50 |
+
pd_data.to_csv(f"./hf_data/data/reviews_{level.value}-00000-of-00001.csv", index=False)
|
51 |
+
repo.push_to_hub(blocking=False, commit_message=f"Updating data at {datetime.now()}")
|
52 |
+
db.close()
|
53 |
+
|
54 |
+
scheduler = BackgroundScheduler()
|
55 |
+
scheduler.add_job(func=backup_db, trigger="interval", seconds=60)
|
56 |
+
scheduler.start()
|
57 |
|
58 |
# Create table if it doesn't already exist
|
59 |
def create_tables():
|
60 |
+
db = sqlite3.connect(DB_FILE)
|
61 |
for level in [Env.PLAYGROUND, Env.CHALLENGE_EASY, Env.CHALLENGE_HARD]:
|
62 |
try:
|
63 |
db.execute(f"SELECT * FROM {level.value}").fetchall()
|
|
|
75 |
|
76 |
# Add review to the db
|
77 |
def add_review_db(level: str, name: str, feedback: str, summary: str):
|
78 |
+
print("add_review_db: ", level, name, feedback, summary)
|
79 |
db = sqlite3.connect(DB_FILE)
|
80 |
+
cur = db.cursor()
|
81 |
+
cur.execute(
|
82 |
f"INSERT INTO {level} (name, feedback, summary) VALUES (?, ?, ?)",
|
83 |
(name, feedback, summary),
|
84 |
)
|
|
|
158 |
|
159 |
prompt = f"Read all received user feedback and summarize three most positive comments:\n{text}"
|
160 |
|
161 |
+
if env == Env.CHALLENGE_HARD:
|
162 |
+
summary = "-"
|
163 |
+
else:
|
164 |
+
client = openai.Client(api_key=openai_api_key)
|
165 |
+
completion = client.chat.completions.create(
|
166 |
+
model="gpt-4o-mini", messages=[{"role": "user", "content": prompt}]
|
167 |
+
)
|
168 |
+
summary = completion.choices[0].message.content
|
169 |
|
170 |
add_review_db(env.value, user, feedback, summary)
|
171 |
|