Spaces:
Runtime error
Runtime error
File size: 4,462 Bytes
6eefbd7 de101e1 6eefbd7 de101e1 6eefbd7 de101e1 a0f569f 6eefbd7 a0f569f 6eefbd7 de101e1 6eefbd7 de101e1 6eefbd7 de101e1 6eefbd7 de101e1 6eefbd7 de101e1 6eefbd7 de101e1 6eefbd7 de101e1 6eefbd7 a0f569f de101e1 a0f569f de101e1 6eefbd7 de101e1 6eefbd7 de101e1 6eefbd7 a0f569f 6eefbd7 de101e1 6eefbd7 de101e1 6eefbd7 de101e1 6eefbd7 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 |
import random
import gradio as gr
from sllim import chat
model = "gpt-3.5-turbo"
# DEFINE POSSIBLE FUNCTIONS
def fib(n):
if n < 2:
return n
return fib(n - 1) + fib(n - 2)
def square(n):
return n ** 2
def cube(n):
return n ** 3
def sum_of_digits(n):
return sum(map(int, str(n)))
functions = [fib, square, cube, sum_of_digits]
MAX_INPUT_ANSWER_VALUE = 10
MAX_CLUE_VALUE = 20
def fn_to_str(challenge_idx, x):
return f"f({x}) = {functions[challenge_idx](x)}"
def get_gpt_guess(fidx, clues, ask):
system_message = """You are an expert mathematician. You will be given a list of input and outputs to a function and your job is to guess the output of the function on an unknown input. If you cannot determine the answer, respond with 0.
For example:
f(2) = 6
f(7) = 11
What is f(3)?
Answer: 7
For example:
f(1) = 17
What is f(6)?
Answer: 0"""
user_message = "\n".join(map(lambda x: fn_to_str(fidx, x), clues)) + f"\nWhat is f({ask})?\nAnswer:"
return chat([{"role": "system", "content": system_message}, {"role": "user", "content": user_message}], model=model)
def check_winner(gpt, human, answer):
if gpt == answer and human == answer:
return "\n## Result: Tie"
if gpt == answer:
return "\n## Result: GPT Wins"
if human == answer:
return "\n## Result: Human Wins"
return ""
with gr.Blocks() as demo:
# SESSION VALUES
ask = gr.State(lambda: random.randint(1, MAX_INPUT_ANSWER_VALUE))
clue = gr.State(random.choice(list(set(range(MAX_CLUE_VALUE)) - set([ask.value]))))
available_numbers = gr.State(set(range(MAX_CLUE_VALUE)) - set([ask.value, clue.value]))
challenge_idx = gr.State(random.randint(0, len(functions) - 1))
guesses = gr.State([])
clues = gr.State([clue.value])
with gr.Row():
with gr.Column():
title_text = gr.Markdown(f"# Guess the function (faster than GPT)\n## What is f({ask.value})?")
with gr.Column():
clues_box = gr.Markdown(f"# Clues\n```\n{fn_to_str(challenge_idx.value, clue.value)}\n```")
with gr.Row():
with gr.Column():
guess = gr.Textbox(label="Enter guess")
history_box = gr.Textbox(label="History")
with gr.Column():
gpt_guess = gr.Textbox(label="GPT Guess", value="...")
btn = gr.Button("Submit")
rstbtn = gr.Button("Reset")
def submit_guess(value, history, clue_values, fidx, avail, _ask ):
history.append(value)
try:
gpt_guess_value = int(get_gpt_guess(fidx, clue_values, _ask))
except Exception:
gpt_guess_value = 0
result = check_winner(gpt_guess_value, int(value), functions[fidx](_ask))
_clue = random.choice(list(avail))
avail.remove(_clue)
clue_values.append(_clue)
clue_str = "\n".join(map(lambda x: fn_to_str(fidx, x), clue_values))
return {
guesses: history,
history_box: ", ".join(history),
gpt_guess: str(gpt_guess_value),
clues: clue_values,
title_text: title_text.value + result,
clues_box: f"# Clues\n```\n{clue_str}\n```",
available_numbers: avail,
challenge_idx: fidx,
ask: _ask,
}
btn.click(
submit_guess,
[guess, guesses, clues, challenge_idx, available_numbers, ask],
[guesses, history_box, gpt_guess, clues, title_text, clues_box, available_numbers, challenge_idx, ask],
)
def reset():
_ask = random.randint(1, MAX_INPUT_ANSWER_VALUE)
_clue = random.choice(list(set(range(2, MAX_CLUE_VALUE)) - set([_ask])))
fidx = random.randint(0, len(functions) - 1)
clue_str = "\n".join(map(lambda x: fn_to_str(fidx, x), [_clue]))
return {
guesses: [],
history_box: "",
clues: [_clue],
title_text: f"# Guess the function (faster than GPT)\n## What is f({_ask})?",
clues_box: f"# Clues\n```\n{clue_str}\n```",
gpt_guess: "...",
ask: _ask,
clue: _clue,
available_numbers: set(range(MAX_CLUE_VALUE)) - set([_ask, _clue]),
challenge_idx: fidx,
}
rstbtn.click(reset, [], [ask, clue, available_numbers, challenge_idx, guesses, history_box, gpt_guess, clues, title_text, clues_box])
demo.launch()
|