inspect-ai 0.3.104__py3-none-any.whl → 0.3.106__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.
Files changed (46) hide show
  1. inspect_ai/_eval/context.py +5 -0
  2. inspect_ai/_eval/eval.py +113 -1
  3. inspect_ai/_eval/evalset.py +1 -1
  4. inspect_ai/_eval/task/run.py +64 -38
  5. inspect_ai/_util/eval_task_group.py +15 -0
  6. inspect_ai/_view/server.py +17 -0
  7. inspect_ai/_view/www/dist/assets/index.css +33 -29
  8. inspect_ai/_view/www/dist/assets/index.js +559 -247
  9. inspect_ai/_view/www/src/app/samples/chat/ChatMessage.module.css +4 -0
  10. inspect_ai/_view/www/src/app/samples/chat/ChatMessage.tsx +17 -0
  11. inspect_ai/_view/www/src/app/samples/sample-tools/filters.ts +26 -0
  12. inspect_ai/_view/www/src/app/samples/sample-tools/sample-filter/SampleFilter.tsx +14 -3
  13. inspect_ai/_view/www/src/app/samples/sample-tools/sample-filter/completions.ts +359 -7
  14. inspect_ai/_view/www/src/app/samples/sample-tools/sample-filter/language.ts +6 -0
  15. inspect_ai/_view/www/src/app/samples/transcript/outline/OutlineRow.tsx +1 -1
  16. inspect_ai/_view/www/src/client/api/api-browser.ts +25 -0
  17. inspect_ai/_view/www/src/client/api/api-http.ts +3 -0
  18. inspect_ai/_view/www/src/client/api/api-vscode.ts +6 -0
  19. inspect_ai/_view/www/src/client/api/client-api.ts +3 -0
  20. inspect_ai/_view/www/src/client/api/jsonrpc.ts +1 -0
  21. inspect_ai/_view/www/src/client/api/types.ts +3 -0
  22. inspect_ai/_view/www/src/state/samplePolling.ts +17 -1
  23. inspect_ai/agent/_handoff.py +5 -2
  24. inspect_ai/agent/_react.py +43 -20
  25. inspect_ai/dataset/_dataset.py +1 -1
  26. inspect_ai/log/_samples.py +5 -0
  27. inspect_ai/model/_call_tools.py +4 -4
  28. inspect_ai/model/_providers/_openai_web_search.py +1 -1
  29. inspect_ai/model/_providers/anthropic.py +23 -2
  30. inspect_ai/model/_providers/google.py +5 -1
  31. inspect_ai/model/_providers/groq.py +5 -0
  32. inspect_ai/model/_providers/perplexity.py +27 -1
  33. inspect_ai/model/_providers/providers.py +1 -1
  34. inspect_ai/tool/_tools/_web_search/_web_search.py +8 -3
  35. inspect_ai/util/__init__.py +8 -0
  36. inspect_ai/util/_background.py +64 -0
  37. inspect_ai/util/_limit.py +72 -5
  38. inspect_ai/util/_sandbox/__init__.py +2 -0
  39. inspect_ai/util/_sandbox/service.py +28 -7
  40. inspect_ai/util/_subprocess.py +51 -38
  41. {inspect_ai-0.3.104.dist-info → inspect_ai-0.3.106.dist-info}/METADATA +1 -1
  42. {inspect_ai-0.3.104.dist-info → inspect_ai-0.3.106.dist-info}/RECORD +46 -44
  43. {inspect_ai-0.3.104.dist-info → inspect_ai-0.3.106.dist-info}/WHEEL +0 -0
  44. {inspect_ai-0.3.104.dist-info → inspect_ai-0.3.106.dist-info}/entry_points.txt +0 -0
  45. {inspect_ai-0.3.104.dist-info → inspect_ai-0.3.106.dist-info}/licenses/LICENSE +0 -0
  46. {inspect_ai-0.3.104.dist-info → inspect_ai-0.3.106.dist-info}/top_level.txt +0 -0
inspect_ai/util/_limit.py CHANGED
@@ -4,6 +4,7 @@ import abc
4
4
  import logging
5
5
  from contextlib import ExitStack, contextmanager
6
6
  from contextvars import ContextVar
7
+ from dataclasses import dataclass
7
8
  from types import TracebackType
8
9
  from typing import TYPE_CHECKING, Generic, Iterator, Literal, TypeVar
9
10
 
@@ -88,12 +89,31 @@ class Limit(abc.ABC):
88
89
  ) -> None:
89
90
  pass
90
91
 
92
+ @property
93
+ @abc.abstractmethod
94
+ def limit(self) -> float | None:
95
+ """The value of the limit being applied.
96
+
97
+ Can be None which represents no limit.
98
+ """
99
+ pass
100
+
91
101
  @property
92
102
  @abc.abstractmethod
93
103
  def usage(self) -> float:
94
104
  """The current usage of the resource being limited."""
95
105
  pass
96
106
 
107
+ @property
108
+ def remaining(self) -> float | None:
109
+ """The remaining "unused" amount of the resource being limited.
110
+
111
+ Returns None if the limit is None.
112
+ """
113
+ if self.limit is None:
114
+ return None
115
+ return self.limit - self.usage
116
+
97
117
  def _check_reuse(self) -> None:
98
118
  if self._entered:
99
119
  raise RuntimeError(
@@ -152,6 +172,46 @@ class LimitScope:
152
172
  self.limit_error: LimitExceededError | None = None
153
173
 
154
174
 
175
+ @dataclass
176
+ class SampleLimits:
177
+ """Data class to hold the limits applied to a Sample.
178
+
179
+ This is used to return the limits from `sample_limits()`.
180
+ """
181
+
182
+ token: Limit
183
+ """Token limit."""
184
+
185
+ message: Limit
186
+ """Message limit."""
187
+
188
+ working: Limit
189
+ """Working limit."""
190
+
191
+ time: Limit
192
+ """Time limit."""
193
+
194
+
195
+ def sample_limits() -> SampleLimits:
196
+ """Get the top-level limits applied to the current `Sample`."""
197
+
198
+ def get_root_node(node: TNode | None, name: str) -> TNode:
199
+ if node is None:
200
+ raise RuntimeError(
201
+ f"No {name} limit node found. Is there a running sample?"
202
+ )
203
+ while node.parent is not None:
204
+ node = node.parent
205
+ return node
206
+
207
+ return SampleLimits(
208
+ token=get_root_node(token_limit_tree.get(), "token"),
209
+ message=get_root_node(message_limit_tree.get(), "message"),
210
+ working=get_root_node(working_limit_tree.get(), "working"),
211
+ time=get_root_node(time_limit_tree.get(), "time"),
212
+ )
213
+
214
+
155
215
  def token_limit(limit: int | None) -> _TokenLimit:
156
216
  """Limits the total number of tokens which can be used.
157
217
 
@@ -319,10 +379,9 @@ class _Tree(Generic[TNode]):
319
379
 
320
380
 
321
381
  token_limit_tree: _Tree[_TokenLimit] = _Tree("token_limit_tree")
322
- # Store the message limit leaf node so that we know which limit to check in
323
- # check_message_limit().
324
382
  message_limit_tree: _Tree[_MessageLimit] = _Tree("message_limit_tree")
325
383
  working_limit_tree: _Tree[_WorkingLimit] = _Tree("working_limit_tree")
384
+ time_limit_tree: _Tree[_TimeLimit] = _Tree("time_limit_tree")
326
385
 
327
386
 
328
387
  class _Node:
@@ -497,7 +556,7 @@ class _MessageLimit(Limit, _Node):
497
556
  )
498
557
 
499
558
 
500
- class _TimeLimit(Limit):
559
+ class _TimeLimit(Limit, _Node):
501
560
  def __init__(self, limit: float | None) -> None:
502
561
  super().__init__()
503
562
  _validate_time_limit("Time", limit)
@@ -507,8 +566,7 @@ class _TimeLimit(Limit):
507
566
 
508
567
  def __enter__(self) -> Limit:
509
568
  super()._check_reuse()
510
- # Unlike the other limits, this one is not stored in a tree. Anyio handles all
511
- # of the state.
569
+ time_limit_tree.push(self)
512
570
  self._cancel_scope = anyio.move_on_after(self._limit)
513
571
  self._cancel_scope.__enter__()
514
572
  self._start_time = anyio.current_time()
@@ -524,6 +582,7 @@ class _TimeLimit(Limit):
524
582
 
525
583
  self._cancel_scope.__exit__(exc_type, exc_val, exc_tb)
526
584
  self._end_time = anyio.current_time()
585
+ self._pop_and_check_identity(time_limit_tree)
527
586
  if self._cancel_scope.cancel_called and self._limit is not None:
528
587
  message = f"Time limit exceeded. limit: {self._limit} seconds"
529
588
  assert self._start_time is not None
@@ -541,6 +600,10 @@ class _TimeLimit(Limit):
541
600
  source=self,
542
601
  ) from exc_val
543
602
 
603
+ @property
604
+ def limit(self) -> float | None:
605
+ return self._limit
606
+
544
607
  @property
545
608
  def usage(self) -> float:
546
609
  if self._start_time is None:
@@ -575,6 +638,10 @@ class _WorkingLimit(Limit, _Node):
575
638
  self._end_time = anyio.current_time()
576
639
  self._pop_and_check_identity(working_limit_tree)
577
640
 
641
+ @property
642
+ def limit(self) -> float | None:
643
+ return self._limit
644
+
578
645
  @property
579
646
  def usage(self) -> float:
580
647
  if self._start_time is None:
@@ -13,6 +13,7 @@ from .environment import (
13
13
  from .limits import OutputLimitExceededError, SandboxEnvironmentLimits
14
14
  from .local import LocalSandboxEnvironment # noqa: F401
15
15
  from .registry import sandboxenv
16
+ from .service import sandbox_service
16
17
 
17
18
  __all__ = [
18
19
  "OutputLimitExceededError",
@@ -27,4 +28,5 @@ __all__ = [
27
28
  "sandbox",
28
29
  "sandbox_with",
29
30
  "sandbox_default",
31
+ "sandbox_service",
30
32
  ]
@@ -44,14 +44,35 @@ async def sandbox_service(
44
44
  ) -> None:
45
45
  """Run a service that is callable from within a sandbox.
46
46
 
47
+ The service makes available a set of methods to a sandbox
48
+ for calling back into the main Inspect process.
49
+
50
+ To use the service from within a sandbox, either add it to the sys path
51
+ or use importlib. For example, if the service is named 'foo':
52
+
53
+ ```python
54
+ import sys
55
+ sys.path.append("/var/tmp/sandbox-services/foo")
56
+ import foo
57
+ ```
58
+
59
+ Or:
60
+
61
+ ```python
62
+ import importlib.util
63
+ spec = importlib.util.spec_from_file_location(
64
+ "foo", "/var/tmp/sandbox-services/foo/foo.py"
65
+ )
66
+ foo = importlib.util.module_from_spec(spec)
67
+ spec.loader.exec_module(foo)
68
+ ```
69
+
47
70
  Args:
48
- name (str): Service name
49
- methods (dict[str, SandboxServiceMethod]): Service methods.
50
- until (Callable[[], bool]): Function used to check whether
51
- the service should stop.
52
- sandbox (SandboxEnvironment): Sandbox to publish service to.
53
- user (str | None): User to login as. Defaults to the sandbox environment's
54
- default user.
71
+ name: Service name
72
+ methods: Service methods.
73
+ until: Function used to check whether the service should stop.
74
+ sandbox: Sandbox to publish service to.
75
+ user: User to login as. Defaults to the sandbox environment's default user.
55
76
  """
56
77
  # setup and start service
57
78
  service = SandboxService(name, sandbox, user)
@@ -2,16 +2,15 @@ import functools
2
2
  import io
3
3
  import os
4
4
  import shlex
5
- from contextlib import aclosing
6
5
  from contextvars import ContextVar
7
6
  from dataclasses import dataclass
8
7
  from logging import getLogger
9
8
  from pathlib import Path
10
9
  from subprocess import DEVNULL, PIPE
11
- from typing import AsyncGenerator, Generic, Literal, TypeVar, Union, cast, overload
10
+ from typing import Generic, Literal, TypeVar, Union, overload
12
11
 
13
12
  import anyio
14
- from anyio import open_process
13
+ from anyio import ClosedResourceError, create_task_group, open_process
15
14
  from anyio.abc import ByteReceiveStream, Process
16
15
 
17
16
  from inspect_ai._util._async import tg_collect
@@ -114,9 +113,7 @@ async def subprocess(
114
113
  else None
115
114
  )
116
115
 
117
- async def run_command() -> AsyncGenerator[
118
- Union[Process, ExecResult[str], ExecResult[bytes]], None
119
- ]:
116
+ async def run_command() -> Union[ExecResult[str], ExecResult[bytes]]:
120
117
  process = await open_process(
121
118
  args,
122
119
  stdin=PIPE if input else DEVNULL,
@@ -126,9 +123,6 @@ async def subprocess(
126
123
  env={**os.environ, **env},
127
124
  )
128
125
  try:
129
- # yield the process so the caller has a handle to it
130
- yield process
131
-
132
126
  # write to stdin (convert input to bytes)
133
127
  if process.stdin and input:
134
128
  await process.stdin.send(input)
@@ -161,19 +155,23 @@ async def subprocess(
161
155
  returncode = await process.wait()
162
156
  success = returncode == 0
163
157
  if text:
164
- yield ExecResult[str](
158
+ return ExecResult[str](
165
159
  success=success,
166
160
  returncode=returncode,
167
161
  stdout=stdout.decode() if capture_output else "",
168
162
  stderr=stderr.decode() if capture_output else "",
169
163
  )
170
164
  else:
171
- yield ExecResult[bytes](
165
+ return ExecResult[bytes](
172
166
  success=success,
173
167
  returncode=returncode,
174
168
  stdout=stdout if capture_output else bytes(),
175
169
  stderr=stderr if capture_output else bytes(),
176
170
  )
171
+ # Handle cancellation before aclose() is called to avoid deadlock.
172
+ except anyio.get_cancelled_exc_class():
173
+ await gracefully_terminate_cancelled_subprocess(process)
174
+ raise
177
175
  finally:
178
176
  try:
179
177
  await process.aclose()
@@ -186,33 +184,13 @@ async def subprocess(
186
184
 
187
185
  # wrapper for run command that implements timeout
188
186
  async def run_command_timeout() -> Union[ExecResult[str], ExecResult[bytes]]:
189
- # run the command and capture the process handle
190
- async with aclosing(run_command()) as rc:
191
- proc = cast(Process, await anext(rc))
192
-
193
- # await result wrapped in timeout handler if requested
194
- if timeout is not None:
195
- try:
196
- with anyio.fail_after(timeout):
197
- result = await anext(rc)
198
- return cast(Union[ExecResult[str], ExecResult[bytes]], result)
199
- except TimeoutError:
200
- # terminate timed out process -- try for graceful termination
201
- # then be more forceful if requied
202
- with anyio.CancelScope(shield=True):
203
- try:
204
- proc.terminate()
205
- await anyio.sleep(2)
206
- if proc.returncode is None:
207
- proc.kill()
208
- except Exception:
209
- pass
210
- raise
211
-
212
- # await result without timeout
213
- else:
214
- result = await anext(rc)
215
- return cast(Union[ExecResult[str], ExecResult[bytes]], result)
187
+ # wrap in timeout handler if requested
188
+ if timeout is not None:
189
+ with anyio.fail_after(timeout):
190
+ # run_command() handles terminating the process if it is cancelled.
191
+ return await run_command()
192
+ else:
193
+ return await run_command()
216
194
 
217
195
  # run command
218
196
  async with concurrency("subprocesses", max_subprocesses_context_var.get()):
@@ -233,6 +211,41 @@ def default_max_subprocesses() -> int:
233
211
  return cpus if cpus else 1
234
212
 
235
213
 
214
+ async def gracefully_terminate_cancelled_subprocess(process: Process) -> None:
215
+ with anyio.CancelScope(shield=True):
216
+ try:
217
+ # Terminate timed out process -- try for graceful termination then kill if
218
+ # required.
219
+ process.terminate()
220
+ await anyio.sleep(2)
221
+ if process.returncode is None:
222
+ process.kill()
223
+ # With anyio's asyncio backend, process.aclose() calls process.wait() which
224
+ # can deadlock if the process generates so much output that it blocks
225
+ # waiting for the OS pipe buffer to accept more data. See
226
+ # https://docs.python.org/3/library/asyncio-subprocess.html#asyncio.subprocess.Process.wait
227
+ # Therefore, we need to ensure that the process's stdout and stderr streams
228
+ # are drained before we call process.wait() in aclose().
229
+ async with create_task_group() as tg:
230
+ tg.start_soon(drain_stream, process.stdout)
231
+ tg.start_soon(drain_stream, process.stderr)
232
+ # Wait for the process to exit. Will be called again by aclose().
233
+ await process.wait()
234
+ # The process may have already exited, in which case we can ignore the error.
235
+ except ProcessLookupError:
236
+ pass
237
+
238
+
239
+ async def drain_stream(stream: ByteReceiveStream | None) -> None:
240
+ if stream is None:
241
+ return
242
+ try:
243
+ async for _ in stream:
244
+ pass
245
+ except ClosedResourceError:
246
+ pass
247
+
248
+
236
249
  max_subprocesses_context_var = ContextVar[int](
237
250
  "max_subprocesses", default=default_max_subprocesses()
238
251
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: inspect_ai
3
- Version: 0.3.104
3
+ Version: 0.3.106
4
4
  Summary: Framework for large language model evaluations
5
5
  Author: UK AI Security Institute
6
6
  License: MIT License
@@ -46,9 +46,9 @@ inspect_ai/_display/textual/widgets/toggle.py,sha256=ToYs-S4n90yuxWcAW2OTg6AbRf0
46
46
  inspect_ai/_display/textual/widgets/transcript.py,sha256=fmCJwe1EZ7bjeB6DXakQ2l3aoytEW_wdGTCN1Hea5uw,12558
47
47
  inspect_ai/_display/textual/widgets/vscode.py,sha256=SAIPO8VOkT_CFIfnCP_XxKixojdYXxMNdYU3Z2mq5Ek,1298
48
48
  inspect_ai/_eval/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
49
- inspect_ai/_eval/context.py,sha256=mdYinWG2lcYkWLieT42suzUDyaQBVHosbaWTKA6Uu48,1407
50
- inspect_ai/_eval/eval.py,sha256=7Izm4s64OIn8dZ2oQQF4fX_jneCODAWJ9Kzd0NRBIPk,44168
51
- inspect_ai/_eval/evalset.py,sha256=Smd0JiAMRFmbn4dXB8vYp-3KZRO6eYhECUE8satXTBw,25105
49
+ inspect_ai/_eval/context.py,sha256=vEOqPNG3eWdkspaLYEJJE59D_WxH_3ZPHc3tP0MjwHg,1584
50
+ inspect_ai/_eval/eval.py,sha256=DlDpqMWpF3JIgJ9Xeb0QJ9E99Dm1VW48viNEUwj6Lis,48279
51
+ inspect_ai/_eval/evalset.py,sha256=cGLAX6qnMMi-LTenLtu47wv0JJTjAvFLbE6zKfZbfTg,25112
52
52
  inspect_ai/_eval/list.py,sha256=VbZ-2EI6MqrXvCN7VTz21TQSoU5K5_Q0hqhxmj5A_m0,3744
53
53
  inspect_ai/_eval/loader.py,sha256=dafv4TlQDqdvzPyrQrBsNiCzhvqjwmcVQzweX-AL1os,24805
54
54
  inspect_ai/_eval/registry.py,sha256=IMyF_Ru11DrqjFe1yZJvghQcJSfssQ08wQqTt_F38Ag,5570
@@ -63,7 +63,7 @@ inspect_ai/_eval/task/images.py,sha256=nTzHizlyuPYumPH7gAOBSrNkTwTbAmZ7tKdzN7d_R
63
63
  inspect_ai/_eval/task/log.py,sha256=-9SRwJBINudIEVcsIyFEUY9ZSt2dC4hHN9NEuw0x9OU,12008
64
64
  inspect_ai/_eval/task/resolved.py,sha256=LBVHEeq9N1fkRObmA2pnDE_l_EuH6n2Dg8-c8yCGT5U,1007
65
65
  inspect_ai/_eval/task/results.py,sha256=x4weYRK2XGowfBG3f2msOeZQ_pxh230HTlw6kps33jw,17925
66
- inspect_ai/_eval/task/run.py,sha256=5aaEk7QTzeKri9QMuEJIis3XEga0m2aOe5huhIWKL10,39127
66
+ inspect_ai/_eval/task/run.py,sha256=CHEA25h-UdZmbfQ9o568hiahyna_voGvANMns4u9tW4,40244
67
67
  inspect_ai/_eval/task/sandbox.py,sha256=x9GU-o2LtJQtdZjdmwRtAMJ5Mzd_te6hrm-DjiZB60g,7737
68
68
  inspect_ai/_eval/task/task.py,sha256=EVdOKgC8UYadlTebkfnXtWawV0BQeGGEBzmlGTRbAfI,16314
69
69
  inspect_ai/_eval/task/tasks.py,sha256=8fy5k070KgjYwaZQ_Nk6_r-38VTU6HB-qh7ixc4JzKI,727
@@ -86,6 +86,7 @@ inspect_ai/_util/dotenv.py,sha256=9KsPrGFYUVsBGDTnmDuvtptkiOuoxztVaIRdID58EuA,34
86
86
  inspect_ai/_util/entrypoints.py,sha256=FnK32vIRvSFdH80l5H0o6oiJif837oeDrl5N10_P-xo,1260
87
87
  inspect_ai/_util/environ.py,sha256=COdX6sqJIq3ikNQD2gR2nMT7yk0qW8x4EjlJwHS9A_M,1428
88
88
  inspect_ai/_util/error.py,sha256=NIYCkOXGMUF1_zSHpeTBKzBb79_llQZvvf0TGYHO57Y,2333
89
+ inspect_ai/_util/eval_task_group.py,sha256=NBnvF-VuPT-foZ4_7ITjJ61LNQ29F0cuaTIh-y-FbVo,380
89
90
  inspect_ai/_util/exception.py,sha256=coVT0bQy6sADWSvTUaVVDDKnb1XCzREfuVi9UOvx_S0,149
90
91
  inspect_ai/_util/file.py,sha256=OqSe8RXF9OBWm8Rzvnsnu854ZqQWl-6aFlUrbjIVHoA,13432
91
92
  inspect_ai/_util/format.py,sha256=4TQ1FE4-TDNlHcr0r6dfsjv84sV11C9ouTfi55W-yIs,3323
@@ -128,7 +129,7 @@ inspect_ai/_util/working.py,sha256=mJSexhxAA-OvYGZPMH6lVjnn_QC1aWm5lbdoUWRYEBo,8
128
129
  inspect_ai/_view/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
129
130
  inspect_ai/_view/notify.py,sha256=w79p_o6mnL8NYKd7QgibnUdDGnUELfQO8fhhkjq7n4o,1433
130
131
  inspect_ai/_view/schema.py,sha256=I1ih8jgM3d6t6lbLGgRgw2Lo5WMkZV-b8LWFM-OmBak,1658
131
- inspect_ai/_view/server.py,sha256=xVg_1rb-8W_rm60gNzX-2dpJXaKjupgiuol1TXHSIfM,17641
132
+ inspect_ai/_view/server.py,sha256=Du7lUXn44qIL1b-fJnUAHVwrx7eAaY-hBGPAa06kgFc,18161
132
133
  inspect_ai/_view/view.py,sha256=7FkmirqOMpej-7YUG2rmPvpfVjzJzFZbTt_MtgXYpnU,3607
133
134
  inspect_ai/_view/www/.gitignore,sha256=Qyau1UN5uAQB8cwjhokiMEMgJtQCReq-6ohBVCXV8ZQ,52
134
135
  inspect_ai/_view/www/.prettierignore,sha256=SiJfow55o33Kh0KB2BJGQsjgyHNURdtmI097aY6kJzc,85
@@ -152,8 +153,8 @@ inspect_ai/_view/www/.vscode/extensions.json,sha256=E73RWLzcoyeluE_ijGxaNSOK9xC0
152
153
  inspect_ai/_view/www/.vscode/settings.json,sha256=g5hrVnMaYxM06JpiJD2EuE2xjcbF6xNAtL2fuKgG1-8,200
153
154
  inspect_ai/_view/www/dist/index.html,sha256=gpdu6SR-SOH9EWx15cCWHzujMZujnZR5tRlEfROJg2A,997
154
155
  inspect_ai/_view/www/dist/assets/favicon.svg,sha256=b9AHYZaO2zBzeKH6G4PwXZMGGW_UxY0omKHam-c9MAs,1508
155
- inspect_ai/_view/www/dist/assets/index.css,sha256=VoHnHLiZB1oGo-5RF_NTk4ZOZ7XSsBjFD4i2JZyT2BU,2378141
156
- inspect_ai/_view/www/dist/assets/index.js,sha256=7F3oEIoDuiZhobU0f8WGKDimADnjsOXpFg4myTx8cYs,3538331
156
+ inspect_ai/_view/www/dist/assets/index.css,sha256=FJroagFAzsVsGrRFXiA26pTSdlKTUJSAAOn94c6gVZI,2378191
157
+ inspect_ai/_view/www/dist/assets/index.js,sha256=jfWOhyScMp6eIzbSKZY9IZFQ6xfS7w-ASiyXd0yTHeM,3549950
157
158
  inspect_ai/_view/www/node_modules/flatted/python/flatted.py,sha256=UYburBDqkySaTfSpntPCUJRxiBGcplusJM7ECX8FEgA,3860
158
159
  inspect_ai/_view/www/node_modules/katex/src/fonts/generate_fonts.py,sha256=BqZzWU-n22LypRvQ6sV7Uvkv853QJa3rz543de0V9hI,1559
159
160
  inspect_ai/_view/www/node_modules/katex/src/metrics/extract_tfms.py,sha256=kuCyCirv4JZeZgBOBIge_OPi627676DS6DJ4vo5_Yi4,3329
@@ -251,8 +252,8 @@ inspect_ai/_view/www/src/app/samples/SampleSummaryView.tsx,sha256=Gkcr9H37vcwpBn
251
252
  inspect_ai/_view/www/src/app/samples/SamplesTools.tsx,sha256=Cwhr4aCne2p4k281QQxuO5ujNRTanc0z12AVG3iBfAQ,1767
252
253
  inspect_ai/_view/www/src/app/samples/sampleDataAdapter.ts,sha256=mdZ4DQSbvvOjCESq8guFzfBBbbytyRUdwn6KA08Eks0,936
253
254
  inspect_ai/_view/www/src/app/samples/sampleLimit.ts,sha256=GLfSpwF3-zpCJa-4lQteztd9F7L6yUud_Fs-cTeXyQs,608
254
- inspect_ai/_view/www/src/app/samples/chat/ChatMessage.module.css,sha256=zR-0x7peWlA6IZ0VsBVMpR3TkxtyQASdd6fDL0fdrPk,506
255
- inspect_ai/_view/www/src/app/samples/chat/ChatMessage.tsx,sha256=VtNYabQhl6ITxHvYOlHf5bh0FVLxvTa1C7YQ-zrRkl0,2232
255
+ inspect_ai/_view/www/src/app/samples/chat/ChatMessage.module.css,sha256=HkDgq_KEw0ZRBHRzV8mbN1RPhlBXOwW1OcuAOjxj1dE,546
256
+ inspect_ai/_view/www/src/app/samples/chat/ChatMessage.tsx,sha256=H1pRDNYJ0oNAdPB9hwN5na9VAcI59hHtLEn4ShdBX88,2780
256
257
  inspect_ai/_view/www/src/app/samples/chat/ChatMessageRenderer.tsx,sha256=DPRsu5sgDvJIJ5tirqFkoxBPacPYc4Ooy3-7qJRaPKo,1505
257
258
  inspect_ai/_view/www/src/app/samples/chat/ChatMessageRow.module.css,sha256=SmA8NLCidpd3Kk4HZvhr1ttA2hmuIk7we3ob5qokxIw,274
258
259
  inspect_ai/_view/www/src/app/samples/chat/ChatMessageRow.tsx,sha256=9A77goO1FGtXtwIoWkNynGaMcEsPCsqBhHhs4ktvyDk,2250
@@ -315,11 +316,11 @@ inspect_ai/_view/www/src/app/samples/sample-tools/SelectScorer.module.css,sha256
315
316
  inspect_ai/_view/www/src/app/samples/sample-tools/SelectScorer.tsx,sha256=7nzO1WKH6-jTfdePc-QB98uKmBmKX9Twu1sK5nzoZEo,4371
316
317
  inspect_ai/_view/www/src/app/samples/sample-tools/SortFilter.module.css,sha256=7uNUEoHtsNxN6P5WFZQvoEzd55n9rsgmfhWCicFh1_c,106
317
318
  inspect_ai/_view/www/src/app/samples/sample-tools/SortFilter.tsx,sha256=qZ-Vuuiq_TZA9A3ugH41HTo-Ugy6xSlXmrJuqHn-_w4,4637
318
- inspect_ai/_view/www/src/app/samples/sample-tools/filters.ts,sha256=d1KF71MpxNJT6PIDpo6531qHhhSkwGod-dYLnBAe4qI,9701
319
+ inspect_ai/_view/www/src/app/samples/sample-tools/filters.ts,sha256=s8O2WXf2WTpD0qB2-tyaGWVb9LKKmagwE7l4JpWMYU4,10636
319
320
  inspect_ai/_view/www/src/app/samples/sample-tools/sample-filter/SampleFilter.module.css,sha256=PPdynh09MuEz0BMhHSximTj_BLNNAEQQQB8TH4amd3A,199
320
- inspect_ai/_view/www/src/app/samples/sample-tools/sample-filter/SampleFilter.tsx,sha256=1gkYHBcLdu7pKetIizL_DkEaG6xeiPbZr6qGCDibzBE,8017
321
- inspect_ai/_view/www/src/app/samples/sample-tools/sample-filter/completions.ts,sha256=uzobauwUIqveheRH4Y8uWOsnFbE6VvTBwn2jtMNE0ZA,10943
322
- inspect_ai/_view/www/src/app/samples/sample-tools/sample-filter/language.ts,sha256=V08BhYgujiYoyd2aK9VrUhTU4SKrZRvFXDEcnwn5wE8,964
321
+ inspect_ai/_view/www/src/app/samples/sample-tools/sample-filter/SampleFilter.tsx,sha256=pHe7FOYb7dilDLorl1M_eh7JCNYFVpjH3OuVk6xuUyY,8416
322
+ inspect_ai/_view/www/src/app/samples/sample-tools/sample-filter/completions.ts,sha256=sW1Tk_x4WNG1UqrijL3ijfLPSzVJaHHKoTgySt3mHcQ,21026
323
+ inspect_ai/_view/www/src/app/samples/sample-tools/sample-filter/language.ts,sha256=dhLtC_73CjXiNTLtfkr-JBXeunCpyTJZwZH7aO7Sy58,1253
323
324
  inspect_ai/_view/www/src/app/samples/sample-tools/sample-filter/tokenize.ts,sha256=tD45vb1d-8XSV0RmGbdJijk92KuC555ksBsVD43uxCA,2802
324
325
  inspect_ai/_view/www/src/app/samples/scores/SampleScores.module.css,sha256=jhwzLYwYRzEFhGqFZUYpzHOG3yDDY33rH14-ECgC9TQ,96
325
326
  inspect_ai/_view/www/src/app/samples/scores/SampleScores.tsx,sha256=U8bYNmgW51aid6FrBemPeGOhmTg2Z59FKeBHcPgTDvE,586
@@ -371,7 +372,7 @@ inspect_ai/_view/www/src/app/samples/transcript/event/EventTimingPanel.module.cs
371
372
  inspect_ai/_view/www/src/app/samples/transcript/event/EventTimingPanel.tsx,sha256=MLsmFru7o37ymoZZdFkt2jhS9t4pzYFCLLaqshd4v_A,2746
372
373
  inspect_ai/_view/www/src/app/samples/transcript/event/utils.ts,sha256=fFnt2DSCymWFdbzdf1P7r5nA6r472pNlCzQlUThkX_Q,766
373
374
  inspect_ai/_view/www/src/app/samples/transcript/outline/OutlineRow.module.css,sha256=aeOYelj5_F2cyN7z72VZuhEVrLV9iCPXWP-w7AOl9Mk,598
374
- inspect_ai/_view/www/src/app/samples/transcript/outline/OutlineRow.tsx,sha256=_Y--C8bxjfcEWrZN3RdgreOIvbiSMLjYe83XIHcGoNY,6132
375
+ inspect_ai/_view/www/src/app/samples/transcript/outline/OutlineRow.tsx,sha256=yMW6mgvF-9Yr6AILSUfcKOPvb9sYOTerLctEWFTtiSo,6131
375
376
  inspect_ai/_view/www/src/app/samples/transcript/outline/TranscriptOutline.module.css,sha256=SXBox9F9srdAG14qhXm8VWKoH2sQE6uGm2mNvhXh-oQ,146
376
377
  inspect_ai/_view/www/src/app/samples/transcript/outline/TranscriptOutline.tsx,sha256=ufbASbpZGENEia0m87UhxUNsJsJ7WbdQK9zV-BVcdYs,7715
377
378
  inspect_ai/_view/www/src/app/samples/transcript/outline/tree-visitors.ts,sha256=rsdu7RjayZt-XcmwG4m600TChJwFQPsEJvz34dpyv-U,4792
@@ -403,14 +404,14 @@ inspect_ai/_view/www/src/app/usage/TokenTable.module.css,sha256=VkwYeWCKK3frYZpa
403
404
  inspect_ai/_view/www/src/app/usage/TokenTable.tsx,sha256=Gvn8_v1XDyRVV6w5JvcopgskRuawIyHYFuA4MxKVTBg,1844
404
405
  inspect_ai/_view/www/src/app/usage/UsageCard.module.css,sha256=YehyCCKrQKXYWJb7JkqMjyBofG0-b5vFDXsApqEITSs,266
405
406
  inspect_ai/_view/www/src/app/usage/UsageCard.tsx,sha256=KLwfynSoXTh1ROsO_DNIpF0VL5VXdvS0gp2vNZs94iw,793
406
- inspect_ai/_view/www/src/client/api/api-browser.ts,sha256=-yLP4xo2oezAKf4VdrLkDpOGVbBY2wDH6ArPaN2xtEI,7262
407
- inspect_ai/_view/www/src/client/api/api-http.ts,sha256=p6tfSOvC-3jIZs-lsf2ZidswPjAXbR1K3gV_8WukNO0,6272
407
+ inspect_ai/_view/www/src/client/api/api-browser.ts,sha256=bhikhdadKa5va4H9b_S5o8YCEKa4JDHlj8FY0U_J1YA,7825
408
+ inspect_ai/_view/www/src/client/api/api-http.ts,sha256=kyO7Tpiskv3X9Gt3b9uqLxWGItfs3pypmQabf4P4OnY,6408
408
409
  inspect_ai/_view/www/src/client/api/api-shared.ts,sha256=F0qCU97BN8p4DjsdK62hwoRSlcJUahCY--WyacbMRz0,1524
409
- inspect_ai/_view/www/src/client/api/api-vscode.ts,sha256=JO2W68UAmKJ3uZrHn6Z7wBBERaZIfHZX-Bc-Rqz4wF4,3970
410
- inspect_ai/_view/www/src/client/api/client-api.ts,sha256=8h5horKcLIcvwOi5v-kl8k30LUDRpuMUdYY8u7kno5c,9660
410
+ inspect_ai/_view/www/src/client/api/api-vscode.ts,sha256=DeW4TyrMcmXZ88CpJDbiuyKHFe_Ki1ktPsPB0jNZA5A,4150
411
+ inspect_ai/_view/www/src/client/api/client-api.ts,sha256=YWmpiJKFHwBczz4zJ4b826-hbyVafuxny-TlP7c34_8,9774
411
412
  inspect_ai/_view/www/src/client/api/index.ts,sha256=LkMZu6xHkcgd-YQT9iipbgjOtKnWQ9GxN88MDJhNDmc,1771
412
- inspect_ai/_view/www/src/client/api/jsonrpc.ts,sha256=pmkI50pwaLhQYDu5Pt_X1wR-Ik-RzqYNdhn_ayshEDA,5784
413
- inspect_ai/_view/www/src/client/api/types.ts,sha256=HScgAJgxf5BhyKIts5yGeIpk4OvXQv26HCpfGk6jGvs,5302
413
+ inspect_ai/_view/www/src/client/api/jsonrpc.ts,sha256=pv3NCYsh4WFbKXTNmT63iDgdmhngpA57ML0pEuvH_S0,5832
414
+ inspect_ai/_view/www/src/client/api/types.ts,sha256=c15vohyFvWfM6koqTwh7ipcVTMVIIY0geZK_JD2MvUE,5475
414
415
  inspect_ai/_view/www/src/client/remote/remoteLogFile.ts,sha256=RnU5BerxbLVPavOrZlXI69rNu-eSrl6PepfpP8x-Ru8,6160
415
416
  inspect_ai/_view/www/src/client/remote/remoteZipFile.ts,sha256=0WfRV-PjCRGK4Mv6GKB62HIBFPcTKgruiDEK-LX5svI,13007
416
417
  inspect_ai/_view/www/src/client/storage/index.ts,sha256=7al8eAsanynNAWazurfZmkenZquWUHtfsKc5CqjERwE,986
@@ -475,7 +476,7 @@ inspect_ai/_view/www/src/state/logPolling.ts,sha256=hn32ICGS0GnnDmoxbRnGOK7695_k
475
476
  inspect_ai/_view/www/src/state/logSlice.ts,sha256=kmq_6U8ZB-fvqIOZfOky_pL4IOzorpohQXFEQwrWi4Q,6551
476
477
  inspect_ai/_view/www/src/state/logsPolling.ts,sha256=PSOcqLpx4-Ohgz5v1WEG4iIsGtrxrYcq01vml-xNQe4,2988
477
478
  inspect_ai/_view/www/src/state/logsSlice.ts,sha256=j2wWMcx35VRCBrLwYMKsDguexYMfSvh0gZEx4IREJrA,5582
478
- inspect_ai/_view/www/src/state/samplePolling.ts,sha256=JFJZI05U3wMLMTB1gCpP3melqqoiejoR5naO4uqm6mE,9425
479
+ inspect_ai/_view/www/src/state/samplePolling.ts,sha256=fBsNbEOfHMxnPUVQFjYRoCbGa-mjqmyu4zDfCfgzZVw,9728
479
480
  inspect_ai/_view/www/src/state/sampleSlice.ts,sha256=6L0mnIJycnMEc4LDecvbe95yvl_h7Cf85KAy1gv9ZXI,9671
480
481
  inspect_ai/_view/www/src/state/sampleUtils.ts,sha256=cIGExXuYSzG-U6Pcac9ekF1818ShvkRzRKEY_nfqmvg,754
481
482
  inspect_ai/_view/www/src/state/scoring.ts,sha256=TW4BNhRD1n8rYshrcOMPE27uFSCW_0XbkUJWbMlsH8U,2122
@@ -518,8 +519,8 @@ inspect_ai/agent/_agent.py,sha256=ovgzc64lfLnT8wq_xAyiHVfegfJVgktGc3fWJLceVms,89
518
519
  inspect_ai/agent/_as_solver.py,sha256=glOKzItIPsveWDGlk2igLfFDOix_NlEkAtyQ6YsWB2Q,2976
519
520
  inspect_ai/agent/_as_tool.py,sha256=-NGZUFAEimvSpog0UmNtYDMlbbuKaWnIgwNnMd_fffM,4912
520
521
  inspect_ai/agent/_filter.py,sha256=qnT0HbT4edpDi0MwXY3Q3It2pzNRkTRXZDOqfCwMY6M,1234
521
- inspect_ai/agent/_handoff.py,sha256=98a8CMER_rlWhNmbTK-Rcgg6_uM3w9ODwo6OmV-CWOY,3777
522
- inspect_ai/agent/_react.py,sha256=QxMVLGXBMEddRJubsgaEF8F6B9rFnc50rgO68_nByXo,19018
522
+ inspect_ai/agent/_handoff.py,sha256=fonoLtC9CxCt7Ya_EbhHU-1indqVpOaTJ2b8-9BoM_k,3848
523
+ inspect_ai/agent/_react.py,sha256=oFUy2w96d9nSYeLBoeqLv1GuBjAFh0glPaPJ8M8jOPE,20003
523
524
  inspect_ai/agent/_run.py,sha256=wXAE26-w0W1Brn5KTEQH5Esl_ZrwH37Po18yX-EZQsI,3171
524
525
  inspect_ai/agent/_types.py,sha256=UeXBI_p8VVgEeMqenJjFRfyAWqWBKugUvVS2eJoIIUw,4560
525
526
  inspect_ai/agent/_bridge/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -580,7 +581,7 @@ inspect_ai/approval/_human/manager.py,sha256=Igae35VS99TejSWUShNwFuVnmhwByK30H84
580
581
  inspect_ai/approval/_human/panel.py,sha256=UaO309bn7zMDV1I5GJcrZThhU8c8D4gOW7bwPRPPdkc,7672
581
582
  inspect_ai/approval/_human/util.py,sha256=DPxpA9_pzeoQyHpGtRE3hx8sGV7MyrlElCBvsh1FNgA,1996
582
583
  inspect_ai/dataset/__init__.py,sha256=4uTSHpN_ccdtbZulUMDetSSP-dXRkFGYsa2FzA5mLEw,534
583
- inspect_ai/dataset/_dataset.py,sha256=CrDsUaoyJg5ijApVPxQgCiZRbkO-QA6xgv39q3LzQRc,11936
584
+ inspect_ai/dataset/_dataset.py,sha256=FmKmSppKlxY1-DedilUCjrAExdNAkdz17lm54sUiXpY,11948
584
585
  inspect_ai/dataset/_util.py,sha256=0sPupAhfMS7Cm5aQWEIt5ULjAv9E7PdLqdeBb4mqE60,8720
585
586
  inspect_ai/dataset/_examples/bias_detection.jsonl,sha256=ufXUZMjsJhY2_lJ9j_iJ6w0fiuyw7TQmJeMFoOqKYzM,20756
586
587
  inspect_ai/dataset/_examples/biology_qa.jsonl,sha256=Hfkr8XRT2x6Cgjd-zKbWGfFD-ZEfi566FqLX4w9USKs,2009
@@ -603,7 +604,7 @@ inspect_ai/log/_log.py,sha256=EViZsKBEh6RmtOy6FtzKy59p7qdXNzkBfiQ1pKo4Z_c,30251
603
604
  inspect_ai/log/_message.py,sha256=QofM_JZF_x3k_5ta1uQzoN_VnMoUhXFnqWurIn9FXOY,1999
604
605
  inspect_ai/log/_model.py,sha256=8tEhFZc1tBFgA6A_spXTqTBdvbzZP5t7ul7DiloHRWk,1698
605
606
  inspect_ai/log/_retry.py,sha256=e7a2hjl3Ncl8b8sU7CsDpvK8DV0b1uSRLeokRX1mt34,2109
606
- inspect_ai/log/_samples.py,sha256=7ul6qvivKO7QjoA2-d3gMDVjQ17ojQE2rrVZL1CoeEM,4820
607
+ inspect_ai/log/_samples.py,sha256=9NCu1RSMBjswkFkc4gy9A00qfqBQi7CrUaNi9duEld4,4930
607
608
  inspect_ai/log/_transcript.py,sha256=l902I3WDDCcw424xkHToMxy1HEUaBBaId8LJdXila5E,16937
608
609
  inspect_ai/log/_tree.py,sha256=C817m_7-66ThyCX5K4nVA7AzYOgLXWlKMdTQ-ueNA-U,3232
609
610
  inspect_ai/log/_util.py,sha256=0IYnqqmDtL73BcRFU9TLlUemQf3OUh343SN-0r_MLfI,1750
@@ -621,7 +622,7 @@ inspect_ai/log/_recorders/buffer/filestore.py,sha256=0RYD7VR61XoM9Gx8wpqQ8utNqGb
621
622
  inspect_ai/log/_recorders/buffer/types.py,sha256=1cyKA_vrXCh2Q560qDSwLSgR7Mx45R2g4-8c76PontE,2054
622
623
  inspect_ai/model/__init__.py,sha256=FlD6GS5kpn9v4xUEInK9xEMhHbOtIP5QQzDoQuqZzgM,2796
623
624
  inspect_ai/model/_cache.py,sha256=Bl6WS9b1kJRVsGK0h7Fd1-mDAbrlxvNXMPK30P3aMuM,13736
624
- inspect_ai/model/_call_tools.py,sha256=pF5C4dYwh34TePWKntRGCdLkxZx8nWgzN_QpJxX4rL8,30790
625
+ inspect_ai/model/_call_tools.py,sha256=zCTaLDISbqGgf2VEDU2yLVlPGOvM2PeMpTAG0hdtTZ0,30809
625
626
  inspect_ai/model/_chat_message.py,sha256=IDy3bPr9vbO35PgnycDNfyXiryrnCaCoGKhBAhj18y0,7515
626
627
  inspect_ai/model/_conversation.py,sha256=J4zxb8mJdcpV5zLEDYS-ikQckONeaUZrqNReLLruUOE,374
627
628
  inspect_ai/model/_display.py,sha256=0wb9tV4PItvwgUpqpxLCL60oWlg4lT1nVA6GKJV3rcU,3090
@@ -638,14 +639,14 @@ inspect_ai/model/_trim.py,sha256=y2bSok4y844spv7vdjUVGnxWG93WcslAsXyplWDoRqU,337
638
639
  inspect_ai/model/_providers/_anthropic_citations.py,sha256=8Wub6F8vvup0-e-BKV3wcrT4n1_7q9Rimv0xnMQAEZM,5767
639
640
  inspect_ai/model/_providers/_google_citations.py,sha256=KtqQdvUrWV1lGYfD7aLOIwUbIqZbVJDCoX-uCMHBZz8,3573
640
641
  inspect_ai/model/_providers/_openai_computer_use.py,sha256=vbKkYLhqNuX16zuWfg5MaGp9H8URrPcLhKQ1pDsZtPo,5943
641
- inspect_ai/model/_providers/_openai_web_search.py,sha256=tKxoRHc8gHIt8kgIdp6eM_Ak62inGRTxdUe1JNJV0b8,1195
642
- inspect_ai/model/_providers/anthropic.py,sha256=Ijc_yDWzBm7ccFZj5wm9NdZWOFhKe-moHGhgVmyMSZw,41299
642
+ inspect_ai/model/_providers/_openai_web_search.py,sha256=8hTUNmt7nYCWMn1RjxevWdeZL7FyLi6T2AWKOciNz3w,1228
643
+ inspect_ai/model/_providers/anthropic.py,sha256=Dzu_5nWH4Xx1XklARkjCP0jkIvt8Nf5SDmzgblPGsf4,42201
643
644
  inspect_ai/model/_providers/azureai.py,sha256=KzgPYtUMsqEZZTHWYWYLnnRd6wh4qqlqqZL2JwvraLs,16738
644
645
  inspect_ai/model/_providers/bedrock.py,sha256=G252v6gUXtT56M4JaLLY7tEw2AJVQFucjeFgv0okhgo,23999
645
646
  inspect_ai/model/_providers/cloudflare.py,sha256=9yHfA5qbKWjzOfOzCJ_u8CZsH_U7AolAWLxvLBXKrhM,2375
646
- inspect_ai/model/_providers/google.py,sha256=3K4RhECrEPaCC5i6DE5tGWd5QiE9kcXhlTr4NxUHUU4,35665
647
+ inspect_ai/model/_providers/google.py,sha256=6omSismcBEFH_2lVhOhLF5A3ceMpuZiARxWD91n2R6E,35748
647
648
  inspect_ai/model/_providers/grok.py,sha256=iAPXmZMR7VWPq6EIwRsoUJr_TR6b5kTt-Fkba1pogGQ,1267
648
- inspect_ai/model/_providers/groq.py,sha256=q9o4sy0uUyLQbSThB-MMTmSc5AtKmb6GJfgHBpf5amM,12262
649
+ inspect_ai/model/_providers/groq.py,sha256=uPzH8gmJhBOwgXWAdiqtCYlBi79E051wr6-bxUrMUwA,12503
649
650
  inspect_ai/model/_providers/hf.py,sha256=jyXi4qyq2hdsp1waB2ON5m8f9mpE2h1GFD7Tu_phCEo,19115
650
651
  inspect_ai/model/_providers/llama_cpp_python.py,sha256=qVGpR7qnuP3wbYfFqSTkSc63sYsNnK1XC5IV-Ac0Uu4,618
651
652
  inspect_ai/model/_providers/mistral.py,sha256=TNVrwS1gJ-ClxPvDnhGQBelLtEm6r4eF4t25H0pJwQw,18152
@@ -657,8 +658,8 @@ inspect_ai/model/_providers/openai_compatible.py,sha256=2dGx2pJSj6o0uJWKE3mimX47
657
658
  inspect_ai/model/_providers/openai_o1.py,sha256=ahdXt2TFtPTdDvSGVQw7EaVindfbFbY2pLZrrB45rFg,13305
658
659
  inspect_ai/model/_providers/openai_responses.py,sha256=eNDDCyIfBPCy_gTbpRDr5UicGR_8xkIq9TBTZT7wU7w,6685
659
660
  inspect_ai/model/_providers/openrouter.py,sha256=sm-XlzcevoZfoR4C00jCxlfeL2NlnPVpJJA1mFFgkgw,4990
660
- inspect_ai/model/_providers/perplexity.py,sha256=2KA5l_BJjQOOvgGIy4O2e0INHOq4dqHIBlTYdN_WRTQ,4880
661
- inspect_ai/model/_providers/providers.py,sha256=Wk4p69q8_yRmrnIgTZjPLejeGgriAiJkxRUf5mozd3k,6806
661
+ inspect_ai/model/_providers/perplexity.py,sha256=LUvy4kk_v4--zA08yqgQtPj4COecXP7Jym8ThtUxOGw,5954
662
+ inspect_ai/model/_providers/providers.py,sha256=w8QpVV0Hj_pQjOEC3W-bisJraSwe3QbovH8-sYBz2Cc,6806
662
663
  inspect_ai/model/_providers/sglang.py,sha256=vmIIFC-wyltCAvewvgMVRs4jfp9wFSfinTuNo9TQxM8,8750
663
664
  inspect_ai/model/_providers/together.py,sha256=EUNag5nraqo3GvzwKB1jukhZj-GACxsCGPrBC4VR2MU,9786
664
665
  inspect_ai/model/_providers/vertex.py,sha256=_8wsThFHIpuwJ5Bvmx8PsEYKqauUYZ1v8B3dn41CtFw,17328
@@ -745,27 +746,28 @@ inspect_ai/tool/_tools/_web_search/_base_http_provider.py,sha256=ww9SbvrXa5MNxwR
745
746
  inspect_ai/tool/_tools/_web_search/_exa.py,sha256=vH5aLLsWRYpTaSkk1jN6os3x-eE8uAqT_U5ToJaIoP8,2372
746
747
  inspect_ai/tool/_tools/_web_search/_google.py,sha256=CD1ckTpw4prwkancWz6_aTWwGZ4xwKfbDcqAPiSLNS4,7239
747
748
  inspect_ai/tool/_tools/_web_search/_tavily.py,sha256=4i9lqhWTgT_cD-cocDQjW-eJhRZZ6pjzlFfKYe1rfdg,3053
748
- inspect_ai/tool/_tools/_web_search/_web_search.py,sha256=12xJq8eA90JDLq3S4HMZ_2Umu29xHd15wcap0KoVeRo,11033
749
+ inspect_ai/tool/_tools/_web_search/_web_search.py,sha256=qB6O-NAdt4FYFshf02r71nIOYETuSOdMpAUgEeHw4BE,11308
749
750
  inspect_ai/tool/_tools/_web_search/_web_search_provider.py,sha256=SvbQd7l2wqz5cAdNk9zrXX8NqOoWd-FEtF-6zyLA7MA,208
750
- inspect_ai/util/__init__.py,sha256=0I3QhMx_ma5p611qabqoGrQ96X1CQbP9HFbHOn8jgog,2105
751
+ inspect_ai/util/__init__.py,sha256=pYCxgPSDHdN9S2UtYhL8l_oUkiVFInQ_-waSFrD09x8,2281
751
752
  inspect_ai/util/_anyio.py,sha256=ImV_Q9oJ0XT0Fy6qa68OHpCzcUbfxptbHAjYWre-m2U,1541
753
+ inspect_ai/util/_background.py,sha256=9W1h87f9lH_uCaaYG_FjSfJOYpFtMF-5UuBeAsXljpo,1559
752
754
  inspect_ai/util/_collect.py,sha256=--eYTBln__H0DVx_xKd2Rc6buz4gFuNkMccrA6nmqU0,1456
753
755
  inspect_ai/util/_concurrency.py,sha256=mmXAfizGQggMIeppcMNxtnfcOeFDz0SU2S1ICKTWDLo,2962
754
756
  inspect_ai/util/_console.py,sha256=V1XkIoKcNZo0SgRUOv15zJAWz6-zV6267hC4Oldj8oY,1237
755
757
  inspect_ai/util/_conversation.py,sha256=KzqvKfj1tB14cgARZjYyIVG2EpuE-EZKqLGAPIXv1Xs,784
756
758
  inspect_ai/util/_display.py,sha256=Co-5U0ei98GLYPbwWqMoimWNmIIL8lv3D8oTSuT9DiA,2448
757
759
  inspect_ai/util/_json.py,sha256=X6J1JKuxteP76mHaU3qDrFDYWizWt5xNjm65ag72_2E,6952
758
- inspect_ai/util/_limit.py,sha256=-x1UQ-H3Dq3BZYQwTI99FWVquqF0CwPAzamYrnNrApE,21095
760
+ inspect_ai/util/_limit.py,sha256=LlBjt1uhK59TeUnoeYxeIany3HQDvSylBnhB8JW7buA,22736
759
761
  inspect_ai/util/_limited_conversation.py,sha256=rfM45soaVmtGrYTaUk_ibZxTe8rbP5bzGlIWJCYBWM8,1997
760
762
  inspect_ai/util/_panel.py,sha256=MdZxOt0F01ddn_NsRfwn0es6UjQasK1_EKIQ6jtQyG8,3124
761
763
  inspect_ai/util/_resource.py,sha256=X280aW_7VCkVTGk812tuU5qnZlGM5Qt1-kANr-DaGOs,3389
762
764
  inspect_ai/util/_span.py,sha256=y1GOS8h-e9fujDyTJTWOaQIsey8Ldhu8osN-fYiAdlE,1680
763
765
  inspect_ai/util/_store.py,sha256=QemJe2M-RK6zSFNcd07_92XFjvNtWKgHzBr5eT3KF1I,3786
764
766
  inspect_ai/util/_store_model.py,sha256=PVXh0_Rtemu5WNLTs2bcnZnKFGj2pT_np-1dBnkldr8,5125
765
- inspect_ai/util/_subprocess.py,sha256=2VfqlWMVw4ebpKxj52motdxrIooU3JKP_Uno8KcK-B4,8014
767
+ inspect_ai/util/_subprocess.py,sha256=H536zfPCFJPYyVjKoenDLpBfCj6YT6xufihrmUC8omw,8684
766
768
  inspect_ai/util/_subtask.py,sha256=gj108R8mnSSJsXALYpuHf7Z6qA4TRfKtwj1y68og6Wc,5065
767
769
  inspect_ai/util/_throttle.py,sha256=JczSG_y0v60m4gQCt28uw_WPjJTbHuq8gWcxY3-vFsc,855
768
- inspect_ai/util/_sandbox/__init__.py,sha256=N3mly5_zTOVBVkDzJyPQWYm3-KMbR3_nupYXIDWLtKo,914
770
+ inspect_ai/util/_sandbox/__init__.py,sha256=C8saQ-TPCGxBEdGqWF0PFwdH2JkGnNemx-sJ4gRQAjA,974
769
771
  inspect_ai/util/_sandbox/context.py,sha256=CS-JS9lTDwaNclMXaT0ilaU-aIuHtV6HaV7_2-myZlM,10025
770
772
  inspect_ai/util/_sandbox/environment.py,sha256=yxQAKJqXHzifoo1v_gRRizEmMTLDl1KtUAcT50VAjDI,14578
771
773
  inspect_ai/util/_sandbox/events.py,sha256=NJ724uZnjxOHBdkrNkecEl2DMQ4q0PLOH1QCJOHllXw,5463
@@ -773,7 +775,7 @@ inspect_ai/util/_sandbox/limits.py,sha256=K-GjKfSugOq8KP0wW_oF6qFrXsOnMV0C88QUWk
773
775
  inspect_ai/util/_sandbox/local.py,sha256=A_6kvAqoU483cKetKI5r-8fggM2uThFZeOY5Tz2_K0o,3538
774
776
  inspect_ai/util/_sandbox/registry.py,sha256=mQwWwqzaCXF1FZ2fcVujpp3WMA35GWnh1w43SoIJAVM,2145
775
777
  inspect_ai/util/_sandbox/self_check.py,sha256=iYdAzb_ufMgA0yDQQJ3v5RcKCFTkayp-nqO-A8DFhfI,23915
776
- inspect_ai/util/_sandbox/service.py,sha256=pAZ9UI4Qx-BYzEL78_-vsaZuzwxBDaesBLhezX9RdEM,11952
778
+ inspect_ai/util/_sandbox/service.py,sha256=pOQ-HU2m6rjtZE1tBDX9Wpy4IeIfBVyxoBNYGbgEjx4,12451
777
779
  inspect_ai/util/_sandbox/docker/cleanup.py,sha256=pGYzgCviZqbrFcM1AASIHWCrYE1pS_g4OamcVWKrkMM,5257
778
780
  inspect_ai/util/_sandbox/docker/compose.py,sha256=r7BtNv5JGJsL8IwQmW_DFSN7JFMRAjneC7WBtGkIagM,12292
779
781
  inspect_ai/util/_sandbox/docker/config.py,sha256=5-YsouGJGxNXw8xNEZi1o4H0EaqaTLKoQhwYT2Iczb4,2925
@@ -782,9 +784,9 @@ inspect_ai/util/_sandbox/docker/internal.py,sha256=c8X8TLrBPOvsfnq5TkMlb_bzTALyc
782
784
  inspect_ai/util/_sandbox/docker/prereqs.py,sha256=0j6_OauBBnVlpBleADcZavIAAQZy4WewVjbRn9c0stg,3355
783
785
  inspect_ai/util/_sandbox/docker/service.py,sha256=hhHIWH1VDFLwehdGd19aUBD_VKfDO3GCPxpw1HSwVQk,2437
784
786
  inspect_ai/util/_sandbox/docker/util.py,sha256=EeInihCNXgUWxaqZ4dNOJd719kXL2_jr63QCoXn68vA,3154
785
- inspect_ai-0.3.104.dist-info/licenses/LICENSE,sha256=xZPCr8gTiFIerrA_DRpLAbw-UUftnLFsHxKeW-NTtq8,1081
786
- inspect_ai-0.3.104.dist-info/METADATA,sha256=auCJH5R_X47PfQbHlel0TfPEpOLbEiaB3ttn676ETJE,5467
787
- inspect_ai-0.3.104.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
788
- inspect_ai-0.3.104.dist-info/entry_points.txt,sha256=WGGLmzTzDWLzYfiyovSY6oEKuf-gqzSDNOb5V-hk3fM,54
789
- inspect_ai-0.3.104.dist-info/top_level.txt,sha256=Tp3za30CHXJEKLk8xLe9qGsW4pBzJpEIOMHOHNCXiVo,11
790
- inspect_ai-0.3.104.dist-info/RECORD,,
787
+ inspect_ai-0.3.106.dist-info/licenses/LICENSE,sha256=xZPCr8gTiFIerrA_DRpLAbw-UUftnLFsHxKeW-NTtq8,1081
788
+ inspect_ai-0.3.106.dist-info/METADATA,sha256=R9CGAToXOHjO1m2iMWBrH21ekfL-X7bOyM4cOsPM8Ik,5467
789
+ inspect_ai-0.3.106.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
790
+ inspect_ai-0.3.106.dist-info/entry_points.txt,sha256=WGGLmzTzDWLzYfiyovSY6oEKuf-gqzSDNOb5V-hk3fM,54
791
+ inspect_ai-0.3.106.dist-info/top_level.txt,sha256=Tp3za30CHXJEKLk8xLe9qGsW4pBzJpEIOMHOHNCXiVo,11
792
+ inspect_ai-0.3.106.dist-info/RECORD,,