kaggle-environments 1.14.11__py2.py3-none-any.whl → 1.14.12__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of kaggle-environments might be problematic. Click here for more details.
- kaggle_environments/__init__.py +1 -1
- kaggle_environments/envs/llm_20_questions/llm_20_questions.js +10 -2
- kaggle_environments/envs/llm_20_questions/llm_20_questions.py +30 -8
- kaggle_environments/envs/llm_20_questions/test_llm_20_questions.py +18 -3
- {kaggle_environments-1.14.11.dist-info → kaggle_environments-1.14.12.dist-info}/METADATA +1 -1
- {kaggle_environments-1.14.11.dist-info → kaggle_environments-1.14.12.dist-info}/RECORD +10 -10
- {kaggle_environments-1.14.11.dist-info → kaggle_environments-1.14.12.dist-info}/LICENSE +0 -0
- {kaggle_environments-1.14.11.dist-info → kaggle_environments-1.14.12.dist-info}/WHEEL +0 -0
- {kaggle_environments-1.14.11.dist-info → kaggle_environments-1.14.12.dist-info}/entry_points.txt +0 -0
- {kaggle_environments-1.14.11.dist-info → kaggle_environments-1.14.12.dist-info}/top_level.txt +0 -0
kaggle_environments/__init__.py
CHANGED
|
@@ -21,7 +21,7 @@ from .main import http_request
|
|
|
21
21
|
from . import errors
|
|
22
22
|
from . import utils
|
|
23
23
|
|
|
24
|
-
__version__ = "1.14.
|
|
24
|
+
__version__ = "1.14.12"
|
|
25
25
|
|
|
26
26
|
__all__ = ["Agent", "environments", "errors", "evaluate", "http_request",
|
|
27
27
|
"make", "register", "utils", "__version__",
|
|
@@ -89,8 +89,10 @@ async function renderer(context) {
|
|
|
89
89
|
}
|
|
90
90
|
|
|
91
91
|
const info = environment.info;
|
|
92
|
-
const team1_text = info?.TeamNames?.[0] || "Team 1";
|
|
93
|
-
const
|
|
92
|
+
const team1_text = info?.TeamNames?.[0] || "Team 1 Agent 1";
|
|
93
|
+
const team1_text_two = info?.TeamNames?.[1] || "Team 1 Agent 2";
|
|
94
|
+
const team2_text = info?.TeamNames?.[2] || "Team 2 Agent 1";
|
|
95
|
+
const team2_text_two = info?.TeamNames?.[3] || "Team 2 Agent 2";
|
|
94
96
|
|
|
95
97
|
const ctx = canvas.getContext("2d");
|
|
96
98
|
const padding = 20;
|
|
@@ -122,6 +124,12 @@ async function renderer(context) {
|
|
|
122
124
|
|
|
123
125
|
line++;
|
|
124
126
|
|
|
127
|
+
// Team Row
|
|
128
|
+
ctx.fillText(team1_text_two, team1_x, line_height * line);
|
|
129
|
+
ctx.fillText(team2_text_two, team2_x, line_height * line);
|
|
130
|
+
|
|
131
|
+
line++;
|
|
132
|
+
|
|
125
133
|
// Question Row
|
|
126
134
|
ctx.fillText("Question:", label_x, question_y);
|
|
127
135
|
let wrappedText1 = wrapText(ctx, team1_question, team1_x, question_y, row_width, line_height);
|
|
@@ -31,6 +31,9 @@ ASK = "ask"
|
|
|
31
31
|
GUESSER = "guesser"
|
|
32
32
|
ANSWERER = "answerer"
|
|
33
33
|
|
|
34
|
+
RANDOM_GUESSER = "random_guesser"
|
|
35
|
+
RANDOM_ANSWERER = "random_answerer"
|
|
36
|
+
|
|
34
37
|
keywords_list = json.loads(KEYWORDS_JSON)
|
|
35
38
|
keyword_cat = random.choice(keywords_list)
|
|
36
39
|
category = keyword_cat["category"]
|
|
@@ -39,6 +42,21 @@ keyword = keyword_obj["keyword"]
|
|
|
39
42
|
alts = keyword_obj["alts"]
|
|
40
43
|
|
|
41
44
|
|
|
45
|
+
def random_guesser(obs):
|
|
46
|
+
if obs.turnType == GUESS:
|
|
47
|
+
return "banana"
|
|
48
|
+
if random.random() < .5:
|
|
49
|
+
return "Is is a person?"
|
|
50
|
+
if random.random() < .5:
|
|
51
|
+
return "Is it a place?"
|
|
52
|
+
return "Is it a thing?"
|
|
53
|
+
|
|
54
|
+
def random_answerer():
|
|
55
|
+
if random.random() > .5:
|
|
56
|
+
return "yes"
|
|
57
|
+
return "no"
|
|
58
|
+
|
|
59
|
+
|
|
42
60
|
def guesser_agent(obs):
|
|
43
61
|
info_prompt = """You are playing a game of 20 questions where you ask the questions and try to figure out the keyword, which will be a real or fictional person, place, or thing. \nHere is what you know so far:\n{q_a_thread}"""
|
|
44
62
|
questions_prompt = """Ask one yes or no question."""
|
|
@@ -84,14 +102,16 @@ def answerer_agent(obs):
|
|
|
84
102
|
return ""
|
|
85
103
|
|
|
86
104
|
|
|
87
|
-
agents = {GUESSER: guesser_agent, ANSWERER: answerer_agent}
|
|
105
|
+
agents = {GUESSER: guesser_agent, ANSWERER: answerer_agent, RANDOM_ANSWERER: random_answerer, RANDOM_GUESSER: random_guesser}
|
|
88
106
|
|
|
89
107
|
def guesser_action(active, inactive, step):
|
|
90
108
|
inactive.observation.keyword = keyword
|
|
91
109
|
inactive.observation.category = category
|
|
92
110
|
guessed = False
|
|
111
|
+
bad_guess = False
|
|
93
112
|
if not active.action:
|
|
94
113
|
active.status = ERROR
|
|
114
|
+
bad_guess = True
|
|
95
115
|
elif active.observation.turnType == ASK:
|
|
96
116
|
question = active.action[:2000]
|
|
97
117
|
active.observation.questions.append(question)
|
|
@@ -105,7 +125,7 @@ def guesser_action(active, inactive, step):
|
|
|
105
125
|
score = 20 - int(step / 3)
|
|
106
126
|
end_game(active, score, DONE)
|
|
107
127
|
end_game(inactive, score, DONE)
|
|
108
|
-
return guessed
|
|
128
|
+
return [guessed, bad_guess]
|
|
109
129
|
|
|
110
130
|
def end_game(agent, reward, status):
|
|
111
131
|
agent.observation.keyword = keyword
|
|
@@ -174,6 +194,8 @@ def interpreter(state, env):
|
|
|
174
194
|
end_early = (active1 and active1.status) in (TIMEOUT, ERROR) or (active2 and active2.status in (TIMEOUT, ERROR))
|
|
175
195
|
one_guessed = False
|
|
176
196
|
two_guessed = False
|
|
197
|
+
one_bad_guess = False
|
|
198
|
+
two_bad_guess = False
|
|
177
199
|
one_bad_response = False
|
|
178
200
|
two_bad_response = False
|
|
179
201
|
|
|
@@ -181,28 +203,28 @@ def interpreter(state, env):
|
|
|
181
203
|
raise ValueError
|
|
182
204
|
|
|
183
205
|
if active1.observation.role == GUESSER:
|
|
184
|
-
one_guessed = guesser_action(active1, inactive1, step)
|
|
206
|
+
[one_guessed, one_bad_guess] = guesser_action(active1, inactive1, step)
|
|
185
207
|
else:
|
|
186
208
|
one_bad_response = answerer_action(active1, inactive1)
|
|
187
209
|
|
|
188
210
|
if active2.observation.role == GUESSER:
|
|
189
|
-
two_guessed = guesser_action(active2, inactive2, step)
|
|
211
|
+
[two_guessed, two_bad_guess] = guesser_action(active2, inactive2, step)
|
|
190
212
|
else:
|
|
191
213
|
two_bad_response = answerer_action(active2, inactive2)
|
|
192
214
|
|
|
193
|
-
if active1.status in (TIMEOUT, ERROR) or one_bad_response:
|
|
215
|
+
if active1.status in (TIMEOUT, ERROR) or one_bad_response or one_bad_guess:
|
|
194
216
|
end_game(active1, -1, active1.status)
|
|
195
217
|
end_game(inactive1, 1, DONE)
|
|
196
|
-
elif end_early or two_bad_response:
|
|
218
|
+
elif end_early or two_bad_response or two_bad_guess:
|
|
197
219
|
end_game(active1, 1, DONE)
|
|
198
220
|
end_game(inactive1, 1, DONE)
|
|
199
221
|
else:
|
|
200
222
|
increment_turn(active1, inactive1, step, one_guessed)
|
|
201
223
|
|
|
202
|
-
if active2.status in (TIMEOUT, ERROR) or two_bad_response:
|
|
224
|
+
if active2.status in (TIMEOUT, ERROR) or two_bad_response or two_bad_guess:
|
|
203
225
|
end_game(active2, -1, active2.status)
|
|
204
226
|
end_game(inactive2, 1, DONE)
|
|
205
|
-
elif end_early or one_bad_response:
|
|
227
|
+
elif end_early or one_bad_response or one_bad_guess:
|
|
206
228
|
end_game(active2, 1, DONE)
|
|
207
229
|
end_game(inactive2, 1, DONE)
|
|
208
230
|
else:
|
|
@@ -6,6 +6,15 @@ def custom_questioner(obs):
|
|
|
6
6
|
return "banana"
|
|
7
7
|
return "Is it a banana?"
|
|
8
8
|
|
|
9
|
+
def last_round_guesser_error(obs):
|
|
10
|
+
if obs.turnType == "guess" and len(obs.questions) == 20:
|
|
11
|
+
a = 1
|
|
12
|
+
b = 0
|
|
13
|
+
return a / b
|
|
14
|
+
if obs.turnType == "guess":
|
|
15
|
+
return "banana"
|
|
16
|
+
return "Is it a banana?"
|
|
17
|
+
|
|
9
18
|
def custom_answerer():
|
|
10
19
|
return "no"
|
|
11
20
|
|
|
@@ -39,7 +48,6 @@ def test_llm_20_q_errors_on_error_answer():
|
|
|
39
48
|
assert json["name"] == "llm_20_questions"
|
|
40
49
|
assert json["rewards"] == [1, 1, 1, None]
|
|
41
50
|
assert json["statuses"] == ["DONE", "DONE", "DONE", "ERROR"]
|
|
42
|
-
print(len(json["steps"]))
|
|
43
51
|
assert len(json["steps"]) == 3
|
|
44
52
|
|
|
45
53
|
def test_llm_20_q_errors_on_error_question():
|
|
@@ -49,5 +57,12 @@ def test_llm_20_q_errors_on_error_question():
|
|
|
49
57
|
assert json["name"] == "llm_20_questions"
|
|
50
58
|
assert json["rewards"] == [1, 1, None, 1]
|
|
51
59
|
assert json["statuses"] == ["DONE", "DONE", "ERROR", "DONE"]
|
|
52
|
-
|
|
53
|
-
|
|
60
|
+
assert len(json["steps"]) == 2
|
|
61
|
+
|
|
62
|
+
def test_llm_20_q_errors_on_error_last_guess():
|
|
63
|
+
env = make("llm_20_questions", debug=True)
|
|
64
|
+
env.run([custom_questioner, custom_answerer, last_round_guesser_error, custom_answerer])
|
|
65
|
+
json = env.toJSON()
|
|
66
|
+
assert json["name"] == "llm_20_questions"
|
|
67
|
+
assert json["rewards"] == [1, 1, None, 1]
|
|
68
|
+
assert json["statuses"] == ["DONE", "DONE", "ERROR", "DONE"]
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
kaggle_environments/__init__.py,sha256=
|
|
1
|
+
kaggle_environments/__init__.py,sha256=oU4_4nptOEcuW1zMtVey6bzd7GOtU50VuXXIwrqijK0,1703
|
|
2
2
|
kaggle_environments/agent.py,sha256=BpYrAC6EOhJF3Wzynq-CWg8l-z5uXW1Lq4qUsyOM0ik,6203
|
|
3
3
|
kaggle_environments/api.py,sha256=eLBKqr11Ku4tdsMUdUqy74FIVEA_hdV3_QUpX84x3Z8,798
|
|
4
4
|
kaggle_environments/core.py,sha256=IrEkN9cIA2djBAxI8Sz1GRpGNKjhqbnBdV6irAeTm8Q,27851
|
|
@@ -70,10 +70,10 @@ kaggle_environments/envs/kore_fleets/starter_bots/ts/test/configuration.json,sha
|
|
|
70
70
|
kaggle_environments/envs/kore_fleets/starter_bots/ts/test/fullob.json,sha256=lEWzlv1rqiDMRmLqiGIO3j6m2Uf7OMjXx0zXBplAz1M,6791
|
|
71
71
|
kaggle_environments/envs/kore_fleets/starter_bots/ts/test/observation.json,sha256=SIgLl8uTPmv2T_-g3gsFaibh_DWfvZNlZS7yPXL1Cnc,5998
|
|
72
72
|
kaggle_environments/envs/llm_20_questions/keywords.py,sha256=BnyVrV0_xbiDt_Td4YXSKae9hHndAo5YYfYVtyL4eS4,45282
|
|
73
|
-
kaggle_environments/envs/llm_20_questions/llm_20_questions.js,sha256=
|
|
73
|
+
kaggle_environments/envs/llm_20_questions/llm_20_questions.js,sha256=3y_5q9c7EMaDJAbOnebK9xnzOh2z0eH4orW6eP1PMOs,6319
|
|
74
74
|
kaggle_environments/envs/llm_20_questions/llm_20_questions.json,sha256=VYxgQEDCaJv910sQdE_FOtV2w1V83Y3C6nTjx4FFZyo,2101
|
|
75
|
-
kaggle_environments/envs/llm_20_questions/llm_20_questions.py,sha256=
|
|
76
|
-
kaggle_environments/envs/llm_20_questions/test_llm_20_questions.py,sha256=
|
|
75
|
+
kaggle_environments/envs/llm_20_questions/llm_20_questions.py,sha256=kXRQfYQWCPE1rqkcHz3luebBnDKDuoW-Wk9aB2KLjIs,10236
|
|
76
|
+
kaggle_environments/envs/llm_20_questions/test_llm_20_questions.py,sha256=GxVurD9rO8H78xFmG15HpqbyEFj4yoRd79MNX8UtxHo,2375
|
|
77
77
|
kaggle_environments/envs/lux_ai_2021/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
78
78
|
kaggle_environments/envs/lux_ai_2021/agents.py,sha256=bDqsY17Jxrk69a8HXb96ex2U1ipKkQPVJuXxmiA5hMA,421
|
|
79
79
|
kaggle_environments/envs/lux_ai_2021/index.html,sha256=4Ec1FuHuuH1EvkvlLOpNUUFYLovnS_IA-rOOHEUjcGY,1550
|
|
@@ -177,9 +177,9 @@ kaggle_environments/envs/tictactoe/tictactoe.js,sha256=NZDT-oSG0a6a-rso9Ldh9qkJw
|
|
|
177
177
|
kaggle_environments/envs/tictactoe/tictactoe.json,sha256=zMXZ8-fpT7FBhzz2FFBvRLn4XwtngjEqOieMvI6cCj8,1121
|
|
178
178
|
kaggle_environments/envs/tictactoe/tictactoe.py,sha256=iLNU5V-lz7Xab-d1vpPMfU5jDM3QtgBUH63Y_SU7I9Y,3639
|
|
179
179
|
kaggle_environments/static/player.html,sha256=HH8qvFfTIDw8eZvw5W88jcCu58Lo4_eUQ1ak46KWVGQ,22945
|
|
180
|
-
kaggle_environments-1.14.
|
|
181
|
-
kaggle_environments-1.14.
|
|
182
|
-
kaggle_environments-1.14.
|
|
183
|
-
kaggle_environments-1.14.
|
|
184
|
-
kaggle_environments-1.14.
|
|
185
|
-
kaggle_environments-1.14.
|
|
180
|
+
kaggle_environments-1.14.12.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
181
|
+
kaggle_environments-1.14.12.dist-info/METADATA,sha256=nPl33KIBUPk78LAv-6FWRvFRRzSEdoqp5a5AUezMs4M,10701
|
|
182
|
+
kaggle_environments-1.14.12.dist-info/WHEEL,sha256=m9WAupmBd2JGDsXWQGJgMGXIWbQY3F5c2xBJbBhq0nY,110
|
|
183
|
+
kaggle_environments-1.14.12.dist-info/entry_points.txt,sha256=HbVC-LKGQFV6lEEYBYyDTtrkHgdHJUWQ8_qt9KHGqz4,70
|
|
184
|
+
kaggle_environments-1.14.12.dist-info/top_level.txt,sha256=v3MMWIPMQFcI-WuF_dJngHWe9Bb2yH_6p4wat1x4gAc,20
|
|
185
|
+
kaggle_environments-1.14.12.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
{kaggle_environments-1.14.11.dist-info → kaggle_environments-1.14.12.dist-info}/entry_points.txt
RENAMED
|
File without changes
|
{kaggle_environments-1.14.11.dist-info → kaggle_environments-1.14.12.dist-info}/top_level.txt
RENAMED
|
File without changes
|