inspect-ai 0.3.68__py3-none-any.whl → 0.3.69__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.
@@ -111,16 +111,12 @@ class MistralAPI(ModelAPI):
111
111
  if base_url:
112
112
  model_args["server_url"] = base_url
113
113
 
114
- # create client
115
- self.client = Mistral(
116
- api_key=self.api_key,
117
- timeout_ms=(config.timeout if config.timeout else DEFAULT_TIMEOUT) * 1000,
118
- **model_args,
119
- )
114
+ self.model_args = model_args
120
115
 
121
116
  @override
122
117
  async def close(self) -> None:
123
- await self.client.sdk_configuration.async_client.aclose()
118
+ # client is created and destroyed in generate
119
+ pass
124
120
 
125
121
  async def generate(
126
122
  self,
@@ -149,7 +145,13 @@ class MistralAPI(ModelAPI):
149
145
 
150
146
  # send request
151
147
  try:
152
- response = await self.client.chat.complete_async(**request)
148
+ with Mistral(
149
+ api_key=self.api_key,
150
+ timeout_ms=(config.timeout if config.timeout else DEFAULT_TIMEOUT)
151
+ * 1000,
152
+ **self.model_args,
153
+ ) as client:
154
+ response = await client.chat.complete_async(**request)
153
155
  except SDKError as ex:
154
156
  if ex.status_code == 400:
155
157
  return self.handle_bad_request(ex), mistral_model_call(request, None)
@@ -93,8 +93,8 @@ def vertex() -> type[ModelAPI]:
93
93
  @modelapi(name="google")
94
94
  def google() -> type[ModelAPI]:
95
95
  FEATURE = "Google API"
96
- PACKAGE = "google-generativeai"
97
- MIN_VERSION = "0.8.4"
96
+ PACKAGE = "google-genai"
97
+ MIN_VERSION = "1.2.0"
98
98
 
99
99
  # workaround log spam
100
100
  # https://github.com/ray-project/ray/issues/24917
@@ -102,7 +102,7 @@ def google() -> type[ModelAPI]:
102
102
 
103
103
  # verify we have the package
104
104
  try:
105
- import google.generativeai # type: ignore # noqa: F401
105
+ import google.genai # type: ignore # noqa: F401
106
106
  except ImportError:
107
107
  raise pip_dependency_error(FEATURE, [PACKAGE])
108
108
 
@@ -110,9 +110,9 @@ def google() -> type[ModelAPI]:
110
110
  verify_required_version(FEATURE, PACKAGE, MIN_VERSION)
111
111
 
112
112
  # in the clear
113
- from .google import GoogleAPI
113
+ from .google import GoogleGenAIAPI
114
114
 
115
- return GoogleAPI
115
+ return GoogleGenAIAPI
116
116
 
117
117
 
118
118
  @modelapi(name="hf")
@@ -2,6 +2,7 @@ import inspect
2
2
  from logging import getLogger
3
3
  from typing import Any, Awaitable, Callable, TypeVar, cast
4
4
 
5
+ from inspect_ai._util.interrupt import check_sample_interrupt
5
6
  from inspect_ai._util.registry import (
6
7
  RegistryInfo,
7
8
  is_registry_object,
@@ -115,6 +116,7 @@ class Plan(Solver):
115
116
  with solver_transcript(self.finish, state) as st:
116
117
  state = await self.finish(state, generate)
117
118
  st.complete(state)
119
+ check_sample_interrupt()
118
120
 
119
121
  # mark completed
120
122
  state.completed = True
@@ -124,6 +126,7 @@ class Plan(Solver):
124
126
  if self.cleanup:
125
127
  try:
126
128
  await self.cleanup(state)
129
+ check_sample_interrupt()
127
130
  except Exception as ex:
128
131
  logger.warning(f"Exception occurred during plan cleanup: {ex}")
129
132
 
@@ -15,6 +15,7 @@ from typing import (
15
15
  from typing_extensions import Unpack
16
16
 
17
17
  from inspect_ai._util._async import is_callable_coroutine
18
+ from inspect_ai._util.interrupt import check_sample_interrupt
18
19
  from inspect_ai._util.registry import (
19
20
  RegistryInfo,
20
21
  registry_add,
@@ -200,6 +201,7 @@ def solver(
200
201
  state: TaskState, generate: Generate
201
202
  ) -> TaskState:
202
203
  state = await original_call(state, generate)
204
+ check_sample_interrupt()
203
205
  set_sample_state(state)
204
206
  return state
205
207
 
@@ -215,6 +217,7 @@ def solver(
215
217
  state: TaskState, generate: Generate
216
218
  ) -> TaskState:
217
219
  state = await solver(state, generate)
220
+ check_sample_interrupt()
218
221
  set_sample_state(state)
219
222
  return state
220
223
 
@@ -8,6 +8,7 @@ from typing import Any, Iterable, SupportsIndex, Type, Union, cast, overload
8
8
 
9
9
  from pydantic_core import to_jsonable_python
10
10
 
11
+ from inspect_ai._util.interrupt import check_sample_interrupt
11
12
  from inspect_ai.dataset._dataset import MT, Sample, metadata_as
12
13
  from inspect_ai.model import (
13
14
  ChatMessage,
@@ -333,7 +334,7 @@ class TaskState:
333
334
  def completed(self) -> bool:
334
335
  """Is the task completed.
335
336
 
336
- Additionally, checks message and token limits and raises if they are exceeded.
337
+ Additionally, checks message and token limits and raises if they are exceeded, and also checks for an operator interrupt of the sample.
337
338
  """
338
339
  from inspect_ai.log._samples import set_active_sample_total_messages
339
340
 
@@ -356,6 +357,7 @@ class TaskState:
356
357
  "token", value=self.token_usage, limit=self.token_limit, state=self
357
358
  )
358
359
  else:
360
+ check_sample_interrupt()
359
361
  return self._completed
360
362
 
361
363
  @completed.setter
@@ -56,17 +56,22 @@ async def project_cleanup_shutdown(cleanup: bool) -> None:
56
56
  title_style="bold",
57
57
  title_justify="left",
58
58
  )
59
+ table.add_column("Sample ID")
60
+ table.add_column("Epoch")
59
61
  table.add_column("Container(s)", no_wrap=True)
60
- table.add_column("Cleanup")
61
62
  for project in shutdown_projects:
62
63
  containers = await compose_ps(project, all=True)
63
64
  table.add_row(
65
+ str(project.sample_id) if project.sample_id is not None else "",
66
+ str(project.epoch if project.epoch is not None else ""),
64
67
  "\n".join(container["Name"] for container in containers),
65
- f"[blue]inspect sandbox cleanup docker {project.name}[/blue]",
66
68
  )
67
69
  print(table)
68
70
  print(
69
- "\nCleanup all environments with: [blue]inspect sandbox cleanup docker[/blue]\n"
71
+ "\n"
72
+ "Cleanup all containers : [blue]inspect sandbox cleanup docker[/blue]\n"
73
+ "Cleanup single container: [blue]inspect sandbox cleanup docker <container-id>[/blue]",
74
+ "\n",
70
75
  )
71
76
 
72
77
  # remove auto-compose files
@@ -28,7 +28,7 @@ COMPOSE_WAIT = 120
28
28
 
29
29
  async def compose_up(
30
30
  project: ComposeProject, services: dict[str, ComposeService]
31
- ) -> None:
31
+ ) -> ExecResult[str]:
32
32
  # compute the maximum amount of time we will
33
33
  up_command = ["up", "--detach", "--wait"]
34
34
 
@@ -49,7 +49,8 @@ async def compose_up(
49
49
  # passing the --wait flag (see https://github.com/docker/compose/issues/10596).
50
50
  # In practice, we will catch any errors when calling compose_check_running()
51
51
  # immediately after we call compose_up().
52
- await compose_command(up_command, project=project, timeout=timeout)
52
+ result = await compose_command(up_command, project=project, timeout=timeout)
53
+ return result
53
54
 
54
55
 
55
56
  async def compose_down(project: ComposeProject, quiet: bool = True) -> None:
@@ -121,14 +122,9 @@ async def compose_check_running(
121
122
  unhealthy_services = services
122
123
  for successful_service in successful_services:
123
124
  unhealthy_services.remove(successful_service["Service"])
124
-
125
- msg = (
126
- "One or more docker containers failed to start from "
127
- f"{project.config}: {','.join(unhealthy_services)}"
128
- )
129
- raise RuntimeError(msg)
125
+ return []
130
126
  else:
131
- raise RuntimeError("No services started")
127
+ return []
132
128
 
133
129
  return [service["Service"] for service in running_services]
134
130
 
@@ -139,8 +139,15 @@ class DockerSandboxEnvironment(SandboxEnvironment):
139
139
  env[key] = str(value)
140
140
 
141
141
  # create project
142
+ from inspect_ai.log._samples import sample_active
143
+
144
+ sample = sample_active()
142
145
  project = await ComposeProject.create(
143
- name=task_project_name(task_name), config=config, env=env
146
+ name=task_project_name(task_name),
147
+ config=config,
148
+ sample_id=sample.id if sample is not None else None,
149
+ epoch=sample.epoch if sample is not None else None,
150
+ env=env,
144
151
  )
145
152
 
146
153
  try:
@@ -148,13 +155,18 @@ class DockerSandboxEnvironment(SandboxEnvironment):
148
155
  services = await compose_services(project)
149
156
 
150
157
  # start the services
151
- await compose_up(project, services)
158
+ result = await compose_up(project, services)
152
159
 
153
160
  # check to ensure that the services are running
154
161
  running_services = await compose_check_running(
155
162
  list(services.keys()), project=project
156
163
  )
157
164
 
165
+ if not running_services:
166
+ raise RuntimeError(
167
+ f"No services started.\nCompose up stderr: {result.stderr}"
168
+ )
169
+
158
170
  # note that the project is running
159
171
  project_startup(project)
160
172
 
@@ -21,6 +21,8 @@ logger = getLogger(__name__)
21
21
  class ComposeProject:
22
22
  name: str
23
23
  config: str | None
24
+ sample_id: int | str | None
25
+ epoch: int | None
24
26
  env: dict[str, str] | None
25
27
 
26
28
  @classmethod
@@ -28,6 +30,9 @@ class ComposeProject:
28
30
  cls,
29
31
  name: str,
30
32
  config: SandboxEnvironmentConfigType | None,
33
+ *,
34
+ sample_id: int | str | None = None,
35
+ epoch: int | None = None,
31
36
  env: dict[str, str] = {},
32
37
  ) -> "ComposeProject":
33
38
  # resolve config to full path if we have one
@@ -58,16 +63,20 @@ class ComposeProject:
58
63
  ensure_auto_compose_file(config)
59
64
 
60
65
  # return project
61
- return ComposeProject(name, config, env)
66
+ return ComposeProject(name, config, sample_id=sample_id, epoch=epoch, env=env)
62
67
 
63
68
  def __init__(
64
69
  self,
65
70
  name: str,
66
71
  config: str | None,
72
+ sample_id: int | str | None,
73
+ epoch: int | None,
67
74
  env: dict[str, str],
68
75
  ) -> None:
69
76
  self.name = name
70
77
  self.config = config
78
+ self.sample_id = sample_id
79
+ self.epoch = epoch
71
80
  self.env = env
72
81
 
73
82
  def __eq__(self, other: object) -> bool:
@@ -445,7 +445,8 @@ async def test_exec_stdout_is_limited(sandbox_env: SandboxEnvironment) -> None:
445
445
  assert "limit of 10 MiB was exceeded" in str(e_info.value)
446
446
  truncated_output = e_info.value.truncated_output
447
447
  # `yes` outputs 'y\n' (ASCII) so the size equals the string length.
448
- assert truncated_output and len(truncated_output) == 10 * 1024**2
448
+ # some shells additionally output 'canceled\n' so we add fudge factor for that
449
+ assert truncated_output and (len(truncated_output) - 10 * 1024**2) < 10
449
450
 
450
451
 
451
452
  async def test_exec_stderr_is_limited(sandbox_env: SandboxEnvironment) -> None:
@@ -199,7 +199,10 @@ async def subprocess(
199
199
  else:
200
200
  result = await asyncio.wait_for(anext(rc), timeout=timeout)
201
201
  return cast(Union[ExecResult[str], ExecResult[bytes]], result)
202
- except asyncio.exceptions.TimeoutError:
202
+ # wait_for raises asyncio.TimeoutError under Python 3.10, but TimeoutError
203
+ # under Python > 3.11! asynio.timeout (introduced in Python 3.11) always
204
+ # raises the standard TimeoutError
205
+ except (TimeoutError, asyncio.exceptions.TimeoutError):
203
206
  # terminate timed out process -- try for graceful termination
204
207
  # then be more forceful if requied
205
208
  try:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: inspect_ai
3
- Version: 0.3.68
3
+ Version: 0.3.69
4
4
  Summary: Framework for large language model evaluations
5
5
  Author: UK AI Security Institute
6
6
  License: MIT License
@@ -53,7 +53,7 @@ Requires-Dist: anthropic; extra == "dev"
53
53
  Requires-Dist: aioboto3; extra == "dev"
54
54
  Requires-Dist: azure-ai-inference; extra == "dev"
55
55
  Requires-Dist: google-cloud-aiplatform; extra == "dev"
56
- Requires-Dist: google-generativeai; extra == "dev"
56
+ Requires-Dist: google-genai; extra == "dev"
57
57
  Requires-Dist: goodfire; extra == "dev"
58
58
  Requires-Dist: griffe; extra == "dev"
59
59
  Requires-Dist: groq; extra == "dev"
@@ -71,7 +71,7 @@ Requires-Dist: pytest-asyncio; extra == "dev"
71
71
  Requires-Dist: pytest-cov; extra == "dev"
72
72
  Requires-Dist: pytest-dotenv; extra == "dev"
73
73
  Requires-Dist: pytest-xdist; extra == "dev"
74
- Requires-Dist: ruff==0.9.5; extra == "dev"
74
+ Requires-Dist: ruff==0.9.6; extra == "dev"
75
75
  Requires-Dist: textual-dev>=0.86.2; extra == "dev"
76
76
  Requires-Dist: types-Markdown; extra == "dev"
77
77
  Requires-Dist: types-PyYAML; extra == "dev"
@@ -25,10 +25,10 @@ inspect_ai/_display/core/results.py,sha256=aFLmG1Ij0fxYk2848QgQlesfMeRdHVEg_W9es
25
25
  inspect_ai/_display/core/rich.py,sha256=GPzc-0PWZVOPWxnjfQmNSK66uZXc3x8joz4ethgv_4M,2729
26
26
  inspect_ai/_display/core/textual.py,sha256=kzMTt8ijrodwhDB5V50pP2IBhnUCusVbP86TytU_rA8,870
27
27
  inspect_ai/_display/plain/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
- inspect_ai/_display/plain/display.py,sha256=fGITQj6w4-2A4zNMKFW32wdyVB5JpK-LsXMbFckzXTA,6743
28
+ inspect_ai/_display/plain/display.py,sha256=WF16dmlKNQojdSWlu1RY6wfw2D0o5iA0tTaZ8vYKT8c,6700
29
29
  inspect_ai/_display/rich/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
30
  inspect_ai/_display/rich/display.py,sha256=aJiuaEL8aEdOvdkKWobhlDuMr2X2j1M_SiAezPd3k-A,10920
31
- inspect_ai/_display/textual/app.py,sha256=PyDkwzyEHLjObvwB3PtPlP0CSU9L7frYb1eoQ5MhnR0,15991
31
+ inspect_ai/_display/textual/app.py,sha256=wZ5nV_d1YA6pMVKobhhm4FLvDoVrfmgnyI9wDAg7Tpk,16030
32
32
  inspect_ai/_display/textual/app.tcss,sha256=ymx47Y2fAbce4vPOrpeij1p9qwSipT7Dd6fSxCTknT8,249
33
33
  inspect_ai/_display/textual/display.py,sha256=zTG8k67iT-xq1H8CVwtqZdvuo_O2hsgh4q4y8EKRkf8,2027
34
34
  inspect_ai/_display/textual/theme.py,sha256=SVf2UhQVuEOzzNx1Pl2bqLrofw13ykQKAVnevUpJBYs,588
@@ -36,7 +36,7 @@ inspect_ai/_display/textual/widgets/clock.py,sha256=pxXQOtadf6qdNMLQh_D3bx3SIPoB
36
36
  inspect_ai/_display/textual/widgets/console.py,sha256=lp5lbT9erPjxE1NWzvuJ5Bj8mN2ZZSBTgKQWHinMKgA,1590
37
37
  inspect_ai/_display/textual/widgets/footer.py,sha256=_l9BgJWXX_vXO2qrSIkeUPZzniYHa0qXaiSiy6479Tg,1106
38
38
  inspect_ai/_display/textual/widgets/port_mappings.py,sha256=mxQJGYeZh1aXNmW5z-Ukss7Zwul5qfH5CqtvTLl0BAU,2974
39
- inspect_ai/_display/textual/widgets/samples.py,sha256=rBaBP__MbKEX18B00nQCiLrWO9MmtSn0arh-zL90c8I,18206
39
+ inspect_ai/_display/textual/widgets/samples.py,sha256=CfNV3YHPMSeidClWw8HCX0rnePYOypSyzzJ5b4oxzck,19687
40
40
  inspect_ai/_display/textual/widgets/sandbox.py,sha256=_Ivpba2oIxs_Lw2Pic7BRoHeVu9ibaGPFhiyfzbcc9E,1146
41
41
  inspect_ai/_display/textual/widgets/task_detail.py,sha256=aaI626vbvieGbZtOKWmnaNWLivFMjnlDt4oqeTmKEZg,8389
42
42
  inspect_ai/_display/textual/widgets/tasks.py,sha256=2cqYJ3PGn4F-riSdB3Fp1H5YCWQ-PVh7L8OrLCPSiso,11283
@@ -89,10 +89,11 @@ inspect_ai/_util/hooks.py,sha256=8QnHCQQY_2XMYPkiPvixUgFY0E_niZvQhQDMI-eCdhM,435
89
89
  inspect_ai/_util/html.py,sha256=X62FY8gpEJ2ZQoDu2y8aQAbiBUIHKsd7DA9rWCIleo8,168
90
90
  inspect_ai/_util/http.py,sha256=c4yvH48ZkETZ7sNDuNzBR0NUS4r-6WzCaolW9my13ns,3628
91
91
  inspect_ai/_util/images.py,sha256=W7QJHyzuXhfy3VsLhKTzddSo1g69O9RxnTyhat48Wyo,1312
92
+ inspect_ai/_util/interrupt.py,sha256=atMrIdpQsk94HlAM5xnTwPgSGIo1CPvjl9z1hamgKFA,221
92
93
  inspect_ai/_util/json.py,sha256=qxr8KPQ3NLPDbSSuDQjRQqZcwCOOWpPpuYc36fXsj-w,3786
93
94
  inspect_ai/_util/kvstore.py,sha256=z2IXLWP4QqqGqsq5_MbYjBQPcEJqfWK4IyZXgV-kppA,2398
94
95
  inspect_ai/_util/list.py,sha256=6_5r5jI5RKK34kCmIqqVQ5hYG-G8v0F5H7L-DmQQ2E4,279
95
- inspect_ai/_util/logger.py,sha256=wLxB8fsY0_7dkpRYk7tkpK--vNGNd03dc6o2iPJkPyc,7170
96
+ inspect_ai/_util/logger.py,sha256=Tz1QkqCFKcfhsXaAFNS7znziTOq0BPDP4NxuzYcDaEw,7304
96
97
  inspect_ai/_util/notebook.py,sha256=Mgz3J4uBh-MqVBRmpiJqDHRpn2hd7HIOBeJBwLG-bbk,2998
97
98
  inspect_ai/_util/notgiven.py,sha256=zkn6AYflKLf8YlnwTAMxPLQ-4LyIVmKpGcNcXf-Ssng,457
98
99
  inspect_ai/_util/package.py,sha256=2ntItRYaYBaVWI5eDaB4FdpI1IUBiBWNRxq7FChvk1I,2729
@@ -105,7 +106,7 @@ inspect_ai/_util/retry.py,sha256=fAupOVgGJ0ImnmtXmCHBKRa3AQC7jDA-Zf_zilSCRl0,189
105
106
  inspect_ai/_util/rich.py,sha256=sNWEsGlGmkkZZLo4AcEv-_yJI1bI0HcpZVt7wNJFsXg,692
106
107
  inspect_ai/_util/samples.py,sha256=uobAN2i1U-6YBxCBvaW6z1-xFufQIuFXHnnnK-oTDKc,507
107
108
  inspect_ai/_util/terminal.py,sha256=I4NDy7Ln5YSCzxbd0O9OPslEHQMBVKZfqJl3TOCegTg,4166
108
- inspect_ai/_util/text.py,sha256=4A4-ehftR7QXsOiN4VCBuy8IkgUIkoTIKfA_HZ_e9ac,3909
109
+ inspect_ai/_util/text.py,sha256=cB67HEVxt7bP1Jo4YiEY4z_D-OodTnnI4fidvKZMujE,9673
109
110
  inspect_ai/_util/thread.py,sha256=yao8tzMkX4860ulFWTb9x4BT7aHghibxRmfIxWBnZIA,114
110
111
  inspect_ai/_util/throttle.py,sha256=JczSG_y0v60m4gQCt28uw_WPjJTbHuq8gWcxY3-vFsc,855
111
112
  inspect_ai/_util/timeouts.py,sha256=-iC1LjpNqB6Hx-i36MfSrLy819RVhKNo4KXjZDuskZQ,5193
@@ -139,7 +140,7 @@ inspect_ai/_view/www/.vscode/settings.json,sha256=g5hrVnMaYxM06JpiJD2EuE2xjcbF6x
139
140
  inspect_ai/_view/www/dist/index.html,sha256=gpdu6SR-SOH9EWx15cCWHzujMZujnZR5tRlEfROJg2A,997
140
141
  inspect_ai/_view/www/dist/assets/favicon.svg,sha256=b9AHYZaO2zBzeKH6G4PwXZMGGW_UxY0omKHam-c9MAs,1508
141
142
  inspect_ai/_view/www/dist/assets/index.css,sha256=Igio8rHcaIaA6wnwH3bQhr10yXHD_K9idKsALnb-b7A,893895
142
- inspect_ai/_view/www/dist/assets/index.js,sha256=74oJ-IiBQ1HnwzGQIlUweY18hYZBbNRhGVJsuyb3_Rc,2631819
143
+ inspect_ai/_view/www/dist/assets/index.js,sha256=asoYOf8KgDCYvayM3hkqMbFVXwEt41RvqbbMPK_maog,2631827
143
144
  inspect_ai/_view/www/src/App.tsx,sha256=EvpnQfpWugx4PJivUN8GSUo8RXI4sHAFiIfacVXZ1Z0,28854
144
145
  inspect_ai/_view/www/src/AppErrorBoundary.tsx,sha256=RyhZWbIMZj1QeUOUUXh9hUFvq6LoDEoHuTY0giswmL0,1169
145
146
  inspect_ai/_view/www/src/constants.ts,sha256=UIxGbDscs61CcOQLQiW6MsZAU1uupSYNVLGxx2pp14A,1169
@@ -259,7 +260,7 @@ inspect_ai/_view/www/src/samples/descriptor/score/BooleanScoreDescriptor.tsx,sha
259
260
  inspect_ai/_view/www/src/samples/descriptor/score/CategoricalScoreDescriptor.tsx,sha256=17we32TGRoqayxI4yw99MqlaJfLcJgtZXCtoHBznGOg,460
260
261
  inspect_ai/_view/www/src/samples/descriptor/score/NumericScoreDescriptor.tsx,sha256=SiiqqaodZPT1aMW1xBgFGSPQ6Z7OCbtx2n-9sewW7cM,836
261
262
  inspect_ai/_view/www/src/samples/descriptor/score/ObjectScoreDescriptor.module.css,sha256=lWNDBHma-aaeeKRRig5GUIYag95UISwcN1QuF46-zR8,202
262
- inspect_ai/_view/www/src/samples/descriptor/score/ObjectScoreDescriptor.tsx,sha256=EDcEUMYLNgL6Jev2w0CvCpfXeVODEY2ntjhmY_A6uVI,2016
263
+ inspect_ai/_view/www/src/samples/descriptor/score/ObjectScoreDescriptor.tsx,sha256=mq-MFIu4AwEe7ZoQZuOCUUfaguAsgHrsVFG-qtFmfos,2024
263
264
  inspect_ai/_view/www/src/samples/descriptor/score/OtherScoreDescriptor.tsx,sha256=argRDR7qkZ--Sb6UnuMc1mYBbEY5CXVX0q1vfiTVYA8,511
264
265
  inspect_ai/_view/www/src/samples/descriptor/score/PassFailScoreDescriptor.module.css,sha256=8TVK-2jTTzFAMHxLxDUc3FKm8F1Wkq689L_bzGKCVKI,530
265
266
  inspect_ai/_view/www/src/samples/descriptor/score/PassFailScoreDescriptor.tsx,sha256=oTVPJGvuyuYVeyCXUWxV2rtp5Q2sapfRSGzazZDPcog,2058
@@ -433,7 +434,7 @@ inspect_ai/log/_file.py,sha256=o5DNFq0tRV8l7INzIEG76kP9AQM8Ta5nCUgroaTTI6c,17996
433
434
  inspect_ai/log/_log.py,sha256=Hr5XlxH7AGXFTj9q-5SE5gLE_WpElXy-fFQq_FV_8QU,21670
434
435
  inspect_ai/log/_message.py,sha256=QofM_JZF_x3k_5ta1uQzoN_VnMoUhXFnqWurIn9FXOY,1999
435
436
  inspect_ai/log/_retry.py,sha256=e7a2hjl3Ncl8b8sU7CsDpvK8DV0b1uSRLeokRX1mt34,2109
436
- inspect_ai/log/_samples.py,sha256=uuc9-XJ1_Ly3E1YiBaRn0-pqQ4mCN4fIsVX8f6yvg38,4244
437
+ inspect_ai/log/_samples.py,sha256=0mnXsXGKqfUQgg7y-UgBSujpxYFzbrT-F6S_su8kgEs,4110
437
438
  inspect_ai/log/_transcript.py,sha256=Pql8u17vVy0PIZPICeAVjb2WvrNpzWnC-6Y3xyg25pE,11267
438
439
  inspect_ai/log/_recorders/__init__.py,sha256=-ECELTfjeWwDuEIBSXO2oxEtJ6Dn0ZQYUxrEy0klN34,350
439
440
  inspect_ai/log/_recorders/create.py,sha256=WB-fms0dBDHlTtTa_a_r0fFc6UPRvQZKZT7d_Inp-EU,1103
@@ -448,7 +449,7 @@ inspect_ai/model/_chat_message.py,sha256=Y0X1b1uaZhw0brSGfXVU7lADrXh2nR6iSWgBR_m
448
449
  inspect_ai/model/_conversation.py,sha256=cd5ru6lD2xsfkdB9lfWYPbuvzdqjv9geOVFl2HXSad8,2163
449
450
  inspect_ai/model/_generate_config.py,sha256=jKsb5qpiV4o2Wdkaez6EzSHhnUc3_j4dTZIOzV9P6Sc,8976
450
451
  inspect_ai/model/_image.py,sha256=kpO2Bn_-c-dK80HuPOPH1eSNmcoc39kofwf4yTTiTFE,477
451
- inspect_ai/model/_model.py,sha256=7ByKcGdmrmpI3BZlNXXLVN-xjyGbaKObHDRS7ZJMBAw,42388
452
+ inspect_ai/model/_model.py,sha256=EgEKg13UhNAN4u72ZNl16q1yIWwq7zhgSHH-w38bti0,42488
452
453
  inspect_ai/model/_model_call.py,sha256=r6ObHZwm7jy1qX2qxvAP6iPV3BhdGThL-VH-QEawQhA,2017
453
454
  inspect_ai/model/_model_output.py,sha256=QM2K4zVqUumfhAFzDkvxb60qT4DbCvPjqva0WfJ4gWU,7321
454
455
  inspect_ai/model/_openai.py,sha256=Z17GAEU-Zraqy-wRcY3KGC34gN1YvRoy0hdYZpt-BjI,13948
@@ -460,18 +461,18 @@ inspect_ai/model/_providers/azureai.py,sha256=L0aZrx-mcRLZWXmNQG2gEmGYVQ7QtLF-o7
460
461
  inspect_ai/model/_providers/bedrock.py,sha256=bNQq5Z9w9fLq3SxOKFDuopuLWi0QTDcSE9ppzX51eX0,23482
461
462
  inspect_ai/model/_providers/cloudflare.py,sha256=OOpU4EE97s7M6u_qk7uuCILSLU84DoCVrUNsa-qPbmA,4228
462
463
  inspect_ai/model/_providers/goodfire.py,sha256=L5RHmpXcp7Se30hJUjK0jES8ckGhxOKDM5xYfOjBcIU,8811
463
- inspect_ai/model/_providers/google.py,sha256=CVOWm5Q3n8AAIhCz-5sKJ1o-b1v3Vor5UvC8oRYGiU8,23750
464
+ inspect_ai/model/_providers/google.py,sha256=V8N0MbJrbOx6Boz1Vq5h_6TLmRdMjJVQoSS_4V0PiBY,26640
464
465
  inspect_ai/model/_providers/grok.py,sha256=dS88ueXiD-kHAFr0jCoTpTGLGa2VsUlB_TFP8L_2lBM,995
465
466
  inspect_ai/model/_providers/groq.py,sha256=aVaWrGn6oqWopNuh8WfvbGux3P0tcRQg_uq8DdTJ2Ng,10042
466
467
  inspect_ai/model/_providers/hf.py,sha256=KIHcfiRQ8XQEQBi7UzCIulZh1Ku5sCjWaa1EznGPHzU,17605
467
468
  inspect_ai/model/_providers/llama_cpp_python.py,sha256=i2I56Damgb8VDhMuPxPca24fVhlajDHzxCTYFnT41uI,702
468
- inspect_ai/model/_providers/mistral.py,sha256=afhEAfsR4QeBigrINU3Dgf5EZp5zNvkk4Ub-Z1SigcU,15329
469
+ inspect_ai/model/_providers/mistral.py,sha256=XDXSB9JMff2u3wuJ_T0htM3wvJ2MyVJl88Px2bGCvaw,15385
469
470
  inspect_ai/model/_providers/mockllm.py,sha256=gL9f-f5TOdE4a0GVENr3cOIIp2kv8zVXWPZ608rouGk,2440
470
471
  inspect_ai/model/_providers/ollama.py,sha256=mBPSxaEkiH_RnlHKqOyFBlXObQhc2dfjL-rCKrea5u8,675
471
472
  inspect_ai/model/_providers/openai.py,sha256=kD3ypqlPnqA1YdF3zQWzpHOHkF_8OTGMmS86ZqarCjI,11731
472
473
  inspect_ai/model/_providers/openai_o1.py,sha256=kiCzFYPBzUR-4U_AcQCoFpYRg-RUiWL6m2_XhK0JhW0,12262
473
474
  inspect_ai/model/_providers/openrouter.py,sha256=5G8qS8xA7Gy4IGodEJd04xwjsN-O_as4oeU8DTsKB5s,2932
474
- inspect_ai/model/_providers/providers.py,sha256=PlzYzv-muCSkmb8p04R0cNHS6DyUWPtB4c0hxW6sWUs,6407
475
+ inspect_ai/model/_providers/providers.py,sha256=ALa8vNhjaVF-B8SpOB4PwQ_Yk4Gqlk6PKCGTRCmMHn0,6403
475
476
  inspect_ai/model/_providers/together.py,sha256=0KpFLKbnP_a_AH7VN18eLtlm7kGvJkBIura9drdc7BU,9483
476
477
  inspect_ai/model/_providers/vertex.py,sha256=-4ArhaW_H_KGj8P0HdmDtyKRwXdR3-UuZurI7lzO0tI,16531
477
478
  inspect_ai/model/_providers/vllm.py,sha256=RGKMkY9nlScoVx0RTiUCl4usDBSughVsGJjPNQDPDaQ,14230
@@ -508,10 +509,10 @@ inspect_ai/solver/_critique.py,sha256=8GhB9OEsDCOqS6_cHAaTWNNeAimjV3JM_xXr8k1n3X
508
509
  inspect_ai/solver/_fork.py,sha256=XKBDwZXRiWkxK_uFtQs-RDJb9gbL6JvfOr_5LtAgS-4,2844
509
510
  inspect_ai/solver/_limit.py,sha256=zaZseJgjbJaBnGdXQHQ5MpU4tzgUyD8FzLvJMGDk3jA,1122
510
511
  inspect_ai/solver/_multiple_choice.py,sha256=uYr3E6LA6Gv5ktqdmQJX6rYxbc6maTy3ZjyZXabdBug,11298
511
- inspect_ai/solver/_plan.py,sha256=Dp1DDTtGe2iTo8CYWKqCOdfBFfTK_0wi2JzIr6qrikI,7042
512
+ inspect_ai/solver/_plan.py,sha256=lKeFBIVw_VCLT_V06z-AUS_ABGu3yw-5F1lyC1_0nkw,7190
512
513
  inspect_ai/solver/_prompt.py,sha256=jqJ15ysz5_Wn5kadthsZDJWzSoFA7q3IMqSvYW475e8,4901
513
- inspect_ai/solver/_solver.py,sha256=S3C82Ttan7hGz2yl1OAwjH_GxhwhJVXPnAkHV3OrEEI,9081
514
- inspect_ai/solver/_task_state.py,sha256=qxcAUL4MUGUuu-SqF8fv2YbUVmZ9VzJTIfeiYl71iXA,16323
514
+ inspect_ai/solver/_solver.py,sha256=41XTYG8a7NyPQKD3ep3Qy2O5Iqtyr3hdxzvof7xc32A,9233
515
+ inspect_ai/solver/_task_state.py,sha256=1EsKFBW5dsIR-VQmobrUxdaR27STwHg9B9USNi-PCI0,16479
515
516
  inspect_ai/solver/_transcript.py,sha256=gkH9CC5gYbz7ZzrFD0TkjtKYjWxQP5EthJOkq8NXDOc,1049
516
517
  inspect_ai/solver/_use_tools.py,sha256=3Oprsk5FlG5paHLqAurNgj23-endW3_t3cxe28wkMt8,1942
517
518
  inspect_ai/solver/_util.py,sha256=pthrf-CzC6FnQYSUFLXTYM4wFEJptZrh5POTmV-Jtow,446
@@ -598,7 +599,7 @@ inspect_ai/util/_panel.py,sha256=MdZxOt0F01ddn_NsRfwn0es6UjQasK1_EKIQ6jtQyG8,312
598
599
  inspect_ai/util/_resource.py,sha256=X280aW_7VCkVTGk812tuU5qnZlGM5Qt1-kANr-DaGOs,3389
599
600
  inspect_ai/util/_store.py,sha256=QemJe2M-RK6zSFNcd07_92XFjvNtWKgHzBr5eT3KF1I,3786
600
601
  inspect_ai/util/_store_model.py,sha256=Z2dvxfh8Re-85pqart4hWlWauerPrK7nKxJoC-0zMhA,4079
601
- inspect_ai/util/_subprocess.py,sha256=bn1HSHSOH4PX0FZhCvqcJFKKoaEJMgZteEYh_kmZ6fs,8289
602
+ inspect_ai/util/_subprocess.py,sha256=zq6EoiYegmPmGekvnEPKbbLCpGBP2vdCdVbRF4MWxeQ,8524
602
603
  inspect_ai/util/_subtask.py,sha256=CFLxdLyj5T1nXmaPKhdYsZARJD8ukoeYF8Wj5m345LM,4729
603
604
  inspect_ai/util/_throttle.py,sha256=JczSG_y0v60m4gQCt28uw_WPjJTbHuq8gWcxY3-vFsc,855
604
605
  inspect_ai/util/_sandbox/__init__.py,sha256=08yrm-GWL-o7K-NltssDc9zATv2DY7fqAW8p7v6C3Cs,874
@@ -607,19 +608,19 @@ inspect_ai/util/_sandbox/environment.py,sha256=zUVCSEZlIJ16MHT3zMarOxI38FghdE9x0
607
608
  inspect_ai/util/_sandbox/limits.py,sha256=K-GjKfSugOq8KP0wW_oF6qFrXsOnMV0C88QUWkjPJ9o,2164
608
609
  inspect_ai/util/_sandbox/local.py,sha256=NkHnR_e7s7RFsBdwfaSR7Yzp6lSUc7Em0Pc9_CFuN4c,3534
609
610
  inspect_ai/util/_sandbox/registry.py,sha256=mQwWwqzaCXF1FZ2fcVujpp3WMA35GWnh1w43SoIJAVM,2145
610
- inspect_ai/util/_sandbox/self_check.py,sha256=YaonS0VQyutDpOlHchGhrIUm13juUzEkrkwqLosjgyw,19246
611
+ inspect_ai/util/_sandbox/self_check.py,sha256=ebCSCgJZZkRaKQvrysdzTpsbJ5vXxlOD3swxbb-bOio,19335
611
612
  inspect_ai/util/_sandbox/service.py,sha256=2os7W8NYBDcaBoaHVfZ1YrI9hvldksmiwqkUYrCRCPo,11258
612
- inspect_ai/util/_sandbox/docker/cleanup.py,sha256=MK6UlADcWtTDotppeVJga2ibf9Ud-e4V-5ReoNbmhqg,4793
613
- inspect_ai/util/_sandbox/docker/compose.py,sha256=g98fwb33EsQQDHKEUYic8tPmi51IA7v3aWm3YoEBEgA,11904
613
+ inspect_ai/util/_sandbox/docker/cleanup.py,sha256=rtpI1NvZX75eDrhpnCO5U7AMCAFB_fEhw73DusPm-Xc,5072
614
+ inspect_ai/util/_sandbox/docker/compose.py,sha256=x5sr-feqGjP96KvsYlfhYBF6eOnv6otIu7zxa2oZv3I,11723
614
615
  inspect_ai/util/_sandbox/docker/config.py,sha256=I2sxkN2mTS3kXoAGtJ2w7yuhMoacECgkdxiXftlAvKA,2918
615
- inspect_ai/util/_sandbox/docker/docker.py,sha256=Dhp2-H-CFPvHD0BlDNTZZtnXj0Jh9_IZjLl7qoyUaD4,17195
616
+ inspect_ai/util/_sandbox/docker/docker.py,sha256=1tJNdCOrgiJ_2N0feCKFvVnjzvM50Pizm5mtMbL_xn4,17622
616
617
  inspect_ai/util/_sandbox/docker/internal.py,sha256=fATyk2pdtjSl-D0VPT4dmkXV-gOc5HrPH0EQDW4IAJY,1446
617
618
  inspect_ai/util/_sandbox/docker/prereqs.py,sha256=0j6_OauBBnVlpBleADcZavIAAQZy4WewVjbRn9c0stg,3355
618
619
  inspect_ai/util/_sandbox/docker/service.py,sha256=hhHIWH1VDFLwehdGd19aUBD_VKfDO3GCPxpw1HSwVQk,2437
619
- inspect_ai/util/_sandbox/docker/util.py,sha256=CuYrt9iyLjPSVDEs_oGTas8wAwMwQc_45dZa2g3E4cY,2847
620
- inspect_ai-0.3.68.dist-info/LICENSE,sha256=xZPCr8gTiFIerrA_DRpLAbw-UUftnLFsHxKeW-NTtq8,1081
621
- inspect_ai-0.3.68.dist-info/METADATA,sha256=HQ8Pd2TbpMviMgRkDDYOxIvF6KEJz1omDv_hP7g6E3o,4785
622
- inspect_ai-0.3.68.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
623
- inspect_ai-0.3.68.dist-info/entry_points.txt,sha256=WGGLmzTzDWLzYfiyovSY6oEKuf-gqzSDNOb5V-hk3fM,54
624
- inspect_ai-0.3.68.dist-info/top_level.txt,sha256=Tp3za30CHXJEKLk8xLe9qGsW4pBzJpEIOMHOHNCXiVo,11
625
- inspect_ai-0.3.68.dist-info/RECORD,,
620
+ inspect_ai/util/_sandbox/docker/util.py,sha256=EeInihCNXgUWxaqZ4dNOJd719kXL2_jr63QCoXn68vA,3154
621
+ inspect_ai-0.3.69.dist-info/LICENSE,sha256=xZPCr8gTiFIerrA_DRpLAbw-UUftnLFsHxKeW-NTtq8,1081
622
+ inspect_ai-0.3.69.dist-info/METADATA,sha256=Ebnaoeng30uKne0Ltimk6N3jqiLi_11AHzWd9H_Zx2k,4778
623
+ inspect_ai-0.3.69.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
624
+ inspect_ai-0.3.69.dist-info/entry_points.txt,sha256=WGGLmzTzDWLzYfiyovSY6oEKuf-gqzSDNOb5V-hk3fM,54
625
+ inspect_ai-0.3.69.dist-info/top_level.txt,sha256=Tp3za30CHXJEKLk8xLe9qGsW4pBzJpEIOMHOHNCXiVo,11
626
+ inspect_ai-0.3.69.dist-info/RECORD,,