transcript-viewer 0.9.0__tar.gz → 0.10.0__tar.gz
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.
- {transcript_viewer-0.9.0 → transcript_viewer-0.10.0}/PKG-INFO +9 -3
- {transcript_viewer-0.9.0 → transcript_viewer-0.10.0}/README.md +7 -1
- {transcript_viewer-0.9.0 → transcript_viewer-0.10.0}/pyproject.toml +2 -2
- {transcript_viewer-0.9.0 → transcript_viewer-0.10.0}/src/transcript_viewer/corpus.py +1 -0
- {transcript_viewer-0.9.0 → transcript_viewer-0.10.0}/src/transcript_viewer/fetch.py +12 -3
- {transcript_viewer-0.9.0 → transcript_viewer-0.10.0}/src/transcript_viewer/page.html +3 -0
- {transcript_viewer-0.9.0 → transcript_viewer-0.10.0}/uv.lock +5 -5
- {transcript_viewer-0.9.0 → transcript_viewer-0.10.0}/.coverage +0 -0
- {transcript_viewer-0.9.0 → transcript_viewer-0.10.0}/.github/workflows/publish.yml +0 -0
- {transcript_viewer-0.9.0 → transcript_viewer-0.10.0}/.github/workflows/test.yml +0 -0
- {transcript_viewer-0.9.0 → transcript_viewer-0.10.0}/.gitignore +0 -0
- {transcript_viewer-0.9.0 → transcript_viewer-0.10.0}/src/transcript_viewer/__init__.py +0 -0
- {transcript_viewer-0.9.0 → transcript_viewer-0.10.0}/src/transcript_viewer/ai.py +0 -0
- {transcript_viewer-0.9.0 → transcript_viewer-0.10.0}/src/transcript_viewer/cli.py +0 -0
- {transcript_viewer-0.9.0 → transcript_viewer-0.10.0}/src/transcript_viewer/config.py +0 -0
- {transcript_viewer-0.9.0 → transcript_viewer-0.10.0}/src/transcript_viewer/library.py +0 -0
- {transcript_viewer-0.9.0 → transcript_viewer-0.10.0}/src/transcript_viewer/store.py +0 -0
- {transcript_viewer-0.9.0 → transcript_viewer-0.10.0}/src/transcript_viewer/viewer.py +0 -0
- {transcript_viewer-0.9.0 → transcript_viewer-0.10.0}/tests/fixtures/big-command.json +0 -0
- {transcript_viewer-0.9.0 → transcript_viewer-0.10.0}/tests/page.test.js +0 -0
- {transcript_viewer-0.9.0 → transcript_viewer-0.10.0}/tests/test_ai.py +0 -0
- {transcript_viewer-0.9.0 → transcript_viewer-0.10.0}/tests/test_cli.py +0 -0
- {transcript_viewer-0.9.0 → transcript_viewer-0.10.0}/tests/test_config.py +0 -0
- {transcript_viewer-0.9.0 → transcript_viewer-0.10.0}/tests/test_corpus.py +0 -0
- {transcript_viewer-0.9.0 → transcript_viewer-0.10.0}/tests/test_fetch.py +0 -0
- {transcript_viewer-0.9.0 → transcript_viewer-0.10.0}/tests/test_library.py +0 -0
- {transcript_viewer-0.9.0 → transcript_viewer-0.10.0}/tests/test_page.py +0 -0
- {transcript_viewer-0.9.0 → transcript_viewer-0.10.0}/tests/test_readme.py +0 -0
- {transcript_viewer-0.9.0 → transcript_viewer-0.10.0}/tests/test_store.py +0 -0
- {transcript_viewer-0.9.0 → transcript_viewer-0.10.0}/tests/test_stream.py +0 -0
- {transcript_viewer-0.9.0 → transcript_viewer-0.10.0}/tests/test_style.py +0 -0
- {transcript_viewer-0.9.0 → transcript_viewer-0.10.0}/tests/test_tidiness.py +0 -0
- {transcript_viewer-0.9.0 → transcript_viewer-0.10.0}/tests/test_viewer.py +0 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: transcript-viewer
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.10.0
|
|
4
4
|
Summary: Browse agent transcripts in a local, dependency-free web viewer.
|
|
5
5
|
License: MIT
|
|
6
6
|
Requires-Python: >=3.12
|
|
7
|
-
Requires-Dist: atif-make>=0.
|
|
7
|
+
Requires-Dist: atif-make>=0.7.0
|
|
8
8
|
Provides-Extra: ai
|
|
9
9
|
Requires-Dist: anthropic>=0.40; extra == 'ai'
|
|
10
10
|
Provides-Extra: parquet
|
|
@@ -162,7 +162,13 @@ of yours, keeps its file.
|
|
|
162
162
|
|
|
163
163
|
Some datasets ship as a single file holding many runs — ATBench publishes a
|
|
164
164
|
thousand agent trajectories as one JSON array, METR's as Parquet shards
|
|
165
|
-
(install with `uv tool install "transcript-viewer[parquet]"` to read those)
|
|
165
|
+
(install with `uv tool install "transcript-viewer[parquet]"` to read those),
|
|
166
|
+
and an Inspect `.eval` log holds one run per sample.
|
|
167
|
+
|
|
168
|
+
A fetch takes at most 32 GB at once. That is a backstop, not a judgement:
|
|
169
|
+
published corpora are routinely several gigabytes, and what actually guards
|
|
170
|
+
against an accident is the picker, which measures what you have ticked and
|
|
171
|
+
shows it before anything downloads. Those are opened rather than
|
|
166
172
|
listed: the file is split into a transcript apiece and each is indexed on its
|
|
167
173
|
own, so a download of one file becomes a thousand sessions you can read. The
|
|
168
174
|
pieces are kept beside what they came from, so removing the folder removes them
|
|
@@ -149,7 +149,13 @@ of yours, keeps its file.
|
|
|
149
149
|
|
|
150
150
|
Some datasets ship as a single file holding many runs — ATBench publishes a
|
|
151
151
|
thousand agent trajectories as one JSON array, METR's as Parquet shards
|
|
152
|
-
(install with `uv tool install "transcript-viewer[parquet]"` to read those)
|
|
152
|
+
(install with `uv tool install "transcript-viewer[parquet]"` to read those),
|
|
153
|
+
and an Inspect `.eval` log holds one run per sample.
|
|
154
|
+
|
|
155
|
+
A fetch takes at most 32 GB at once. That is a backstop, not a judgement:
|
|
156
|
+
published corpora are routinely several gigabytes, and what actually guards
|
|
157
|
+
against an accident is the picker, which measures what you have ticked and
|
|
158
|
+
shows it before anything downloads. Those are opened rather than
|
|
153
159
|
listed: the file is split into a transcript apiece and each is indexed on its
|
|
154
160
|
own, so a download of one file becomes a thousand sessions you can read. The
|
|
155
161
|
pieces are kept beside what they came from, so removing the folder removes them
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "transcript-viewer"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.10.0"
|
|
4
4
|
description = "Browse agent transcripts in a local, dependency-free web viewer."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.12"
|
|
@@ -10,7 +10,7 @@ license = { text = "MIT" }
|
|
|
10
10
|
# The floor is not politeness: this viewer imports atif_make.container, which
|
|
11
11
|
# is how a benchmark published as one JSON array of a thousand runs becomes a
|
|
12
12
|
# thousand sessions. An older atif-make fails to import at all.
|
|
13
|
-
dependencies = ["atif-make>=0.
|
|
13
|
+
dependencies = ["atif-make>=0.7.0"]
|
|
14
14
|
|
|
15
15
|
[project.optional-dependencies]
|
|
16
16
|
# Claude-backed explanations are opt-in, so the default install stays
|
|
@@ -315,6 +315,7 @@ def scan(roots: list[Path] | None = None, origin: str = "scanned") -> list[Entry
|
|
|
315
315
|
+ sorted(where.rglob("*.md"))
|
|
316
316
|
# Not a log, but a container of them, opened above.
|
|
317
317
|
+ sorted(where.rglob("*.parquet"))
|
|
318
|
+
+ sorted(where.rglob("*.eval"))
|
|
318
319
|
)
|
|
319
320
|
for path in candidates:
|
|
320
321
|
resolved = path.resolve()
|
|
@@ -62,7 +62,9 @@ HOSTS = {
|
|
|
62
62
|
LOGS = (".jsonl", ".json", ".har", ".md", ".markdown")
|
|
63
63
|
# A published dataset is a container of runs rather than a log, but it is still
|
|
64
64
|
# a thing worth fetching: METR's transcripts come as Parquet shards.
|
|
65
|
-
|
|
65
|
+
# An Inspect .eval is a zip of JSON, and a corpus of them is where most
|
|
66
|
+
# control research keeps its transcripts.
|
|
67
|
+
DATASETS = (".parquet", ".eval")
|
|
66
68
|
ARCHIVES = (".zip", ".tgz", ".tar", ".tar.gz", ".tar.bz2", ".tar.xz", ".gz")
|
|
67
69
|
SUFFIXES = LOGS + DATASETS + ARCHIVES
|
|
68
70
|
|
|
@@ -88,7 +90,13 @@ AWS_TIMEOUT = 300
|
|
|
88
90
|
BROWSE_LIMIT = 3_000
|
|
89
91
|
|
|
90
92
|
MAX_FILES = 2_000
|
|
91
|
-
|
|
93
|
+
# A ceiling on one fetch, not a judgement about what is worth having: published
|
|
94
|
+
# corpora are routinely several gigabytes — MonitoringBench ships as a single
|
|
95
|
+
# 2.5 GB archive — and two was refusing them. What still guards against an
|
|
96
|
+
# accident is the picker, which measures a selection and shows it before
|
|
97
|
+
# anything downloads; this is the backstop for the bucket nobody meant to take
|
|
98
|
+
# whole, which in practice is the 144 GB one.
|
|
99
|
+
MAX_TOTAL_BYTES = 32 * 1024**3
|
|
92
100
|
TIMEOUT = 60
|
|
93
101
|
|
|
94
102
|
|
|
@@ -579,7 +587,8 @@ def _sized(plan: "Plan") -> "Plan":
|
|
|
579
587
|
if known > MAX_TOTAL_BYTES:
|
|
580
588
|
raise FetchError(
|
|
581
589
|
f"That is {known / 1024**3:.1f} GB, over the "
|
|
582
|
-
f"{MAX_TOTAL_BYTES // 1024**3} GB limit."
|
|
590
|
+
f"{MAX_TOTAL_BYTES // 1024**3} GB limit for one fetch. "
|
|
591
|
+
f"Pick fewer folders, or take it in parts."
|
|
583
592
|
)
|
|
584
593
|
return plan
|
|
585
594
|
|
|
@@ -1731,6 +1731,9 @@ const EXAMPLES=[
|
|
|
1731
1731
|
{name:"Redwood sabotage trajectories",
|
|
1732
1732
|
url:"s3://rr-strajs",
|
|
1733
1733
|
note:"136 transcripts, honest and attack in pairs — needs an AWS profile"},
|
|
1734
|
+
{name:"MonitoringBench",
|
|
1735
|
+
url:"https://huggingface.co/datasets/neur26anonsub/ctrldataset2026",
|
|
1736
|
+
note:"2,644 attack runs as Inspect logs — the archive alone is 2.5 GB"},
|
|
1734
1737
|
];
|
|
1735
1738
|
|
|
1736
1739
|
function drawExamples(){
|
|
@@ -44,11 +44,11 @@ wheels = [
|
|
|
44
44
|
|
|
45
45
|
[[package]]
|
|
46
46
|
name = "atif-make"
|
|
47
|
-
version = "0.
|
|
47
|
+
version = "0.7.0"
|
|
48
48
|
source = { registry = "https://pypi.org/simple" }
|
|
49
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
49
|
+
sdist = { url = "https://files.pythonhosted.org/packages/6a/ed/b1fbadcc65d59186442517059beffe7c4a590be85d17308d9143278a2104/atif_make-0.7.0.tar.gz", hash = "sha256:858966e102e772f35ffc3fdcd25a11cb52759190233b41cead3878dc607ff4ce", size = 350496, upload-time = "2026-08-24T21:49:42.323Z" }
|
|
50
50
|
wheels = [
|
|
51
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
51
|
+
{ url = "https://files.pythonhosted.org/packages/14/7b/d135b4b2bec98599cb65166f278487f87d9842492c2f13e8a1385c6a3e85/atif_make-0.7.0-py3-none-any.whl", hash = "sha256:ef1601b5d2ac3e07b9e9e97ee0a2e0856b953b4ba317633e6f590747b450659e", size = 63987, upload-time = "2026-08-24T21:49:41.087Z" },
|
|
52
52
|
]
|
|
53
53
|
|
|
54
54
|
[package.optional-dependencies]
|
|
@@ -388,7 +388,7 @@ wheels = [
|
|
|
388
388
|
|
|
389
389
|
[[package]]
|
|
390
390
|
name = "transcript-viewer"
|
|
391
|
-
version = "0.
|
|
391
|
+
version = "0.10.0"
|
|
392
392
|
source = { editable = "." }
|
|
393
393
|
dependencies = [
|
|
394
394
|
{ name = "atif-make" },
|
|
@@ -410,7 +410,7 @@ dev = [
|
|
|
410
410
|
[package.metadata]
|
|
411
411
|
requires-dist = [
|
|
412
412
|
{ name = "anthropic", marker = "extra == 'ai'", specifier = ">=0.40" },
|
|
413
|
-
{ name = "atif-make", specifier = ">=0.
|
|
413
|
+
{ name = "atif-make", specifier = ">=0.7.0" },
|
|
414
414
|
{ name = "atif-make", extras = ["parquet"], marker = "extra == 'parquet'", specifier = ">=0.5.0" },
|
|
415
415
|
]
|
|
416
416
|
provides-extras = ["parquet", "ai"]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|