sim-so commited on
Commit
b33d6d1
1 Parent(s): 73b6239

prompt update

Browse files
__pycache__/app.cpython-310.pyc CHANGED
Binary files a/__pycache__/app.cpython-310.pyc and b/__pycache__/app.cpython-310.pyc differ
 
__pycache__/app_test.cpython-310.pyc ADDED
Binary file (3.66 kB). View file
 
app.py CHANGED
@@ -13,13 +13,6 @@ from src.utils import add_guess
13
 
14
  GPT_MODEL = "gpt-3.5-turbo"
15
  TITLE = "やりとりSemantle"
16
- FIRST_DAY = date(2023, 4, 2)
17
- puzzle_num = (utc.localize(datetime.utcnow()).astimezone(timezone('Asia/Tokyo')).date() - FIRST_DAY).days
18
- secret = get_secret(puzzle_num)
19
-
20
- class play:
21
- guessed = set()
22
- guesses = pd.DataFrame(columns=["#", "答え", "スコア", "ランク"])
23
 
24
  task_background = f"""今から言葉をします。ユーザがゲームすることを手伝ってください。
25
 
@@ -33,11 +26,18 @@ task_description=f"""まず、ユーザーからの話を聞いて、答える
33
  ゲームのルール:
34
  正解は一つの言葉である。ユーザーはどんな言葉が正解か推測して、単語を一つずつ答えする。答えた単語のスコアが100点で、正解と一致すると成功としてゲームが終わる。
35
  """
 
 
 
 
36
  system_content = task_background+task_description
37
  system_message = [{"role": "system", "content": system_content}]
38
  chat_history = []
39
  n_history = 8
40
 
 
 
 
41
 
42
  def create_chat(user_input, chat_history, api_key):
43
  openai.api_key = api_key
@@ -63,7 +63,7 @@ def create_chat(user_input, chat_history, api_key):
63
  word=function_args.get("word"),
64
  puzzle_num=puzzle_num
65
  )
66
- guess_result = add_guess(function_response, play)
67
  print(guess_result)
68
  # Step 4: send the info on the function call and function response to GPT
69
  chat_messages.append(response_message.to_dict()) # extend conversation with assistant's reply
@@ -85,6 +85,11 @@ def create_chat(user_input, chat_history, api_key):
85
  return chat_messages[-1]
86
 
87
  with gr.Blocks() as demo:
 
 
 
 
 
88
  with gr.Row():
89
  gr.Markdown(
90
  """
@@ -102,8 +107,15 @@ with gr.Blocks() as demo:
102
  with gr.Row():
103
  with gr.Column():
104
  api_key = gr.Textbox(placeholder="sk-...", label="OPENAI_API_KEY", value=None, type="password")
 
 
 
 
 
 
 
105
  guesses_table = gr.DataFrame(
106
- value=play.guesses,
107
  headers=["#", "答え", "スコア", "ランク"],
108
  datatype=["number", "str", "str", "str"],
109
  elem_id="guesses-table"
@@ -127,12 +139,15 @@ with gr.Blocks() as demo:
127
  chatbot.append((user_input, reply["content"]))
128
  time.sleep(2)
129
  return "", chatbot
130
- def update_guesses():
131
- return guesses_table.update(value=play.guesses.sort_values(by="スコア", ascending=False),)
 
 
132
 
133
  api_key.change(unfreeze, [], [msg]).then(greet, [], [msg, chatbot])
134
- msg.submit(respond, [msg, chatbot, api_key], [msg, chatbot]).then(update_guesses, [], [guesses_table])
135
-
 
136
  gr.Examples(
137
  [
138
  ["猫"],
 
13
 
14
  GPT_MODEL = "gpt-3.5-turbo"
15
  TITLE = "やりとりSemantle"
 
 
 
 
 
 
 
16
 
17
  task_background = f"""今から言葉をします。ユーザがゲームすることを手伝ってください。
18
 
 
26
  ゲームのルール:
27
  正解は一つの言葉である。ユーザーはどんな言葉が正解か推測して、単語を一つずつ答えする。答えた単語のスコアが100点で、正解と一致すると成功としてゲームが終わる。
28
  """
29
+
30
+ # guessed = set()
31
+ # guesses = pd.DataFrame(columns=["#", "答え", "スコア", "ランク"])
32
+
33
  system_content = task_background+task_description
34
  system_message = [{"role": "system", "content": system_content}]
35
  chat_history = []
36
  n_history = 8
37
 
38
+ def update_guess(guess_result, guessed_words, guesses_df):
39
+ result, guessed, guesses = add_guess(guess_result, guessed_words, guesses_df)
40
+ return result
41
 
42
  def create_chat(user_input, chat_history, api_key):
43
  openai.api_key = api_key
 
63
  word=function_args.get("word"),
64
  puzzle_num=puzzle_num
65
  )
66
+ guess_result = update_guess(function_response, guessed, guesses)
67
  print(guess_result)
68
  # Step 4: send the info on the function call and function response to GPT
69
  chat_messages.append(response_message.to_dict()) # extend conversation with assistant's reply
 
85
  return chat_messages[-1]
86
 
87
  with gr.Blocks() as demo:
88
+
89
+ FIRST_DAY = date(2023, 4, 2)
90
+ puzzle_num = (utc.localize(datetime.utcnow()).astimezone(timezone('Asia/Tokyo')).date() - FIRST_DAY).days
91
+ secret = get_secret(puzzle_num)
92
+
93
  with gr.Row():
94
  gr.Markdown(
95
  """
 
107
  with gr.Row():
108
  with gr.Column():
109
  api_key = gr.Textbox(placeholder="sk-...", label="OPENAI_API_KEY", value=None, type="password")
110
+ idx = gr.State(value=1)
111
+ guessed = gr.State(value=set())
112
+ guesses = gr.State(value=list())
113
+ cur_guess_table = gr.DataFrame(
114
+ value=[],
115
+ elem_id="cur-guesses-table"
116
+ )
117
  guesses_table = gr.DataFrame(
118
+ value=[],
119
  headers=["#", "答え", "スコア", "ランク"],
120
  datatype=["number", "str", "str", "str"],
121
  elem_id="guesses-table"
 
139
  chatbot.append((user_input, reply["content"]))
140
  time.sleep(2)
141
  return "", chatbot
142
+ def update_guesses(i, guessed_words, guess_history):
143
+ i += 1
144
+ guessed_words.add()
145
+ return guesses_table.update(value=guess_history)
146
 
147
  api_key.change(unfreeze, [], [msg]).then(greet, [], [msg, chatbot])
148
+ msg.submit(respond, [msg, chatbot, api_key], [msg, chatbot]
149
+ ).then(update_guesses, [idx, guessed, guesses], [idx, guessed, guesses, cur_guess_table])
150
+
151
  gr.Examples(
152
  [
153
  ["猫"],
app_test.py ADDED
@@ -0,0 +1,95 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import time
2
+
3
+ import pandas as pd
4
+ import gradio as gr
5
+ import openai
6
+
7
+
8
+ with gr.Blocks() as demo:
9
+
10
+ with gr.Row():
11
+ gr.Markdown(
12
+ """
13
+ # やりとりSemantle
14
+ [semantle日本語版](https://semantoru.com/)をchatbotと楽しめるためのspaceです。
15
+ ## ゲームのやり方
16
+ - 正解は一つの単語で、これを答えるとゲームの勝利になります。
17
+ - 推測した単語が正解じゃない場合、類似度スコアと順位が表示されます。それは正解を推測する大事なヒントになります。
18
+ ## chatbotの仕事
19
+ - 単語のスコアとランク以外に他のヒントがもらえます。
20
+ - ゲームに関して困っている時、何か質問してみてください。
21
+ """
22
+ )
23
+
24
+ with gr.Row():
25
+ with gr.Column():
26
+ api_key = gr.Textbox(placeholder="sk-...", label="OPENAI_API_KEY", value=None, type="password")
27
+ idx = gr.State(value=0)
28
+ guessed = gr.State(value=set())
29
+ guesses = gr.State(value=list())
30
+ cur_guess = gr.State()
31
+ cur_guess_view = gr.Textbox(
32
+ interactive=False,
33
+ elem_id="cur-guess-view",
34
+ show_label=False,
35
+ )
36
+ guesses_table = gr.DataFrame(
37
+ value=pd.DataFrame(columns=["#", "答え", "スコア", "ランク"]),
38
+ headers=["#", "答え", "スコア", "ランク"],
39
+ datatype=["number", "str", "number", "str"],
40
+ elem_id="guesses-table",
41
+ interactive=False
42
+ )
43
+ with gr.Column(elem_id="chat_container"):
44
+ msg = gr.Textbox(
45
+ placeholder="ゲームをするため、まずはAPI KEYを入れてください。",
46
+ label="答え",
47
+ interactive=False,
48
+ max_lines=1
49
+ )
50
+ chatbot = gr.Chatbot(elem_id="chatbot")
51
+
52
+ def unfreeze():
53
+ return msg.update(interactive=True, placeholder="正解と思う言葉を答えてください。")
54
+ def greet():
55
+ return "", [("[START]", "ゲームを始まります!好きな言葉をひとつだけいってみてください。")]
56
+
57
+ def respond(key, user_input, chat_history, cur):
58
+ reply = {"content": ["tesT", 0.9, 1]}
59
+ # reply = {"content": "hint"}
60
+ if isinstance(reply["content"], list):
61
+ cur = reply["content"]
62
+ cur_view = " | ".join([str(_) for _ in cur])
63
+ reply = {"content": "updated"}
64
+ chat_history.append((user_input, reply["content"]))
65
+ time.sleep(2)
66
+ return "", chat_history, cur, cur_view
67
+
68
+ def update_guesses(cur, i, guessed_words, guesses_df):
69
+ print(cur)
70
+ if cur[2] not in guessed_words:
71
+ guessed_words.add(cur[0])
72
+ guesses_df.loc[i] = [i] + cur
73
+ i += 1
74
+ print(guesses_df)
75
+ guesses_df = guesses_df.sort_values(by=["スコア"], ascending=False)
76
+ return i, guessed_words, guesses_df
77
+
78
+ api_key.change(unfreeze, [], [msg]).then(greet, [], [msg, chatbot])
79
+ msg.submit(respond, [api_key, msg, chatbot, cur_guess], [msg, chatbot, cur_guess, cur_guess_view])
80
+ cur_guess_view.change(update_guesses, [cur_guess, idx, guessed, guesses_table], [idx, guessed, guesses_table])
81
+
82
+ gr.Examples(
83
+ [
84
+ ["猫"],
85
+ ["どんなヒントが貰える?"],
86
+ ["正解と「近い」とはどういう意味?"],
87
+ ["何から始めたらいい?"],
88
+ ["今日の正解は何?"],
89
+ ],
90
+ inputs=msg,
91
+ label="こちらから選んで話すこともできます."
92
+ )
93
+
94
+ if __name__ == "__main__":
95
+ demo.queue(concurrency_count=20).launch()
base.py ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from typing import List
2
+
3
+ class Tool:
4
+ description: str = ""
5
+ name: str = ""
6
+
7
+ inputs: List[str] = ""
8
+ outputs: List[str] = ""
9
+
10
+ def __init__(self, *args, **kwargs):
11
+ pass
12
+
13
+ def __call__(self, *args, **kwargs):
14
+ args = [arg for arg in args]
15
+ kwargs = {k: v for k, v in kwargs.items()}
16
+
17
+
src/__pycache__/functions.cpython-310.pyc CHANGED
Binary files a/src/__pycache__/functions.cpython-310.pyc and b/src/__pycache__/functions.cpython-310.pyc differ
 
src/__pycache__/semantle.cpython-310.pyc CHANGED
Binary files a/src/__pycache__/semantle.cpython-310.pyc and b/src/__pycache__/semantle.cpython-310.pyc differ
 
src/__pycache__/utils.cpython-310.pyc CHANGED
Binary files a/src/__pycache__/utils.cpython-310.pyc and b/src/__pycache__/utils.cpython-310.pyc differ
 
src/prompts.py ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import re
2
+
3
+ CHAT_MESSAGE_PROMPT = """
4
+
5
+ """
6
+ INITIAL_PROMPT = """今ユーザーは単語を当てるゲームをしている。ゲームの正解は1つの単語になっている。
7
+ 続くユーザーのメッセージからユーザーの意図を理解し、それに合った対応をする。ユーザーの行動は下記の一つになる。
8
+ 1. 正解と推測する言葉を答えている
9
+ [例] `道`,`「考え」`,`助ける`,`'天気'`,`正解は"木"と思う`,`「流れ」と推測する`,`漢字、はどう?`など
10
+ [対応] 今答えた言葉が正解とどれぐらい近いかを計算する。
11
+ 2. ヒントを欲しがっている
12
+ [例] `何かヒントを欲しい`,`正解と先の単語と何の関係がある?`,`正解の例文をください`,`ゲームのやり方を分からない`など
13
+ [対応] 提供可能なヒントを用意しておく。
14
+ 3. 正解を聞く、またはやめると言う
15
+ [例] `正解は何?`,`もうやめよう`,`正解を教えて`など
16
+ [対応] 正解を聞くとゲームが終わるので、ゲームを辞めてもいいかをもう一度確認する。
17
+ 4. 1,2,3の中ではない
18
+ [対応] ユーザーの考えをもう確認する。
19
+ """
20
+
21
+ RULE = """正解は一つの言葉である。ユーザーはどんな言葉が正解か推測して、単語を一つずつ答えする。答えた単語のスコアが100点で、正解と正に一致すると成功としてゲームが終わる。"""
22
+
23
+ task_background = f"""今から言葉をします。ユーザがゲームすることを手伝ってください。
24
+
25
+ """
26
+ task_description=f"""まず、ユーザーからの話を聞いて、答えるのか、ヒントを欲しがっているのか、やめようといるのかを判断してください。
27
+ ユーザーが答えする場合、答えの点数を評価してください。そのあと結果を一言に要約してください。
28
+ ユーザーがヒントを欲しがっている場合、正解に関する間接的な情報を提供してください。
29
+ ユーザーが正解を聞いたりやめると言いたりする場合、やめてもいいかをもう一度確認してください。
30
+ そのほか話は答えないでください。
31
+
32
+ ゲームのルール:
33
+ 正解は一つの言葉である。ユーザーはどんな言葉が正解か推測して、単語を一つずつ答えする。答えた単語のスコアが100点で、正解と一致すると成功としてゲームが終わる。
34
+ """
src/semantle.py CHANGED
@@ -16,4 +16,8 @@ def get_guess(word: str, puzzle_num: int):
16
  output = response.json()
17
  return output["guess"], output["sim"], output["rank"]
18
  else:
19
- return word, None, None
 
 
 
 
 
16
  output = response.json()
17
  return output["guess"], output["sim"], output["rank"]
18
  else:
19
+ return word, None, None
20
+
21
+ def get_valid_hints():
22
+
23
+ pass
src/utils.py CHANGED
@@ -1,15 +1,17 @@
1
- def add_guess(guess_result, play):
 
 
2
  word, sim, rank = guess_result
3
  if sim:
4
- if word not in play.guessed:
5
  sim = round(sim, 2)
6
  rank = "情報なし" if rank == 1001 else rank
7
- play.guesses.loc[len(play.guessed)] = ([len(play.guessed), word, sim, rank])
8
- play.guessed.add(word)
9
  cur_result = format_result(word, sim, rank)
10
  else:
11
  cur_result = "不正解: 正しくない単語"
12
- return "\n".join([cur_result, "最高スコア:", format_table(play.guesses)])
13
 
14
  def format_result(word, sim, rank):
15
  return f"{word}: スコア {sim}, ランク {rank}"
 
1
+
2
+
3
+ def add_guess(guess_result, guessed, guesses):
4
  word, sim, rank = guess_result
5
  if sim:
6
+ if word not in guessed:
7
  sim = round(sim, 2)
8
  rank = "情報なし" if rank == 1001 else rank
9
+ guesses.loc[len(guessed)] = ([len(guessed), word, sim, rank])
10
+ guessed.add(word)
11
  cur_result = format_result(word, sim, rank)
12
  else:
13
  cur_result = "不正解: 正しくない単語"
14
+ return "\n".join([cur_result, "最高スコア:", format_table(guesses)]), guessed, guesses
15
 
16
  def format_result(word, sim, rank):
17
  return f"{word}: スコア {sim}, ランク {rank}"