Sasha Rush commited on
Commit
ed632fe
β€’
1 Parent(s): 2086271

leaderboard

Browse files
Files changed (2) hide show
  1. app.py +62 -7
  2. requirements.txt +1 -0
app.py CHANGED
@@ -14,8 +14,23 @@ from contextlib import redirect_stdout
14
  import imageio
15
  import tiktoken
16
  import time
 
 
 
 
 
 
 
 
 
 
 
 
17
  openai.api_key = ""
18
  tab = " "
 
 
 
19
 
20
  def start2(prompt, board, api_key):
21
  out = ""
@@ -175,6 +190,10 @@ class Game:
175
  def walls(self):
176
  return self.board.wall_pos
177
 
 
 
 
 
178
  def __repr__(self) -> str:
179
  walls = ",".join(map(str, self.board.wall_pos))
180
  return f"Game(init={self.board.player_pos}, flag={self.board.flag_pos}, walls={self.board.wall_pos}, boundary={self.boundary}, key={self.board.key_pos})"
@@ -379,7 +398,8 @@ GPTWorld is a prompting game. Your goal is to get an LLM to complete a maze. You
379
  examples = gr.Radio(show_label=False,
380
  choices=["Easy", "Medium", "Hard", "Evil"])
381
  api_key = gr.Text(label="OpenAI Key", type="password",
382
- value=os.environ.get("OPENAI_API_KEY"))
 
383
  with gr.Row():
384
  start_btn = gr.Button("Prompt >")
385
  cancel_btn = gr.Button("Cancel")
@@ -419,6 +439,7 @@ def move(board, action, old_pos):
419
  with gr.Column():
420
  im = gr.Gallery(label="Gallery of the Game")
421
  im.style(preview=True, object_fit="scale-down", columns=1, container=True)
 
422
 
423
  output = gr.Code(label="Generating Game Code (You can also edit and rerun)", language="python", value="""def my_example():
424
  b = Game(init=(0, 0), flag=(2, 2), walls= [], boundary= (3, 3), key= (1, 1))
@@ -430,10 +451,10 @@ def move(board, action, old_pos):
430
  p = move(b, "R", p)
431
  return b
432
  """, lines=50)
433
- msg_box = gr.Text(label="Errors")
434
  counter = gr.Slider(label="length", minimum=0, maximum=3000)
435
  run_btn = gr.Button("Rerun ^")
436
-
437
 
438
 
439
  examples.change(load, inputs=[examples], outputs=[im, game_desc])
@@ -447,7 +468,8 @@ def move(board, action, old_pos):
447
  i = 0
448
  count = 0
449
  im_ = [f"tmp.svg"]
450
- yield {im: im_, counter: 0, output: "", msg_box: ""}
 
451
 
452
  for prefix in start(inp, board, data[api_key]):
453
  ps = prefix.split("\n")
@@ -467,8 +489,18 @@ def move(board, action, old_pos):
467
  yield {im: im_, counter: count, output: prefix}
468
  else:
469
  yield {im: im_, counter: count, output: prefix}
470
- yield {im: [f"pic{j}.svg" for j in range(i)], counter: count, output: prefix}
471
- start_prompt = start_btn.click(run, inputs={prompt, game_desc, api_key}, outputs={im, output, counter, msg_box})
 
 
 
 
 
 
 
 
 
 
472
  cancel_btn.click(None, cancels=[start_prompt])
473
  def run2(data):
474
  c = data[output]
@@ -489,8 +521,31 @@ def move(board, action, old_pos):
489
  return out
490
  run_btn.click(run2, inputs={output}, outputs={im})
491
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
492
 
493
-
494
  app.queue().launch()
495
 
496
 
 
14
  import imageio
15
  import tiktoken
16
  import time
17
+ import pandas as pd
18
+ import csv
19
+ from huggingface_hub import HfApi, Repository
20
+ DATASET_REPO_URL = "https://huggingface.co/datasets/srush/gptworld-leaderboard"
21
+ HF_TOKEN = os.environ.get("HF_API")
22
+ hf_api = HfApi(
23
+ endpoint="https://huggingface.co", # Can be a Private Hub endpoint.
24
+ token=os.environ.get("HF_API"), # Token is not persisted on the machine.
25
+ )
26
+ DATA_FILENAME = "data.csv"
27
+ DATA_FILE = os.path.join("data", DATA_FILENAME)
28
+
29
  openai.api_key = ""
30
  tab = " "
31
+ repo = Repository(
32
+ local_dir="data", clone_from=DATASET_REPO_URL, use_auth_token=HF_TOKEN
33
+ )
34
 
35
  def start2(prompt, board, api_key):
36
  out = ""
 
190
  def walls(self):
191
  return self.board.wall_pos
192
 
193
+ def won(self):
194
+ final = self.board
195
+ return final.key_pos is None and final.player_pos == final.flag_pos
196
+
197
  def __repr__(self) -> str:
198
  walls = ",".join(map(str, self.board.wall_pos))
199
  return f"Game(init={self.board.player_pos}, flag={self.board.flag_pos}, walls={self.board.wall_pos}, boundary={self.boundary}, key={self.board.key_pos})"
 
398
  examples = gr.Radio(show_label=False,
399
  choices=["Easy", "Medium", "Hard", "Evil"])
400
  api_key = gr.Text(label="OpenAI Key", type="password",
401
+ value=os.environ.get("OPENAI_API_KEY"),
402
+ visible=not os.environ.get("OPENAI_API_KEY"))
403
  with gr.Row():
404
  start_btn = gr.Button("Prompt >")
405
  cancel_btn = gr.Button("Cancel")
 
439
  with gr.Column():
440
  im = gr.Gallery(label="Gallery of the Game")
441
  im.style(preview=True, object_fit="scale-down", columns=1, container=True)
442
+ msg_box = gr.Text(label="", show_label=False)
443
 
444
  output = gr.Code(label="Generating Game Code (You can also edit and rerun)", language="python", value="""def my_example():
445
  b = Game(init=(0, 0), flag=(2, 2), walls= [], boundary= (3, 3), key= (1, 1))
 
451
  p = move(b, "R", p)
452
  return b
453
  """, lines=50)
454
+
455
  counter = gr.Slider(label="length", minimum=0, maximum=3000)
456
  run_btn = gr.Button("Rerun ^")
457
+ state = gr.State()
458
 
459
 
460
  examples.change(load, inputs=[examples], outputs=[im, game_desc])
 
468
  i = 0
469
  count = 0
470
  im_ = [f"tmp.svg"]
471
+ state_val = None
472
+ yield {im: im_, counter: 0, output: "", msg_box: "", state: state_val}
473
 
474
  for prefix in start(inp, board, data[api_key]):
475
  ps = prefix.split("\n")
 
489
  yield {im: im_, counter: count, output: prefix}
490
  else:
491
  yield {im: im_, counter: count, output: prefix}
492
+ if q["board"].won():
493
+ final_msg = "πŸŽ‡πŸŽ‡πŸŽ‡πŸŽ‡πŸŽ‡πŸŽ‡VictoryπŸŽ‡πŸŽ‡πŸŽ‡πŸŽ‡πŸŽ‡πŸŽ‡"
494
+ state_val = (data[prompt], prefix, count, data[examples])
495
+ else:
496
+ final_msg = "Didn't make it"
497
+ yield {im: [f"pic{j}.svg" for j in range(i)], counter: count, output: prefix,
498
+ msg_box: final_msg, state: state_val}
499
+
500
+
501
+ start_prompt = start_btn.click(run,
502
+ inputs={prompt, game_desc, api_key, examples},
503
+ outputs={im, output, counter, msg_box, state})
504
  cancel_btn.click(None, cancels=[start_prompt])
505
  def run2(data):
506
  c = data[output]
 
521
  return out
522
  run_btn.click(run2, inputs={output}, outputs={im})
523
 
524
+ gr.HTML("""<center><h2>Leaderboard</h2></center>""")
525
+ with gr.Row() as row:
526
+ team_name = gr.Text(label="Team Name")
527
+ leaderboard = gr.Button(value="Submit")
528
+ msg = gr.Text(label="Status")
529
+ leader = gr.Dataframe(pd.read_csv(DATA_FILE)[["team", "board", "count"]])
530
+ def leaderfn(data):
531
+ if data[state] is None:
532
+ return {msg: "Nothing to submit"}
533
+ if not data[team_name]:
534
+ return {msg: "No team name"}
535
+ prompt, code, count, board = data[state]
536
+ repo.git_pull()
537
+ with open(DATA_FILE, "a") as csvfile:
538
+ writer = csv.DictWriter(csvfile, fieldnames=["team", "prompt", "code", "count", "board"])
539
+ writer.writerow(
540
+ {"team": data[team_name], "prompt": prompt, "code": code, "count": count, "board": board}
541
+ )
542
+ commit_url = repo.push_to_hub()
543
+ leader_df = pd.read_csv(DATA_FILE)[["team", "board", "count"]]
544
+ leader_df = leader_df.sort_values(["board", "count"])
545
+ return {msg: f"Sucess: Final score: {count} {board}", leader: leader_df}
546
+
547
+ leaderboard.click(fn=leaderfn, inputs={state, team_name}, outputs={msg, leader})
548
 
 
549
  app.queue().launch()
550
 
551
 
requirements.txt CHANGED
@@ -4,3 +4,4 @@ openai
4
  pycairo
5
  tiktoken
6
  imageio
 
 
4
  pycairo
5
  tiktoken
6
  imageio
7
+ pandas