mislavb commited on
Commit
981454c
·
1 Parent(s): 4155bf2

update app

Browse files
Files changed (1) hide show
  1. app.py +46 -14
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 = "challenge_easy"
29
- CHALLENGE_HARD = "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.execute(
 
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
- client = openai.Client(api_key=openai_api_key)
133
- completion = client.chat.completions.create(
134
- model="gpt-4o-mini", messages=[{"role": "user", "content": prompt}]
135
- )
136
- summary = completion.choices[0].message.content
 
 
 
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