kaggle-environments 1.14.9__py2.py3-none-any.whl → 1.14.11__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.py +53 -60
- kaggle_environments/envs/llm_20_questions/test_llm_20_questions.py +53 -0
- {kaggle_environments-1.14.9.dist-info → kaggle_environments-1.14.11.dist-info}/METADATA +1 -1
- {kaggle_environments-1.14.9.dist-info → kaggle_environments-1.14.11.dist-info}/RECORD +9 -8
- {kaggle_environments-1.14.9.dist-info → kaggle_environments-1.14.11.dist-info}/LICENSE +0 -0
- {kaggle_environments-1.14.9.dist-info → kaggle_environments-1.14.11.dist-info}/WHEEL +0 -0
- {kaggle_environments-1.14.9.dist-info → kaggle_environments-1.14.11.dist-info}/entry_points.txt +0 -0
- {kaggle_environments-1.14.9.dist-info → kaggle_environments-1.14.11.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.11"
|
|
25
25
|
|
|
26
26
|
__all__ = ["Agent", "environments", "errors", "evaluate", "http_request",
|
|
27
27
|
"make", "register", "utils", "__version__",
|
|
@@ -8,7 +8,7 @@ import torch
|
|
|
8
8
|
from .keywords import KEYWORDS_JSON
|
|
9
9
|
from os import path
|
|
10
10
|
from pathlib import Path
|
|
11
|
-
from random import choice
|
|
11
|
+
from random import choice
|
|
12
12
|
from string import Template
|
|
13
13
|
from transformers import T5Tokenizer, T5ForConditionalGeneration
|
|
14
14
|
|
|
@@ -29,9 +29,7 @@ TIMEOUT = "TIMEOUT"
|
|
|
29
29
|
GUESS = "guess"
|
|
30
30
|
ASK = "ask"
|
|
31
31
|
GUESSER = "guesser"
|
|
32
|
-
RANDOM_GUESSER = "random_guesser"
|
|
33
32
|
ANSWERER = "answerer"
|
|
34
|
-
RANDOM_ANSWERER = "random_answerer"
|
|
35
33
|
|
|
36
34
|
keywords_list = json.loads(KEYWORDS_JSON)
|
|
37
35
|
keyword_cat = random.choice(keywords_list)
|
|
@@ -70,19 +68,6 @@ def guesser_agent(obs):
|
|
|
70
68
|
|
|
71
69
|
return call_llm(prompt)
|
|
72
70
|
|
|
73
|
-
def random_guesser(obs):
|
|
74
|
-
if obs.turnType == GUESS:
|
|
75
|
-
return "banana"
|
|
76
|
-
if random() < .5:
|
|
77
|
-
return "Is is a person?"
|
|
78
|
-
if random() < .5:
|
|
79
|
-
return "Is it a place?"
|
|
80
|
-
return "Is it a thing?"
|
|
81
|
-
|
|
82
|
-
def random_answerer():
|
|
83
|
-
if random() > .5:
|
|
84
|
-
return "yes"
|
|
85
|
-
return "no"
|
|
86
71
|
|
|
87
72
|
|
|
88
73
|
def answerer_agent(obs):
|
|
@@ -99,7 +84,7 @@ def answerer_agent(obs):
|
|
|
99
84
|
return ""
|
|
100
85
|
|
|
101
86
|
|
|
102
|
-
agents = {GUESSER: guesser_agent, ANSWERER: answerer_agent
|
|
87
|
+
agents = {GUESSER: guesser_agent, ANSWERER: answerer_agent}
|
|
103
88
|
|
|
104
89
|
def guesser_action(active, inactive, step):
|
|
105
90
|
inactive.observation.keyword = keyword
|
|
@@ -118,40 +103,43 @@ def guesser_action(active, inactive, step):
|
|
|
118
103
|
if active.action and keyword_guessed(active.action):
|
|
119
104
|
guessed = True
|
|
120
105
|
score = 20 - int(step / 3)
|
|
121
|
-
end_game(active,
|
|
106
|
+
end_game(active, score, DONE)
|
|
107
|
+
end_game(inactive, score, DONE)
|
|
122
108
|
return guessed
|
|
123
109
|
|
|
124
|
-
def end_game(
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
active.reward = reward
|
|
130
|
-
inactive.reward = reward
|
|
131
|
-
active.status = status
|
|
132
|
-
inactive.status = inactive_status
|
|
133
|
-
|
|
110
|
+
def end_game(agent, reward, status):
|
|
111
|
+
agent.observation.keyword = keyword
|
|
112
|
+
agent.observation.category = category
|
|
113
|
+
agent.reward = reward
|
|
114
|
+
agent.status = status
|
|
134
115
|
|
|
135
116
|
def answerer_action(active, inactive):
|
|
136
117
|
active.observation.keyword = keyword
|
|
137
118
|
active.observation.category = category
|
|
138
119
|
response = active.action
|
|
120
|
+
bad_response = False
|
|
139
121
|
if not response:
|
|
140
122
|
response = "none"
|
|
141
|
-
end_game(active,
|
|
123
|
+
end_game(active, -1, ERROR)
|
|
124
|
+
end_game(inactive, 1, DONE)
|
|
125
|
+
bad_response = True
|
|
142
126
|
elif "yes" in response.lower():
|
|
143
127
|
response = "yes"
|
|
144
128
|
elif "no" in response.lower():
|
|
145
129
|
response = "no"
|
|
146
130
|
else:
|
|
147
131
|
response = "maybe"
|
|
148
|
-
end_game(active,
|
|
132
|
+
end_game(active, -1, ERROR)
|
|
133
|
+
end_game(inactive, 1, DONE)
|
|
134
|
+
bad_response = True
|
|
149
135
|
active.observation.answers.append(response)
|
|
150
136
|
inactive.observation.answers.append(response)
|
|
137
|
+
return bad_response
|
|
151
138
|
|
|
152
139
|
def increment_turn(active, inactive, step, guessed):
|
|
153
140
|
if step == 59 and not guessed:
|
|
154
|
-
end_game(active,
|
|
141
|
+
end_game(active, -1, DONE)
|
|
142
|
+
end_game(inactive, -1, DONE)
|
|
155
143
|
elif active.observation.turnType == "guess":
|
|
156
144
|
active.observation.turnType = "ask"
|
|
157
145
|
elif active.observation.turnType == "ask":
|
|
@@ -186,42 +174,47 @@ def interpreter(state, env):
|
|
|
186
174
|
end_early = (active1 and active1.status) in (TIMEOUT, ERROR) or (active2 and active2.status in (TIMEOUT, ERROR))
|
|
187
175
|
one_guessed = False
|
|
188
176
|
two_guessed = False
|
|
177
|
+
one_bad_response = False
|
|
178
|
+
two_bad_response = False
|
|
189
179
|
|
|
190
|
-
if active1 is
|
|
191
|
-
|
|
192
|
-
if active1.observation.role == GUESSER:
|
|
193
|
-
guessed = guesser_action(active1, inactive1, step)
|
|
194
|
-
one_guessed = guessed
|
|
195
|
-
else:
|
|
196
|
-
answerer_action(active1, inactive1)
|
|
180
|
+
if active1 is None or active2 is None:
|
|
181
|
+
raise ValueError
|
|
197
182
|
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
else:
|
|
203
|
-
increment_turn(active1, inactive1, step, guessed)
|
|
204
|
-
|
|
205
|
-
if active2 is not None:
|
|
206
|
-
guessed = False
|
|
207
|
-
if active2.observation.role == GUESSER:
|
|
208
|
-
guessed = guesser_action(active2, inactive2, step)
|
|
209
|
-
two_guessed = guessed
|
|
210
|
-
else:
|
|
211
|
-
answerer_action(active2, inactive2)
|
|
183
|
+
if active1.observation.role == GUESSER:
|
|
184
|
+
one_guessed = guesser_action(active1, inactive1, step)
|
|
185
|
+
else:
|
|
186
|
+
one_bad_response = answerer_action(active1, inactive1)
|
|
212
187
|
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
188
|
+
if active2.observation.role == GUESSER:
|
|
189
|
+
two_guessed = guesser_action(active2, inactive2, step)
|
|
190
|
+
else:
|
|
191
|
+
two_bad_response = answerer_action(active2, inactive2)
|
|
192
|
+
|
|
193
|
+
if active1.status in (TIMEOUT, ERROR) or one_bad_response:
|
|
194
|
+
end_game(active1, -1, active1.status)
|
|
195
|
+
end_game(inactive1, 1, DONE)
|
|
196
|
+
elif end_early or two_bad_response:
|
|
197
|
+
end_game(active1, 1, DONE)
|
|
198
|
+
end_game(inactive1, 1, DONE)
|
|
199
|
+
else:
|
|
200
|
+
increment_turn(active1, inactive1, step, one_guessed)
|
|
201
|
+
|
|
202
|
+
if active2.status in (TIMEOUT, ERROR) or two_bad_response:
|
|
203
|
+
end_game(active2, -1, active2.status)
|
|
204
|
+
end_game(inactive2, 1, DONE)
|
|
205
|
+
elif end_early or one_bad_response:
|
|
206
|
+
end_game(active2, 1, DONE)
|
|
207
|
+
end_game(inactive2, 1, DONE)
|
|
208
|
+
else:
|
|
209
|
+
increment_turn(active2, inactive2, step, two_guessed)
|
|
219
210
|
|
|
220
211
|
# make sure to end the game if only one team guessed correctly this round
|
|
221
212
|
if one_guessed and not two_guessed:
|
|
222
|
-
end_game(active2,
|
|
213
|
+
end_game(active2, 0, DONE)
|
|
214
|
+
end_game(inactive2, 0, DONE)
|
|
223
215
|
elif two_guessed and not one_guessed:
|
|
224
|
-
end_game(active1,
|
|
216
|
+
end_game(active1, 0, DONE)
|
|
217
|
+
end_game(inactive1, 0, DONE)
|
|
225
218
|
|
|
226
219
|
return state
|
|
227
220
|
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
|
|
2
|
+
from kaggle_environments import make
|
|
3
|
+
|
|
4
|
+
def custom_questioner(obs):
|
|
5
|
+
if obs.turnType == "guess":
|
|
6
|
+
return "banana"
|
|
7
|
+
return "Is it a banana?"
|
|
8
|
+
|
|
9
|
+
def custom_answerer():
|
|
10
|
+
return "no"
|
|
11
|
+
|
|
12
|
+
def bad_answerer():
|
|
13
|
+
return "maybe?"
|
|
14
|
+
|
|
15
|
+
def error_agent():
|
|
16
|
+
raise ValueError
|
|
17
|
+
|
|
18
|
+
def test_llm_20_q_completes():
|
|
19
|
+
env = make("llm_20_questions", debug=True)
|
|
20
|
+
env.run([custom_questioner, custom_answerer, custom_questioner, custom_answerer])
|
|
21
|
+
json = env.toJSON()
|
|
22
|
+
assert json["name"] == "llm_20_questions"
|
|
23
|
+
assert json["statuses"] == ["DONE", "DONE", "DONE", "DONE"]
|
|
24
|
+
|
|
25
|
+
def test_llm_20_q_errors_on_bad_answer():
|
|
26
|
+
env = make("llm_20_questions", debug=True)
|
|
27
|
+
env.run([custom_questioner, custom_answerer, custom_questioner, bad_answerer])
|
|
28
|
+
json = env.toJSON()
|
|
29
|
+
assert json["name"] == "llm_20_questions"
|
|
30
|
+
assert json["rewards"] == [1, 1, 1, None]
|
|
31
|
+
assert json["statuses"] == ["DONE", "DONE", "DONE", "ERROR"]
|
|
32
|
+
print(len(json["steps"]))
|
|
33
|
+
assert len(json["steps"]) == 3
|
|
34
|
+
|
|
35
|
+
def test_llm_20_q_errors_on_error_answer():
|
|
36
|
+
env = make("llm_20_questions", debug=True)
|
|
37
|
+
env.run([custom_questioner, custom_answerer, custom_questioner, error_agent])
|
|
38
|
+
json = env.toJSON()
|
|
39
|
+
assert json["name"] == "llm_20_questions"
|
|
40
|
+
assert json["rewards"] == [1, 1, 1, None]
|
|
41
|
+
assert json["statuses"] == ["DONE", "DONE", "DONE", "ERROR"]
|
|
42
|
+
print(len(json["steps"]))
|
|
43
|
+
assert len(json["steps"]) == 3
|
|
44
|
+
|
|
45
|
+
def test_llm_20_q_errors_on_error_question():
|
|
46
|
+
env = make("llm_20_questions", debug=True)
|
|
47
|
+
env.run([custom_questioner, custom_answerer, error_agent, custom_answerer])
|
|
48
|
+
json = env.toJSON()
|
|
49
|
+
assert json["name"] == "llm_20_questions"
|
|
50
|
+
assert json["rewards"] == [1, 1, None, 1]
|
|
51
|
+
assert json["statuses"] == ["DONE", "DONE", "ERROR", "DONE"]
|
|
52
|
+
print(len(json["steps"]))
|
|
53
|
+
assert len(json["steps"]) == 2
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
kaggle_environments/__init__.py,sha256
|
|
1
|
+
kaggle_environments/__init__.py,sha256=jB8Zxnx8_IrtPX8ArsCgrfeRPXcejHOZvDx1-PhHiE0,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
|
|
@@ -72,7 +72,8 @@ kaggle_environments/envs/kore_fleets/starter_bots/ts/test/observation.json,sha25
|
|
|
72
72
|
kaggle_environments/envs/llm_20_questions/keywords.py,sha256=BnyVrV0_xbiDt_Td4YXSKae9hHndAo5YYfYVtyL4eS4,45282
|
|
73
73
|
kaggle_environments/envs/llm_20_questions/llm_20_questions.js,sha256=o30Nx1Tt0eAxBsQukmyxYlr7GuvptTUADWUnEnYDHe8,6009
|
|
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=
|
|
75
|
+
kaggle_environments/envs/llm_20_questions/llm_20_questions.py,sha256=Xj1slTw2WVwf94NNKV92qqJI52vuIY8quDwzuJq5Kgc,9563
|
|
76
|
+
kaggle_environments/envs/llm_20_questions/test_llm_20_questions.py,sha256=sq04OePvY9VSR4Cjw4RI_i5FMwGni_ewpr5fcF2HldY,1831
|
|
76
77
|
kaggle_environments/envs/lux_ai_2021/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
77
78
|
kaggle_environments/envs/lux_ai_2021/agents.py,sha256=bDqsY17Jxrk69a8HXb96ex2U1ipKkQPVJuXxmiA5hMA,421
|
|
78
79
|
kaggle_environments/envs/lux_ai_2021/index.html,sha256=4Ec1FuHuuH1EvkvlLOpNUUFYLovnS_IA-rOOHEUjcGY,1550
|
|
@@ -176,9 +177,9 @@ kaggle_environments/envs/tictactoe/tictactoe.js,sha256=NZDT-oSG0a6a-rso9Ldh9qkJw
|
|
|
176
177
|
kaggle_environments/envs/tictactoe/tictactoe.json,sha256=zMXZ8-fpT7FBhzz2FFBvRLn4XwtngjEqOieMvI6cCj8,1121
|
|
177
178
|
kaggle_environments/envs/tictactoe/tictactoe.py,sha256=iLNU5V-lz7Xab-d1vpPMfU5jDM3QtgBUH63Y_SU7I9Y,3639
|
|
178
179
|
kaggle_environments/static/player.html,sha256=HH8qvFfTIDw8eZvw5W88jcCu58Lo4_eUQ1ak46KWVGQ,22945
|
|
179
|
-
kaggle_environments-1.14.
|
|
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.
|
|
180
|
+
kaggle_environments-1.14.11.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
181
|
+
kaggle_environments-1.14.11.dist-info/METADATA,sha256=uL7fO1pEmq1BAPPyPUXv3mBa3JSlWnN8LbJcZb_kXfc,10701
|
|
182
|
+
kaggle_environments-1.14.11.dist-info/WHEEL,sha256=m9WAupmBd2JGDsXWQGJgMGXIWbQY3F5c2xBJbBhq0nY,110
|
|
183
|
+
kaggle_environments-1.14.11.dist-info/entry_points.txt,sha256=HbVC-LKGQFV6lEEYBYyDTtrkHgdHJUWQ8_qt9KHGqz4,70
|
|
184
|
+
kaggle_environments-1.14.11.dist-info/top_level.txt,sha256=v3MMWIPMQFcI-WuF_dJngHWe9Bb2yH_6p4wat1x4gAc,20
|
|
185
|
+
kaggle_environments-1.14.11.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
{kaggle_environments-1.14.9.dist-info → kaggle_environments-1.14.11.dist-info}/entry_points.txt
RENAMED
|
File without changes
|
{kaggle_environments-1.14.9.dist-info → kaggle_environments-1.14.11.dist-info}/top_level.txt
RENAMED
|
File without changes
|