inspect-ai 0.3.66__py3-none-any.whl → 0.3.68__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 (48) hide show
  1. inspect_ai/_display/core/config.py +1 -1
  2. inspect_ai/_display/core/panel.py +1 -2
  3. inspect_ai/_display/rich/display.py +2 -2
  4. inspect_ai/_display/textual/app.py +13 -5
  5. inspect_ai/_display/textual/widgets/footer.py +2 -2
  6. inspect_ai/_display/textual/widgets/sandbox.py +1 -1
  7. inspect_ai/_display/textual/widgets/task_detail.py +7 -5
  8. inspect_ai/_display/textual/widgets/tasks.py +8 -6
  9. inspect_ai/_display/textual/widgets/transcript.py +1 -1
  10. inspect_ai/_eval/task/run.py +5 -3
  11. inspect_ai/_eval/task/task.py +9 -1
  12. inspect_ai/_util/format.py +58 -0
  13. inspect_ai/_view/www/dist/assets/index.css +29 -9
  14. inspect_ai/_view/www/dist/assets/index.js +368 -304
  15. inspect_ai/_view/www/src/samples/error/FlatSampleErrorView.tsx +1 -1
  16. inspect_ai/_view/www/src/samples/sample-tools/filters.ts +41 -20
  17. inspect_ai/_view/www/src/samples/sample-tools/sample-filter/SampleFilter.tsx +2 -1
  18. inspect_ai/_view/www/src/samples/sample-tools/sample-filter/completions.ts +28 -6
  19. inspect_ai/_view/www/src/samples/sample-tools/sample-filter/language.ts +5 -0
  20. inspect_ai/_view/www/src/samples/transcript/LoggerEventView.tsx +1 -3
  21. inspect_ai/_view/www/src/samples/transcript/SubtaskEventView.tsx +31 -16
  22. inspect_ai/_view/www/src/samples/transcript/TranscriptView.tsx +4 -1
  23. inspect_ai/_view/www/src/workspace/navbar/StatusPanel.module.css +1 -0
  24. inspect_ai/_view/www/src/workspace/navbar/StatusPanel.tsx +2 -2
  25. inspect_ai/model/_model.py +89 -2
  26. inspect_ai/model/_providers/anthropic.py +4 -0
  27. inspect_ai/model/_providers/azureai.py +5 -0
  28. inspect_ai/model/_providers/bedrock.py +5 -0
  29. inspect_ai/model/_providers/cloudflare.py +4 -0
  30. inspect_ai/model/_providers/goodfire.py +5 -0
  31. inspect_ai/model/_providers/google.py +16 -3
  32. inspect_ai/model/_providers/groq.py +4 -0
  33. inspect_ai/model/_providers/hf.py +7 -0
  34. inspect_ai/model/_providers/mistral.py +4 -0
  35. inspect_ai/model/_providers/openai.py +4 -0
  36. inspect_ai/model/_providers/vertex.py +5 -0
  37. inspect_ai/model/_providers/vllm.py +7 -0
  38. inspect_ai/solver/__init__.py +8 -1
  39. inspect_ai/solver/_human_agent/panel.py +11 -5
  40. inspect_ai/solver/_prompt.py +38 -5
  41. {inspect_ai-0.3.66.dist-info → inspect_ai-0.3.68.dist-info}/METADATA +3 -2
  42. {inspect_ai-0.3.66.dist-info → inspect_ai-0.3.68.dist-info}/RECORD +46 -48
  43. inspect_ai/_view/www/node_modules/flatted/python/flatted.py +0 -149
  44. inspect_ai/_view/www/node_modules/flatted/python/test.py +0 -63
  45. {inspect_ai-0.3.66.dist-info → inspect_ai-0.3.68.dist-info}/LICENSE +0 -0
  46. {inspect_ai-0.3.66.dist-info → inspect_ai-0.3.68.dist-info}/WHEEL +0 -0
  47. {inspect_ai-0.3.66.dist-info → inspect_ai-0.3.68.dist-info}/entry_points.txt +0 -0
  48. {inspect_ai-0.3.66.dist-info → inspect_ai-0.3.68.dist-info}/top_level.txt +0 -0
@@ -152,6 +152,10 @@ class OpenAIAPI(ModelAPI):
152
152
  def is_gpt(self) -> bool:
153
153
  return is_gpt(self.model_name)
154
154
 
155
+ @override
156
+ async def close(self) -> None:
157
+ await self.client.close()
158
+
155
159
  async def generate(
156
160
  self,
157
161
  input: list[ChatMessage],
@@ -109,6 +109,11 @@ class VertexAPI(ModelAPI):
109
109
 
110
110
  self.model = GenerativeModel(model_name)
111
111
 
112
+ @override
113
+ async def close(self) -> None:
114
+ # GenerativeModel uses a cached/shared client so there is no 'close'
115
+ pass
116
+
112
117
  async def generate(
113
118
  self,
114
119
  input: list[ChatMessage],
@@ -1,5 +1,6 @@
1
1
  import asyncio
2
2
  import functools
3
+ import gc
3
4
  import os
4
5
  from dataclasses import dataclass
5
6
  from queue import Empty, Queue
@@ -131,6 +132,12 @@ class VLLMAPI(ModelAPI):
131
132
  # we get the tokenizer so we can use it to apply the model's chat template later
132
133
  self.tokenizer = self.model.get_tokenizer()
133
134
 
135
+ @override
136
+ async def close(self) -> None:
137
+ self.tokenizer = None
138
+ self.model = None
139
+ gc.collect()
140
+
134
141
  def apply_chat_template(
135
142
  self, messages: list[ChatMessage], tools: list[ToolInfo]
136
143
  ) -> str:
@@ -9,7 +9,13 @@ from ._human_agent.agent import human_agent
9
9
  from ._limit import SampleLimitExceededError
10
10
  from ._multiple_choice import MultipleChoiceTemplate, multiple_choice
11
11
  from ._plan import Plan, plan
12
- from ._prompt import chain_of_thought, prompt_template, system_message, user_message
12
+ from ._prompt import (
13
+ assistant_message,
14
+ chain_of_thought,
15
+ prompt_template,
16
+ system_message,
17
+ user_message,
18
+ )
13
19
  from ._solver import Generate, Solver, SolverSpec, generate, solver
14
20
  from ._task_state import Choice, Choices, TaskState
15
21
  from ._use_tools import use_tools
@@ -26,6 +32,7 @@ __all__ = [
26
32
  "multiple_choice",
27
33
  "system_message",
28
34
  "user_message",
35
+ "assistant_message",
29
36
  "self_critique",
30
37
  "use_tools",
31
38
  "plan",
@@ -83,7 +83,9 @@ class HumanAgentPanel(InputPanel):
83
83
  with VerticalScroll(id=self.SANDBOX_VIEW_ID):
84
84
  yield StatusBar()
85
85
  yield Static(
86
- id=self.SANDBOX_INSTRUCTIONS_ID, classes=self.INSTRUCTIONS_CLASS
86
+ id=self.SANDBOX_INSTRUCTIONS_ID,
87
+ classes=self.INSTRUCTIONS_CLASS,
88
+ markup=False,
87
89
  )
88
90
  with Horizontal(id=self.VSCODE_LINKS_ID):
89
91
  yield Label("Login:", classes=self.LINK_LABEL_CLASS)
@@ -97,9 +99,11 @@ class HumanAgentPanel(InputPanel):
97
99
  id=self.LOGIN_VSCODE_TERMINAL_ID,
98
100
  )
99
101
  yield Static(
100
- id=self.COMMAND_INSTRUCTIONS_ID, classes=self.INSTRUCTIONS_CLASS
102
+ id=self.COMMAND_INSTRUCTIONS_ID,
103
+ classes=self.INSTRUCTIONS_CLASS,
104
+ markup=False,
101
105
  )
102
- yield Static(id=self.SANDBOX_COMMAND_ID)
106
+ yield Static(id=self.SANDBOX_COMMAND_ID, markup=False)
103
107
 
104
108
  def watch_connection(self, connection: SandboxConnection | None) -> None:
105
109
  if connection:
@@ -200,9 +204,11 @@ class StatusBar(Horizontal):
200
204
 
201
205
  def compose(self) -> ComposeResult:
202
206
  yield Label("Status:", classes=self.LABEL_CLASS)
203
- yield Static("Running", id=self.STATUS_ID, classes=self.VALUE_CLASS)
207
+ yield Static(
208
+ "Running", id=self.STATUS_ID, classes=self.VALUE_CLASS, markup=False
209
+ )
204
210
  yield Label(" Time:", classes=self.LABEL_CLASS)
205
- yield Static("0:00:00", id=self.TIME_ID, classes=self.VALUE_CLASS)
211
+ yield Static("0:00:00", id=self.TIME_ID, classes=self.VALUE_CLASS, markup=False)
206
212
 
207
213
  def watch_running(self, running: bool) -> None:
208
214
  cast(Static, self.query_one(f"#{self.STATUS_ID}")).update(
@@ -1,8 +1,12 @@
1
1
  from typing import Any
2
2
 
3
3
  from inspect_ai._util.dict import omit
4
- from inspect_ai.model import ChatMessageSystem
5
- from inspect_ai.model._chat_message import ChatMessageUser
4
+ from inspect_ai._util.format import format_template
5
+ from inspect_ai.model._chat_message import (
6
+ ChatMessageAssistant,
7
+ ChatMessageSystem,
8
+ ChatMessageUser,
9
+ )
6
10
  from inspect_ai.util import resource
7
11
 
8
12
  from ._solver import Generate, Solver, solver
@@ -32,7 +36,7 @@ def prompt_template(template: str, **params: Any) -> Solver:
32
36
  async def solve(state: TaskState, generate: Generate) -> TaskState:
33
37
  prompt = state.user_prompt
34
38
  kwargs = omit(state.metadata | state.store._data, ["prompt"]) | params
35
- prompt.text = prompt_template.format(prompt=prompt.text, **kwargs)
39
+ prompt.text = format_template(prompt_template, {"prompt": prompt.text} | kwargs)
36
40
  return state
37
41
 
38
42
  return solve
@@ -63,7 +67,7 @@ def system_message(template: str, **params: Any) -> Solver:
63
67
  async def solve(state: TaskState, generate: Generate) -> TaskState:
64
68
  kwargs = state.metadata | state.store._data | params
65
69
  append_system_message(
66
- state.messages, ChatMessageSystem(content=content.format(**kwargs))
70
+ state.messages, ChatMessageSystem(content=format_template(content, kwargs))
67
71
  )
68
72
  return state
69
73
 
@@ -91,7 +95,36 @@ def user_message(template: str, **params: Any) -> Solver:
91
95
 
92
96
  async def solve(state: TaskState, generate: Generate) -> TaskState:
93
97
  kwargs = state.metadata | state.store._data | params
94
- state.messages.append(ChatMessageUser(content=content.format(**kwargs)))
98
+ state.messages.append(ChatMessageUser(content=format_template(content, kwargs)))
99
+ return state
100
+
101
+ return solve
102
+
103
+
104
+ @solver
105
+ def assistant_message(template: str, **params: Any) -> Solver:
106
+ """Solver which inserts an assistant message into the conversation.
107
+
108
+ Assistant message template containing any number of optional `params`.
109
+ for substitution using the `str.format()` method. All values
110
+ contained in sample `metadata` and `store` are also automatically
111
+ included in the `params`.
112
+
113
+ Args:
114
+ template: Template for assistant message.
115
+ **params: Parameters to fill into the template.
116
+
117
+ Returns:
118
+ A solver that inserts the parameterised assistant message.
119
+ """
120
+ # read template
121
+ content = resource(template)
122
+
123
+ async def solve(state: TaskState, generate: Generate) -> TaskState:
124
+ kwargs = state.metadata | state.store._data | params
125
+ state.messages.append(
126
+ ChatMessageAssistant(content=format_template(content, kwargs))
127
+ )
95
128
  return state
96
129
 
97
130
  return solve
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: inspect_ai
3
- Version: 0.3.66
3
+ Version: 0.3.68
4
4
  Summary: Framework for large language model evaluations
5
5
  Author: UK AI Security Institute
6
6
  License: MIT License
@@ -45,7 +45,7 @@ Requires-Dist: s3fs>=2023
45
45
  Requires-Dist: semver>=3.0.0
46
46
  Requires-Dist: shortuuid
47
47
  Requires-Dist: tenacity
48
- Requires-Dist: textual>=0.86.2
48
+ Requires-Dist: textual<=1.0.0,>=0.86.2
49
49
  Requires-Dist: typing_extensions>=4.9.0
50
50
  Requires-Dist: zipp>=3.19.1
51
51
  Provides-Extra: dev
@@ -63,6 +63,7 @@ Requires-Dist: moto[server]; extra == "dev"
63
63
  Requires-Dist: mypy; extra == "dev"
64
64
  Requires-Dist: nbformat; extra == "dev"
65
65
  Requires-Dist: openai; extra == "dev"
66
+ Requires-Dist: pip; extra == "dev"
66
67
  Requires-Dist: pre-commit; extra == "dev"
67
68
  Requires-Dist: pylint; extra == "dev"
68
69
  Requires-Dist: pytest; extra == "dev"
@@ -15,11 +15,11 @@ inspect_ai/_cli/util.py,sha256=rOyKR5p08-04IwJdcjakNXD1Gm-dGFtzaTTx7hyArPE,1402
15
15
  inspect_ai/_cli/view.py,sha256=QIL6QP0rJS5kcUzpIqKZMylx-zLAW2JXtjXoNjtxkHo,3113
16
16
  inspect_ai/_display/__init__.py,sha256=t9Xj8FbxvdBNsalnr16U0r3jSTFX9w4yXcUJwb06_6k,405
17
17
  inspect_ai/_display/core/active.py,sha256=6Z0-_6nduUp3UkGLbfYvrvgVVcnYdWLRkpvPOKZ_y5s,1259
18
- inspect_ai/_display/core/config.py,sha256=9uEUjoLzcVXr2GxU5-WCEXyJDabCOpSXgnXyH-ETyw4,2130
18
+ inspect_ai/_display/core/config.py,sha256=aUpPJ86w_vBT50b2yROnsU8rTEcK4445Ru4LFvcPkUM,2148
19
19
  inspect_ai/_display/core/display.py,sha256=zgpNSU39pITyM_Xa41FsGIY5a4JtZbv7bDy7hjmJCM8,3057
20
20
  inspect_ai/_display/core/footer.py,sha256=wMe4P-4Bhx4WV01dUW12o9-KBAoD2CSCvWZ-9_CMSNU,805
21
21
  inspect_ai/_display/core/group.py,sha256=z8CIwQ-8Mm9adQ8JDuMjw94ih9GfymU5s-1qnbKoEPs,2871
22
- inspect_ai/_display/core/panel.py,sha256=U0ibyTo9fP_-B_Mta6OfYAaPatZ15bPt72eyzaBB0eY,3853
22
+ inspect_ai/_display/core/panel.py,sha256=gyGYnsqHurUkUC51MyVuh3oGAtUEaFtyRwewOB6pDts,3828
23
23
  inspect_ai/_display/core/progress.py,sha256=2dIRbpJGUx-Wz89ZABoACBGvJEGWJ3SDrFsuCrrpL7w,4198
24
24
  inspect_ai/_display/core/results.py,sha256=aFLmG1Ij0fxYk2848QgQlesfMeRdHVEg_W9esmeL_S0,7355
25
25
  inspect_ai/_display/core/rich.py,sha256=GPzc-0PWZVOPWxnjfQmNSK66uZXc3x8joz4ethgv_4M,2729
@@ -27,22 +27,22 @@ inspect_ai/_display/core/textual.py,sha256=kzMTt8ijrodwhDB5V50pP2IBhnUCusVbP86Ty
27
27
  inspect_ai/_display/plain/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
28
  inspect_ai/_display/plain/display.py,sha256=fGITQj6w4-2A4zNMKFW32wdyVB5JpK-LsXMbFckzXTA,6743
29
29
  inspect_ai/_display/rich/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
- inspect_ai/_display/rich/display.py,sha256=ecEcahmRJirrYOorcVGuH7Qeyj0NdhsByMxasTxMpFc,10902
31
- inspect_ai/_display/textual/app.py,sha256=Ct9aAKw6vFIni5kyOWu0Fd70Sw3xB1pVaMriNEBu3UA,16021
30
+ inspect_ai/_display/rich/display.py,sha256=aJiuaEL8aEdOvdkKWobhlDuMr2X2j1M_SiAezPd3k-A,10920
31
+ inspect_ai/_display/textual/app.py,sha256=PyDkwzyEHLjObvwB3PtPlP0CSU9L7frYb1eoQ5MhnR0,15991
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
35
35
  inspect_ai/_display/textual/widgets/clock.py,sha256=pxXQOtadf6qdNMLQh_D3bx3SIPoBGcKev_etZ69ZRUE,1614
36
36
  inspect_ai/_display/textual/widgets/console.py,sha256=lp5lbT9erPjxE1NWzvuJ5Bj8mN2ZZSBTgKQWHinMKgA,1590
37
- inspect_ai/_display/textual/widgets/footer.py,sha256=_4Dlzp9kriUVELBEk6HQzgiwLigHe5mH0dZqWr6sGi4,1078
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
39
  inspect_ai/_display/textual/widgets/samples.py,sha256=rBaBP__MbKEX18B00nQCiLrWO9MmtSn0arh-zL90c8I,18206
40
- inspect_ai/_display/textual/widgets/sandbox.py,sha256=VRdC1NGKfog2gXz8a8aCIaXgPDVewW9CuoC-k0LUXfY,1132
41
- inspect_ai/_display/textual/widgets/task_detail.py,sha256=UCxQZkKrG6ILacuPpiJaoElezqJNb0njPWPA4IuNVDo,8289
42
- inspect_ai/_display/textual/widgets/tasks.py,sha256=Ari4-lsqPVsvAk4ZjdsnbO3l0JBmlifrbT9D7ykoUFA,11175
40
+ inspect_ai/_display/textual/widgets/sandbox.py,sha256=_Ivpba2oIxs_Lw2Pic7BRoHeVu9ibaGPFhiyfzbcc9E,1146
41
+ inspect_ai/_display/textual/widgets/task_detail.py,sha256=aaI626vbvieGbZtOKWmnaNWLivFMjnlDt4oqeTmKEZg,8389
42
+ inspect_ai/_display/textual/widgets/tasks.py,sha256=2cqYJ3PGn4F-riSdB3Fp1H5YCWQ-PVh7L8OrLCPSiso,11283
43
43
  inspect_ai/_display/textual/widgets/titlebar.py,sha256=Gh_vnsco_1lStPb34TXM9MZJffjy83-1ekoRzUQF_6w,2144
44
44
  inspect_ai/_display/textual/widgets/toggle.py,sha256=ToYs-S4n90yuxWcAW2OTg6AbRf0GhSz61XxfhE6XZ3Y,895
45
- inspect_ai/_display/textual/widgets/transcript.py,sha256=3JbnqkPD6NyCBlD3F232DpNXHgerQkVkci3Yd0Ks6rE,11124
45
+ inspect_ai/_display/textual/widgets/transcript.py,sha256=KrDwl5SYMGyIFWvLQQ8Yh_-BAbKdZjxIWqkvPBb-KSI,11138
46
46
  inspect_ai/_eval/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
47
47
  inspect_ai/_eval/context.py,sha256=WHXM4IdkPD2edp58qCUjzpFguPDM_RcoqTJdRGccdDE,1344
48
48
  inspect_ai/_eval/eval.py,sha256=kAOFSMid3FJDXVuqRGPnORcx78nq6GqJDH_UF4ESgEA,36667
@@ -60,10 +60,10 @@ inspect_ai/_eval/task/generate.py,sha256=lm066fbZOX7o3NB57rbwwec-ZaIFE745fiuacPC
60
60
  inspect_ai/_eval/task/images.py,sha256=Tg3I7d7ThCYP_Lf-H5JA7xH-sH2W-m1c1YfswDwplt4,3949
61
61
  inspect_ai/_eval/task/log.py,sha256=N5FJ8cx_3Y0DFFqd6IgjPnsOWixx6Hvc-Dc_1WEVSeY,9617
62
62
  inspect_ai/_eval/task/results.py,sha256=x4weYRK2XGowfBG3f2msOeZQ_pxh230HTlw6kps33jw,17925
63
- inspect_ai/_eval/task/run.py,sha256=cer8kdB0vbKyBR0nUWO8FJCebiMc9N200YE_u91uOxU,35462
63
+ inspect_ai/_eval/task/run.py,sha256=Rek-l7d6mVz1WCdp8VEpUl2e1jA4IaBqcdus5e1Zwjk,35563
64
64
  inspect_ai/_eval/task/rundir.py,sha256=QXetLfqi1lRo-PcIuu7maQpVO57c2ebnsjfZk0lsAFk,2001
65
65
  inspect_ai/_eval/task/sandbox.py,sha256=hNZnk3O80VQjAgy9YzUjjrGKOscSaOY7gZXMMz4tZvw,7183
66
- inspect_ai/_eval/task/task.py,sha256=IQMQOeW9ZD38CTf2U2S8Pf5IErK36VpjiI3_gYO6rfM,14054
66
+ inspect_ai/_eval/task/task.py,sha256=G4M38lvs3yjOWFX3w_q63CpB9R-AnGhjg9A_US7pI-k,14343
67
67
  inspect_ai/_eval/task/util.py,sha256=NG7YzVaiSgiH8xYGT2LeeVfaz4GIhXgXZYnU2SeDCO8,1837
68
68
  inspect_ai/_util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
69
69
  inspect_ai/_util/_async.py,sha256=K5lVPKwl25JkLkcXfb0m3aZ-RJ4O3fog5HQm5EqbjM4,981
@@ -82,7 +82,7 @@ inspect_ai/_util/entrypoints.py,sha256=FnK32vIRvSFdH80l5H0o6oiJif837oeDrl5N10_P-
82
82
  inspect_ai/_util/environ.py,sha256=lVaAvMyBIAPj4b64Zqhlz-ft35z7j-uPnvEesvL0c4g,618
83
83
  inspect_ai/_util/error.py,sha256=NIYCkOXGMUF1_zSHpeTBKzBb79_llQZvvf0TGYHO57Y,2333
84
84
  inspect_ai/_util/file.py,sha256=hvAqR1WSdZLHP_C8U8LHXmP82rfZBt9Pw9peHKg2fGs,12669
85
- inspect_ai/_util/format.py,sha256=RWmK4JcB7NwRy4rXtUa1JJ52_KhxcvREhMMCFVHvzwQ,1179
85
+ inspect_ai/_util/format.py,sha256=4TQ1FE4-TDNlHcr0r6dfsjv84sV11C9ouTfi55W-yIs,3323
86
86
  inspect_ai/_util/git.py,sha256=nHCtZMLjMyFjSC_9bksBXeFz4xqxZfY6lfXr_qg2n1E,760
87
87
  inspect_ai/_util/hash.py,sha256=Kkfwqy-w5H30qEv6KBbDQDSdyLRQ1_FU2vwktP5aEuQ,314
88
88
  inspect_ai/_util/hooks.py,sha256=8QnHCQQY_2XMYPkiPvixUgFY0E_niZvQhQDMI-eCdhM,4353
@@ -138,10 +138,8 @@ inspect_ai/_view/www/.vscode/extensions.json,sha256=E73RWLzcoyeluE_ijGxaNSOK9xC0
138
138
  inspect_ai/_view/www/.vscode/settings.json,sha256=g5hrVnMaYxM06JpiJD2EuE2xjcbF6xNAtL2fuKgG1-8,200
139
139
  inspect_ai/_view/www/dist/index.html,sha256=gpdu6SR-SOH9EWx15cCWHzujMZujnZR5tRlEfROJg2A,997
140
140
  inspect_ai/_view/www/dist/assets/favicon.svg,sha256=b9AHYZaO2zBzeKH6G4PwXZMGGW_UxY0omKHam-c9MAs,1508
141
- inspect_ai/_view/www/dist/assets/index.css,sha256=LXlByh-4-A1aCndGppGI5pnGE1jiUHayZ9VDuPBarno,893396
142
- inspect_ai/_view/www/dist/assets/index.js,sha256=cB5QrZSKv-815-Xr7xi8MZzkUdvGIFAn1PqtCiZ-X2g,2629550
143
- inspect_ai/_view/www/node_modules/flatted/python/flatted.py,sha256=ke8FuEflns-WlphCcQ9CC0qJqWqX3zEEuak74o6rgE8,3879
144
- inspect_ai/_view/www/node_modules/flatted/python/test.py,sha256=uTOn6HJd7KeY_PTRvvufv60dmvON3KWp3nnqACj8IlA,2129
141
+ 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
145
143
  inspect_ai/_view/www/src/App.tsx,sha256=EvpnQfpWugx4PJivUN8GSUo8RXI4sHAFiIfacVXZ1Z0,28854
146
144
  inspect_ai/_view/www/src/AppErrorBoundary.tsx,sha256=RyhZWbIMZj1QeUOUUXh9hUFvq6LoDEoHuTY0giswmL0,1169
147
145
  inspect_ai/_view/www/src/constants.ts,sha256=UIxGbDscs61CcOQLQiW6MsZAU1uupSYNVLGxx2pp14A,1169
@@ -267,7 +265,7 @@ inspect_ai/_view/www/src/samples/descriptor/score/PassFailScoreDescriptor.module
267
265
  inspect_ai/_view/www/src/samples/descriptor/score/PassFailScoreDescriptor.tsx,sha256=oTVPJGvuyuYVeyCXUWxV2rtp5Q2sapfRSGzazZDPcog,2058
268
266
  inspect_ai/_view/www/src/samples/descriptor/score/ScoreDescriptor.tsx,sha256=Tsw9vB0Cj4VnAajM5RIBbL0BCU2bRYxuuiCz8Ri-I1k,2711
269
267
  inspect_ai/_view/www/src/samples/error/FlatSampleErrorView.module.css,sha256=fbvWr5uM_m3Vsiqs_KMZa2zoUOSDwf328jINqlOUaiA,447
270
- inspect_ai/_view/www/src/samples/error/FlatSampleErrorView.tsx,sha256=JpVDoAlLrtRB2qYrkdfFtVazGDzllQ8m9JI8ztje1f4,595
268
+ inspect_ai/_view/www/src/samples/error/FlatSampleErrorView.tsx,sha256=5-pFNvFqDZdRa5aeZJEj2VmpZgaJtFUYcLTFzNk6I4w,599
271
269
  inspect_ai/_view/www/src/samples/error/SampleErrorView.module.css,sha256=OXmi3sjMLPWZvQXBT9OXB68nkJcackSiHbI5Q2dXAKM,313
272
270
  inspect_ai/_view/www/src/samples/error/SampleErrorView.tsx,sha256=qyd4S5wYCUqRXgEv3aknn9sTpQhNEnM6zWlBC1_UEu0,775
273
271
  inspect_ai/_view/www/src/samples/error/error.ts,sha256=_CVKTrACg18Xbhr7h_AL41RlMCmZ4V2IHLNMu1FtHIc,376
@@ -287,11 +285,11 @@ inspect_ai/_view/www/src/samples/sample-tools/SelectScorer.module.css,sha256=20R
287
285
  inspect_ai/_view/www/src/samples/sample-tools/SelectScorer.tsx,sha256=RncIUfDhrWQOI2jxi2WGijgUaLkheiBnYLdjSInUd34,4300
288
286
  inspect_ai/_view/www/src/samples/sample-tools/SortFilter.module.css,sha256=7uNUEoHtsNxN6P5WFZQvoEzd55n9rsgmfhWCicFh1_c,106
289
287
  inspect_ai/_view/www/src/samples/sample-tools/SortFilter.tsx,sha256=AvK9wcE7O4-q5Z_G-YEsxAprI_tUuqBIgc_KyYCZNYY,4580
290
- inspect_ai/_view/www/src/samples/sample-tools/filters.ts,sha256=5imKiy2FttNtAfzNUwBcHmg7LLITgyFdkzDh1u1TumU,8815
288
+ inspect_ai/_view/www/src/samples/sample-tools/filters.ts,sha256=5QiNwaZOuYSZKGOn0XeRYvWyLB7AM3lbMnDSkGfgpA4,9529
291
289
  inspect_ai/_view/www/src/samples/sample-tools/sample-filter/SampleFilter.module.css,sha256=PPdynh09MuEz0BMhHSximTj_BLNNAEQQQB8TH4amd3A,199
292
- inspect_ai/_view/www/src/samples/sample-tools/sample-filter/SampleFilter.tsx,sha256=UubcXHmSXCQGr0BsEUpZCEZlGUjNeOFfpQJ0o1He8cw,8266
293
- inspect_ai/_view/www/src/samples/sample-tools/sample-filter/completions.ts,sha256=Spo3X_ImMD5gUGexHWetgr3JlstbQnyYbZ0RNSqsgSI,10547
294
- inspect_ai/_view/www/src/samples/sample-tools/sample-filter/language.ts,sha256=OH0XXl_O2E9Q1MsVR0m9oGfTDVqPzohd9KPALiQGB2U,721
290
+ inspect_ai/_view/www/src/samples/sample-tools/sample-filter/SampleFilter.tsx,sha256=3McvKSdLwzPrEFVe-XD9XvmHOEuWOaakdXNUlmUn76U,8326
291
+ inspect_ai/_view/www/src/samples/sample-tools/sample-filter/completions.ts,sha256=wGpWvlKoyl6xj5giVQwvn4p5pRbM2RRFjWrKQsTmCIE,10931
292
+ inspect_ai/_view/www/src/samples/sample-tools/sample-filter/language.ts,sha256=R4rI9o1T5IFhqLxeq3ivlCFjjP7dTuBZ3FwigDp1L5o,904
295
293
  inspect_ai/_view/www/src/samples/sample-tools/sample-filter/tokenize.ts,sha256=tD45vb1d-8XSV0RmGbdJijk92KuC555ksBsVD43uxCA,2802
296
294
  inspect_ai/_view/www/src/samples/scores/SampleScoreView.module.css,sha256=OJY2qo_1xj7Z4eaeKqxJc0tHDJppTYwfi7MM69U8feI,749
297
295
  inspect_ai/_view/www/src/samples/scores/SampleScoreView.tsx,sha256=uOsYK5aLZ6E_5jFfu05LVMYCacGqEI3LblNcLckGTF4,4880
@@ -303,7 +301,7 @@ inspect_ai/_view/www/src/samples/transcript/InfoEventView.module.css,sha256=UDRm
303
301
  inspect_ai/_view/www/src/samples/transcript/InfoEventView.tsx,sha256=U2Kfx8zB-toNo8nYUK6PWR0p4AIxVcVdgArXlhd6BHE,1590
304
302
  inspect_ai/_view/www/src/samples/transcript/InputEventView.tsx,sha256=OBsut_y_u0HQhHs72OjeopezPiesxuGD_BuwrTWeU10,1323
305
303
  inspect_ai/_view/www/src/samples/transcript/LoggerEventView.module.css,sha256=oMdWBmoTd9l9_9czUSjrIbxp1ycAgZVszBTjpgQWXf0,103
306
- inspect_ai/_view/www/src/samples/transcript/LoggerEventView.tsx,sha256=qKz45QNwyvZ30AGRh1nUOLDMhYmTCoYkRdRcgyDwM8w,980
304
+ inspect_ai/_view/www/src/samples/transcript/LoggerEventView.tsx,sha256=m_LvLXD_MNtu8qhDdSK-wHPwQm98JwHxn2Q4TKhi308,959
307
305
  inspect_ai/_view/www/src/samples/transcript/ModelEventView.module.css,sha256=vdBXWkBdX1RuAFCtve7_fx9ZpqSdXxnQLIfc-MSkyxg,575
308
306
  inspect_ai/_view/www/src/samples/transcript/ModelEventView.tsx,sha256=BEop5JpqUOVYKL6g5886CPDgnRG9T-7vITEtie1UgQM,6022
309
307
  inspect_ai/_view/www/src/samples/transcript/SampleInitEventView.module.css,sha256=kB4a3g7RveznFGsPmQajJRuNWRrpDyK2DgztvUMIYZQ,275
@@ -314,11 +312,11 @@ inspect_ai/_view/www/src/samples/transcript/ScoreEventView.module.css,sha256=YWH
314
312
  inspect_ai/_view/www/src/samples/transcript/ScoreEventView.tsx,sha256=-GABQI9E8aRBssWjnZpH6YX2t49LxDHirmascWd6k1M,3086
315
313
  inspect_ai/_view/www/src/samples/transcript/StepEventView.tsx,sha256=g6T-DE11CcX197uDOq7P9GYVWjbHoLbCkSEMFd7LVFc,4300
316
314
  inspect_ai/_view/www/src/samples/transcript/SubtaskEventView.module.css,sha256=L6u8qUl3_V9cYf36zT1NOvXEJ5dqoO5JlAgoioMguR8,274
317
- inspect_ai/_view/www/src/samples/transcript/SubtaskEventView.tsx,sha256=rB5afhJOw1zS0KIyCtzrKKpKXql7UcYhWFloalQZQms,3671
315
+ inspect_ai/_view/www/src/samples/transcript/SubtaskEventView.tsx,sha256=ZHMx3FfE-ey1EwTY5MS5Cs4U69CDBil1g5FDboDYGBs,4119
318
316
  inspect_ai/_view/www/src/samples/transcript/ToolEventView.module.css,sha256=oCnF6MeppCK58OYVgJafv7WAZCRbKqfuTzOMROKgsTk,112
319
317
  inspect_ai/_view/www/src/samples/transcript/ToolEventView.tsx,sha256=RG-fPaHjcgTCe5yRyjMRBmrENcBeN5QRR6VeIIpyODk,2619
320
318
  inspect_ai/_view/www/src/samples/transcript/TranscriptView.module.css,sha256=zExatTZIn6UEC98D1uNGifN2EJhLF9RyvA0XQxNbwXA,663
321
- inspect_ai/_view/www/src/samples/transcript/TranscriptView.tsx,sha256=tiSAUB3PFglaQ-rsqKIAl3hMZSCOcijkiwYstEu2Slo,10985
319
+ inspect_ai/_view/www/src/samples/transcript/TranscriptView.tsx,sha256=TelVbsN8waIyyImh7BxVfPXdCAQB0J-KWPvx_JZ0tqs,11074
322
320
  inspect_ai/_view/www/src/samples/transcript/types.ts,sha256=Wh20fJ6gBS-1GjAfcfoypqu6-5ZVPG7IxSOFsUT5RZY,1018
323
321
  inspect_ai/_view/www/src/samples/transcript/event/EventNav.module.css,sha256=EV1AcXtub8KD9Ao0iKi9eUc8OwZ2F3aSyWvOHY4PmqY,96
324
322
  inspect_ai/_view/www/src/samples/transcript/event/EventNav.tsx,sha256=uZ0oMAScgZZtjxngIXPMQvnGvtCWNd182aaVywr8y4A,868
@@ -377,8 +375,8 @@ inspect_ai/_view/www/src/workspace/navbar/ResultsPanel.module.css,sha256=-nGcKCV
377
375
  inspect_ai/_view/www/src/workspace/navbar/ResultsPanel.tsx,sha256=vxoJsuK84X5uLLsgsGLPIywUZYYRZkmPnU9wmXMcfKU,4574
378
376
  inspect_ai/_view/www/src/workspace/navbar/SecondaryBar.module.css,sha256=c_nrfkns3HLqojutb9himHaKqGZlFQt375f81p6vWO4,353
379
377
  inspect_ai/_view/www/src/workspace/navbar/SecondaryBar.tsx,sha256=lasEuHmHgS-O4yPhXPsyMR9jG4T8fM5x9NRLHX5bhpc,5090
380
- inspect_ai/_view/www/src/workspace/navbar/StatusPanel.module.css,sha256=5jwAeGZ14LT66dql80qTu2nig75kk9Ethp4ftHW6Zsw,290
381
- inspect_ai/_view/www/src/workspace/navbar/StatusPanel.tsx,sha256=WqP4WQdcJoCoAt2S6CA3PNgtqbeMmfDPw6DOZ8xBc-Q,1311
378
+ inspect_ai/_view/www/src/workspace/navbar/StatusPanel.module.css,sha256=V8GzDeWpFOnEE0Lye02USjDg99cLQ98s6PtcUSTIGDI,314
379
+ inspect_ai/_view/www/src/workspace/navbar/StatusPanel.tsx,sha256=RLUq_5VvJ5L6lC8PY0w-CHe5dgx5Sq6bRu8quWhJ4YY,1308
382
380
  inspect_ai/_view/www/src/workspace/sidebar/EvalStatus.module.css,sha256=c0PCUFyxsNhUJPsndc1kD7TLCUWcGlCcfSt4D_6wX0k,219
383
381
  inspect_ai/_view/www/src/workspace/sidebar/EvalStatus.tsx,sha256=BAFNPWvy_bu6z6uJ-hZ87iGyTMXjLeCzjK_71E8sg-I,1731
384
382
  inspect_ai/_view/www/src/workspace/sidebar/LogDirectoryTitleView.module.css,sha256=iEIfdsS4cJ2Q3duaxA9_xliaXeqrAf7G57J1CXlK70E,83
@@ -450,33 +448,33 @@ inspect_ai/model/_chat_message.py,sha256=Y0X1b1uaZhw0brSGfXVU7lADrXh2nR6iSWgBR_m
450
448
  inspect_ai/model/_conversation.py,sha256=cd5ru6lD2xsfkdB9lfWYPbuvzdqjv9geOVFl2HXSad8,2163
451
449
  inspect_ai/model/_generate_config.py,sha256=jKsb5qpiV4o2Wdkaez6EzSHhnUc3_j4dTZIOzV9P6Sc,8976
452
450
  inspect_ai/model/_image.py,sha256=kpO2Bn_-c-dK80HuPOPH1eSNmcoc39kofwf4yTTiTFE,477
453
- inspect_ai/model/_model.py,sha256=Fad73uBcwZcqstqUthqLnEZsg5k1gh1jNJH7ah77YvA,39575
451
+ inspect_ai/model/_model.py,sha256=7ByKcGdmrmpI3BZlNXXLVN-xjyGbaKObHDRS7ZJMBAw,42388
454
452
  inspect_ai/model/_model_call.py,sha256=r6ObHZwm7jy1qX2qxvAP6iPV3BhdGThL-VH-QEawQhA,2017
455
453
  inspect_ai/model/_model_output.py,sha256=QM2K4zVqUumfhAFzDkvxb60qT4DbCvPjqva0WfJ4gWU,7321
456
454
  inspect_ai/model/_openai.py,sha256=Z17GAEU-Zraqy-wRcY3KGC34gN1YvRoy0hdYZpt-BjI,13948
457
455
  inspect_ai/model/_reasoning.py,sha256=i1xUArctTefcvmwxcU4kK26PvgULYvvMn25P1GQJP08,440
458
456
  inspect_ai/model/_registry.py,sha256=Cr2y32EqLnOqLbSWoXHVK4ivTTzCUhJuACxoTyPt8kY,2032
459
457
  inspect_ai/model/_render.py,sha256=rWypNUjgrH4NGp0r-ESAze9gZz7lYNjheEP438vRYZE,922
460
- inspect_ai/model/_providers/anthropic.py,sha256=F8azMHE5sdbIWgxXRFHS_rChMUjXEdSQ2xl8ST3xSBU,25063
461
- inspect_ai/model/_providers/azureai.py,sha256=moIC4-um_Qs3iXbr4DlP6LUL924aF-s5YyQqF0V5ye4,14037
462
- inspect_ai/model/_providers/bedrock.py,sha256=BiSEQYlGLKqaadGUJxSQuule3JPLZbAIjfhJ36DYQ8k,23357
463
- inspect_ai/model/_providers/cloudflare.py,sha256=h6ubjf0kxyMM7Aj2tm68tWa-2R7RAXNGp1O6KMvi0Gw,4143
464
- inspect_ai/model/_providers/goodfire.py,sha256=Pu11d4mATDq5B750Q6Z4ZS8EC_nniFtleCQTTd-Pxm8,8690
465
- inspect_ai/model/_providers/google.py,sha256=4kWZ5jn0m91-J3-RC0ZvLXFhb4hv1P-Bnlvz_XbctHc,23323
458
+ inspect_ai/model/_providers/anthropic.py,sha256=VLBSOSbjqv4hMBPVAy1PzQ7GBPVaWxB00SImZbTuPkk,25147
459
+ inspect_ai/model/_providers/azureai.py,sha256=L0aZrx-mcRLZWXmNQG2gEmGYVQ7QtLF-o7hvM9dbMeY,14162
460
+ inspect_ai/model/_providers/bedrock.py,sha256=bNQq5Z9w9fLq3SxOKFDuopuLWi0QTDcSE9ppzX51eX0,23482
461
+ inspect_ai/model/_providers/cloudflare.py,sha256=OOpU4EE97s7M6u_qk7uuCILSLU84DoCVrUNsa-qPbmA,4228
462
+ inspect_ai/model/_providers/goodfire.py,sha256=L5RHmpXcp7Se30hJUjK0jES8ckGhxOKDM5xYfOjBcIU,8811
463
+ inspect_ai/model/_providers/google.py,sha256=CVOWm5Q3n8AAIhCz-5sKJ1o-b1v3Vor5UvC8oRYGiU8,23750
466
464
  inspect_ai/model/_providers/grok.py,sha256=dS88ueXiD-kHAFr0jCoTpTGLGa2VsUlB_TFP8L_2lBM,995
467
- inspect_ai/model/_providers/groq.py,sha256=ikn3812nGvU6fGlrZcpD-LiN-EqEobo-zof8hPK9rV8,9958
468
- inspect_ai/model/_providers/hf.py,sha256=bgUtYZAitHxtoVyt0I0Wnz-rf6jRAqIjQ82QjZBOJAM,17468
465
+ inspect_ai/model/_providers/groq.py,sha256=aVaWrGn6oqWopNuh8WfvbGux3P0tcRQg_uq8DdTJ2Ng,10042
466
+ inspect_ai/model/_providers/hf.py,sha256=KIHcfiRQ8XQEQBi7UzCIulZh1Ku5sCjWaa1EznGPHzU,17605
469
467
  inspect_ai/model/_providers/llama_cpp_python.py,sha256=i2I56Damgb8VDhMuPxPca24fVhlajDHzxCTYFnT41uI,702
470
- inspect_ai/model/_providers/mistral.py,sha256=xTJSdb1-_hwTr3qesSbS5hyEqWrDzSQwGY__kHaQ1tc,15213
468
+ inspect_ai/model/_providers/mistral.py,sha256=afhEAfsR4QeBigrINU3Dgf5EZp5zNvkk4Ub-Z1SigcU,15329
471
469
  inspect_ai/model/_providers/mockllm.py,sha256=gL9f-f5TOdE4a0GVENr3cOIIp2kv8zVXWPZ608rouGk,2440
472
470
  inspect_ai/model/_providers/ollama.py,sha256=mBPSxaEkiH_RnlHKqOyFBlXObQhc2dfjL-rCKrea5u8,675
473
- inspect_ai/model/_providers/openai.py,sha256=xiXPIiX8TUBTH3r4c2yl9m2puMdMOBnsyz37nG8KFU4,11647
471
+ inspect_ai/model/_providers/openai.py,sha256=kD3ypqlPnqA1YdF3zQWzpHOHkF_8OTGMmS86ZqarCjI,11731
474
472
  inspect_ai/model/_providers/openai_o1.py,sha256=kiCzFYPBzUR-4U_AcQCoFpYRg-RUiWL6m2_XhK0JhW0,12262
475
473
  inspect_ai/model/_providers/openrouter.py,sha256=5G8qS8xA7Gy4IGodEJd04xwjsN-O_as4oeU8DTsKB5s,2932
476
474
  inspect_ai/model/_providers/providers.py,sha256=PlzYzv-muCSkmb8p04R0cNHS6DyUWPtB4c0hxW6sWUs,6407
477
475
  inspect_ai/model/_providers/together.py,sha256=0KpFLKbnP_a_AH7VN18eLtlm7kGvJkBIura9drdc7BU,9483
478
- inspect_ai/model/_providers/vertex.py,sha256=_dvhtboSfb6uYez421vqmJrcc-SBZAIP6XYNwtHElKM,16391
479
- inspect_ai/model/_providers/vllm.py,sha256=cggwgDMEwdF9DKdqGxo-XMMkDte-rQoHIBf6nipZ1Pg,14093
476
+ inspect_ai/model/_providers/vertex.py,sha256=-4ArhaW_H_KGj8P0HdmDtyKRwXdR3-UuZurI7lzO0tI,16531
477
+ inspect_ai/model/_providers/vllm.py,sha256=RGKMkY9nlScoVx0RTiUCl4usDBSughVsGJjPNQDPDaQ,14230
480
478
  inspect_ai/model/_providers/util/__init__.py,sha256=zWqGXUZLcVBr001JpSe81_3QXnBcS7hdRtIpekIwjZ0,707
481
479
  inspect_ai/model/_providers/util/chatapi.py,sha256=h8GePQ53VgPpn75QQJfoO5IMUMiTq3heMnjKC3vj13c,3659
482
480
  inspect_ai/model/_providers/util/hf_handler.py,sha256=zUGLTlLSSRqvYv2odIbgEEkd4Fm_5LMxVFDWXm3D7Qk,7622
@@ -503,7 +501,7 @@ inspect_ai/scorer/_reducer/__init__.py,sha256=ntoSXbbBia6gN3Uk3tQFQ8lSt8IBSRvwM5
503
501
  inspect_ai/scorer/_reducer/reducer.py,sha256=5EKER24GHJnodE24C_quRrmbWpL56AeEovoLe5W9XKA,11859
504
502
  inspect_ai/scorer/_reducer/registry.py,sha256=aB1fyv8DTiwfnleGc7_zXnGI9krfmWyaXx-FJfA7zw4,5349
505
503
  inspect_ai/scorer/_reducer/types.py,sha256=R4ALTh4fsjzSsHIKY3ItWylQiRyYAtdGnxCvisYlync,462
506
- inspect_ai/solver/__init__.py,sha256=iAK_T7uvZpds2xufWgAcSD560Ta8pIvqmyQWz9XoAMk,3440
504
+ inspect_ai/solver/__init__.py,sha256=4pbKoEoUSBrauhpMPO2hY43FDOJe0GTuVKpD5zchoQY,3509
507
505
  inspect_ai/solver/_basic_agent.py,sha256=pYZq5MmXeRaFB-aRpNrdRrFaAPXrTY6etPtgmm0bXB0,10398
508
506
  inspect_ai/solver/_chain.py,sha256=eAoxiALf8fvOujzjCWvqHDA7YpEaKC8s56AZxKWNLcs,2202
509
507
  inspect_ai/solver/_critique.py,sha256=8GhB9OEsDCOqS6_cHAaTWNNeAimjV3JM_xXr8k1n3XQ,3457
@@ -511,7 +509,7 @@ inspect_ai/solver/_fork.py,sha256=XKBDwZXRiWkxK_uFtQs-RDJb9gbL6JvfOr_5LtAgS-4,28
511
509
  inspect_ai/solver/_limit.py,sha256=zaZseJgjbJaBnGdXQHQ5MpU4tzgUyD8FzLvJMGDk3jA,1122
512
510
  inspect_ai/solver/_multiple_choice.py,sha256=uYr3E6LA6Gv5ktqdmQJX6rYxbc6maTy3ZjyZXabdBug,11298
513
511
  inspect_ai/solver/_plan.py,sha256=Dp1DDTtGe2iTo8CYWKqCOdfBFfTK_0wi2JzIr6qrikI,7042
514
- inspect_ai/solver/_prompt.py,sha256=M3gteVaDCT4nFp7lgvJ4XP2-ClemuIXi_yY_BpokqN4,3880
512
+ inspect_ai/solver/_prompt.py,sha256=jqJ15ysz5_Wn5kadthsZDJWzSoFA7q3IMqSvYW475e8,4901
515
513
  inspect_ai/solver/_solver.py,sha256=S3C82Ttan7hGz2yl1OAwjH_GxhwhJVXPnAkHV3OrEEI,9081
516
514
  inspect_ai/solver/_task_state.py,sha256=qxcAUL4MUGUuu-SqF8fv2YbUVmZ9VzJTIfeiYl71iXA,16323
517
515
  inspect_ai/solver/_transcript.py,sha256=gkH9CC5gYbz7ZzrFD0TkjtKYjWxQP5EthJOkq8NXDOc,1049
@@ -523,7 +521,7 @@ inspect_ai/solver/_bridge/patch.py,sha256=I2yR1omnaH_cdk5vqx-TavOFXPUbOY57fZUg6K
523
521
  inspect_ai/solver/_human_agent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
524
522
  inspect_ai/solver/_human_agent/agent.py,sha256=xasd9VaVN5BnQ1DgU6Xv5K1IPh1qvFUZCcHk_cc7Cxc,3183
525
523
  inspect_ai/solver/_human_agent/install.py,sha256=_tp6MpJX6g3dBWp2l2shLfgSiVfAa38F_oRdmBZSPMg,6789
526
- inspect_ai/solver/_human_agent/panel.py,sha256=e4PG3Br0FMasqpsMkHEpuNBkO9tEVtDMI5ufSwuIcBw,8066
524
+ inspect_ai/solver/_human_agent/panel.py,sha256=PplPZx7Br6MXLhbNnbE-jetv26ne_f-zG8ZL2hUbSho,8240
527
525
  inspect_ai/solver/_human_agent/service.py,sha256=hXe3LDb-1lQH_tAMNMWR20eCRYdg9TJYoUvZyHPZBgU,1430
528
526
  inspect_ai/solver/_human_agent/state.py,sha256=Qqtxhr6nXwd6FQS4zfHFsMEsxmRL563E5MBMUaJd47E,1744
529
527
  inspect_ai/solver/_human_agent/view.py,sha256=x8MHiEchUwKykpjerG126UDqiymOGPziTerfS0_H-Ts,760
@@ -619,9 +617,9 @@ inspect_ai/util/_sandbox/docker/internal.py,sha256=fATyk2pdtjSl-D0VPT4dmkXV-gOc5
619
617
  inspect_ai/util/_sandbox/docker/prereqs.py,sha256=0j6_OauBBnVlpBleADcZavIAAQZy4WewVjbRn9c0stg,3355
620
618
  inspect_ai/util/_sandbox/docker/service.py,sha256=hhHIWH1VDFLwehdGd19aUBD_VKfDO3GCPxpw1HSwVQk,2437
621
619
  inspect_ai/util/_sandbox/docker/util.py,sha256=CuYrt9iyLjPSVDEs_oGTas8wAwMwQc_45dZa2g3E4cY,2847
622
- inspect_ai-0.3.66.dist-info/LICENSE,sha256=xZPCr8gTiFIerrA_DRpLAbw-UUftnLFsHxKeW-NTtq8,1081
623
- inspect_ai-0.3.66.dist-info/METADATA,sha256=drMcoYJASKO4aBPr7_5b_wRXWNa7ZTFAZBIvQnLnxVY,4742
624
- inspect_ai-0.3.66.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
625
- inspect_ai-0.3.66.dist-info/entry_points.txt,sha256=WGGLmzTzDWLzYfiyovSY6oEKuf-gqzSDNOb5V-hk3fM,54
626
- inspect_ai-0.3.66.dist-info/top_level.txt,sha256=Tp3za30CHXJEKLk8xLe9qGsW4pBzJpEIOMHOHNCXiVo,11
627
- inspect_ai-0.3.66.dist-info/RECORD,,
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,,
@@ -1,149 +0,0 @@
1
- # ISC License
2
- #
3
- # Copyright (c) 2018-2021, Andrea Giammarchi, @WebReflection
4
- #
5
- # Permission to use, copy, modify, and/or distribute this software for any
6
- # purpose with or without fee is hereby granted, provided that the above
7
- # copyright notice and this permission notice appear in all copies.
8
- #
9
- # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
10
- # REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
11
- # AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
12
- # INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
13
- # LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
14
- # OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
15
- # PERFORMANCE OF THIS SOFTWARE.
16
-
17
- import json as _json
18
-
19
- class _Known:
20
- def __init__(self):
21
- self.key = []
22
- self.value = []
23
-
24
- class _String:
25
- def __init__(self, value):
26
- self.value = value
27
-
28
-
29
- def _array_keys(value):
30
- keys = []
31
- i = 0
32
- for _ in value:
33
- keys.append(i)
34
- i += 1
35
- return keys
36
-
37
- def _object_keys(value):
38
- keys = []
39
- for key in value:
40
- keys.append(key)
41
- return keys
42
-
43
- def _is_array(value):
44
- return isinstance(value, list) or isinstance(value, tuple)
45
-
46
- def _is_object(value):
47
- return isinstance(value, dict)
48
-
49
- def _is_string(value):
50
- return isinstance(value, str)
51
-
52
- def _index(known, input, value):
53
- input.append(value)
54
- index = str(len(input) - 1)
55
- known.key.append(value)
56
- known.value.append(index)
57
- return index
58
-
59
- def _loop(keys, input, known, output):
60
- for key in keys:
61
- value = output[key]
62
- if isinstance(value, _String):
63
- _ref(key, input[int(value.value)], input, known, output)
64
-
65
- return output
66
-
67
- def _ref(key, value, input, known, output):
68
- if _is_array(value) and not value in known:
69
- known.append(value)
70
- value = _loop(_array_keys(value), input, known, value)
71
- elif _is_object(value) and not value in known:
72
- known.append(value)
73
- value = _loop(_object_keys(value), input, known, value)
74
-
75
- output[key] = value
76
-
77
- def _relate(known, input, value):
78
- if _is_string(value) or _is_array(value) or _is_object(value):
79
- try:
80
- return known.value[known.key.index(value)]
81
- except:
82
- return _index(known, input, value)
83
-
84
- return value
85
-
86
- def _transform(known, input, value):
87
- if _is_array(value):
88
- output = []
89
- for val in value:
90
- output.append(_relate(known, input, val))
91
- return output
92
-
93
- if _is_object(value):
94
- obj = {}
95
- for key in value:
96
- obj[key] = _relate(known, input, value[key])
97
- return obj
98
-
99
- return value
100
-
101
- def _wrap(value):
102
- if _is_string(value):
103
- return _String(value)
104
-
105
- if _is_array(value):
106
- i = 0
107
- for val in value:
108
- value[i] = _wrap(val)
109
- i += 1
110
-
111
- elif _is_object(value):
112
- for key in value:
113
- value[key] = _wrap(value[key])
114
-
115
- return value
116
-
117
- def parse(value, *args, **kwargs):
118
- json = _json.loads(value, *args, **kwargs)
119
- wrapped = []
120
- for value in json:
121
- wrapped.append(_wrap(value))
122
-
123
- input = []
124
- for value in wrapped:
125
- if isinstance(value, _String):
126
- input.append(value.value)
127
- else:
128
- input.append(value)
129
-
130
- value = input[0]
131
-
132
- if _is_array(value):
133
- return _loop(_array_keys(value), input, [value], value)
134
-
135
- if _is_object(value):
136
- return _loop(_object_keys(value), input, [value], value)
137
-
138
- return value
139
-
140
-
141
- def stringify(value, *args, **kwargs):
142
- known = _Known()
143
- input = []
144
- output = []
145
- i = int(_index(known, input, value))
146
- while i < len(input):
147
- output.append(_transform(known, input, input[i]))
148
- i += 1
149
- return _json.dumps(output, *args, **kwargs)