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.

@@ -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.9"
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, random
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, RANDOM_ANSWERER: random_answerer, RANDOM_GUESSER: random_guesser}
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, inactive, score, DONE, DONE)
106
+ end_game(active, score, DONE)
107
+ end_game(inactive, score, DONE)
122
108
  return guessed
123
109
 
124
- def end_game(active, inactive, reward, status, inactive_status):
125
- active.observation.keyword = keyword
126
- active.observation.category = category
127
- inactive.observation.keyword = keyword
128
- inactive.observation.category = category
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, inactive, -1, ERROR, DONE)
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, inactive, -1, ERROR, DONE)
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, inactive, -1, DONE, DONE)
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 not None:
191
- guessed = False
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
- if active1.status in (TIMEOUT, ERROR):
199
- end_game(active1, inactive1, 0, active1.status, DONE)
200
- elif end_early:
201
- end_game(active1, inactive1, 0, DONE, DONE)
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
- if active2.status in (TIMEOUT, ERROR):
214
- end_game(active2, inactive2, 0, active2.status, DONE)
215
- elif end_early:
216
- end_game(active2, inactive2, 0, DONE, DONE)
217
- else:
218
- increment_turn(active2, inactive2, step, guessed)
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, inactive2, 0, DONE, DONE)
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, inactive1, 0, DONE, DONE)
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,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: kaggle-environments
3
- Version: 1.14.9
3
+ Version: 1.14.11
4
4
  Summary: Kaggle Environments
5
5
  Home-page: https://github.com/Kaggle/kaggle-environments
6
6
  Author: Kaggle
@@ -1,4 +1,4 @@
1
- kaggle_environments/__init__.py,sha256=-cMWlmk778J5lbZYSW-yQhB6Ai_NOhDZDiRJd0SL13k,1702
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=vLNs0yKo86miW2TUYsmWyfOYn9f-jH-H7_krQ3neeHY,9873
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.9.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
180
- kaggle_environments-1.14.9.dist-info/METADATA,sha256=9FBsEf3b8jV3jB8F8N6_bQtqPqQYTHQ6hjmfomTgzMo,10700
181
- kaggle_environments-1.14.9.dist-info/WHEEL,sha256=m9WAupmBd2JGDsXWQGJgMGXIWbQY3F5c2xBJbBhq0nY,110
182
- kaggle_environments-1.14.9.dist-info/entry_points.txt,sha256=HbVC-LKGQFV6lEEYBYyDTtrkHgdHJUWQ8_qt9KHGqz4,70
183
- kaggle_environments-1.14.9.dist-info/top_level.txt,sha256=v3MMWIPMQFcI-WuF_dJngHWe9Bb2yH_6p4wat1x4gAc,20
184
- kaggle_environments-1.14.9.dist-info/RECORD,,
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,,