kaggle-environments 1.14.11__py2.py3-none-any.whl → 1.14.13__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.11"
24
+ __version__ = "1.14.13"
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 team2_text = info?.TeamNames?.[2] || "Team 2";
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;
@@ -114,7 +116,7 @@ async function renderer(context) {
114
116
  ctx.fillText("Keyword: " + state[1].observation.keyword, label_x, line_height * line);
115
117
  ctx.fillText("Round: " + Math.floor(step / 3 + 1), team2_x, line_height * line);
116
118
 
117
- line += 2;
119
+ line++;
118
120
 
119
121
  // Team Row
120
122
  ctx.fillText(team1_text, team1_x, line_height * line);
@@ -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
- print(len(json["steps"]))
53
- assert len(json["steps"]) == 2
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,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: kaggle-environments
3
- Version: 1.14.11
3
+ Version: 1.14.13
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=jB8Zxnx8_IrtPX8ArsCgrfeRPXcejHOZvDx1-PhHiE0,1703
1
+ kaggle_environments/__init__.py,sha256=U7wf4HpvO-9e2E24PNkNk2XyiyikM4fGFd4CU3xTFtw,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=o30Nx1Tt0eAxBsQukmyxYlr7GuvptTUADWUnEnYDHe8,6009
73
+ kaggle_environments/envs/llm_20_questions/llm_20_questions.js,sha256=VAJGIS-XAPV2UNaut8qnbH8Ho4tQ9fgguLT81FzWhD8,6316
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=Xj1slTw2WVwf94NNKV92qqJI52vuIY8quDwzuJq5Kgc,9563
76
- kaggle_environments/envs/llm_20_questions/test_llm_20_questions.py,sha256=sq04OePvY9VSR4Cjw4RI_i5FMwGni_ewpr5fcF2HldY,1831
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.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,,
180
+ kaggle_environments-1.14.13.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
181
+ kaggle_environments-1.14.13.dist-info/METADATA,sha256=e5v8y6C10lcDmDCnDFu6uxbG58LWdte5b6puxna7yrw,10701
182
+ kaggle_environments-1.14.13.dist-info/WHEEL,sha256=m9WAupmBd2JGDsXWQGJgMGXIWbQY3F5c2xBJbBhq0nY,110
183
+ kaggle_environments-1.14.13.dist-info/entry_points.txt,sha256=HbVC-LKGQFV6lEEYBYyDTtrkHgdHJUWQ8_qt9KHGqz4,70
184
+ kaggle_environments-1.14.13.dist-info/top_level.txt,sha256=v3MMWIPMQFcI-WuF_dJngHWe9Bb2yH_6p4wat1x4gAc,20
185
+ kaggle_environments-1.14.13.dist-info/RECORD,,