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.
- inspect_ai/_display/plain/display.py +9 -11
- inspect_ai/_display/textual/app.py +3 -4
- inspect_ai/_display/textual/widgets/samples.py +43 -8
- inspect_ai/_util/interrupt.py +9 -0
- inspect_ai/_util/logger.py +4 -0
- inspect_ai/_util/text.py +288 -1
- inspect_ai/_view/www/dist/assets/index.js +1 -1
- inspect_ai/_view/www/src/samples/descriptor/score/ObjectScoreDescriptor.tsx +1 -1
- inspect_ai/log/_samples.py +0 -4
- inspect_ai/model/_model.py +3 -0
- inspect_ai/model/_providers/google.py +356 -302
- inspect_ai/model/_providers/mistral.py +10 -8
- inspect_ai/model/_providers/providers.py +5 -5
- inspect_ai/solver/_plan.py +3 -0
- inspect_ai/solver/_solver.py +3 -0
- inspect_ai/solver/_task_state.py +3 -1
- inspect_ai/util/_sandbox/docker/cleanup.py +8 -3
- inspect_ai/util/_sandbox/docker/compose.py +5 -9
- inspect_ai/util/_sandbox/docker/docker.py +14 -2
- inspect_ai/util/_sandbox/docker/util.py +10 -1
- inspect_ai/util/_sandbox/self_check.py +2 -1
- inspect_ai/util/_subprocess.py +4 -1
- {inspect_ai-0.3.68.dist-info → inspect_ai-0.3.69.dist-info}/METADATA +3 -3
- {inspect_ai-0.3.68.dist-info → inspect_ai-0.3.69.dist-info}/RECORD +28 -27
- {inspect_ai-0.3.68.dist-info → inspect_ai-0.3.69.dist-info}/LICENSE +0 -0
- {inspect_ai-0.3.68.dist-info → inspect_ai-0.3.69.dist-info}/WHEEL +0 -0
- {inspect_ai-0.3.68.dist-info → inspect_ai-0.3.69.dist-info}/entry_points.txt +0 -0
- {inspect_ai-0.3.68.dist-info → inspect_ai-0.3.69.dist-info}/top_level.txt +0 -0
@@ -111,16 +111,12 @@ class MistralAPI(ModelAPI):
|
|
111
111
|
if base_url:
|
112
112
|
model_args["server_url"] = base_url
|
113
113
|
|
114
|
-
|
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
|
-
|
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
|
-
|
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-
|
97
|
-
MIN_VERSION = "
|
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.
|
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
|
113
|
+
from .google import GoogleGenAIAPI
|
114
114
|
|
115
|
-
return
|
115
|
+
return GoogleGenAIAPI
|
116
116
|
|
117
117
|
|
118
118
|
@modelapi(name="hf")
|
inspect_ai/solver/_plan.py
CHANGED
@@ -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
|
|
inspect_ai/solver/_solver.py
CHANGED
@@ -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
|
|
inspect_ai/solver/_task_state.py
CHANGED
@@ -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
|
-
"\
|
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
|
-
) ->
|
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
|
-
|
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),
|
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
|
-
|
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:
|
inspect_ai/util/_subprocess.py
CHANGED
@@ -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
|
-
|
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.
|
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-
|
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.
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
514
|
-
inspect_ai/solver/_task_state.py,sha256=
|
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=
|
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=
|
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=
|
613
|
-
inspect_ai/util/_sandbox/docker/compose.py,sha256=
|
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=
|
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=
|
620
|
-
inspect_ai-0.3.
|
621
|
-
inspect_ai-0.3.
|
622
|
-
inspect_ai-0.3.
|
623
|
-
inspect_ai-0.3.
|
624
|
-
inspect_ai-0.3.
|
625
|
-
inspect_ai-0.3.
|
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,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|