Complete v2.1.0: research report, reproducible source bundle and offline verification
Browse files- .gitattributes +5 -0
- CITATION.cff +2 -2
- FILES_SHA256.json +42 -9
- README.md +12 -0
- RELEASE.json +20 -0
- RELEASE_MANIFEST.json +347 -0
- REPRODUCE.md +16 -1
- RESEARCH_REPORT.pdf +3 -0
- docs/RESEARCH_REPRODUCE.md +16 -1
- docs/figures/final-confident-errors.png +0 -0
- docs/figures/final-confident-errors.svg +344 -0
- docs/figures/final-learning-curves.png +3 -0
- docs/figures/final-learning-curves.svg +2234 -0
- docs/figures/final-paired-nll.png +0 -0
- docs/figures/final-paired-nll.svg +716 -0
- figures/final-confident-errors.png +0 -0
- figures/final-confident-errors.svg +344 -0
- figures/final-learning-curves.png +3 -0
- figures/final-learning-curves.svg +2234 -0
- figures/final-paired-nll.png +0 -0
- figures/final-paired-nll.svg +716 -0
- loss-lab-v2.1.0.zip +3 -0
- loss-lab-v2.1.0.zip.sha256 +1 -0
- source/.gitignore +1 -0
- source/CITATION.cff +2 -2
- source/README.md +10 -0
- source/RELEASE_MANIFEST.json +347 -0
- source/VERSION +1 -0
- source/dashboard.html +0 -0
- source/docs/RESEARCH_REPRODUCE.md +16 -1
- source/docs/figures/final-confident-errors.png +0 -0
- source/docs/figures/final-confident-errors.svg +344 -0
- source/docs/figures/final-learning-curves.png +3 -0
- source/docs/figures/final-learning-curves.svg +2234 -0
- source/docs/figures/final-paired-nll.png +0 -0
- source/docs/figures/final-paired-nll.svg +716 -0
- source/output/pdf/loss-lab-research-report.pdf +3 -0
- source/requirements-report.txt +3 -0
- source/results/VERIFICATION.json +295 -0
- source/scripts/package_release.py +72 -0
- source/scripts/research_report.py +273 -0
- source/scripts/verify_results.py +182 -0
- source/tests/test_recorded_results.py +31 -0
.gitattributes
CHANGED
|
@@ -51,3 +51,8 @@ source/docs/figures/v2-shakespeare-diagnostics.png filter=lfs diff=lfs merge=lfs
|
|
| 51 |
source/docs/figures/v2-shakespeare.png filter=lfs diff=lfs merge=lfs -text
|
| 52 |
source/docs/figures/v2-tinystories-diagnostics.png filter=lfs diff=lfs merge=lfs -text
|
| 53 |
source/docs/figures/v2-tinystories.png filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 51 |
source/docs/figures/v2-shakespeare.png filter=lfs diff=lfs merge=lfs -text
|
| 52 |
source/docs/figures/v2-tinystories-diagnostics.png filter=lfs diff=lfs merge=lfs -text
|
| 53 |
source/docs/figures/v2-tinystories.png filter=lfs diff=lfs merge=lfs -text
|
| 54 |
+
source/docs/figures/final-learning-curves.png filter=lfs diff=lfs merge=lfs -text
|
| 55 |
+
source/output/pdf/loss-lab-research-report.pdf filter=lfs diff=lfs merge=lfs -text
|
| 56 |
+
RESEARCH_REPORT.pdf filter=lfs diff=lfs merge=lfs -text
|
| 57 |
+
docs/figures/final-learning-curves.png filter=lfs diff=lfs merge=lfs -text
|
| 58 |
+
figures/final-learning-curves.png filter=lfs diff=lfs merge=lfs -text
|
CITATION.cff
CHANGED
|
@@ -4,8 +4,8 @@ title: "Loss Lab: Cross Entropy and Brier in nanoGPT"
|
|
| 4 |
authors:
|
| 5 |
- name: "ctxnn1"
|
| 6 |
type: software
|
| 7 |
-
version: "2.
|
| 8 |
-
date-released: "2026-10-
|
| 9 |
license: MIT
|
| 10 |
url: "https://huggingface.co/ctxnn1/loss-lab-ce-brier"
|
| 11 |
repository-code: "https://huggingface.co/ctxnn1/loss-lab-ce-brier"
|
|
|
|
| 4 |
authors:
|
| 5 |
- name: "ctxnn1"
|
| 6 |
type: software
|
| 7 |
+
version: "2.1.0"
|
| 8 |
+
date-released: "2026-10-28"
|
| 9 |
license: MIT
|
| 10 |
url: "https://huggingface.co/ctxnn1/loss-lab-ce-brier"
|
| 11 |
repository-code: "https://huggingface.co/ctxnn1/loss-lab-ce-brier"
|
FILES_SHA256.json
CHANGED
|
@@ -2,9 +2,9 @@
|
|
| 2 |
"Dockerfile": "15c3aa315eb4e00aefaad1cdc46864a24e6fc4c626b793a0e6d96be79b40b6f3",
|
| 3 |
"requirements.txt": "1bbfa2cb9c22d87ec6a6d98b1a0475516be0a5e29ef88865f21622510341ead3",
|
| 4 |
"LICENSE": "b174e6faf4c63ad0b6f988595deea7dd0bb171b3d922b9f9b0c627e0db38da9d",
|
| 5 |
-
"CITATION.cff": "
|
| 6 |
"RESEARCH_RESULTS.md": "d11bcf9f6acc8b2fb4b04bed7a1ec4a4f6939017c7f3e621541dddf686a0ddbc",
|
| 7 |
-
"README.md": "
|
| 8 |
"runs/v1/original/pipeline.json": "183bfd3fee3303bdbb2d7243b76c9bd30c2f202c370ef7d7a32503e6890f8f1f",
|
| 9 |
"runs/v1/original/datasets/tinystories/train.bin": "55259e6d1f07ddea3ace4d1d422e00e7ddb4faa692d500d2e1fd75a7abef91eb",
|
| 10 |
"runs/v1/original/datasets/tinystories/val.bin": "425b44179d138c45ee999eb37fed5900dd84d19e94f20db78585dc7453353bd9",
|
|
@@ -209,7 +209,7 @@
|
|
| 209 |
"runs/research/v2-tinystories/models/ce-seed1337/config.json": "1392a9ff7499ffb84c45016a862a62bd9723f57d98dafbe25488cbae8e89794b",
|
| 210 |
"runs/research/v2-tinystories/models/ce-seed1337/tokenizer.json": "ba73a66ac59ce93b22cdbef2640ef21b4667acac264161610c76d16a1a6ae933",
|
| 211 |
"source/LICENSE": "b174e6faf4c63ad0b6f988595deea7dd0bb171b3d922b9f9b0c627e0db38da9d",
|
| 212 |
-
"source/CITATION.cff": "
|
| 213 |
"source/Dockerfile": "e5698d382aa237b72b2ef83e685b775a3b7c919a97ca6ebab03e17fa66c4c138",
|
| 214 |
"source/Research.Dockerfile": "610c67cec90b98f9c3fc1a6e5e4f6d50615574e40f3fa06d28199313c583ba07",
|
| 215 |
"source/requirements.txt": "f54fde6250af67be2c903bc2363344c1e411c53098e356b6c16f80d0070bbb7a",
|
|
@@ -258,7 +258,7 @@
|
|
| 258 |
"RESEARCH_PROVENANCE.json": "d1513504b23363c6878da324fe7c87557436fd4c681f4e8181a10eaa57375c78",
|
| 259 |
"dashboard.html": "c747189c03a14b7aeb90271d6a2ba41003fc9ceefa6aeb3a09c1598f697da59a",
|
| 260 |
"RESEARCH_PLAN.md": "7a19bc6c4f413e352c90fb4a54a46f23a47bfa0cef90f49920781bc933d6333c",
|
| 261 |
-
"REPRODUCE.md": "
|
| 262 |
"DATA_LICENSES.md": "eab2c7485fc4558ee1daebc703eeb3c0d746ab7f43e40cc9a7c3b05928e9c8c9",
|
| 263 |
"metrics/validation-history.csv": "ff0391a427aca28c47f930e752c738913481dd435e264262739595811051db97",
|
| 264 |
"metrics/learning-rate-trials.csv": "bcda34b70c46886ad1e693b0d3e05c638fd088b850591c67acef6568152bc102",
|
|
@@ -266,9 +266,9 @@
|
|
| 266 |
"metrics/README.md": "86aa658090bed785b16bf8d15819804a6b364db81c310af5eaabd3cb71464ad5",
|
| 267 |
"metrics/samples.jsonl": "93d297bad2951670e1f366153869029d3590cf406f15725bfc42ff0b447cfe50",
|
| 268 |
"source/requirements-research.txt": "1bbfa2cb9c22d87ec6a6d98b1a0475516be0a5e29ef88865f21622510341ead3",
|
| 269 |
-
"source/README.md": "
|
| 270 |
"source/.dockerignore": "86028321e99bdf0855642a99556b9255c97f4a61ee2de4e1013d5303fbc10135",
|
| 271 |
-
"docs/RESEARCH_REPRODUCE.md": "
|
| 272 |
"docs/OPERATIONS.md": "6cae3020eb3528965931268d00a68dfff9786a0d5fd7766a36effc4fe2328561",
|
| 273 |
"docs/RESEARCH_RESULTS.md": "d11bcf9f6acc8b2fb4b04bed7a1ec4a4f6939017c7f3e621541dddf686a0ddbc",
|
| 274 |
"docs/RESEARCH_PLAN.md": "7a19bc6c4f413e352c90fb4a54a46f23a47bfa0cef90f49920781bc933d6333c",
|
|
@@ -297,7 +297,7 @@
|
|
| 297 |
"source/experiments/sample_safetensors.py": "e6f30461fd8f8515fd47937359237b9d318c9a089d0a9747006fb2f79276d975",
|
| 298 |
"source/tests/test_publication_report.py": "4fca5153bd183733e9046a57d48bf58fa0bae7adfc92fd09beca142d5f9c33d5",
|
| 299 |
"source/tests/test_safe_sample.py": "bcdc909533ec694a3a7faf350dcea0845b91a45952decdec04b4b3fedf824826",
|
| 300 |
-
"source/docs/RESEARCH_REPRODUCE.md": "
|
| 301 |
"source/docs/RESEARCH_RESULTS.md": "d11bcf9f6acc8b2fb4b04bed7a1ec4a4f6939017c7f3e621541dddf686a0ddbc",
|
| 302 |
"source/dashboard/src/theme.css": "8f714846965b075868db607dcca3f0bedb8f7057a999d8f1a95d60bbdfcf6980",
|
| 303 |
"source/dashboard/src/data.json": "c905e0d0b48c846cb2d4c6c7e196db76627060a9589fc466c5107fa16b0e3551",
|
|
@@ -326,7 +326,7 @@
|
|
| 326 |
"source/docs/figures/v2-shakespeare-diagnostics.png": "05e39c24ec41e2a91083f4a2a3ea8e84cf5469ce612846178e672e1184fbac6f",
|
| 327 |
"source/docs/figures/v2-shakespeare.svg": "8cdcb1c4e08f421bf72883df3deeb1d8c86c647fb7ce602f7dc779a95819dc41",
|
| 328 |
".gitignore": "135bc1e9227d4784839eedcaf54bd465a24c9bc55a96cb7fb55375610d36742c",
|
| 329 |
-
"source/.gitignore": "
|
| 330 |
"source/experiments/archive.py": "ec1dca88f63ac097850f3edf608d304adf33acadfcf93f0b8577e205b0c71861",
|
| 331 |
"source/experiments/reporting.py": "dc26418b519b9e729622ab0426cce2c64e0818c6f103d3c66bdbfed3a11aefc6",
|
| 332 |
"source/dashboard/index.html": "314bb3975bdcd7322067d234f99398b06f609c67c2321554eda742f2338b3c5e",
|
|
@@ -576,5 +576,38 @@
|
|
| 576 |
"source/dashboard/docs/components/bar-presentations.md": "3ec11931b0d05ec75282d3b23f77b348a271fff4dfad3379890cea35fff9309a",
|
| 577 |
"source/dashboard/docs/components/layout.md": "da9013b89a528bfee18235581de33da73d6aefd5695851f3e808d84b53446bd1",
|
| 578 |
"source/dashboard/docs/components/filtering.md": "7820b3d916b4c3c74243d98be96e819f7bd0a828e466e9621127a32c2bf6c1b9",
|
| 579 |
-
"source/dashboard/docs/components/funnels.md": "bc6f858194ad820b4b62123191d9603847f4f860ca3428d08816457323f79ed3"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 580 |
}
|
|
|
|
| 2 |
"Dockerfile": "15c3aa315eb4e00aefaad1cdc46864a24e6fc4c626b793a0e6d96be79b40b6f3",
|
| 3 |
"requirements.txt": "1bbfa2cb9c22d87ec6a6d98b1a0475516be0a5e29ef88865f21622510341ead3",
|
| 4 |
"LICENSE": "b174e6faf4c63ad0b6f988595deea7dd0bb171b3d922b9f9b0c627e0db38da9d",
|
| 5 |
+
"CITATION.cff": "65a13fa1797ec905388ef48b0ee2619f790f534a7c6bb0d79e1379d0f2750f00",
|
| 6 |
"RESEARCH_RESULTS.md": "d11bcf9f6acc8b2fb4b04bed7a1ec4a4f6939017c7f3e621541dddf686a0ddbc",
|
| 7 |
+
"README.md": "21d3182743621252841e8ae2715b1f785ea87e29e5963589772cd8b69b4b86d2",
|
| 8 |
"runs/v1/original/pipeline.json": "183bfd3fee3303bdbb2d7243b76c9bd30c2f202c370ef7d7a32503e6890f8f1f",
|
| 9 |
"runs/v1/original/datasets/tinystories/train.bin": "55259e6d1f07ddea3ace4d1d422e00e7ddb4faa692d500d2e1fd75a7abef91eb",
|
| 10 |
"runs/v1/original/datasets/tinystories/val.bin": "425b44179d138c45ee999eb37fed5900dd84d19e94f20db78585dc7453353bd9",
|
|
|
|
| 209 |
"runs/research/v2-tinystories/models/ce-seed1337/config.json": "1392a9ff7499ffb84c45016a862a62bd9723f57d98dafbe25488cbae8e89794b",
|
| 210 |
"runs/research/v2-tinystories/models/ce-seed1337/tokenizer.json": "ba73a66ac59ce93b22cdbef2640ef21b4667acac264161610c76d16a1a6ae933",
|
| 211 |
"source/LICENSE": "b174e6faf4c63ad0b6f988595deea7dd0bb171b3d922b9f9b0c627e0db38da9d",
|
| 212 |
+
"source/CITATION.cff": "65a13fa1797ec905388ef48b0ee2619f790f534a7c6bb0d79e1379d0f2750f00",
|
| 213 |
"source/Dockerfile": "e5698d382aa237b72b2ef83e685b775a3b7c919a97ca6ebab03e17fa66c4c138",
|
| 214 |
"source/Research.Dockerfile": "610c67cec90b98f9c3fc1a6e5e4f6d50615574e40f3fa06d28199313c583ba07",
|
| 215 |
"source/requirements.txt": "f54fde6250af67be2c903bc2363344c1e411c53098e356b6c16f80d0070bbb7a",
|
|
|
|
| 258 |
"RESEARCH_PROVENANCE.json": "d1513504b23363c6878da324fe7c87557436fd4c681f4e8181a10eaa57375c78",
|
| 259 |
"dashboard.html": "c747189c03a14b7aeb90271d6a2ba41003fc9ceefa6aeb3a09c1598f697da59a",
|
| 260 |
"RESEARCH_PLAN.md": "7a19bc6c4f413e352c90fb4a54a46f23a47bfa0cef90f49920781bc933d6333c",
|
| 261 |
+
"REPRODUCE.md": "85a36aa7e7822acc1dfee964110cb47882c766cc2258ac494cc2df3302b759e3",
|
| 262 |
"DATA_LICENSES.md": "eab2c7485fc4558ee1daebc703eeb3c0d746ab7f43e40cc9a7c3b05928e9c8c9",
|
| 263 |
"metrics/validation-history.csv": "ff0391a427aca28c47f930e752c738913481dd435e264262739595811051db97",
|
| 264 |
"metrics/learning-rate-trials.csv": "bcda34b70c46886ad1e693b0d3e05c638fd088b850591c67acef6568152bc102",
|
|
|
|
| 266 |
"metrics/README.md": "86aa658090bed785b16bf8d15819804a6b364db81c310af5eaabd3cb71464ad5",
|
| 267 |
"metrics/samples.jsonl": "93d297bad2951670e1f366153869029d3590cf406f15725bfc42ff0b447cfe50",
|
| 268 |
"source/requirements-research.txt": "1bbfa2cb9c22d87ec6a6d98b1a0475516be0a5e29ef88865f21622510341ead3",
|
| 269 |
+
"source/README.md": "8e78ba4f9e9e57ad359fb6d67b20f7ec74c68467a1d1bfe1034f713e488a2d71",
|
| 270 |
"source/.dockerignore": "86028321e99bdf0855642a99556b9255c97f4a61ee2de4e1013d5303fbc10135",
|
| 271 |
+
"docs/RESEARCH_REPRODUCE.md": "85a36aa7e7822acc1dfee964110cb47882c766cc2258ac494cc2df3302b759e3",
|
| 272 |
"docs/OPERATIONS.md": "6cae3020eb3528965931268d00a68dfff9786a0d5fd7766a36effc4fe2328561",
|
| 273 |
"docs/RESEARCH_RESULTS.md": "d11bcf9f6acc8b2fb4b04bed7a1ec4a4f6939017c7f3e621541dddf686a0ddbc",
|
| 274 |
"docs/RESEARCH_PLAN.md": "7a19bc6c4f413e352c90fb4a54a46f23a47bfa0cef90f49920781bc933d6333c",
|
|
|
|
| 297 |
"source/experiments/sample_safetensors.py": "e6f30461fd8f8515fd47937359237b9d318c9a089d0a9747006fb2f79276d975",
|
| 298 |
"source/tests/test_publication_report.py": "4fca5153bd183733e9046a57d48bf58fa0bae7adfc92fd09beca142d5f9c33d5",
|
| 299 |
"source/tests/test_safe_sample.py": "bcdc909533ec694a3a7faf350dcea0845b91a45952decdec04b4b3fedf824826",
|
| 300 |
+
"source/docs/RESEARCH_REPRODUCE.md": "85a36aa7e7822acc1dfee964110cb47882c766cc2258ac494cc2df3302b759e3",
|
| 301 |
"source/docs/RESEARCH_RESULTS.md": "d11bcf9f6acc8b2fb4b04bed7a1ec4a4f6939017c7f3e621541dddf686a0ddbc",
|
| 302 |
"source/dashboard/src/theme.css": "8f714846965b075868db607dcca3f0bedb8f7057a999d8f1a95d60bbdfcf6980",
|
| 303 |
"source/dashboard/src/data.json": "c905e0d0b48c846cb2d4c6c7e196db76627060a9589fc466c5107fa16b0e3551",
|
|
|
|
| 326 |
"source/docs/figures/v2-shakespeare-diagnostics.png": "05e39c24ec41e2a91083f4a2a3ea8e84cf5469ce612846178e672e1184fbac6f",
|
| 327 |
"source/docs/figures/v2-shakespeare.svg": "8cdcb1c4e08f421bf72883df3deeb1d8c86c647fb7ce602f7dc779a95819dc41",
|
| 328 |
".gitignore": "135bc1e9227d4784839eedcaf54bd465a24c9bc55a96cb7fb55375610d36742c",
|
| 329 |
+
"source/.gitignore": "971fa38bf06b07f1df61e3f556d60eaabf7eef6c26389f5b24886c47fab92eb6",
|
| 330 |
"source/experiments/archive.py": "ec1dca88f63ac097850f3edf608d304adf33acadfcf93f0b8577e205b0c71861",
|
| 331 |
"source/experiments/reporting.py": "dc26418b519b9e729622ab0426cce2c64e0818c6f103d3c66bdbfed3a11aefc6",
|
| 332 |
"source/dashboard/index.html": "314bb3975bdcd7322067d234f99398b06f609c67c2321554eda742f2338b3c5e",
|
|
|
|
| 576 |
"source/dashboard/docs/components/bar-presentations.md": "3ec11931b0d05ec75282d3b23f77b348a271fff4dfad3379890cea35fff9309a",
|
| 577 |
"source/dashboard/docs/components/layout.md": "da9013b89a528bfee18235581de33da73d6aefd5695851f3e808d84b53446bd1",
|
| 578 |
"source/dashboard/docs/components/filtering.md": "7820b3d916b4c3c74243d98be96e819f7bd0a828e466e9621127a32c2bf6c1b9",
|
| 579 |
+
"source/dashboard/docs/components/funnels.md": "bc6f858194ad820b4b62123191d9603847f4f860ca3428d08816457323f79ed3",
|
| 580 |
+
"source/RELEASE_MANIFEST.json": "52d93087a6fddd7fa01f81ce8bd290089a919c3e1bf082b3f609130d3ab8fb91",
|
| 581 |
+
"source/VERSION": "c89b87c262e9d5ffd20e73aac74a1772adcc9f5a21682cc33adcf5086e5fef5c",
|
| 582 |
+
"source/dashboard.html": "c747189c03a14b7aeb90271d6a2ba41003fc9ceefa6aeb3a09c1598f697da59a",
|
| 583 |
+
"source/docs/figures/final-confident-errors.png": "ffa76140ef7859c519ff053b753ee153d35f959e2572f0d6be826ed7dd51bd1f",
|
| 584 |
+
"source/docs/figures/final-confident-errors.svg": "356ff318a968cec194c45963e4a356d29d306c6c3f37adcda9523765709fdf17",
|
| 585 |
+
"source/docs/figures/final-learning-curves.png": "6301a655d11e4c949da132ba0448175f3257b6f50fac0271a19f76c4fb1ba81e",
|
| 586 |
+
"source/docs/figures/final-learning-curves.svg": "6c998ed3cc489fc3de1cf6609ed6cf7f6f97acc6c4ae00aa538e1a1c9893c25f",
|
| 587 |
+
"source/docs/figures/final-paired-nll.png": "dca841b44450a4207c12d51f0b15363e6ed6da861dbaa4e5759799ff77318037",
|
| 588 |
+
"source/docs/figures/final-paired-nll.svg": "4343b101d2098c38f651d72c954833191865b13f5369407acac0533565c5c054",
|
| 589 |
+
"source/output/pdf/loss-lab-research-report.pdf": "aeabb786f1efc3a35cdfeaeb76ba0851e46af55871f955d1f812fa80c0b61ec0",
|
| 590 |
+
"source/requirements-report.txt": "2485480cb9090be564943b86813cb5846ecc7a4d99e412d97ba3e7b561a1adff",
|
| 591 |
+
"source/results/VERIFICATION.json": "849458322833bef9405a9d94b48ae4277c25e20fda1d91a91a80914066dee3d5",
|
| 592 |
+
"source/scripts/package_release.py": "5ca5632c01f96252add70b13c0a593554fa54a18ccbb09ced9cfa70c4b509667",
|
| 593 |
+
"source/scripts/research_report.py": "4f54c9b95fa879233b396f1ae0f2b1ad34309a51b90b69a537de7e809941ce1a",
|
| 594 |
+
"source/scripts/verify_results.py": "4e2955dce8633a26665d5aee2c6ef3336c7e5b8dd7e008dcbf938af64cd76b80",
|
| 595 |
+
"source/tests/test_recorded_results.py": "5c37e2544ad31bf23dacbce6021b46da11af2d5987482beecae065522c704c61",
|
| 596 |
+
"RELEASE_MANIFEST.json": "52d93087a6fddd7fa01f81ce8bd290089a919c3e1bf082b3f609130d3ab8fb91",
|
| 597 |
+
"RESEARCH_REPORT.pdf": "aeabb786f1efc3a35cdfeaeb76ba0851e46af55871f955d1f812fa80c0b61ec0",
|
| 598 |
+
"docs/figures/final-paired-nll.svg": "4343b101d2098c38f651d72c954833191865b13f5369407acac0533565c5c054",
|
| 599 |
+
"docs/figures/final-paired-nll.png": "dca841b44450a4207c12d51f0b15363e6ed6da861dbaa4e5759799ff77318037",
|
| 600 |
+
"docs/figures/final-confident-errors.png": "ffa76140ef7859c519ff053b753ee153d35f959e2572f0d6be826ed7dd51bd1f",
|
| 601 |
+
"docs/figures/final-learning-curves.png": "6301a655d11e4c949da132ba0448175f3257b6f50fac0271a19f76c4fb1ba81e",
|
| 602 |
+
"docs/figures/final-learning-curves.svg": "6c998ed3cc489fc3de1cf6609ed6cf7f6f97acc6c4ae00aa538e1a1c9893c25f",
|
| 603 |
+
"docs/figures/final-confident-errors.svg": "356ff318a968cec194c45963e4a356d29d306c6c3f37adcda9523765709fdf17",
|
| 604 |
+
"figures/final-paired-nll.svg": "4343b101d2098c38f651d72c954833191865b13f5369407acac0533565c5c054",
|
| 605 |
+
"figures/final-paired-nll.png": "dca841b44450a4207c12d51f0b15363e6ed6da861dbaa4e5759799ff77318037",
|
| 606 |
+
"figures/final-confident-errors.png": "ffa76140ef7859c519ff053b753ee153d35f959e2572f0d6be826ed7dd51bd1f",
|
| 607 |
+
"figures/final-learning-curves.png": "6301a655d11e4c949da132ba0448175f3257b6f50fac0271a19f76c4fb1ba81e",
|
| 608 |
+
"figures/final-learning-curves.svg": "6c998ed3cc489fc3de1cf6609ed6cf7f6f97acc6c4ae00aa538e1a1c9893c25f",
|
| 609 |
+
"figures/final-confident-errors.svg": "356ff318a968cec194c45963e4a356d29d306c6c3f37adcda9523765709fdf17",
|
| 610 |
+
"loss-lab-v2.1.0.zip": "9fc5da20f72b0bb584fa260cf642ec9bd476c492d36bde1e48291abea43d1d06",
|
| 611 |
+
"loss-lab-v2.1.0.zip.sha256": "a8591efd76b5520cbe9f9a542290483e45b0a764be445a7ce4d3b75879b338a2",
|
| 612 |
+
"RELEASE.json": "a32b717c03092a2c06c92f9d0a05d5f2ad4da639a5c8c0fcb213a53b1306b8e3"
|
| 613 |
}
|
README.md
CHANGED
|
@@ -9,6 +9,18 @@ tags:
|
|
| 9 |
- research
|
| 10 |
---
|
| 11 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 12 |
# Full-duration CE versus Brier study
|
| 13 |
|
| 14 |
Exploratory paired nanoGPT experiments. Five main seeds per loss. Learning rates are selected by final validation NLL after a full-duration sweep; test scores never select rates.
|
|
|
|
| 9 |
- research
|
| 10 |
---
|
| 11 |
|
| 12 |
+
# Loss Lab - completed research release v2.1.0
|
| 13 |
+
|
| 14 |
+
[Research report (PDF)](RESEARCH_REPORT.pdf) · [Download the portable project](https://huggingface.co/ctxnn1/loss-lab-ce-brier/resolve/v2.1.0/loss-lab-v2.1.0.zip?download=true) · [Interactive dashboard](dashboard.html?download=true) · [Complete source](source/)
|
| 15 |
+
|
| 16 |
+
The final release retains 42 main models, 42 tuning runs and all 1,248 samples. The portable project needs no GPU, credentials or ML dependencies to verify its records: run `python3 scripts/verify_results.py` after extracting it. Its clean copy passes all 27 public tests. Large weights are indexed separately. Pin downloads to v2.1.0 or an exact commit.
|
| 17 |
+
|
| 18 |
+

|
| 19 |
+
|
| 20 |
+
The six-page report explains methods, secondary metrics, gradient measurements, the original ranking reversal and the limits of the conclusions. Personal cloud scripts and deployment state are excluded.
|
| 21 |
+
|
| 22 |
+
---
|
| 23 |
+
|
| 24 |
# Full-duration CE versus Brier study
|
| 25 |
|
| 26 |
Exploratory paired nanoGPT experiments. Five main seeds per loss. Learning rates are selected by final validation NLL after a full-duration sweep; test scores never select rates.
|
RELEASE.json
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"version": "2.1.0",
|
| 3 |
+
"status": "complete",
|
| 4 |
+
"source_commit": "d9297fd625122051b759e25c4dcf4a883a37502a",
|
| 5 |
+
"portable_bundle": {
|
| 6 |
+
"file": "loss-lab-v2.1.0.zip",
|
| 7 |
+
"sha256": "9fc5da20f72b0bb584fa260cf642ec9bd476c492d36bde1e48291abea43d1d06",
|
| 8 |
+
"bytes": 6753705,
|
| 9 |
+
"weights_included": false
|
| 10 |
+
},
|
| 11 |
+
"report": "RESEARCH_REPORT.pdf",
|
| 12 |
+
"source_manifest": "source/RELEASE_MANIFEST.json",
|
| 13 |
+
"main_models": 42,
|
| 14 |
+
"tuning_runs": 42,
|
| 15 |
+
"saved_samples": 1248,
|
| 16 |
+
"public_tests_passed": 27,
|
| 17 |
+
"offline_integrity_verification": true,
|
| 18 |
+
"remote_native_and_tensor_hashes_verified": 84,
|
| 19 |
+
"new_gpu_training_required": false
|
| 20 |
+
}
|
RELEASE_MANIFEST.json
ADDED
|
@@ -0,0 +1,347 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"schema_version": 1,
|
| 3 |
+
"version": "2.1.0",
|
| 4 |
+
"scope": "Portable project and source bundle. Hub source lives under source/; published model hashes are in FILES_SHA256.json.",
|
| 5 |
+
"files": {
|
| 6 |
+
".dockerignore": "86028321e99bdf0855642a99556b9255c97f4a61ee2de4e1013d5303fbc10135",
|
| 7 |
+
".gitignore": "971fa38bf06b07f1df61e3f556d60eaabf7eef6c26389f5b24886c47fab92eb6",
|
| 8 |
+
"CITATION.cff": "65a13fa1797ec905388ef48b0ee2619f790f534a7c6bb0d79e1379d0f2750f00",
|
| 9 |
+
"Dockerfile": "e5698d382aa237b72b2ef83e685b775a3b7c919a97ca6ebab03e17fa66c4c138",
|
| 10 |
+
"LICENSE": "b174e6faf4c63ad0b6f988595deea7dd0bb171b3d922b9f9b0c627e0db38da9d",
|
| 11 |
+
"README.md": "8e78ba4f9e9e57ad359fb6d67b20f7ec74c68467a1d1bfe1034f713e488a2d71",
|
| 12 |
+
"Research.Dockerfile": "610c67cec90b98f9c3fc1a6e5e4f6d50615574e40f3fa06d28199313c583ba07",
|
| 13 |
+
"VERSION": "c89b87c262e9d5ffd20e73aac74a1772adcc9f5a21682cc33adcf5086e5fef5c",
|
| 14 |
+
"configs/comparison.json": "886698567ab39bf9f447bdef2b12f39ac3d76ce34eeffe18ce98b555468ecf13",
|
| 15 |
+
"configs/research-plan.json": "d0d8bebf96ad6ae3bf97177ca863011ccf2aa839f4369d8c373f61942677bba3",
|
| 16 |
+
"configs/smoke.json": "252221b8663bb2ad61c4f8aa9276bec7a32a179a1cb3a2821231b9f012f36fe7",
|
| 17 |
+
"configs/tinystories.json": "c10e9c38e7ad7472c85333f14198dffc366877b462c6d031ec49efb42bd05a97",
|
| 18 |
+
"dashboard.html": "c747189c03a14b7aeb90271d6a2ba41003fc9ceefa6aeb3a09c1598f697da59a",
|
| 19 |
+
"dashboard/AGENTS.md": "215baf947a82508f9aa349acce5fb747e43aaf874ddf7b9b11436b80fab50240",
|
| 20 |
+
"dashboard/docs/components/README.md": "c24c56d48a2b491a0a648ec0beee10f43d12c8d7fe2b5e74d89879fd31879419",
|
| 21 |
+
"dashboard/docs/components/async-data.md": "ddd293d4e1200a3c4814e520443dd9e22c1214b102deef877e0eb7da132cfb7d",
|
| 22 |
+
"dashboard/docs/components/bar-presentations.md": "3ec11931b0d05ec75282d3b23f77b348a271fff4dfad3379890cea35fff9309a",
|
| 23 |
+
"dashboard/docs/components/charts.md": "85f8c4106b1693994590f11d2fc4ef557c8ee00502c3bef1d831171b2cd74217",
|
| 24 |
+
"dashboard/docs/components/comparison-formatting.md": "35faa7cc51b5e7f3a00ee2b155343589b62c645cf9ae4f053118c72c528959e9",
|
| 25 |
+
"dashboard/docs/components/controls.md": "697c4e56b377e535c263220acbf4a4b4c05f8b072a47126051aa85dff8f3ea99",
|
| 26 |
+
"dashboard/docs/components/filtering.md": "7820b3d916b4c3c74243d98be96e819f7bd0a828e466e9621127a32c2bf6c1b9",
|
| 27 |
+
"dashboard/docs/components/funnels.md": "bc6f858194ad820b4b62123191d9603847f4f860ca3428d08816457323f79ed3",
|
| 28 |
+
"dashboard/docs/components/layout.md": "da9013b89a528bfee18235581de33da73d6aefd5695851f3e808d84b53446bd1",
|
| 29 |
+
"dashboard/docs/components/reports.md": "a698727d6993ce703ca4b33749cce9313aece525ce91132f2433f39fe3894cf0",
|
| 30 |
+
"dashboard/docs/components/sortable-layout.md": "fd0f9bfae34a9aa1563e17699a8591f1c24f7579303c176dcb27f45e6dc7bf96",
|
| 31 |
+
"dashboard/docs/components/sources.md": "2e6efcd576ec195c64895ded0aa29d629d94154fcc437828d2288a9440c31202",
|
| 32 |
+
"dashboard/docs/components/tables.md": "bad26c41789c621c24e25748111e20c6a100533477ef582c175a1edca12380f3",
|
| 33 |
+
"dashboard/index.html": "314bb3975bdcd7322067d234f99398b06f609c67c2321554eda742f2338b3c5e",
|
| 34 |
+
"dashboard/package-lock.json": "a018dca90e5f5893c698b9b41ee53f64e91cf0533f5ab3dc86c51b5a95dedf4b",
|
| 35 |
+
"dashboard/package.json": "6ee23dabbf22d64b8091a07b9dc857ff1ce2770e02886baaf68716595db8f14c",
|
| 36 |
+
"dashboard/protected-runtime.json": "5dc277c945090cc81cdc337e48e1b99e98f82c7d99a6c5e23e81bfb206ff5f06",
|
| 37 |
+
"dashboard/scripts/authorize-protected-change.mjs": "9b9f012d65c34a1f9ac4d107ba226f82aadabde72980c2d393c63e9d68eff6a3",
|
| 38 |
+
"dashboard/scripts/protected-file-digest.mjs": "2583e42fafb0d0fab7342b8dca163fe0d6771928dc41c830fbdfdee3af821822",
|
| 39 |
+
"dashboard/scripts/verify-protected-runtime.mjs": "47d95847a9135cd125581a4b994208adc3822cbef4a2c8bfaf562f0d2ef3a9af",
|
| 40 |
+
"dashboard/src/App.jsx": "2f4b8f28c24ee9498c8de670a7f9c7fb79a584c67f67d88b782ec301838cc54b",
|
| 41 |
+
"dashboard/src/DataAppContext.jsx": "309d971e9fd4494b2f704087c81ded8837ec955ae4a57898f54dd776c8fca30f",
|
| 42 |
+
"dashboard/src/DataAppRuntime.jsx": "3008a08c2a79c90a5ea5cb3f91b7f77113dfca1e8c4578bf47c34bd9932bd088",
|
| 43 |
+
"dashboard/src/DataAppShell.jsx": "004aa988679e158e668b8dd8c151869e9b6106cd31eeb33de0b51fc51c107259",
|
| 44 |
+
"dashboard/src/block-layout.js": "385da9c5081f9a24ee3eb8948b87aa7a6c6b0f1b7b37d26c91ae07fb01a81c8b",
|
| 45 |
+
"dashboard/src/build-state.js": "1fe7e56e5e8173e0da5d432600f385b13d9133cbeb243ef26edd97985babf6d8",
|
| 46 |
+
"dashboard/src/card-image.js": "b91c236f6e3b1c1bf5d7ca8085a4378770336b671dc3e36e403efa91995e851c",
|
| 47 |
+
"dashboard/src/chart-export.js": "f3eecf07f28799612c5e5b246e0cbd83d20850eac66599d29a72df7db92a69a3",
|
| 48 |
+
"dashboard/src/chart-image.js": "c48da8343b765813bc1294bcd81967fcd0b2bfe94f18174a1e3d4db6c44d1936",
|
| 49 |
+
"dashboard/src/chart-permalink.js": "de7b01a00bc0d2b478a63f50c0716272af7567283b793d908e2d8750a59a8458",
|
| 50 |
+
"dashboard/src/charting/BarFamilyRenderer.jsx": "235811f05967f5a1931c020b65e9a9ed6faf950c50e3c71a9868d4167a9c52c2",
|
| 51 |
+
"dashboard/src/charting/CategoryAxisTick.jsx": "e9f70ac3997d76125a58221dc0778a3437781947f2ef27722a171f2ea0a66561",
|
| 52 |
+
"dashboard/src/charting/ChartAnnotations.jsx": "8da6f704a1e8850873e99a4f778ebec29215a6df329bbdb11b46b01c09f8a022",
|
| 53 |
+
"dashboard/src/charting/ChartFrame.jsx": "bb0925854283f32cc398144a79e69113e4874018375ddf4e241d3f5fd06ddcf0",
|
| 54 |
+
"dashboard/src/charting/ChartMark.jsx": "bad3bfefaef82395ea67aaef44c75941d6087eb45137214bb78d04b2978565b1",
|
| 55 |
+
"dashboard/src/charting/ChartRenderer.jsx": "2335f9e8a29c38a017d154a14b9149700e5084997791b6756fcae29933978551",
|
| 56 |
+
"dashboard/src/charting/ChartState.jsx": "ad5b28521894d219e36027fcfc2640d0c0b8b290f55b4f6d1215ef2c9f2a7d46",
|
| 57 |
+
"dashboard/src/charting/ChartTooltip.jsx": "51303b729ff7adbf0405e67523a09c6aa89e40e144b61e717103b71b7c39a8bb",
|
| 58 |
+
"dashboard/src/charting/FunnelRenderer.jsx": "1103ec5a1a88f1a14622d5e6e30cf2e9b58d03d9cb6f21f973c62c6e7cd1309f",
|
| 59 |
+
"dashboard/src/charting/HeatmapRenderer.jsx": "2034e2e3d9a6d3c86256de1abbd73da7473401232e777e12d9d2de23c79a84b2",
|
| 60 |
+
"dashboard/src/charting/MetricSparkline.jsx": "9a5aae5cbd27b96baecc406bb69f91fc76cc9d5fc2aaa9e7e356d68d8c7ac08d",
|
| 61 |
+
"dashboard/src/charting/NumericAxes.jsx": "5eb37be4711efdb03eaa70225089fd6c4f4f597d3aa7faf81c3a55793d1aa883",
|
| 62 |
+
"dashboard/src/charting/PieRenderer.jsx": "fc1265bf867154c239ddb14b539c63751ab7716fb19903b535ccd9c06ca8a0cc",
|
| 63 |
+
"dashboard/src/charting/SankeyRenderer.jsx": "48c412a1e6394f152ae6bf8fef5023f76d6347844abb0a3710aa0f48f748a9c2",
|
| 64 |
+
"dashboard/src/charting/SelectedChartRegion.jsx": "1717361a56edb81e2f00bbdc57db66be844d02de43d5ce27cae7cd8f5722b0e7",
|
| 65 |
+
"dashboard/src/charting/TableSparkline.jsx": "466d91f5de2fab7f1fd8654e2ad800c56d0b6d6a71adc058405985a59a918da1",
|
| 66 |
+
"dashboard/src/charting/TemporalXAxis.jsx": "ef2ba3b476b1887416ede87fb577450ec0d54524b54c3cec3e2dbbc659c752d6",
|
| 67 |
+
"dashboard/src/charting/bar-family.js": "c31e44122f8d2e14b3f09bbeabe26fadea115a5488be2311720ff2bc54e7fbda",
|
| 68 |
+
"dashboard/src/charting/chart-annotation-layout.js": "09cd7715da2191c0257ccce4f900141dc4f3c5bf62a83bb5bec04ad23e4e96d2",
|
| 69 |
+
"dashboard/src/charting/chart-annotations.js": "bf8fd4fc8f5d586daa18c315855d9f67083ea2978860b7a5d64b7f713352098c",
|
| 70 |
+
"dashboard/src/charting/chart-data-shape.js": "4c1dea15118a8dffd68bfa3c0b6291a691d1929862a32a02edb8c711dc1fcedc",
|
| 71 |
+
"dashboard/src/charting/chart-editor-state.js": "57e1439926bff4e9aab3847b3e1bf92f1ab5554f53688112da56344c5a9cc0b8",
|
| 72 |
+
"dashboard/src/charting/chart-extrema.js": "ab4bd4a9adb25d2648ac95f8bf6388c5fe9eadbf7115a545925dedd7611a1850",
|
| 73 |
+
"dashboard/src/charting/chart-mark-interactions.js": "d93877eb6ef8324f0109277754e04affac135769a18f2d2d99d51d8382abb726",
|
| 74 |
+
"dashboard/src/charting/chart-overrides.js": "09e15338c86d93f7fb9845757d0ba223f71705d540ec467c18d32df7b10bb8f9",
|
| 75 |
+
"dashboard/src/charting/chart-spec-validation.js": "a293a06bc346734f25742f79d100ce45c45d107ec5c368965f931bf2d7b5c5f8",
|
| 76 |
+
"dashboard/src/charting/chart-theme.js": "21367c8f24bd4122e85efe4bac43e2e6fa8567a0d098cf8d03158dd183342cb9",
|
| 77 |
+
"dashboard/src/charting/chart-transforms.js": "782d55023ec8dddfb99e7c5584c39cc23e102317aa3ca1e4668043c8814c3e86",
|
| 78 |
+
"dashboard/src/charting/experimental-bar-chart.css": "b9117bdd6cd0f441f23b82a6d79fd17fc3e13e2f2003d631afc0827b2cf8174e",
|
| 79 |
+
"dashboard/src/charting/table-data.js": "2e61118fccdba5c565e1995fab213da44750817d9a7da85593776d5793234ef2",
|
| 80 |
+
"dashboard/src/chrome-contrast.js": "f18b05b03ec11c1f405527216ac1dc9c403074c22208bc7534008b8e4062d2e6",
|
| 81 |
+
"dashboard/src/chrome-layout.js": "3027c569c6266762f6d90268df1650768777b1b5cecb1405820d22bbd8588fb7",
|
| 82 |
+
"dashboard/src/components/Chart.jsx": "bb3193138a46e22fa0c3e3bc342fdfa539f03371cf1d628bef624a6a357e7e52",
|
| 83 |
+
"dashboard/src/components/ChartEditor.jsx": "485f6b405d310b11e6e784893971ae78e38d2fa68cd8f8be16a2c459c5be7208",
|
| 84 |
+
"dashboard/src/components/ChartExplorer.jsx": "e23683cddd6efe4d323844fa97cc5a6fdfef665cd7312c5fece80618696c56d3",
|
| 85 |
+
"dashboard/src/components/ChartExportDialog.jsx": "d54792a80ac79f67249d4332b80ef71b3b320d55cc3256b15532bf011dd6045e",
|
| 86 |
+
"dashboard/src/components/Controls.jsx": "d9077aac0dd095dcc26f8accb904ce834db130c4d6700a73ab6732c30c815602",
|
| 87 |
+
"dashboard/src/components/CustomBlockHost.jsx": "b7bfec00a46435291b07d32ff39a2ec65e309aa532902fd94e9b1c72a8994a32",
|
| 88 |
+
"dashboard/src/components/DashboardAsk.jsx": "5664289776e4ed8544ffb45474691908e2bff1c520e88a467b288a26822ac94d",
|
| 89 |
+
"dashboard/src/components/DashboardTabs.jsx": "5490439c56960f12f62cc99bdadcb8d24e60707a0aa901b3225346fb8b1f5f5b",
|
| 90 |
+
"dashboard/src/components/DataAppChrome.jsx": "6eae567b93a5f5c1ca4eccecfbdf3d85398f181e2e7d2f3e3447b6f5ade50233",
|
| 91 |
+
"dashboard/src/components/DataAppHandoffDialog.jsx": "3bd1db7e4c0a5804d2dbed3625b096f3b25b1d4dc8441e8817a278355faea2bb",
|
| 92 |
+
"dashboard/src/components/DataAppLoadingContent.jsx": "bcfec0818ea0c90f75697f35a0f8e5d3b649314ad9daaadaabfecb945d6a3483",
|
| 93 |
+
"dashboard/src/components/DataAppToast.jsx": "1c80d8723f951755c132c5b1e51fab8dafd38cd6312ad7bc9e5a98d4403c2213",
|
| 94 |
+
"dashboard/src/components/DataComponent.jsx": "8b4c886d78d833ca621e9c2d7eaa14e80df550306aa224f936682713a90a96bf",
|
| 95 |
+
"dashboard/src/components/DataTable.jsx": "dbaa4b2de52daefdbe288032efca399fedf9e03f53313746553077e21465adde",
|
| 96 |
+
"dashboard/src/components/DateRangePicker.jsx": "8a2d61e55b89e7b994433d8ca4b2f8ddd86769d741d3b4ccd5d886e55e7d42a2",
|
| 97 |
+
"dashboard/src/components/Dropdown.jsx": "e7761601666fd1a948541502e1ccc1985ebd30673237aecb865208e927533299",
|
| 98 |
+
"dashboard/src/components/EditableText.jsx": "d86a22e16e067f284bd51ae7b96a6d5b0af51b8098f267a0790b0962dfe38ad0",
|
| 99 |
+
"dashboard/src/components/EvidenceChart.jsx": "3b836656e696325fc402535fe7a8dcd95b5e0ada6c3363aa64fc1cb3e1da79c5",
|
| 100 |
+
"dashboard/src/components/ExecutiveSummary.jsx": "375a8bc90881e493690d55838e677877a6ff27b6c585dad9af5dfbf0705c4e38",
|
| 101 |
+
"dashboard/src/components/Icon.jsx": "3181d5f82f887b5a7cf4a1c5b1fcb50d6ffc1a06d082ce9f3f569bc26b4341a6",
|
| 102 |
+
"dashboard/src/components/MetricCard.jsx": "d12e774297ff9e002dc243cfbf3541c54469da98dc24d77c093ad34b326745ac",
|
| 103 |
+
"dashboard/src/components/PublishReviewDialog.jsx": "02894bfb21d21f8605e92230f8553007b2c843c17560bc852375a62c57363d8b",
|
| 104 |
+
"dashboard/src/components/QueryDataBoundary.jsx": "a5229b8f6142652f6ac16bcf35ba10b0753206a54fff2cc74e21565620aec2e0",
|
| 105 |
+
"dashboard/src/components/RefreshSetupCoachmark.jsx": "5007f4f0878b0e6c9c924c47625386ba922aec57dd69c8633996b7d67ca7fc77",
|
| 106 |
+
"dashboard/src/components/RichMarkdown.jsx": "d0afa8e119b0cc3cad380757bb80d6180effee84caa380f415c94d6db8fdb43f",
|
| 107 |
+
"dashboard/src/components/RichTextFormatToolbar.jsx": "3ee14b50554fee37d94e28a9c208188affb4ac66d3c4b33b60fcb49008e2e11b",
|
| 108 |
+
"dashboard/src/components/Section.jsx": "bee8342892fe825b1e208a81b85dfc0f32811698dfb5cf11bc7b7aed46c7c708",
|
| 109 |
+
"dashboard/src/components/SectionNavigator.jsx": "d25fde954fb369abb828872ae842ced37c4713a18908ad80c2e63cb58e57bea3",
|
| 110 |
+
"dashboard/src/components/SegmentedControl.jsx": "34bcc4601dc3538a2c5dae36be7d0b6d81d0059c2b1c53626024cda9feaf2b10",
|
| 111 |
+
"dashboard/src/components/Slider.jsx": "2db4c7b93269d2c80f6ad7b49cefedd02f824e83c4f7dbf5191f48c2b743ee5d",
|
| 112 |
+
"dashboard/src/components/SmoothCardSurface.jsx": "ed917e8cc1f0f59ba49c2085bbc719ce85da62d4c9d0e3aa632f38a1b941cdd1",
|
| 113 |
+
"dashboard/src/components/SortableRegion.jsx": "5a2f9f62f2c3505a4806946f96b48458fe3c158e4b54b8265867bd01721aeffd",
|
| 114 |
+
"dashboard/src/components/SourceInspector.jsx": "7f29201a5cf83472fb62b99b55a192b3ac723c1a7e230553e4c52331c3c225cb",
|
| 115 |
+
"dashboard/src/components/SourcePreviewCardContent.jsx": "0422f3d1bcbc82a72718c75a5dfc5094e87f5698a2c73eafb6568f188902f23a",
|
| 116 |
+
"dashboard/src/components/SourcePreviewLink.jsx": "46e0121daa5ef023774b04ad035e6bb0e59c02efe8cf752400fcc2631244f5c2",
|
| 117 |
+
"dashboard/src/components/SourceProviderIcon.jsx": "fb4ea0956e8410c9820cbb41fcbdc187a9b1a0e8323e643bc24521302ea4b73a",
|
| 118 |
+
"dashboard/src/components/SourcesReceipt.jsx": "9485a522cf62c4ed35e89dcf500344d0ba6618ee41147564d0c6cc46b5174a3d",
|
| 119 |
+
"dashboard/src/components/Switch.jsx": "38010aef242d32133274db12e1d91323204630b47875af874b68cb81bc19b23d",
|
| 120 |
+
"dashboard/src/components/chart-color-utils.js": "87402e606a497cf3d2bbe4262640988f9a2ed70f25c029b2f41fc108e663c2dd",
|
| 121 |
+
"dashboard/src/components/chart-export.css": "5169a041e8e7de337915d5b39f3d6c7208c0c587ef15744f8813308476fa1c4f",
|
| 122 |
+
"dashboard/src/components/contained-ui.jsx": "da4daa991f8df9421a4290ca33709fb8bb055280c0558a4de1153b698472a789",
|
| 123 |
+
"dashboard/src/components/data-app-handoff.css": "6edd7a036016ba2c80c122f1322f3f1f3a01bf333e36c5ebbab79313c870ba05",
|
| 124 |
+
"dashboard/src/components/data-app-loading.css": "8ce37185b00f9a9c12563cec73ebafcd4612230a7f4d5afc09736b6f9c468074",
|
| 125 |
+
"dashboard/src/components/dropdown-model.js": "c70414249e31d44177bdf2c81deb93ae564ccb2833f01e4fefbe37df5d597177",
|
| 126 |
+
"dashboard/src/components/executive-summary.css": "70205776df61151a771da83d7a87dfbc24c4128fc9978270a43d2cbd160911c7",
|
| 127 |
+
"dashboard/src/components/form-controls.css": "4cd65b3a53eef43d1f9b32dd62ebf44555c887ed92aee484dc080ba384349f7b",
|
| 128 |
+
"dashboard/src/components/icons/convert-icon-google-docs.svg": "c5f417c7896dde4a45cf61778f1d66053825bc5fbc75252ebae63b7c0ea48987",
|
| 129 |
+
"dashboard/src/components/icons/convert-icon-google-slides.svg": "233363b561f4152765bdc78a8386ad6f4a4f0afc1e504cedb9962f68a561ccbd",
|
| 130 |
+
"dashboard/src/components/icons/convert-icon-jupyter.svg": "58938f5b71c10a73982ef00caa43a01ceae35b2817df547012e4ae8ed25d2fb6",
|
| 131 |
+
"dashboard/src/components/icons/convert-icon-pdf.svg": "63b5fda9c3657b7b7fb4af31c3d2f16fc19ce8b1ceed2cddf5e4fe12947beae6",
|
| 132 |
+
"dashboard/src/components/icons/convert-icon-powerpoint.svg": "71a7a6a82eda7e671a66cd6c25b5814e39cc5be7a3db8365b0237398eef30978",
|
| 133 |
+
"dashboard/src/components/icons/convert-icon-word.svg": "6db6f1fdfc0805fdf017c319affe5a9b91bf337b52b0bd6a0bec4ecfed3c6b7c",
|
| 134 |
+
"dashboard/src/components/icons/dashboard-icon-alertBell.svg": "bbd96bd8458604bee4ffcaa2a33655cb0aba521f0608d9a02625e80e372e924b",
|
| 135 |
+
"dashboard/src/components/icons/dashboard-icon-arrowDown.svg": "ac89a7e1fd41d146e34d7c15be393a7b829774ffb8fbaa1df378f16bdb3d29e1",
|
| 136 |
+
"dashboard/src/components/icons/dashboard-icon-arrowUp.svg": "14ac5376283ecac668371746948f1dbcc14c1db3d811c81dcd334416ca1d7e1a",
|
| 137 |
+
"dashboard/src/components/icons/dashboard-icon-arrowUpRight.svg": "bcf1918ca943a7b982458fbd0be0c2feb3a517cce3debc551c0afbe2b25617a0",
|
| 138 |
+
"dashboard/src/components/icons/dashboard-icon-bold.svg": "91ca0e11fdacbf2db830a6d613da09788056b6ea7c9b5fa17851d575dc695feb",
|
| 139 |
+
"dashboard/src/components/icons/dashboard-icon-building.svg": "489056608adf36a9f512821518af60e80b9f8089d498b82121875b3090496f34",
|
| 140 |
+
"dashboard/src/components/icons/dashboard-icon-calendar.svg": "b6e0e5a4f8220c2e5c0d460f9aae103d757fac724f079cfa0e4c9b555ec24aa2",
|
| 141 |
+
"dashboard/src/components/icons/dashboard-icon-chatBubble.svg": "e9258804a30e890a6f66154115bd0fb5ee168c5073db54ca7e232c719fbfdf7c",
|
| 142 |
+
"dashboard/src/components/icons/dashboard-icon-chatgpt.svg": "cba78c1e4e72b24a7db4fc0778cb1cb9e1564850997a43e25735ef75c35b68c4",
|
| 143 |
+
"dashboard/src/components/icons/dashboard-icon-check.svg": "fa1dbd3611b7b9381d473f5fc5aafcaef17480e13d9afcba8138b10262e43fee",
|
| 144 |
+
"dashboard/src/components/icons/dashboard-icon-checkboxChecked.svg": "fff85250d9f1edbac7a61d23e5a780b348c76bc58d70fbb2343223876823e69d",
|
| 145 |
+
"dashboard/src/components/icons/dashboard-icon-checkboxUnchecked.svg": "e202fd75b51a08be2bc3ff7e47fe883c0b8f45d9eb877d7684f19660223795b5",
|
| 146 |
+
"dashboard/src/components/icons/dashboard-icon-chevronDown.svg": "d0e76111ab03cc7790eda06a1184e6622a458d4058baef39c19e3f21c70f601d",
|
| 147 |
+
"dashboard/src/components/icons/dashboard-icon-chevronLeft.svg": "8ee2e9be16b5aaf8523b0cb2f45266262d14a808c61d8bd4f073ccfa5a5dc948",
|
| 148 |
+
"dashboard/src/components/icons/dashboard-icon-chevronRight.svg": "b140e7a8852d56e0734ffc5d795dd4c62bfdd158c5ff3b6579dcb1bf9916baea",
|
| 149 |
+
"dashboard/src/components/icons/dashboard-icon-close.svg": "5ed5dea467dc8f02cb9d95627d300af8e9e1c7ddac1a117e3d37978732bd7acf",
|
| 150 |
+
"dashboard/src/components/icons/dashboard-icon-convert.svg": "4a76b31c0a2621b5980e5a024b9a0128b30a8e39c4113232ddda295739ddccbc",
|
| 151 |
+
"dashboard/src/components/icons/dashboard-icon-copy.svg": "ce35441b3c8b98cb51a73b3720cf970a2f707aa629cba1a9a8e36c0901e92afb",
|
| 152 |
+
"dashboard/src/components/icons/dashboard-icon-cross.svg": "85f94b605c8e61ab57ce2cc7a9118233c68299594055c86db531d3e3731ba0e5",
|
| 153 |
+
"dashboard/src/components/icons/dashboard-icon-database.svg": "efede7507d2f9dc2efc2f970ba44635f6de45a94860e111652fe27c549eebcf2",
|
| 154 |
+
"dashboard/src/components/icons/dashboard-icon-documentRefresh.svg": "917f75208b97799fa0ead171601b476640bf39cef8abfb4595c4afdd41cb1822",
|
| 155 |
+
"dashboard/src/components/icons/dashboard-icon-download.svg": "1a36951ac27c386de68db6e8fea94b10f94c7b18a8c78078acf3d1cbf3dd5122",
|
| 156 |
+
"dashboard/src/components/icons/dashboard-icon-edit.svg": "6d87e17048723e18d025a78578cbe9bb6c7ae0678d384ab314a4ba4cb30e652a",
|
| 157 |
+
"dashboard/src/components/icons/dashboard-icon-eye.svg": "d4bd76a4bbaaacbbd88ed2b9bbc29c1e510c8c1e591b35b7ea34dec701b9f6b4",
|
| 158 |
+
"dashboard/src/components/icons/dashboard-icon-globe.svg": "6b0d8c4310da06e63f2d9933a4d4d09dbdf5c59736f9c7a9929bd8e2c4cc184f",
|
| 159 |
+
"dashboard/src/components/icons/dashboard-icon-info.svg": "f5bdae0061d89fb8ebe61b99e56afeb74c2eb16acc529735fcd0b432b9f88e70",
|
| 160 |
+
"dashboard/src/components/icons/dashboard-icon-italic.svg": "7bc323dabc86a5a4804df4343228c83d98f844833f9a51949fe4986b2faca2e3",
|
| 161 |
+
"dashboard/src/components/icons/dashboard-icon-link.svg": "eee0f5946f827869adff8b4a7844dcf0f804aeed678f9bb4bce71f8c71cab796",
|
| 162 |
+
"dashboard/src/components/icons/dashboard-icon-lock.svg": "3e29a543cd126e32581fe676f447c51552599cf39d23a898c66145d10afdbe10",
|
| 163 |
+
"dashboard/src/components/icons/dashboard-icon-monitor.svg": "f72107e48efee8a64f9617fff594b4e3a3834793e6b6fe2e9d70f53cd03192eb",
|
| 164 |
+
"dashboard/src/components/icons/dashboard-icon-moon.svg": "fd4904e4b3b937ab24e126d856fbea4c36e1dbc7598702289316640b01c1cfc4",
|
| 165 |
+
"dashboard/src/components/icons/dashboard-icon-more.svg": "6239574c52f752c2f56798078c707e7fb13b11b28d6ba3702d3f01444fb8744e",
|
| 166 |
+
"dashboard/src/components/icons/dashboard-icon-palette.svg": "29b4e9c8dd944d6cd597204a02d38cada61b53efd8f192bde0e5e5ca93837aeb",
|
| 167 |
+
"dashboard/src/components/icons/dashboard-icon-plus.svg": "6be74c224110551d27eaeb946e3230ea6f873fc183694fb2f029a98e029d6002",
|
| 168 |
+
"dashboard/src/components/icons/dashboard-icon-refresh.svg": "917f75208b97799fa0ead171601b476640bf39cef8abfb4595c4afdd41cb1822",
|
| 169 |
+
"dashboard/src/components/icons/dashboard-icon-remix.svg": "b15cea131c81cc4bf22389ec4d9af1c509e8e5a3b6cf6bd3efd2517dfb19c580",
|
| 170 |
+
"dashboard/src/components/icons/dashboard-icon-search.svg": "50f34bb3c31c88f067ddef77ee905d169c174115f3902efb96714385d03a1365",
|
| 171 |
+
"dashboard/src/components/icons/dashboard-icon-sendUp.svg": "01bab7cee85f6f8d10792872b240854f1a3f1ae43166440395229b0fe74abd3b",
|
| 172 |
+
"dashboard/src/components/icons/dashboard-icon-settings.svg": "6167badd421c478ab855eeca26d3ea4762af36cc1ee091829140690bb202ac23",
|
| 173 |
+
"dashboard/src/components/icons/dashboard-icon-shieldCheck.svg": "914d474f40a27479ce1277685509d47a1b31d5e9cf46b20304b1240ce426817e",
|
| 174 |
+
"dashboard/src/components/icons/dashboard-icon-sites.svg": "200345e38648750c5a3943bbca030e25c82b0162a4d22e2525e5be485a07f02f",
|
| 175 |
+
"dashboard/src/components/icons/dashboard-icon-sliders.svg": "7155043b9fc09130b06da1e2f11c54f0fbdff7ba026c0bb1851fff67ff045549",
|
| 176 |
+
"dashboard/src/components/icons/dashboard-icon-spinner.svg": "922606ecce4da0d88f02e09d1c1b1c4e954bcdd78a2abed56b9c791f3f7807be",
|
| 177 |
+
"dashboard/src/components/icons/dashboard-icon-stop.svg": "bbf3a955167cbe58a8e89c4b9c169015567e3396bbd5ad0425499aa5b5171f67",
|
| 178 |
+
"dashboard/src/components/icons/dashboard-icon-summaryBubble.svg": "b3e045b3418a4ba33c20c785dc7eb3073887e4eb67b7b84976912fd2e886a4b0",
|
| 179 |
+
"dashboard/src/components/icons/dashboard-icon-sun.svg": "744c94ee224f3fa62344164927d56719de26590b32498f0ca13ed297c0fc3b7a",
|
| 180 |
+
"dashboard/src/components/icons/dashboard-icon-textDocument.svg": "a4f7ccc2425115911af1cddddbff83864045aa7cc0add8d22f8135b27a9085f0",
|
| 181 |
+
"dashboard/src/components/icons/dashboard-icon-theme.svg": "29b4e9c8dd944d6cd597204a02d38cada61b53efd8f192bde0e5e5ca93837aeb",
|
| 182 |
+
"dashboard/src/components/icons/dashboard-icon-trash.svg": "3ee541a3937fe1f1d41b607da8e602ecbbfe8a5f60333b82ce8ab67bd7461f8b",
|
| 183 |
+
"dashboard/src/components/icons/dashboard-icon-undo.svg": "bebef36b99f928445155a3f1b2e8b331ca215fafbcb025c2c83ef32d9dd196e3",
|
| 184 |
+
"dashboard/src/components/icons/receipt-icon-chart.svg": "f0a5cc90d98ed7252b6deabb38384303f0014e6f98862616e00645148a2d6872",
|
| 185 |
+
"dashboard/src/components/icons/receipt-icon-document.svg": "3eb5b50ae68bb2b591259f15dfac0c932da21ad848035a0dff5f276fc4aa672c",
|
| 186 |
+
"dashboard/src/components/icons/receipt-icon-file-audio.svg": "d10f139b197624b2ac005606db4800da745c07c2001d890bba41d3f3671cd15d",
|
| 187 |
+
"dashboard/src/components/icons/receipt-icon-file-code.svg": "72c6a797ed6dd0e3a8650e4c978982912505483f919359480afa8ee3d99ef780",
|
| 188 |
+
"dashboard/src/components/icons/receipt-icon-file-image.svg": "5d7f10c0d06473434b93fd8f993728733ad649d9d374830ce2b6b03116066b23",
|
| 189 |
+
"dashboard/src/components/icons/receipt-icon-file-presentation.svg": "d66a94e724adffac73374312f5bacb4c28910bb85669876192df9ffcda66bc78",
|
| 190 |
+
"dashboard/src/components/icons/receipt-icon-file-video.svg": "ebc49ae92ea9ed8484f6d52080b0f205f31e56b993f7a052a14967a38d134b27",
|
| 191 |
+
"dashboard/src/components/icons/receipt-icon-file.svg": "58a0f5a1ea78a0c114fc74c44160c0708c92e41ffd6f14e829173f5fe047b71a",
|
| 192 |
+
"dashboard/src/components/icons/receipt-icon-link.svg": "61b98747b27424feca44c0ff694c445e2ad74228e483b953fea722c55e706acf",
|
| 193 |
+
"dashboard/src/components/icons/receipt-icon-table.svg": "cba9c8de3a1dd0546cad18b09b6907f82bf68ec28d65513219308c40f3d60742",
|
| 194 |
+
"dashboard/src/components/icons/source-icon-github.svg": "1a6f230a6debcc742730be9d8419766eb670b96f454fbefb71ecac89cf64e081",
|
| 195 |
+
"dashboard/src/components/icons/source-icon-google-drive.svg": "4b413acdf0642e710741d531a3c19582a9bec50de64b398b17f3cb7b0ce0fa06",
|
| 196 |
+
"dashboard/src/components/icons/source-icon-google-sheets.svg": "165b4c145808a18f4052dd51bf0e84b68901cd41a89099dbb5a57cfe639bbecf",
|
| 197 |
+
"dashboard/src/components/icons/source-icon-notion.svg": "eef8f46b63fb120abd63ca2e58e7f4be0a230c3e30276e6e438897b66b695508",
|
| 198 |
+
"dashboard/src/components/icons/source-icon-slack.svg": "b5a8d11655966384c3884e011232a2c83ab5f813187e3c0e49d4410b145b65f1",
|
| 199 |
+
"dashboard/src/components/publish-review.css": "0483af589681e7e22b58dbc41d0c39dba4ff6e04f350b04109c14fac0bbd8c9d",
|
| 200 |
+
"dashboard/src/components/section-navigator.css": "841d9893a1b70b3740f548d1a1b535eb707b8152c9ece8854a75e505e0ed3ba7",
|
| 201 |
+
"dashboard/src/components/slider-math.js": "91e4d29a312e30ef03474fff062e8d12310a112d623d3c2cf13c7f8aa20c0320",
|
| 202 |
+
"dashboard/src/components/source-inspector.css": "8f33b97393bbf736360e6b7998af38078d94b23181cc85d7652fee8635813c86",
|
| 203 |
+
"dashboard/src/components/topbar-mode-controls.css": "1b7c542c1fedbd6a469a2ebd5eb445eb39412f7cc1e19b192792c2af3d6829d8",
|
| 204 |
+
"dashboard/src/components/touch-release-trigger.js": "5269c96d07196290c9eaa91397b78aba7f662740a4bc1917479ef0bdb8beafdc",
|
| 205 |
+
"dashboard/src/components/ui.jsx": "d07d561a0876bb899eb16ac68a70781a96fcd6a6427c34b1bc023091eaa472c8",
|
| 206 |
+
"dashboard/src/content/assets/README.md": "1a17117302d00a4301c95b0562c12a244e38efe35aa508831ea404e7051556d7",
|
| 207 |
+
"dashboard/src/content/dashboard/DashboardContent.jsx": "1275b159f7798adcca787e9198fb03715738326dff299fea6e567905aea370b3",
|
| 208 |
+
"dashboard/src/content/dashboard/dashboard.css": "43bc77f582d4ffbb99edc7a84bac8f8405bf6689cdeb4e87f2749a69da392bab",
|
| 209 |
+
"dashboard/src/content/dashboard/loss-lab.css": "30f2f748f09208a942427abb78e18b81596123d727bc96be7ad1aee95d26e9a7",
|
| 210 |
+
"dashboard/src/content/report/ReportContent.jsx": "0af29196a6714b72f895de4acbb70205fddda8ed7fde05245ff7103e86f0fe40",
|
| 211 |
+
"dashboard/src/content/report/report.css": "b0aed6d085aa46b2b4bace26ebcf4120d0c267a74fa5dcc87bdba2a2dff4f88e",
|
| 212 |
+
"dashboard/src/content/shared/README.md": "36ae02985b054edb3e526dd75d89d019c4ac6ec14d70f58b40c83d439c6dbf8f",
|
| 213 |
+
"dashboard/src/content/shared/ReportDisclosure.jsx": "f559abc00fbd4e01f8276d9df8ed2c7db3ea001a0068119c0d82b4243991b746",
|
| 214 |
+
"dashboard/src/content/shared/ReportTaskLink.jsx": "7fc3cabbab44aee60a98b22038842704f7b097d9cb417f38be58133ea4305f88",
|
| 215 |
+
"dashboard/src/content/shared/SortableDashboardLayout.jsx": "e072e1e11812bfc3cac5ebd040f2c0cebbe22f04a9034ce84e3d49e7271f3a99",
|
| 216 |
+
"dashboard/src/content/shared/report-disclosure.css": "64e07e80151cd95e175185510f1c5e20331223bd786f1f12a56c51cc8c6841bd",
|
| 217 |
+
"dashboard/src/content/shared/report-task-link.css": "708b794f8f635ea9328b93d5ed5cdc8a6cca7b04215390ac6eb5616532f7a747",
|
| 218 |
+
"dashboard/src/dashboard-ask.js": "8155067359e92c805691a2d01845b84cd49f15a62fe156b00d9eae85cb3e6a9f",
|
| 219 |
+
"dashboard/src/dashboard-url-state.js": "7548d0752f11d003255649bc7bdb57062c97f6b82014a86c349b06e86355e932",
|
| 220 |
+
"dashboard/src/dashboard-view-state.js": "4c1ad1fc94e563a64716f0587477ba40b0e8c84e92836f7a75a0cfe864a8c225",
|
| 221 |
+
"dashboard/src/data-app-actions.js": "4c9e470ab9a5424168fb64f18ef8d8352035b56a6c79d5043d041b52eb536637",
|
| 222 |
+
"dashboard/src/data-app-context-tools.js": "614a1e5877cac998929ba38cb3c0d703fe3da28c8d11f350e00001bdf816d322",
|
| 223 |
+
"dashboard/src/data-app-handoff.js": "c99ca50617f37efd5171381a2ea126817ecd9c73c6c59283e4ac4e8921250b37",
|
| 224 |
+
"dashboard/src/data-app-image-tools.js": "9201f93c3cfc884ee6573f93eaa6fd5db5d1a48087a8459c220fb92a5500eb5e",
|
| 225 |
+
"dashboard/src/data-app-owner.js": "1d20906e87792e64f7df9ba1aaf95243746bb7528bc244e139407c07d17aad40",
|
| 226 |
+
"dashboard/src/data-app-public.jsx": "57a22be28ed6172c7f0a1f9f2881d3afa3069cd4da9128fdfada8c803ddbba94",
|
| 227 |
+
"dashboard/src/data-app-schedule.js": "fd7bd84121f2e4eeac1a8b5b11b44b181c91a8aa1d91a9ce490f8bd5514ca275",
|
| 228 |
+
"dashboard/src/data-app-worker.js": "acabf5aaa262e38c4f8157aecb9c40e4a810d6e7433cfadca84676b68afcf38f",
|
| 229 |
+
"dashboard/src/data.json": "c905e0d0b48c846cb2d4c6c7e196db76627060a9589fc466c5107fa16b0e3551",
|
| 230 |
+
"dashboard/src/date-range.js": "d6cfe752cd461c32556e3644f780628274e664282f94c434b49a540c979f461c",
|
| 231 |
+
"dashboard/src/foundation.css": "9b503667f9e8451c53940cede8a8855fefe74cb4ea8ad0e0accc8d9584721836",
|
| 232 |
+
"dashboard/src/handoff-preference.js": "521a83c4f57ac7ef55bdb02e45758e7cd4fbd0dee5e7983dc2791d944c6efb5a",
|
| 233 |
+
"dashboard/src/hosted-query-bootstrap.js": "ef1c0d0f8cdce0e1efc0892375283d38d505a2b13ed659859c2cd4e2e6fc77b9",
|
| 234 |
+
"dashboard/src/main.jsx": "cbb6a40a785d8c9a867a7684cdba60c930ff6a3d8eda3137cee458c4bc3a43cc",
|
| 235 |
+
"dashboard/src/object-snapshot-storage.js": "f4b2838453460b409ea080410d549d6f4fe5896fea94cd6be16ea235470dd734",
|
| 236 |
+
"dashboard/src/owner-email.js": "4bf602cf4a5fc05bebbadc0202366c8dec28fc3df621df29efa40a7dd43ac1d2",
|
| 237 |
+
"dashboard/src/prebuilt-runtime-entry.jsx": "821610a53bbbaaee8adccab9a9ab09ee1f2ca859db7346fae0de6c6ba5890f42",
|
| 238 |
+
"dashboard/src/presentation-state.js": "9aafd1df54b454d3b141c46caef320750d2ef733b0570776e3e7676c6581e6f6",
|
| 239 |
+
"dashboard/src/print.css": "8a3f83b3d4b453bc660d87027684e70ce053401c0d327e72247fc90f848966ac",
|
| 240 |
+
"dashboard/src/publish-review.js": "a2de03b6d885f33e6ac4bdaf13a7d5770e37b9d94595a844dd53d72c1121540a",
|
| 241 |
+
"dashboard/src/query-data-store.js": "0dc9edc7302359ee54b8b9c92a8adc7f15694e986461b8046b8b427a9e1ecc65",
|
| 242 |
+
"dashboard/src/refresh-coachmark.js": "07700a3ac6d8e8204982479b35f5b9fd958c7876f7c8cd651cc662f856ee61d6",
|
| 243 |
+
"dashboard/src/report-date.js": "7a29073e2f4498fb81af321c39344952cc08b9c3fe3caee020a908d3914aaed1",
|
| 244 |
+
"dashboard/src/report-follow-up.js": "81f4fee1f7300a10167946a1f430900f92e708c6c0b768790e152b29e54b8aad",
|
| 245 |
+
"dashboard/src/runtime-environment.js": "6f568c79bff45a67571681c0d8ed5f2e6f7450e1af6a01f0dfeaa75ef00d3e4d",
|
| 246 |
+
"dashboard/src/snapshot-storage.js": "58a7a4f0d405a0d1f6bdabdf50e5fe0877ee202354a2f8225bf1ece421a229e1",
|
| 247 |
+
"dashboard/src/source-preview.css": "92b71fb63191feb8a11c788aa76f1c00a1c1f36603dc57b3590384f8adce0690",
|
| 248 |
+
"dashboard/src/source-preview.js": "46be983664c5219ad84c2a8f507bc6aa959d3e9bef308961ddde145ede23f001",
|
| 249 |
+
"dashboard/src/source-provenance.js": "0cc0f174aa47eecbdb9e15bd473432280c880f547f9756e9bd03153f43b4210b",
|
| 250 |
+
"dashboard/src/streaming-json.js": "5fa4ab801f008c755d1d956034b82af9df8ad0ffe8d0178a67d006fa5573a7ce",
|
| 251 |
+
"dashboard/src/styles-foundation.css": "6f29f5247d6b45ed8bec0d4ad9f11f7d571698dec6bbef7e6189b637d9db7b08",
|
| 252 |
+
"dashboard/src/styles.css": "12a2ca74a48280d066eba6c77efe184afbc6c96c6b598782ebb80ae61dd13b03",
|
| 253 |
+
"dashboard/src/theme-picker.css": "b22f11215761446109be855f9d3afcfab80a7da8209c1eba4c48e57b3a20232f",
|
| 254 |
+
"dashboard/src/theme-presets.js": "3eebb82ee338aa0949be479c6ca86bf7c483d5a0e8dcd7ad0935f157aa8b2876",
|
| 255 |
+
"dashboard/src/theme-runtime.js": "e5ffd0fb34db599a30425e43a871312145f9f332a16f6b8d43facbd7466848f0",
|
| 256 |
+
"dashboard/src/theme.css": "8f714846965b075868db607dcca3f0bedb8f7057a999d8f1a95d60bbdfcf6980",
|
| 257 |
+
"dashboard/src/use-data-app-context-tools.js": "98110fa97f332df8e244944416e776a3398df73826885f46e1997b9d30735504",
|
| 258 |
+
"dashboard/src/use-data-app-image-tools.js": "1bff800a840b2771e0f130aad22e5732db2ef34e5b542f822cbb9ed70e3a8fa7",
|
| 259 |
+
"dashboard/src/use-data-app.js": "699f86eabcd0bb506162862e76b81951e4e0c875a1e78c276d39843bc3bb7702",
|
| 260 |
+
"dashboard/src/use-inline-editing.js": "4c4e250b34fcc57299d7c892bededbec648df7b221cc5004b85ae39f72ebf25e",
|
| 261 |
+
"dashboard/src/use-presentation.js": "d8f4a92a74807b6cd9a130927423b0361d6f62f118c71e8aee21bb9826d2d544",
|
| 262 |
+
"dashboard/src/use-section-filters.js": "271e18f770a642064277ddc0d52523acacebc21a35b99788e14778c8dd5193f3",
|
| 263 |
+
"dashboard/src/use-sortable-blocks.js": "5462804b0f62fcfc7fad6a581b1025057f827a368a0c528d218000c7928ba666",
|
| 264 |
+
"dashboard/src/verification-reminder.js": "9c135c75d15ef1a43aa98efd5db51aed44afbacb86206d073608cdb764957bc0",
|
| 265 |
+
"dashboard/src/worker.js": "bc859b3fcb14dc269367d5aecbbea5f6d307a477a607b3e376f992a8748b30f7",
|
| 266 |
+
"dashboard/vite.config.js": "da62d7d91fbf0e75f234a3f8e6d5adf91914babe53926972eeff6ac0f9544e1b",
|
| 267 |
+
"data/LICENSE-TinyStories-CDLA.html": "8fa35e8f27982bdfdb0ba1b099f259801baad2deeb08813aa715d944fbb33bcf",
|
| 268 |
+
"data/manifest.json": "e0f26161595eb9fe4c77880497931e8d85d71216302e200da834aec97a3eb333",
|
| 269 |
+
"data/tinyshakespeare.txt": "86c4e6aa9db7c042ec79f339dcb96d42b0075e16b8fc2e86bf0ca57e2dc565ed",
|
| 270 |
+
"data/tinystories-source.json": "b92764889a7afea621f2094424f92f2ee5c9604b611d505eb1dab93e871945c1",
|
| 271 |
+
"docs/DATA_LICENSES.md": "eab2c7485fc4558ee1daebc703eeb3c0d746ab7f43e40cc9a7c3b05928e9c8c9",
|
| 272 |
+
"docs/OPERATIONS.md": "6cae3020eb3528965931268d00a68dfff9786a0d5fd7766a36effc4fe2328561",
|
| 273 |
+
"docs/PROTOCOL.md": "1b6476e0dfbf3f4cff239415bff5eabd98c8a5ab71a068fb558b5fc1026e9400",
|
| 274 |
+
"docs/REPRODUCE.md": "92c24da765313fd34a14cdc1d16c7005b3fff8116191a07cd79801331e98cc37",
|
| 275 |
+
"docs/RESEARCH_PLAN.md": "7a19bc6c4f413e352c90fb4a54a46f23a47bfa0cef90f49920781bc933d6333c",
|
| 276 |
+
"docs/RESEARCH_REPRODUCE.md": "85a36aa7e7822acc1dfee964110cb47882c766cc2258ac494cc2df3302b759e3",
|
| 277 |
+
"docs/RESEARCH_RESULTS.md": "d11bcf9f6acc8b2fb4b04bed7a1ec4a4f6939017c7f3e621541dddf686a0ddbc",
|
| 278 |
+
"docs/RESULTS.md": "62bf8c94073e6f3d6dcbeb65c587f2b4831605b0933e03800f2006854c4c3878",
|
| 279 |
+
"docs/figures/final-confident-errors.png": "ffa76140ef7859c519ff053b753ee153d35f959e2572f0d6be826ed7dd51bd1f",
|
| 280 |
+
"docs/figures/final-confident-errors.svg": "356ff318a968cec194c45963e4a356d29d306c6c3f37adcda9523765709fdf17",
|
| 281 |
+
"docs/figures/final-learning-curves.png": "6301a655d11e4c949da132ba0448175f3257b6f50fac0271a19f76c4fb1ba81e",
|
| 282 |
+
"docs/figures/final-learning-curves.svg": "6c998ed3cc489fc3de1cf6609ed6cf7f6f97acc6c4ae00aa538e1a1c9893c25f",
|
| 283 |
+
"docs/figures/final-paired-nll.png": "dca841b44450a4207c12d51f0b15363e6ed6da861dbaa4e5759799ff77318037",
|
| 284 |
+
"docs/figures/final-paired-nll.svg": "4343b101d2098c38f651d72c954833191865b13f5369407acac0533565c5c054",
|
| 285 |
+
"docs/figures/scale-tinystories-diagnostics.png": "fd185444d6a9e67de291387145818eff971ec2240104ff03c11b95d019eac18a",
|
| 286 |
+
"docs/figures/scale-tinystories-diagnostics.svg": "9080a418122f7484e6cadf1c302d2b524fb3672f79c8d6325cdd98de05220422",
|
| 287 |
+
"docs/figures/scale-tinystories.png": "8ca07bed2c7ee93001a3954bb52752072ee743b85c9cf67f99860243378609d6",
|
| 288 |
+
"docs/figures/scale-tinystories.svg": "983a6ca961667e4b9604ef769bfe83b86457079c178f7608e50f9796db4cd824",
|
| 289 |
+
"docs/figures/v2-shakespeare-diagnostics.png": "05e39c24ec41e2a91083f4a2a3ea8e84cf5469ce612846178e672e1184fbac6f",
|
| 290 |
+
"docs/figures/v2-shakespeare-diagnostics.svg": "1f4f877fd93b0218ddd234e16d08f1d259092ecf4f1e254554ac1eb6618010c2",
|
| 291 |
+
"docs/figures/v2-shakespeare.png": "d9a8c215c07f14647e9bcdb501a51728f7b4d66d9761e30ddc937816253307fc",
|
| 292 |
+
"docs/figures/v2-shakespeare.svg": "8cdcb1c4e08f421bf72883df3deeb1d8c86c647fb7ce602f7dc779a95819dc41",
|
| 293 |
+
"docs/figures/v2-tinystories-diagnostics.png": "2e1d847decd0f8f4635f412a58dbec2737ec9f72411fb7c2fd9f506752308c4a",
|
| 294 |
+
"docs/figures/v2-tinystories-diagnostics.svg": "2d9a0a18976eb5da643ff705bef1ff5d9491aa398cfa9ac951253119dff0a033",
|
| 295 |
+
"docs/figures/v2-tinystories.png": "4e96941dc925d0ab7b56f9d1377bee6cd7bf158bc4b42f35568c6745f6e4be67",
|
| 296 |
+
"docs/figures/v2-tinystories.svg": "a3888b3595a0b57244788f8cd58f54fc91bf47cfcee1f2b927d66cdd3c6f7c54",
|
| 297 |
+
"experiments/__init__.py": "76fed41f773983690b4e7e54a031cd15990120ec0d3ffcdc4d70bc849ea8ee36",
|
| 298 |
+
"experiments/archive.py": "ec1dca88f63ac097850f3edf608d304adf33acadfcf93f0b8577e205b0c71861",
|
| 299 |
+
"experiments/diagnostics.py": "2d2a07a6a383e233420b865337a145ce8483e0bb60d75834ca40cc416b6aa012",
|
| 300 |
+
"experiments/io.py": "80b00225a4d71693d6ae7e5057bfd978515b76b576fcbbe0fc7b38edf1d23ff8",
|
| 301 |
+
"experiments/losses.py": "9896990b6882b698129ab3d0b2825f7ba5146e33433aefcde4158d2b45326970",
|
| 302 |
+
"experiments/pipeline.py": "a76dbde0a53dce6b9ef4b3121b38e1ac80dce52a5579139bf8c211b5dd42575a",
|
| 303 |
+
"experiments/prepare_stories.py": "26095106261fbc739d92920d49e65eec77b3828ca72ef0515a6c3df85e5d5bc2",
|
| 304 |
+
"experiments/reporting.py": "dc26418b519b9e729622ab0426cce2c64e0818c6f103d3c66bdbfed3a11aefc6",
|
| 305 |
+
"experiments/research.py": "6b94c64f553a5e8f2d9d936d5d85e0974c4dc0b60f72d826cc1cc0ad8903936f",
|
| 306 |
+
"experiments/sample.py": "dc6ed2815de0f3e67cbd777e60a5f9c52633ac77d8f173f1755342db04d5e6d2",
|
| 307 |
+
"experiments/sample_safetensors.py": "e6f30461fd8f8515fd47937359237b9d318c9a089d0a9747006fb2f79276d975",
|
| 308 |
+
"experiments/train.py": "0c2d4bd0cf708a659ab299cb3d294521655bfefb280ddaeb351164c40446c55b",
|
| 309 |
+
"output/pdf/loss-lab-research-report.pdf": "aeabb786f1efc3a35cdfeaeb76ba0851e46af55871f955d1f812fa80c0b61ec0",
|
| 310 |
+
"requirements-report.txt": "2485480cb9090be564943b86813cb5846ecc7a4d99e412d97ba3e7b561a1adff",
|
| 311 |
+
"requirements-research.txt": "1bbfa2cb9c22d87ec6a6d98b1a0475516be0a5e29ef88865f21622510341ead3",
|
| 312 |
+
"requirements.txt": "f54fde6250af67be2c903bc2363344c1e411c53098e356b6c16f80d0070bbb7a",
|
| 313 |
+
"results/.gitkeep": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
| 314 |
+
"results/MODEL_INDEX.json": "e57c1fe5caa0927967b98935648bd73365f9f144dfd6d66bfea92d1691775a3a",
|
| 315 |
+
"results/PROVENANCE.json": "d1513504b23363c6878da324fe7c87557436fd4c681f4e8181a10eaa57375c78",
|
| 316 |
+
"results/VERIFICATION.json": "849458322833bef9405a9d94b48ae4277c25e20fda1d91a91a80914066dee3d5",
|
| 317 |
+
"results/metrics/README.md": "86aa658090bed785b16bf8d15819804a6b364db81c310af5eaabd3cb71464ad5",
|
| 318 |
+
"results/metrics/final-scores.csv": "e469c2b62dbaca3a6ae8463f3c4dc48dc33ff370ab390eb6dbf94fee4feac89f",
|
| 319 |
+
"results/metrics/learning-rate-trials.csv": "bcda34b70c46886ad1e693b0d3e05c638fd088b850591c67acef6568152bc102",
|
| 320 |
+
"results/metrics/samples.jsonl": "93d297bad2951670e1f366153869029d3590cf406f15725bfc42ff0b447cfe50",
|
| 321 |
+
"results/metrics/validation-history.csv": "ff0391a427aca28c47f930e752c738913481dd435e264262739595811051db97",
|
| 322 |
+
"results/records/scale-tinystories/results.json": "9d20376bf112ed1f759e862426f0fb2e19bd28ba5a8e1395ddedc0522323f996",
|
| 323 |
+
"results/records/shakespeare/results.json": "f168fc0c3ecf2135f79fb569df1c69956f3f7014376f69526f92f140afb51854",
|
| 324 |
+
"results/records/tinystories/results.json": "b2a8ae61d7a0d5b6213955967b26248c0302f9ba19a378c4245a8ec19956aac0",
|
| 325 |
+
"results/records/v2-shakespeare/results.json": "b790992d002dd64eb971b5e89f9cd8c2d1801409633bd9a614aebb4f43e48680",
|
| 326 |
+
"results/records/v2-tinystories/results.json": "016fbc73e6a8f6cf7cf2ee952923ec59fe4647eff88e00772c2bf82b3ff68a14",
|
| 327 |
+
"scripts/build_dashboard.py": "a64123e6e0bf8a7912b81ced6643a353869761a822c487541e55c09b7e8bcf7c",
|
| 328 |
+
"scripts/export_figures.py": "99a4e1c4c0127ec178f94268f8beaad0d64e1ea9c3e89c17d2f46616163db129",
|
| 329 |
+
"scripts/package_release.py": "5ca5632c01f96252add70b13c0a593554fa54a18ccbb09ced9cfa70c4b509667",
|
| 330 |
+
"scripts/read_artifact.py": "23f36f8b046f7ca5dfc8938b28a1aaade916cf2f22cbbb621e8784d68e93397a",
|
| 331 |
+
"scripts/research_report.py": "4f54c9b95fa879233b396f1ae0f2b1ad34309a51b90b69a537de7e809941ce1a",
|
| 332 |
+
"scripts/serve.py": "454410bd2bf6486619f2178e931312b65febb843552020462a1c79cb5723f8d8",
|
| 333 |
+
"scripts/verify_results.py": "4e2955dce8633a26665d5aee2c6ef3336c7e5b8dd7e008dcbf938af64cd76b80",
|
| 334 |
+
"tests/test_diagnostics.py": "9effb4c56b28081366f23efc778672e9d19a598a3d92394843ab45463b040125",
|
| 335 |
+
"tests/test_io.py": "f2dfa187327277134e1393d6536f7bf26fd948f113e9e6a4ca603173d5262998",
|
| 336 |
+
"tests/test_losses.py": "d00c6dc9f077b73ce6c4cdef98070a3e3e66f1e9d57f9585af32c161c8b999bc",
|
| 337 |
+
"tests/test_publication_report.py": "4fca5153bd183733e9046a57d48bf58fa0bae7adfc92fd09beca142d5f9c33d5",
|
| 338 |
+
"tests/test_recorded_results.py": "5c37e2544ad31bf23dacbce6021b46da11af2d5987482beecae065522c704c61",
|
| 339 |
+
"tests/test_research.py": "27e9476b7caa5fba7bd0494a47e0c4de40bf18badb65a5494de6813c78da81c4",
|
| 340 |
+
"tests/test_resume.py": "1b728feb426f926ba72c0d18a821fc2f5e0fef9c819e7a1fa12be935be8f0633",
|
| 341 |
+
"tests/test_safe_sample.py": "bcdc909533ec694a3a7faf350dcea0845b91a45952decdec04b4b3fedf824826",
|
| 342 |
+
"tests/test_stories.py": "4fff9f4371f8ccca83fcf09ad17df4cc937bf02821ea23cd1ea74422c2c29ff1",
|
| 343 |
+
"tests/test_sync.py": "91d784c6abbe29b14b7b2a3e0c3e14fdb24b49b474ec3cbab837c10da609ff2c",
|
| 344 |
+
"vendor/nanogpt/LICENSE": "a59ec5cdb1c1e447e5266a014b3e7ded511f8d6e5a08931e931c87490ff821fe",
|
| 345 |
+
"vendor/nanogpt/model.py": "7c01703240dbec5d554527dc666e35b3df8391d0b117fddc07afcf325a21d11c"
|
| 346 |
+
}
|
| 347 |
+
}
|
REPRODUCE.md
CHANGED
|
@@ -24,12 +24,25 @@ To reproduce the original short-pilot baseline, build Dockerfile and run experim
|
|
| 24 |
|
| 25 |
## Verify and regenerate analysis
|
| 26 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 27 |
python3 -m venv .venv
|
| 28 |
.venv/bin/python -m pip install -r requirements-research.txt
|
| 29 |
.venv/bin/python -m pytest tests -q
|
| 30 |
.venv/bin/python -m experiments.reporting --records results/records --output results/report
|
| 31 |
.venv/bin/python scripts/export_figures.py
|
| 32 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 33 |
The checks cover proper scores, analytic logit gradients, native resume, dataset preparation, bounded archive reads and report calculations. GPU trajectories can vary between hardware placements despite paired seeds.
|
| 34 |
|
| 35 |
results/records/ retains the complete five study records. results/metrics/ contains final scores, tuning trials, validation histories and every saved generation. results/MODEL_INDEX.json maps all 42 main models to published files and hashes. Deployment routing metadata has been removed without changing numerical metrics, sample text or model files.
|
|
@@ -38,7 +51,7 @@ results/records/ retains the complete five study records. results/metrics/ conta
|
|
| 38 |
|
| 39 |
From source/ after installing the research requirements, download only one model directory:
|
| 40 |
|
| 41 |
-
hf download ctxnn1/loss-lab-ce-brier \
|
| 42 |
--include 'runs/research/v2-tinystories/models/ce-seed42/*' \
|
| 43 |
--local-dir downloaded
|
| 44 |
python -m experiments.sample_safetensors \
|
|
@@ -47,6 +60,8 @@ From source/ after installing the research requirements, download only one model
|
|
| 47 |
|
| 48 |
Use the matching Brier directory for the other arm. Pin --revision to an exact Hub commit for archival reproduction. New local generations may differ from the original GPU samples; the stored generation records remain available. These are custom nanoGPT weights, not Transformers AutoModel checkpoints.
|
| 49 |
|
|
|
|
|
|
|
| 50 |
## Dashboard
|
| 51 |
|
| 52 |
Open the delivered dashboard.html for the complete embedded snapshot. Keep docs/ beside it for documentation links. The authored UI, theme and reviewed JSON are in dashboard/src/. Rebuilding the editing shell requires the pinned installed Data authoring runtime; training, metrics, standalone figures and the portable HTML do not depend on that editor.
|
|
|
|
| 24 |
|
| 25 |
## Verify and regenerate analysis
|
| 26 |
|
| 27 |
+
From the portable project root, the following command uses only Python's standard library. It reconciles every run, tuning choice, CSV, saved sample, model-index entry and dashboard final score; it also checks RELEASE_MANIFEST.json when present:
|
| 28 |
+
|
| 29 |
+
python3 scripts/verify_results.py
|
| 30 |
+
|
| 31 |
+
To run the numerical tests and regenerate figures:
|
| 32 |
+
|
| 33 |
python3 -m venv .venv
|
| 34 |
.venv/bin/python -m pip install -r requirements-research.txt
|
| 35 |
.venv/bin/python -m pytest tests -q
|
| 36 |
.venv/bin/python -m experiments.reporting --records results/records --output results/report
|
| 37 |
.venv/bin/python scripts/export_figures.py
|
| 38 |
|
| 39 |
+
To rebuild the six-page research report and its three figures:
|
| 40 |
+
|
| 41 |
+
.venv/bin/python -m pip install -r requirements-report.txt
|
| 42 |
+
.venv/bin/python scripts/research_report.py
|
| 43 |
+
|
| 44 |
+
The result is output/pdf/loss-lab-research-report.pdf. Report creation is local and does not start a GPU job.
|
| 45 |
+
|
| 46 |
The checks cover proper scores, analytic logit gradients, native resume, dataset preparation, bounded archive reads and report calculations. GPU trajectories can vary between hardware placements despite paired seeds.
|
| 47 |
|
| 48 |
results/records/ retains the complete five study records. results/metrics/ contains final scores, tuning trials, validation histories and every saved generation. results/MODEL_INDEX.json maps all 42 main models to published files and hashes. Deployment routing metadata has been removed without changing numerical metrics, sample text or model files.
|
|
|
|
| 51 |
|
| 52 |
From source/ after installing the research requirements, download only one model directory:
|
| 53 |
|
| 54 |
+
hf download ctxnn1/loss-lab-ce-brier --revision v2.1.0 \
|
| 55 |
--include 'runs/research/v2-tinystories/models/ce-seed42/*' \
|
| 56 |
--local-dir downloaded
|
| 57 |
python -m experiments.sample_safetensors \
|
|
|
|
| 60 |
|
| 61 |
Use the matching Brier directory for the other arm. Pin --revision to an exact Hub commit for archival reproduction. New local generations may differ from the original GPU samples; the stored generation records remain available. These are custom nanoGPT weights, not Transformers AutoModel checkpoints.
|
| 62 |
|
| 63 |
+
The v2.1.0 release tag pins all published model and source files. The portable loss-lab-v2.1.0.zip download excludes large weights and prepared TinyStories files; its SHA-256 sidecar checks the download. Extract it, enter the loss-lab-v2.1.0 directory, and run scripts/verify_results.py before installing dependencies. To rebuild the same source-only bundle from a Git checkout, use scripts/package_release.py; refreshing its manifest is an explicit maintainer action.
|
| 64 |
+
|
| 65 |
## Dashboard
|
| 66 |
|
| 67 |
Open the delivered dashboard.html for the complete embedded snapshot. Keep docs/ beside it for documentation links. The authored UI, theme and reviewed JSON are in dashboard/src/. Rebuilding the editing shell requires the pinned installed Data authoring runtime; training, metrics, standalone figures and the portable HTML do not depend on that editor.
|
RESEARCH_REPORT.pdf
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:aeabb786f1efc3a35cdfeaeb76ba0851e46af55871f955d1f812fa80c0b61ec0
|
| 3 |
+
size 603411
|
docs/RESEARCH_REPRODUCE.md
CHANGED
|
@@ -24,12 +24,25 @@ To reproduce the original short-pilot baseline, build Dockerfile and run experim
|
|
| 24 |
|
| 25 |
## Verify and regenerate analysis
|
| 26 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 27 |
python3 -m venv .venv
|
| 28 |
.venv/bin/python -m pip install -r requirements-research.txt
|
| 29 |
.venv/bin/python -m pytest tests -q
|
| 30 |
.venv/bin/python -m experiments.reporting --records results/records --output results/report
|
| 31 |
.venv/bin/python scripts/export_figures.py
|
| 32 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 33 |
The checks cover proper scores, analytic logit gradients, native resume, dataset preparation, bounded archive reads and report calculations. GPU trajectories can vary between hardware placements despite paired seeds.
|
| 34 |
|
| 35 |
results/records/ retains the complete five study records. results/metrics/ contains final scores, tuning trials, validation histories and every saved generation. results/MODEL_INDEX.json maps all 42 main models to published files and hashes. Deployment routing metadata has been removed without changing numerical metrics, sample text or model files.
|
|
@@ -38,7 +51,7 @@ results/records/ retains the complete five study records. results/metrics/ conta
|
|
| 38 |
|
| 39 |
From source/ after installing the research requirements, download only one model directory:
|
| 40 |
|
| 41 |
-
hf download ctxnn1/loss-lab-ce-brier \
|
| 42 |
--include 'runs/research/v2-tinystories/models/ce-seed42/*' \
|
| 43 |
--local-dir downloaded
|
| 44 |
python -m experiments.sample_safetensors \
|
|
@@ -47,6 +60,8 @@ From source/ after installing the research requirements, download only one model
|
|
| 47 |
|
| 48 |
Use the matching Brier directory for the other arm. Pin --revision to an exact Hub commit for archival reproduction. New local generations may differ from the original GPU samples; the stored generation records remain available. These are custom nanoGPT weights, not Transformers AutoModel checkpoints.
|
| 49 |
|
|
|
|
|
|
|
| 50 |
## Dashboard
|
| 51 |
|
| 52 |
Open the delivered dashboard.html for the complete embedded snapshot. Keep docs/ beside it for documentation links. The authored UI, theme and reviewed JSON are in dashboard/src/. Rebuilding the editing shell requires the pinned installed Data authoring runtime; training, metrics, standalone figures and the portable HTML do not depend on that editor.
|
|
|
|
| 24 |
|
| 25 |
## Verify and regenerate analysis
|
| 26 |
|
| 27 |
+
From the portable project root, the following command uses only Python's standard library. It reconciles every run, tuning choice, CSV, saved sample, model-index entry and dashboard final score; it also checks RELEASE_MANIFEST.json when present:
|
| 28 |
+
|
| 29 |
+
python3 scripts/verify_results.py
|
| 30 |
+
|
| 31 |
+
To run the numerical tests and regenerate figures:
|
| 32 |
+
|
| 33 |
python3 -m venv .venv
|
| 34 |
.venv/bin/python -m pip install -r requirements-research.txt
|
| 35 |
.venv/bin/python -m pytest tests -q
|
| 36 |
.venv/bin/python -m experiments.reporting --records results/records --output results/report
|
| 37 |
.venv/bin/python scripts/export_figures.py
|
| 38 |
|
| 39 |
+
To rebuild the six-page research report and its three figures:
|
| 40 |
+
|
| 41 |
+
.venv/bin/python -m pip install -r requirements-report.txt
|
| 42 |
+
.venv/bin/python scripts/research_report.py
|
| 43 |
+
|
| 44 |
+
The result is output/pdf/loss-lab-research-report.pdf. Report creation is local and does not start a GPU job.
|
| 45 |
+
|
| 46 |
The checks cover proper scores, analytic logit gradients, native resume, dataset preparation, bounded archive reads and report calculations. GPU trajectories can vary between hardware placements despite paired seeds.
|
| 47 |
|
| 48 |
results/records/ retains the complete five study records. results/metrics/ contains final scores, tuning trials, validation histories and every saved generation. results/MODEL_INDEX.json maps all 42 main models to published files and hashes. Deployment routing metadata has been removed without changing numerical metrics, sample text or model files.
|
|
|
|
| 51 |
|
| 52 |
From source/ after installing the research requirements, download only one model directory:
|
| 53 |
|
| 54 |
+
hf download ctxnn1/loss-lab-ce-brier --revision v2.1.0 \
|
| 55 |
--include 'runs/research/v2-tinystories/models/ce-seed42/*' \
|
| 56 |
--local-dir downloaded
|
| 57 |
python -m experiments.sample_safetensors \
|
|
|
|
| 60 |
|
| 61 |
Use the matching Brier directory for the other arm. Pin --revision to an exact Hub commit for archival reproduction. New local generations may differ from the original GPU samples; the stored generation records remain available. These are custom nanoGPT weights, not Transformers AutoModel checkpoints.
|
| 62 |
|
| 63 |
+
The v2.1.0 release tag pins all published model and source files. The portable loss-lab-v2.1.0.zip download excludes large weights and prepared TinyStories files; its SHA-256 sidecar checks the download. Extract it, enter the loss-lab-v2.1.0 directory, and run scripts/verify_results.py before installing dependencies. To rebuild the same source-only bundle from a Git checkout, use scripts/package_release.py; refreshing its manifest is an explicit maintainer action.
|
| 64 |
+
|
| 65 |
## Dashboard
|
| 66 |
|
| 67 |
Open the delivered dashboard.html for the complete embedded snapshot. Keep docs/ beside it for documentation links. The authored UI, theme and reviewed JSON are in dashboard/src/. Rebuilding the editing shell requires the pinned installed Data authoring runtime; training, metrics, standalone figures and the portable HTML do not depend on that editor.
|
docs/figures/final-confident-errors.png
ADDED
|
docs/figures/final-confident-errors.svg
ADDED
|
|
docs/figures/final-learning-curves.png
ADDED
|
Git LFS Details
|
docs/figures/final-learning-curves.svg
ADDED
|
|
docs/figures/final-paired-nll.png
ADDED
|
docs/figures/final-paired-nll.svg
ADDED
|
|
figures/final-confident-errors.png
ADDED
|
figures/final-confident-errors.svg
ADDED
|
|
figures/final-learning-curves.png
ADDED
|
Git LFS Details
|
figures/final-learning-curves.svg
ADDED
|
|
figures/final-paired-nll.png
ADDED
|
figures/final-paired-nll.svg
ADDED
|
|
loss-lab-v2.1.0.zip
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:9fc5da20f72b0bb584fa260cf642ec9bd476c492d36bde1e48291abea43d1d06
|
| 3 |
+
size 6753705
|
loss-lab-v2.1.0.zip.sha256
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
9fc5da20f72b0bb584fa260cf642ec9bd476c492d36bde1e48291abea43d1d06 loss-lab-v2.1.0.zip
|
source/.gitignore
CHANGED
|
@@ -48,4 +48,5 @@ data/*.bin
|
|
| 48 |
!results/metrics/**
|
| 49 |
!results/MODEL_INDEX.json
|
| 50 |
!results/PROVENANCE.json
|
|
|
|
| 51 |
dashboard/.data-app-prebuilt/
|
|
|
|
| 48 |
!results/metrics/**
|
| 49 |
!results/MODEL_INDEX.json
|
| 50 |
!results/PROVENANCE.json
|
| 51 |
+
!results/VERIFICATION.json
|
| 52 |
dashboard/.data-app-prebuilt/
|
source/CITATION.cff
CHANGED
|
@@ -4,8 +4,8 @@ title: "Loss Lab: Cross Entropy and Brier in nanoGPT"
|
|
| 4 |
authors:
|
| 5 |
- name: "ctxnn1"
|
| 6 |
type: software
|
| 7 |
-
version: "2.
|
| 8 |
-
date-released: "2026-10-
|
| 9 |
license: MIT
|
| 10 |
url: "https://huggingface.co/ctxnn1/loss-lab-ce-brier"
|
| 11 |
repository-code: "https://huggingface.co/ctxnn1/loss-lab-ce-brier"
|
|
|
|
| 4 |
authors:
|
| 5 |
- name: "ctxnn1"
|
| 6 |
type: software
|
| 7 |
+
version: "2.1.0"
|
| 8 |
+
date-released: "2026-10-28"
|
| 9 |
license: MIT
|
| 10 |
url: "https://huggingface.co/ctxnn1/loss-lab-ce-brier"
|
| 11 |
repository-code: "https://huggingface.co/ctxnn1/loss-lab-ce-brier"
|
source/README.md
CHANGED
|
@@ -4,6 +4,8 @@ Reproducible nanoGPT experiments comparing cross entropy and vocabulary-summed B
|
|
| 4 |
|
| 5 |
[Public research release](https://huggingface.co/ctxnn1/loss-lab-ce-brier) · [Expanded results](docs/RESEARCH_RESULTS.md) · [Protocol](docs/PROTOCOL.md)
|
| 6 |
|
|
|
|
|
|
|
| 7 |
The completed project includes 42 main models, 42 learning-rate trials and 1,248 saved samples across Tiny Shakespeare and two TinyStories settings. Expanded studies use full-duration loss-specific tuning and five paired seeds. CE has lower test NLL in all 15 expanded seed pairs; Brier has slightly higher Shakespeare token accuracy. These are exploratory small-model results.
|
| 8 |
|
| 9 |
## Explore
|
|
@@ -14,12 +16,20 @@ Small recorded JSON and machine-readable tables live in results/records/ and res
|
|
| 14 |
|
| 15 |
## Reproduce
|
| 16 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 17 |
python3 -m venv .venv
|
| 18 |
.venv/bin/python -m pip install -r requirements-research.txt
|
| 19 |
.venv/bin/python -m pytest tests -q
|
| 20 |
|
| 21 |
See [reproduction commands](docs/RESEARCH_REPRODUCE.md), [the expanded plan](docs/RESEARCH_PLAN.md), [dataset licenses](docs/DATA_LICENSES.md), and the short [cloud workflow note](docs/OPERATIONS.md).
|
| 22 |
|
|
|
|
|
|
|
| 23 |
The vendored nanoGPT model is pinned to commit 3adf61e154c3fe3fca428ad6bc3818b27a3b8291. Shakespeare uses character tokens; TinyStories uses UTF-8 bytes. Compare losses within a study.
|
| 24 |
|
| 25 |
## Repository scope
|
|
|
|
| 4 |
|
| 5 |
[Public research release](https://huggingface.co/ctxnn1/loss-lab-ce-brier) · [Expanded results](docs/RESEARCH_RESULTS.md) · [Protocol](docs/PROTOCOL.md)
|
| 6 |
|
| 7 |
+
**Completed release: v2.1.0.** [Research report](output/pdf/loss-lab-research-report.pdf) · [Portable project download](https://huggingface.co/ctxnn1/loss-lab-ce-brier/resolve/v2.1.0/loss-lab-v2.1.0.zip?download=true)
|
| 8 |
+
|
| 9 |
The completed project includes 42 main models, 42 learning-rate trials and 1,248 saved samples across Tiny Shakespeare and two TinyStories settings. Expanded studies use full-duration loss-specific tuning and five paired seeds. CE has lower test NLL in all 15 expanded seed pairs; Brier has slightly higher Shakespeare token accuracy. These are exploratory small-model results.
|
| 10 |
|
| 11 |
## Explore
|
|
|
|
| 16 |
|
| 17 |
## Reproduce
|
| 18 |
|
| 19 |
+
Verify the delivered records and file integrity using Python's standard library, with no GPU, account or installed ML dependencies:
|
| 20 |
+
|
| 21 |
+
python3 scripts/verify_results.py
|
| 22 |
+
|
| 23 |
+
To run the tests or reproduce training:
|
| 24 |
+
|
| 25 |
python3 -m venv .venv
|
| 26 |
.venv/bin/python -m pip install -r requirements-research.txt
|
| 27 |
.venv/bin/python -m pytest tests -q
|
| 28 |
|
| 29 |
See [reproduction commands](docs/RESEARCH_REPRODUCE.md), [the expanded plan](docs/RESEARCH_PLAN.md), [dataset licenses](docs/DATA_LICENSES.md), and the short [cloud workflow note](docs/OPERATIONS.md).
|
| 30 |
|
| 31 |
+
The portable download includes the report, complete source, interactive dashboard, figures and small recorded results. Large weights remain in the public release. Pin downloads to the v2.1.0 tag; RELEASE_MANIFEST.json checks the portable project and FILES_SHA256.json in the Hub release checks its published artifacts.
|
| 32 |
+
|
| 33 |
The vendored nanoGPT model is pinned to commit 3adf61e154c3fe3fca428ad6bc3818b27a3b8291. Shakespeare uses character tokens; TinyStories uses UTF-8 bytes. Compare losses within a study.
|
| 34 |
|
| 35 |
## Repository scope
|
source/RELEASE_MANIFEST.json
ADDED
|
@@ -0,0 +1,347 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"schema_version": 1,
|
| 3 |
+
"version": "2.1.0",
|
| 4 |
+
"scope": "Portable project and source bundle. Hub source lives under source/; published model hashes are in FILES_SHA256.json.",
|
| 5 |
+
"files": {
|
| 6 |
+
".dockerignore": "86028321e99bdf0855642a99556b9255c97f4a61ee2de4e1013d5303fbc10135",
|
| 7 |
+
".gitignore": "971fa38bf06b07f1df61e3f556d60eaabf7eef6c26389f5b24886c47fab92eb6",
|
| 8 |
+
"CITATION.cff": "65a13fa1797ec905388ef48b0ee2619f790f534a7c6bb0d79e1379d0f2750f00",
|
| 9 |
+
"Dockerfile": "e5698d382aa237b72b2ef83e685b775a3b7c919a97ca6ebab03e17fa66c4c138",
|
| 10 |
+
"LICENSE": "b174e6faf4c63ad0b6f988595deea7dd0bb171b3d922b9f9b0c627e0db38da9d",
|
| 11 |
+
"README.md": "8e78ba4f9e9e57ad359fb6d67b20f7ec74c68467a1d1bfe1034f713e488a2d71",
|
| 12 |
+
"Research.Dockerfile": "610c67cec90b98f9c3fc1a6e5e4f6d50615574e40f3fa06d28199313c583ba07",
|
| 13 |
+
"VERSION": "c89b87c262e9d5ffd20e73aac74a1772adcc9f5a21682cc33adcf5086e5fef5c",
|
| 14 |
+
"configs/comparison.json": "886698567ab39bf9f447bdef2b12f39ac3d76ce34eeffe18ce98b555468ecf13",
|
| 15 |
+
"configs/research-plan.json": "d0d8bebf96ad6ae3bf97177ca863011ccf2aa839f4369d8c373f61942677bba3",
|
| 16 |
+
"configs/smoke.json": "252221b8663bb2ad61c4f8aa9276bec7a32a179a1cb3a2821231b9f012f36fe7",
|
| 17 |
+
"configs/tinystories.json": "c10e9c38e7ad7472c85333f14198dffc366877b462c6d031ec49efb42bd05a97",
|
| 18 |
+
"dashboard.html": "c747189c03a14b7aeb90271d6a2ba41003fc9ceefa6aeb3a09c1598f697da59a",
|
| 19 |
+
"dashboard/AGENTS.md": "215baf947a82508f9aa349acce5fb747e43aaf874ddf7b9b11436b80fab50240",
|
| 20 |
+
"dashboard/docs/components/README.md": "c24c56d48a2b491a0a648ec0beee10f43d12c8d7fe2b5e74d89879fd31879419",
|
| 21 |
+
"dashboard/docs/components/async-data.md": "ddd293d4e1200a3c4814e520443dd9e22c1214b102deef877e0eb7da132cfb7d",
|
| 22 |
+
"dashboard/docs/components/bar-presentations.md": "3ec11931b0d05ec75282d3b23f77b348a271fff4dfad3379890cea35fff9309a",
|
| 23 |
+
"dashboard/docs/components/charts.md": "85f8c4106b1693994590f11d2fc4ef557c8ee00502c3bef1d831171b2cd74217",
|
| 24 |
+
"dashboard/docs/components/comparison-formatting.md": "35faa7cc51b5e7f3a00ee2b155343589b62c645cf9ae4f053118c72c528959e9",
|
| 25 |
+
"dashboard/docs/components/controls.md": "697c4e56b377e535c263220acbf4a4b4c05f8b072a47126051aa85dff8f3ea99",
|
| 26 |
+
"dashboard/docs/components/filtering.md": "7820b3d916b4c3c74243d98be96e819f7bd0a828e466e9621127a32c2bf6c1b9",
|
| 27 |
+
"dashboard/docs/components/funnels.md": "bc6f858194ad820b4b62123191d9603847f4f860ca3428d08816457323f79ed3",
|
| 28 |
+
"dashboard/docs/components/layout.md": "da9013b89a528bfee18235581de33da73d6aefd5695851f3e808d84b53446bd1",
|
| 29 |
+
"dashboard/docs/components/reports.md": "a698727d6993ce703ca4b33749cce9313aece525ce91132f2433f39fe3894cf0",
|
| 30 |
+
"dashboard/docs/components/sortable-layout.md": "fd0f9bfae34a9aa1563e17699a8591f1c24f7579303c176dcb27f45e6dc7bf96",
|
| 31 |
+
"dashboard/docs/components/sources.md": "2e6efcd576ec195c64895ded0aa29d629d94154fcc437828d2288a9440c31202",
|
| 32 |
+
"dashboard/docs/components/tables.md": "bad26c41789c621c24e25748111e20c6a100533477ef582c175a1edca12380f3",
|
| 33 |
+
"dashboard/index.html": "314bb3975bdcd7322067d234f99398b06f609c67c2321554eda742f2338b3c5e",
|
| 34 |
+
"dashboard/package-lock.json": "a018dca90e5f5893c698b9b41ee53f64e91cf0533f5ab3dc86c51b5a95dedf4b",
|
| 35 |
+
"dashboard/package.json": "6ee23dabbf22d64b8091a07b9dc857ff1ce2770e02886baaf68716595db8f14c",
|
| 36 |
+
"dashboard/protected-runtime.json": "5dc277c945090cc81cdc337e48e1b99e98f82c7d99a6c5e23e81bfb206ff5f06",
|
| 37 |
+
"dashboard/scripts/authorize-protected-change.mjs": "9b9f012d65c34a1f9ac4d107ba226f82aadabde72980c2d393c63e9d68eff6a3",
|
| 38 |
+
"dashboard/scripts/protected-file-digest.mjs": "2583e42fafb0d0fab7342b8dca163fe0d6771928dc41c830fbdfdee3af821822",
|
| 39 |
+
"dashboard/scripts/verify-protected-runtime.mjs": "47d95847a9135cd125581a4b994208adc3822cbef4a2c8bfaf562f0d2ef3a9af",
|
| 40 |
+
"dashboard/src/App.jsx": "2f4b8f28c24ee9498c8de670a7f9c7fb79a584c67f67d88b782ec301838cc54b",
|
| 41 |
+
"dashboard/src/DataAppContext.jsx": "309d971e9fd4494b2f704087c81ded8837ec955ae4a57898f54dd776c8fca30f",
|
| 42 |
+
"dashboard/src/DataAppRuntime.jsx": "3008a08c2a79c90a5ea5cb3f91b7f77113dfca1e8c4578bf47c34bd9932bd088",
|
| 43 |
+
"dashboard/src/DataAppShell.jsx": "004aa988679e158e668b8dd8c151869e9b6106cd31eeb33de0b51fc51c107259",
|
| 44 |
+
"dashboard/src/block-layout.js": "385da9c5081f9a24ee3eb8948b87aa7a6c6b0f1b7b37d26c91ae07fb01a81c8b",
|
| 45 |
+
"dashboard/src/build-state.js": "1fe7e56e5e8173e0da5d432600f385b13d9133cbeb243ef26edd97985babf6d8",
|
| 46 |
+
"dashboard/src/card-image.js": "b91c236f6e3b1c1bf5d7ca8085a4378770336b671dc3e36e403efa91995e851c",
|
| 47 |
+
"dashboard/src/chart-export.js": "f3eecf07f28799612c5e5b246e0cbd83d20850eac66599d29a72df7db92a69a3",
|
| 48 |
+
"dashboard/src/chart-image.js": "c48da8343b765813bc1294bcd81967fcd0b2bfe94f18174a1e3d4db6c44d1936",
|
| 49 |
+
"dashboard/src/chart-permalink.js": "de7b01a00bc0d2b478a63f50c0716272af7567283b793d908e2d8750a59a8458",
|
| 50 |
+
"dashboard/src/charting/BarFamilyRenderer.jsx": "235811f05967f5a1931c020b65e9a9ed6faf950c50e3c71a9868d4167a9c52c2",
|
| 51 |
+
"dashboard/src/charting/CategoryAxisTick.jsx": "e9f70ac3997d76125a58221dc0778a3437781947f2ef27722a171f2ea0a66561",
|
| 52 |
+
"dashboard/src/charting/ChartAnnotations.jsx": "8da6f704a1e8850873e99a4f778ebec29215a6df329bbdb11b46b01c09f8a022",
|
| 53 |
+
"dashboard/src/charting/ChartFrame.jsx": "bb0925854283f32cc398144a79e69113e4874018375ddf4e241d3f5fd06ddcf0",
|
| 54 |
+
"dashboard/src/charting/ChartMark.jsx": "bad3bfefaef82395ea67aaef44c75941d6087eb45137214bb78d04b2978565b1",
|
| 55 |
+
"dashboard/src/charting/ChartRenderer.jsx": "2335f9e8a29c38a017d154a14b9149700e5084997791b6756fcae29933978551",
|
| 56 |
+
"dashboard/src/charting/ChartState.jsx": "ad5b28521894d219e36027fcfc2640d0c0b8b290f55b4f6d1215ef2c9f2a7d46",
|
| 57 |
+
"dashboard/src/charting/ChartTooltip.jsx": "51303b729ff7adbf0405e67523a09c6aa89e40e144b61e717103b71b7c39a8bb",
|
| 58 |
+
"dashboard/src/charting/FunnelRenderer.jsx": "1103ec5a1a88f1a14622d5e6e30cf2e9b58d03d9cb6f21f973c62c6e7cd1309f",
|
| 59 |
+
"dashboard/src/charting/HeatmapRenderer.jsx": "2034e2e3d9a6d3c86256de1abbd73da7473401232e777e12d9d2de23c79a84b2",
|
| 60 |
+
"dashboard/src/charting/MetricSparkline.jsx": "9a5aae5cbd27b96baecc406bb69f91fc76cc9d5fc2aaa9e7e356d68d8c7ac08d",
|
| 61 |
+
"dashboard/src/charting/NumericAxes.jsx": "5eb37be4711efdb03eaa70225089fd6c4f4f597d3aa7faf81c3a55793d1aa883",
|
| 62 |
+
"dashboard/src/charting/PieRenderer.jsx": "fc1265bf867154c239ddb14b539c63751ab7716fb19903b535ccd9c06ca8a0cc",
|
| 63 |
+
"dashboard/src/charting/SankeyRenderer.jsx": "48c412a1e6394f152ae6bf8fef5023f76d6347844abb0a3710aa0f48f748a9c2",
|
| 64 |
+
"dashboard/src/charting/SelectedChartRegion.jsx": "1717361a56edb81e2f00bbdc57db66be844d02de43d5ce27cae7cd8f5722b0e7",
|
| 65 |
+
"dashboard/src/charting/TableSparkline.jsx": "466d91f5de2fab7f1fd8654e2ad800c56d0b6d6a71adc058405985a59a918da1",
|
| 66 |
+
"dashboard/src/charting/TemporalXAxis.jsx": "ef2ba3b476b1887416ede87fb577450ec0d54524b54c3cec3e2dbbc659c752d6",
|
| 67 |
+
"dashboard/src/charting/bar-family.js": "c31e44122f8d2e14b3f09bbeabe26fadea115a5488be2311720ff2bc54e7fbda",
|
| 68 |
+
"dashboard/src/charting/chart-annotation-layout.js": "09cd7715da2191c0257ccce4f900141dc4f3c5bf62a83bb5bec04ad23e4e96d2",
|
| 69 |
+
"dashboard/src/charting/chart-annotations.js": "bf8fd4fc8f5d586daa18c315855d9f67083ea2978860b7a5d64b7f713352098c",
|
| 70 |
+
"dashboard/src/charting/chart-data-shape.js": "4c1dea15118a8dffd68bfa3c0b6291a691d1929862a32a02edb8c711dc1fcedc",
|
| 71 |
+
"dashboard/src/charting/chart-editor-state.js": "57e1439926bff4e9aab3847b3e1bf92f1ab5554f53688112da56344c5a9cc0b8",
|
| 72 |
+
"dashboard/src/charting/chart-extrema.js": "ab4bd4a9adb25d2648ac95f8bf6388c5fe9eadbf7115a545925dedd7611a1850",
|
| 73 |
+
"dashboard/src/charting/chart-mark-interactions.js": "d93877eb6ef8324f0109277754e04affac135769a18f2d2d99d51d8382abb726",
|
| 74 |
+
"dashboard/src/charting/chart-overrides.js": "09e15338c86d93f7fb9845757d0ba223f71705d540ec467c18d32df7b10bb8f9",
|
| 75 |
+
"dashboard/src/charting/chart-spec-validation.js": "a293a06bc346734f25742f79d100ce45c45d107ec5c368965f931bf2d7b5c5f8",
|
| 76 |
+
"dashboard/src/charting/chart-theme.js": "21367c8f24bd4122e85efe4bac43e2e6fa8567a0d098cf8d03158dd183342cb9",
|
| 77 |
+
"dashboard/src/charting/chart-transforms.js": "782d55023ec8dddfb99e7c5584c39cc23e102317aa3ca1e4668043c8814c3e86",
|
| 78 |
+
"dashboard/src/charting/experimental-bar-chart.css": "b9117bdd6cd0f441f23b82a6d79fd17fc3e13e2f2003d631afc0827b2cf8174e",
|
| 79 |
+
"dashboard/src/charting/table-data.js": "2e61118fccdba5c565e1995fab213da44750817d9a7da85593776d5793234ef2",
|
| 80 |
+
"dashboard/src/chrome-contrast.js": "f18b05b03ec11c1f405527216ac1dc9c403074c22208bc7534008b8e4062d2e6",
|
| 81 |
+
"dashboard/src/chrome-layout.js": "3027c569c6266762f6d90268df1650768777b1b5cecb1405820d22bbd8588fb7",
|
| 82 |
+
"dashboard/src/components/Chart.jsx": "bb3193138a46e22fa0c3e3bc342fdfa539f03371cf1d628bef624a6a357e7e52",
|
| 83 |
+
"dashboard/src/components/ChartEditor.jsx": "485f6b405d310b11e6e784893971ae78e38d2fa68cd8f8be16a2c459c5be7208",
|
| 84 |
+
"dashboard/src/components/ChartExplorer.jsx": "e23683cddd6efe4d323844fa97cc5a6fdfef665cd7312c5fece80618696c56d3",
|
| 85 |
+
"dashboard/src/components/ChartExportDialog.jsx": "d54792a80ac79f67249d4332b80ef71b3b320d55cc3256b15532bf011dd6045e",
|
| 86 |
+
"dashboard/src/components/Controls.jsx": "d9077aac0dd095dcc26f8accb904ce834db130c4d6700a73ab6732c30c815602",
|
| 87 |
+
"dashboard/src/components/CustomBlockHost.jsx": "b7bfec00a46435291b07d32ff39a2ec65e309aa532902fd94e9b1c72a8994a32",
|
| 88 |
+
"dashboard/src/components/DashboardAsk.jsx": "5664289776e4ed8544ffb45474691908e2bff1c520e88a467b288a26822ac94d",
|
| 89 |
+
"dashboard/src/components/DashboardTabs.jsx": "5490439c56960f12f62cc99bdadcb8d24e60707a0aa901b3225346fb8b1f5f5b",
|
| 90 |
+
"dashboard/src/components/DataAppChrome.jsx": "6eae567b93a5f5c1ca4eccecfbdf3d85398f181e2e7d2f3e3447b6f5ade50233",
|
| 91 |
+
"dashboard/src/components/DataAppHandoffDialog.jsx": "3bd1db7e4c0a5804d2dbed3625b096f3b25b1d4dc8441e8817a278355faea2bb",
|
| 92 |
+
"dashboard/src/components/DataAppLoadingContent.jsx": "bcfec0818ea0c90f75697f35a0f8e5d3b649314ad9daaadaabfecb945d6a3483",
|
| 93 |
+
"dashboard/src/components/DataAppToast.jsx": "1c80d8723f951755c132c5b1e51fab8dafd38cd6312ad7bc9e5a98d4403c2213",
|
| 94 |
+
"dashboard/src/components/DataComponent.jsx": "8b4c886d78d833ca621e9c2d7eaa14e80df550306aa224f936682713a90a96bf",
|
| 95 |
+
"dashboard/src/components/DataTable.jsx": "dbaa4b2de52daefdbe288032efca399fedf9e03f53313746553077e21465adde",
|
| 96 |
+
"dashboard/src/components/DateRangePicker.jsx": "8a2d61e55b89e7b994433d8ca4b2f8ddd86769d741d3b4ccd5d886e55e7d42a2",
|
| 97 |
+
"dashboard/src/components/Dropdown.jsx": "e7761601666fd1a948541502e1ccc1985ebd30673237aecb865208e927533299",
|
| 98 |
+
"dashboard/src/components/EditableText.jsx": "d86a22e16e067f284bd51ae7b96a6d5b0af51b8098f267a0790b0962dfe38ad0",
|
| 99 |
+
"dashboard/src/components/EvidenceChart.jsx": "3b836656e696325fc402535fe7a8dcd95b5e0ada6c3363aa64fc1cb3e1da79c5",
|
| 100 |
+
"dashboard/src/components/ExecutiveSummary.jsx": "375a8bc90881e493690d55838e677877a6ff27b6c585dad9af5dfbf0705c4e38",
|
| 101 |
+
"dashboard/src/components/Icon.jsx": "3181d5f82f887b5a7cf4a1c5b1fcb50d6ffc1a06d082ce9f3f569bc26b4341a6",
|
| 102 |
+
"dashboard/src/components/MetricCard.jsx": "d12e774297ff9e002dc243cfbf3541c54469da98dc24d77c093ad34b326745ac",
|
| 103 |
+
"dashboard/src/components/PublishReviewDialog.jsx": "02894bfb21d21f8605e92230f8553007b2c843c17560bc852375a62c57363d8b",
|
| 104 |
+
"dashboard/src/components/QueryDataBoundary.jsx": "a5229b8f6142652f6ac16bcf35ba10b0753206a54fff2cc74e21565620aec2e0",
|
| 105 |
+
"dashboard/src/components/RefreshSetupCoachmark.jsx": "5007f4f0878b0e6c9c924c47625386ba922aec57dd69c8633996b7d67ca7fc77",
|
| 106 |
+
"dashboard/src/components/RichMarkdown.jsx": "d0afa8e119b0cc3cad380757bb80d6180effee84caa380f415c94d6db8fdb43f",
|
| 107 |
+
"dashboard/src/components/RichTextFormatToolbar.jsx": "3ee14b50554fee37d94e28a9c208188affb4ac66d3c4b33b60fcb49008e2e11b",
|
| 108 |
+
"dashboard/src/components/Section.jsx": "bee8342892fe825b1e208a81b85dfc0f32811698dfb5cf11bc7b7aed46c7c708",
|
| 109 |
+
"dashboard/src/components/SectionNavigator.jsx": "d25fde954fb369abb828872ae842ced37c4713a18908ad80c2e63cb58e57bea3",
|
| 110 |
+
"dashboard/src/components/SegmentedControl.jsx": "34bcc4601dc3538a2c5dae36be7d0b6d81d0059c2b1c53626024cda9feaf2b10",
|
| 111 |
+
"dashboard/src/components/Slider.jsx": "2db4c7b93269d2c80f6ad7b49cefedd02f824e83c4f7dbf5191f48c2b743ee5d",
|
| 112 |
+
"dashboard/src/components/SmoothCardSurface.jsx": "ed917e8cc1f0f59ba49c2085bbc719ce85da62d4c9d0e3aa632f38a1b941cdd1",
|
| 113 |
+
"dashboard/src/components/SortableRegion.jsx": "5a2f9f62f2c3505a4806946f96b48458fe3c158e4b54b8265867bd01721aeffd",
|
| 114 |
+
"dashboard/src/components/SourceInspector.jsx": "7f29201a5cf83472fb62b99b55a192b3ac723c1a7e230553e4c52331c3c225cb",
|
| 115 |
+
"dashboard/src/components/SourcePreviewCardContent.jsx": "0422f3d1bcbc82a72718c75a5dfc5094e87f5698a2c73eafb6568f188902f23a",
|
| 116 |
+
"dashboard/src/components/SourcePreviewLink.jsx": "46e0121daa5ef023774b04ad035e6bb0e59c02efe8cf752400fcc2631244f5c2",
|
| 117 |
+
"dashboard/src/components/SourceProviderIcon.jsx": "fb4ea0956e8410c9820cbb41fcbdc187a9b1a0e8323e643bc24521302ea4b73a",
|
| 118 |
+
"dashboard/src/components/SourcesReceipt.jsx": "9485a522cf62c4ed35e89dcf500344d0ba6618ee41147564d0c6cc46b5174a3d",
|
| 119 |
+
"dashboard/src/components/Switch.jsx": "38010aef242d32133274db12e1d91323204630b47875af874b68cb81bc19b23d",
|
| 120 |
+
"dashboard/src/components/chart-color-utils.js": "87402e606a497cf3d2bbe4262640988f9a2ed70f25c029b2f41fc108e663c2dd",
|
| 121 |
+
"dashboard/src/components/chart-export.css": "5169a041e8e7de337915d5b39f3d6c7208c0c587ef15744f8813308476fa1c4f",
|
| 122 |
+
"dashboard/src/components/contained-ui.jsx": "da4daa991f8df9421a4290ca33709fb8bb055280c0558a4de1153b698472a789",
|
| 123 |
+
"dashboard/src/components/data-app-handoff.css": "6edd7a036016ba2c80c122f1322f3f1f3a01bf333e36c5ebbab79313c870ba05",
|
| 124 |
+
"dashboard/src/components/data-app-loading.css": "8ce37185b00f9a9c12563cec73ebafcd4612230a7f4d5afc09736b6f9c468074",
|
| 125 |
+
"dashboard/src/components/dropdown-model.js": "c70414249e31d44177bdf2c81deb93ae564ccb2833f01e4fefbe37df5d597177",
|
| 126 |
+
"dashboard/src/components/executive-summary.css": "70205776df61151a771da83d7a87dfbc24c4128fc9978270a43d2cbd160911c7",
|
| 127 |
+
"dashboard/src/components/form-controls.css": "4cd65b3a53eef43d1f9b32dd62ebf44555c887ed92aee484dc080ba384349f7b",
|
| 128 |
+
"dashboard/src/components/icons/convert-icon-google-docs.svg": "c5f417c7896dde4a45cf61778f1d66053825bc5fbc75252ebae63b7c0ea48987",
|
| 129 |
+
"dashboard/src/components/icons/convert-icon-google-slides.svg": "233363b561f4152765bdc78a8386ad6f4a4f0afc1e504cedb9962f68a561ccbd",
|
| 130 |
+
"dashboard/src/components/icons/convert-icon-jupyter.svg": "58938f5b71c10a73982ef00caa43a01ceae35b2817df547012e4ae8ed25d2fb6",
|
| 131 |
+
"dashboard/src/components/icons/convert-icon-pdf.svg": "63b5fda9c3657b7b7fb4af31c3d2f16fc19ce8b1ceed2cddf5e4fe12947beae6",
|
| 132 |
+
"dashboard/src/components/icons/convert-icon-powerpoint.svg": "71a7a6a82eda7e671a66cd6c25b5814e39cc5be7a3db8365b0237398eef30978",
|
| 133 |
+
"dashboard/src/components/icons/convert-icon-word.svg": "6db6f1fdfc0805fdf017c319affe5a9b91bf337b52b0bd6a0bec4ecfed3c6b7c",
|
| 134 |
+
"dashboard/src/components/icons/dashboard-icon-alertBell.svg": "bbd96bd8458604bee4ffcaa2a33655cb0aba521f0608d9a02625e80e372e924b",
|
| 135 |
+
"dashboard/src/components/icons/dashboard-icon-arrowDown.svg": "ac89a7e1fd41d146e34d7c15be393a7b829774ffb8fbaa1df378f16bdb3d29e1",
|
| 136 |
+
"dashboard/src/components/icons/dashboard-icon-arrowUp.svg": "14ac5376283ecac668371746948f1dbcc14c1db3d811c81dcd334416ca1d7e1a",
|
| 137 |
+
"dashboard/src/components/icons/dashboard-icon-arrowUpRight.svg": "bcf1918ca943a7b982458fbd0be0c2feb3a517cce3debc551c0afbe2b25617a0",
|
| 138 |
+
"dashboard/src/components/icons/dashboard-icon-bold.svg": "91ca0e11fdacbf2db830a6d613da09788056b6ea7c9b5fa17851d575dc695feb",
|
| 139 |
+
"dashboard/src/components/icons/dashboard-icon-building.svg": "489056608adf36a9f512821518af60e80b9f8089d498b82121875b3090496f34",
|
| 140 |
+
"dashboard/src/components/icons/dashboard-icon-calendar.svg": "b6e0e5a4f8220c2e5c0d460f9aae103d757fac724f079cfa0e4c9b555ec24aa2",
|
| 141 |
+
"dashboard/src/components/icons/dashboard-icon-chatBubble.svg": "e9258804a30e890a6f66154115bd0fb5ee168c5073db54ca7e232c719fbfdf7c",
|
| 142 |
+
"dashboard/src/components/icons/dashboard-icon-chatgpt.svg": "cba78c1e4e72b24a7db4fc0778cb1cb9e1564850997a43e25735ef75c35b68c4",
|
| 143 |
+
"dashboard/src/components/icons/dashboard-icon-check.svg": "fa1dbd3611b7b9381d473f5fc5aafcaef17480e13d9afcba8138b10262e43fee",
|
| 144 |
+
"dashboard/src/components/icons/dashboard-icon-checkboxChecked.svg": "fff85250d9f1edbac7a61d23e5a780b348c76bc58d70fbb2343223876823e69d",
|
| 145 |
+
"dashboard/src/components/icons/dashboard-icon-checkboxUnchecked.svg": "e202fd75b51a08be2bc3ff7e47fe883c0b8f45d9eb877d7684f19660223795b5",
|
| 146 |
+
"dashboard/src/components/icons/dashboard-icon-chevronDown.svg": "d0e76111ab03cc7790eda06a1184e6622a458d4058baef39c19e3f21c70f601d",
|
| 147 |
+
"dashboard/src/components/icons/dashboard-icon-chevronLeft.svg": "8ee2e9be16b5aaf8523b0cb2f45266262d14a808c61d8bd4f073ccfa5a5dc948",
|
| 148 |
+
"dashboard/src/components/icons/dashboard-icon-chevronRight.svg": "b140e7a8852d56e0734ffc5d795dd4c62bfdd158c5ff3b6579dcb1bf9916baea",
|
| 149 |
+
"dashboard/src/components/icons/dashboard-icon-close.svg": "5ed5dea467dc8f02cb9d95627d300af8e9e1c7ddac1a117e3d37978732bd7acf",
|
| 150 |
+
"dashboard/src/components/icons/dashboard-icon-convert.svg": "4a76b31c0a2621b5980e5a024b9a0128b30a8e39c4113232ddda295739ddccbc",
|
| 151 |
+
"dashboard/src/components/icons/dashboard-icon-copy.svg": "ce35441b3c8b98cb51a73b3720cf970a2f707aa629cba1a9a8e36c0901e92afb",
|
| 152 |
+
"dashboard/src/components/icons/dashboard-icon-cross.svg": "85f94b605c8e61ab57ce2cc7a9118233c68299594055c86db531d3e3731ba0e5",
|
| 153 |
+
"dashboard/src/components/icons/dashboard-icon-database.svg": "efede7507d2f9dc2efc2f970ba44635f6de45a94860e111652fe27c549eebcf2",
|
| 154 |
+
"dashboard/src/components/icons/dashboard-icon-documentRefresh.svg": "917f75208b97799fa0ead171601b476640bf39cef8abfb4595c4afdd41cb1822",
|
| 155 |
+
"dashboard/src/components/icons/dashboard-icon-download.svg": "1a36951ac27c386de68db6e8fea94b10f94c7b18a8c78078acf3d1cbf3dd5122",
|
| 156 |
+
"dashboard/src/components/icons/dashboard-icon-edit.svg": "6d87e17048723e18d025a78578cbe9bb6c7ae0678d384ab314a4ba4cb30e652a",
|
| 157 |
+
"dashboard/src/components/icons/dashboard-icon-eye.svg": "d4bd76a4bbaaacbbd88ed2b9bbc29c1e510c8c1e591b35b7ea34dec701b9f6b4",
|
| 158 |
+
"dashboard/src/components/icons/dashboard-icon-globe.svg": "6b0d8c4310da06e63f2d9933a4d4d09dbdf5c59736f9c7a9929bd8e2c4cc184f",
|
| 159 |
+
"dashboard/src/components/icons/dashboard-icon-info.svg": "f5bdae0061d89fb8ebe61b99e56afeb74c2eb16acc529735fcd0b432b9f88e70",
|
| 160 |
+
"dashboard/src/components/icons/dashboard-icon-italic.svg": "7bc323dabc86a5a4804df4343228c83d98f844833f9a51949fe4986b2faca2e3",
|
| 161 |
+
"dashboard/src/components/icons/dashboard-icon-link.svg": "eee0f5946f827869adff8b4a7844dcf0f804aeed678f9bb4bce71f8c71cab796",
|
| 162 |
+
"dashboard/src/components/icons/dashboard-icon-lock.svg": "3e29a543cd126e32581fe676f447c51552599cf39d23a898c66145d10afdbe10",
|
| 163 |
+
"dashboard/src/components/icons/dashboard-icon-monitor.svg": "f72107e48efee8a64f9617fff594b4e3a3834793e6b6fe2e9d70f53cd03192eb",
|
| 164 |
+
"dashboard/src/components/icons/dashboard-icon-moon.svg": "fd4904e4b3b937ab24e126d856fbea4c36e1dbc7598702289316640b01c1cfc4",
|
| 165 |
+
"dashboard/src/components/icons/dashboard-icon-more.svg": "6239574c52f752c2f56798078c707e7fb13b11b28d6ba3702d3f01444fb8744e",
|
| 166 |
+
"dashboard/src/components/icons/dashboard-icon-palette.svg": "29b4e9c8dd944d6cd597204a02d38cada61b53efd8f192bde0e5e5ca93837aeb",
|
| 167 |
+
"dashboard/src/components/icons/dashboard-icon-plus.svg": "6be74c224110551d27eaeb946e3230ea6f873fc183694fb2f029a98e029d6002",
|
| 168 |
+
"dashboard/src/components/icons/dashboard-icon-refresh.svg": "917f75208b97799fa0ead171601b476640bf39cef8abfb4595c4afdd41cb1822",
|
| 169 |
+
"dashboard/src/components/icons/dashboard-icon-remix.svg": "b15cea131c81cc4bf22389ec4d9af1c509e8e5a3b6cf6bd3efd2517dfb19c580",
|
| 170 |
+
"dashboard/src/components/icons/dashboard-icon-search.svg": "50f34bb3c31c88f067ddef77ee905d169c174115f3902efb96714385d03a1365",
|
| 171 |
+
"dashboard/src/components/icons/dashboard-icon-sendUp.svg": "01bab7cee85f6f8d10792872b240854f1a3f1ae43166440395229b0fe74abd3b",
|
| 172 |
+
"dashboard/src/components/icons/dashboard-icon-settings.svg": "6167badd421c478ab855eeca26d3ea4762af36cc1ee091829140690bb202ac23",
|
| 173 |
+
"dashboard/src/components/icons/dashboard-icon-shieldCheck.svg": "914d474f40a27479ce1277685509d47a1b31d5e9cf46b20304b1240ce426817e",
|
| 174 |
+
"dashboard/src/components/icons/dashboard-icon-sites.svg": "200345e38648750c5a3943bbca030e25c82b0162a4d22e2525e5be485a07f02f",
|
| 175 |
+
"dashboard/src/components/icons/dashboard-icon-sliders.svg": "7155043b9fc09130b06da1e2f11c54f0fbdff7ba026c0bb1851fff67ff045549",
|
| 176 |
+
"dashboard/src/components/icons/dashboard-icon-spinner.svg": "922606ecce4da0d88f02e09d1c1b1c4e954bcdd78a2abed56b9c791f3f7807be",
|
| 177 |
+
"dashboard/src/components/icons/dashboard-icon-stop.svg": "bbf3a955167cbe58a8e89c4b9c169015567e3396bbd5ad0425499aa5b5171f67",
|
| 178 |
+
"dashboard/src/components/icons/dashboard-icon-summaryBubble.svg": "b3e045b3418a4ba33c20c785dc7eb3073887e4eb67b7b84976912fd2e886a4b0",
|
| 179 |
+
"dashboard/src/components/icons/dashboard-icon-sun.svg": "744c94ee224f3fa62344164927d56719de26590b32498f0ca13ed297c0fc3b7a",
|
| 180 |
+
"dashboard/src/components/icons/dashboard-icon-textDocument.svg": "a4f7ccc2425115911af1cddddbff83864045aa7cc0add8d22f8135b27a9085f0",
|
| 181 |
+
"dashboard/src/components/icons/dashboard-icon-theme.svg": "29b4e9c8dd944d6cd597204a02d38cada61b53efd8f192bde0e5e5ca93837aeb",
|
| 182 |
+
"dashboard/src/components/icons/dashboard-icon-trash.svg": "3ee541a3937fe1f1d41b607da8e602ecbbfe8a5f60333b82ce8ab67bd7461f8b",
|
| 183 |
+
"dashboard/src/components/icons/dashboard-icon-undo.svg": "bebef36b99f928445155a3f1b2e8b331ca215fafbcb025c2c83ef32d9dd196e3",
|
| 184 |
+
"dashboard/src/components/icons/receipt-icon-chart.svg": "f0a5cc90d98ed7252b6deabb38384303f0014e6f98862616e00645148a2d6872",
|
| 185 |
+
"dashboard/src/components/icons/receipt-icon-document.svg": "3eb5b50ae68bb2b591259f15dfac0c932da21ad848035a0dff5f276fc4aa672c",
|
| 186 |
+
"dashboard/src/components/icons/receipt-icon-file-audio.svg": "d10f139b197624b2ac005606db4800da745c07c2001d890bba41d3f3671cd15d",
|
| 187 |
+
"dashboard/src/components/icons/receipt-icon-file-code.svg": "72c6a797ed6dd0e3a8650e4c978982912505483f919359480afa8ee3d99ef780",
|
| 188 |
+
"dashboard/src/components/icons/receipt-icon-file-image.svg": "5d7f10c0d06473434b93fd8f993728733ad649d9d374830ce2b6b03116066b23",
|
| 189 |
+
"dashboard/src/components/icons/receipt-icon-file-presentation.svg": "d66a94e724adffac73374312f5bacb4c28910bb85669876192df9ffcda66bc78",
|
| 190 |
+
"dashboard/src/components/icons/receipt-icon-file-video.svg": "ebc49ae92ea9ed8484f6d52080b0f205f31e56b993f7a052a14967a38d134b27",
|
| 191 |
+
"dashboard/src/components/icons/receipt-icon-file.svg": "58a0f5a1ea78a0c114fc74c44160c0708c92e41ffd6f14e829173f5fe047b71a",
|
| 192 |
+
"dashboard/src/components/icons/receipt-icon-link.svg": "61b98747b27424feca44c0ff694c445e2ad74228e483b953fea722c55e706acf",
|
| 193 |
+
"dashboard/src/components/icons/receipt-icon-table.svg": "cba9c8de3a1dd0546cad18b09b6907f82bf68ec28d65513219308c40f3d60742",
|
| 194 |
+
"dashboard/src/components/icons/source-icon-github.svg": "1a6f230a6debcc742730be9d8419766eb670b96f454fbefb71ecac89cf64e081",
|
| 195 |
+
"dashboard/src/components/icons/source-icon-google-drive.svg": "4b413acdf0642e710741d531a3c19582a9bec50de64b398b17f3cb7b0ce0fa06",
|
| 196 |
+
"dashboard/src/components/icons/source-icon-google-sheets.svg": "165b4c145808a18f4052dd51bf0e84b68901cd41a89099dbb5a57cfe639bbecf",
|
| 197 |
+
"dashboard/src/components/icons/source-icon-notion.svg": "eef8f46b63fb120abd63ca2e58e7f4be0a230c3e30276e6e438897b66b695508",
|
| 198 |
+
"dashboard/src/components/icons/source-icon-slack.svg": "b5a8d11655966384c3884e011232a2c83ab5f813187e3c0e49d4410b145b65f1",
|
| 199 |
+
"dashboard/src/components/publish-review.css": "0483af589681e7e22b58dbc41d0c39dba4ff6e04f350b04109c14fac0bbd8c9d",
|
| 200 |
+
"dashboard/src/components/section-navigator.css": "841d9893a1b70b3740f548d1a1b535eb707b8152c9ece8854a75e505e0ed3ba7",
|
| 201 |
+
"dashboard/src/components/slider-math.js": "91e4d29a312e30ef03474fff062e8d12310a112d623d3c2cf13c7f8aa20c0320",
|
| 202 |
+
"dashboard/src/components/source-inspector.css": "8f33b97393bbf736360e6b7998af38078d94b23181cc85d7652fee8635813c86",
|
| 203 |
+
"dashboard/src/components/topbar-mode-controls.css": "1b7c542c1fedbd6a469a2ebd5eb445eb39412f7cc1e19b192792c2af3d6829d8",
|
| 204 |
+
"dashboard/src/components/touch-release-trigger.js": "5269c96d07196290c9eaa91397b78aba7f662740a4bc1917479ef0bdb8beafdc",
|
| 205 |
+
"dashboard/src/components/ui.jsx": "d07d561a0876bb899eb16ac68a70781a96fcd6a6427c34b1bc023091eaa472c8",
|
| 206 |
+
"dashboard/src/content/assets/README.md": "1a17117302d00a4301c95b0562c12a244e38efe35aa508831ea404e7051556d7",
|
| 207 |
+
"dashboard/src/content/dashboard/DashboardContent.jsx": "1275b159f7798adcca787e9198fb03715738326dff299fea6e567905aea370b3",
|
| 208 |
+
"dashboard/src/content/dashboard/dashboard.css": "43bc77f582d4ffbb99edc7a84bac8f8405bf6689cdeb4e87f2749a69da392bab",
|
| 209 |
+
"dashboard/src/content/dashboard/loss-lab.css": "30f2f748f09208a942427abb78e18b81596123d727bc96be7ad1aee95d26e9a7",
|
| 210 |
+
"dashboard/src/content/report/ReportContent.jsx": "0af29196a6714b72f895de4acbb70205fddda8ed7fde05245ff7103e86f0fe40",
|
| 211 |
+
"dashboard/src/content/report/report.css": "b0aed6d085aa46b2b4bace26ebcf4120d0c267a74fa5dcc87bdba2a2dff4f88e",
|
| 212 |
+
"dashboard/src/content/shared/README.md": "36ae02985b054edb3e526dd75d89d019c4ac6ec14d70f58b40c83d439c6dbf8f",
|
| 213 |
+
"dashboard/src/content/shared/ReportDisclosure.jsx": "f559abc00fbd4e01f8276d9df8ed2c7db3ea001a0068119c0d82b4243991b746",
|
| 214 |
+
"dashboard/src/content/shared/ReportTaskLink.jsx": "7fc3cabbab44aee60a98b22038842704f7b097d9cb417f38be58133ea4305f88",
|
| 215 |
+
"dashboard/src/content/shared/SortableDashboardLayout.jsx": "e072e1e11812bfc3cac5ebd040f2c0cebbe22f04a9034ce84e3d49e7271f3a99",
|
| 216 |
+
"dashboard/src/content/shared/report-disclosure.css": "64e07e80151cd95e175185510f1c5e20331223bd786f1f12a56c51cc8c6841bd",
|
| 217 |
+
"dashboard/src/content/shared/report-task-link.css": "708b794f8f635ea9328b93d5ed5cdc8a6cca7b04215390ac6eb5616532f7a747",
|
| 218 |
+
"dashboard/src/dashboard-ask.js": "8155067359e92c805691a2d01845b84cd49f15a62fe156b00d9eae85cb3e6a9f",
|
| 219 |
+
"dashboard/src/dashboard-url-state.js": "7548d0752f11d003255649bc7bdb57062c97f6b82014a86c349b06e86355e932",
|
| 220 |
+
"dashboard/src/dashboard-view-state.js": "4c1ad1fc94e563a64716f0587477ba40b0e8c84e92836f7a75a0cfe864a8c225",
|
| 221 |
+
"dashboard/src/data-app-actions.js": "4c9e470ab9a5424168fb64f18ef8d8352035b56a6c79d5043d041b52eb536637",
|
| 222 |
+
"dashboard/src/data-app-context-tools.js": "614a1e5877cac998929ba38cb3c0d703fe3da28c8d11f350e00001bdf816d322",
|
| 223 |
+
"dashboard/src/data-app-handoff.js": "c99ca50617f37efd5171381a2ea126817ecd9c73c6c59283e4ac4e8921250b37",
|
| 224 |
+
"dashboard/src/data-app-image-tools.js": "9201f93c3cfc884ee6573f93eaa6fd5db5d1a48087a8459c220fb92a5500eb5e",
|
| 225 |
+
"dashboard/src/data-app-owner.js": "1d20906e87792e64f7df9ba1aaf95243746bb7528bc244e139407c07d17aad40",
|
| 226 |
+
"dashboard/src/data-app-public.jsx": "57a22be28ed6172c7f0a1f9f2881d3afa3069cd4da9128fdfada8c803ddbba94",
|
| 227 |
+
"dashboard/src/data-app-schedule.js": "fd7bd84121f2e4eeac1a8b5b11b44b181c91a8aa1d91a9ce490f8bd5514ca275",
|
| 228 |
+
"dashboard/src/data-app-worker.js": "acabf5aaa262e38c4f8157aecb9c40e4a810d6e7433cfadca84676b68afcf38f",
|
| 229 |
+
"dashboard/src/data.json": "c905e0d0b48c846cb2d4c6c7e196db76627060a9589fc466c5107fa16b0e3551",
|
| 230 |
+
"dashboard/src/date-range.js": "d6cfe752cd461c32556e3644f780628274e664282f94c434b49a540c979f461c",
|
| 231 |
+
"dashboard/src/foundation.css": "9b503667f9e8451c53940cede8a8855fefe74cb4ea8ad0e0accc8d9584721836",
|
| 232 |
+
"dashboard/src/handoff-preference.js": "521a83c4f57ac7ef55bdb02e45758e7cd4fbd0dee5e7983dc2791d944c6efb5a",
|
| 233 |
+
"dashboard/src/hosted-query-bootstrap.js": "ef1c0d0f8cdce0e1efc0892375283d38d505a2b13ed659859c2cd4e2e6fc77b9",
|
| 234 |
+
"dashboard/src/main.jsx": "cbb6a40a785d8c9a867a7684cdba60c930ff6a3d8eda3137cee458c4bc3a43cc",
|
| 235 |
+
"dashboard/src/object-snapshot-storage.js": "f4b2838453460b409ea080410d549d6f4fe5896fea94cd6be16ea235470dd734",
|
| 236 |
+
"dashboard/src/owner-email.js": "4bf602cf4a5fc05bebbadc0202366c8dec28fc3df621df29efa40a7dd43ac1d2",
|
| 237 |
+
"dashboard/src/prebuilt-runtime-entry.jsx": "821610a53bbbaaee8adccab9a9ab09ee1f2ca859db7346fae0de6c6ba5890f42",
|
| 238 |
+
"dashboard/src/presentation-state.js": "9aafd1df54b454d3b141c46caef320750d2ef733b0570776e3e7676c6581e6f6",
|
| 239 |
+
"dashboard/src/print.css": "8a3f83b3d4b453bc660d87027684e70ce053401c0d327e72247fc90f848966ac",
|
| 240 |
+
"dashboard/src/publish-review.js": "a2de03b6d885f33e6ac4bdaf13a7d5770e37b9d94595a844dd53d72c1121540a",
|
| 241 |
+
"dashboard/src/query-data-store.js": "0dc9edc7302359ee54b8b9c92a8adc7f15694e986461b8046b8b427a9e1ecc65",
|
| 242 |
+
"dashboard/src/refresh-coachmark.js": "07700a3ac6d8e8204982479b35f5b9fd958c7876f7c8cd651cc662f856ee61d6",
|
| 243 |
+
"dashboard/src/report-date.js": "7a29073e2f4498fb81af321c39344952cc08b9c3fe3caee020a908d3914aaed1",
|
| 244 |
+
"dashboard/src/report-follow-up.js": "81f4fee1f7300a10167946a1f430900f92e708c6c0b768790e152b29e54b8aad",
|
| 245 |
+
"dashboard/src/runtime-environment.js": "6f568c79bff45a67571681c0d8ed5f2e6f7450e1af6a01f0dfeaa75ef00d3e4d",
|
| 246 |
+
"dashboard/src/snapshot-storage.js": "58a7a4f0d405a0d1f6bdabdf50e5fe0877ee202354a2f8225bf1ece421a229e1",
|
| 247 |
+
"dashboard/src/source-preview.css": "92b71fb63191feb8a11c788aa76f1c00a1c1f36603dc57b3590384f8adce0690",
|
| 248 |
+
"dashboard/src/source-preview.js": "46be983664c5219ad84c2a8f507bc6aa959d3e9bef308961ddde145ede23f001",
|
| 249 |
+
"dashboard/src/source-provenance.js": "0cc0f174aa47eecbdb9e15bd473432280c880f547f9756e9bd03153f43b4210b",
|
| 250 |
+
"dashboard/src/streaming-json.js": "5fa4ab801f008c755d1d956034b82af9df8ad0ffe8d0178a67d006fa5573a7ce",
|
| 251 |
+
"dashboard/src/styles-foundation.css": "6f29f5247d6b45ed8bec0d4ad9f11f7d571698dec6bbef7e6189b637d9db7b08",
|
| 252 |
+
"dashboard/src/styles.css": "12a2ca74a48280d066eba6c77efe184afbc6c96c6b598782ebb80ae61dd13b03",
|
| 253 |
+
"dashboard/src/theme-picker.css": "b22f11215761446109be855f9d3afcfab80a7da8209c1eba4c48e57b3a20232f",
|
| 254 |
+
"dashboard/src/theme-presets.js": "3eebb82ee338aa0949be479c6ca86bf7c483d5a0e8dcd7ad0935f157aa8b2876",
|
| 255 |
+
"dashboard/src/theme-runtime.js": "e5ffd0fb34db599a30425e43a871312145f9f332a16f6b8d43facbd7466848f0",
|
| 256 |
+
"dashboard/src/theme.css": "8f714846965b075868db607dcca3f0bedb8f7057a999d8f1a95d60bbdfcf6980",
|
| 257 |
+
"dashboard/src/use-data-app-context-tools.js": "98110fa97f332df8e244944416e776a3398df73826885f46e1997b9d30735504",
|
| 258 |
+
"dashboard/src/use-data-app-image-tools.js": "1bff800a840b2771e0f130aad22e5732db2ef34e5b542f822cbb9ed70e3a8fa7",
|
| 259 |
+
"dashboard/src/use-data-app.js": "699f86eabcd0bb506162862e76b81951e4e0c875a1e78c276d39843bc3bb7702",
|
| 260 |
+
"dashboard/src/use-inline-editing.js": "4c4e250b34fcc57299d7c892bededbec648df7b221cc5004b85ae39f72ebf25e",
|
| 261 |
+
"dashboard/src/use-presentation.js": "d8f4a92a74807b6cd9a130927423b0361d6f62f118c71e8aee21bb9826d2d544",
|
| 262 |
+
"dashboard/src/use-section-filters.js": "271e18f770a642064277ddc0d52523acacebc21a35b99788e14778c8dd5193f3",
|
| 263 |
+
"dashboard/src/use-sortable-blocks.js": "5462804b0f62fcfc7fad6a581b1025057f827a368a0c528d218000c7928ba666",
|
| 264 |
+
"dashboard/src/verification-reminder.js": "9c135c75d15ef1a43aa98efd5db51aed44afbacb86206d073608cdb764957bc0",
|
| 265 |
+
"dashboard/src/worker.js": "bc859b3fcb14dc269367d5aecbbea5f6d307a477a607b3e376f992a8748b30f7",
|
| 266 |
+
"dashboard/vite.config.js": "da62d7d91fbf0e75f234a3f8e6d5adf91914babe53926972eeff6ac0f9544e1b",
|
| 267 |
+
"data/LICENSE-TinyStories-CDLA.html": "8fa35e8f27982bdfdb0ba1b099f259801baad2deeb08813aa715d944fbb33bcf",
|
| 268 |
+
"data/manifest.json": "e0f26161595eb9fe4c77880497931e8d85d71216302e200da834aec97a3eb333",
|
| 269 |
+
"data/tinyshakespeare.txt": "86c4e6aa9db7c042ec79f339dcb96d42b0075e16b8fc2e86bf0ca57e2dc565ed",
|
| 270 |
+
"data/tinystories-source.json": "b92764889a7afea621f2094424f92f2ee5c9604b611d505eb1dab93e871945c1",
|
| 271 |
+
"docs/DATA_LICENSES.md": "eab2c7485fc4558ee1daebc703eeb3c0d746ab7f43e40cc9a7c3b05928e9c8c9",
|
| 272 |
+
"docs/OPERATIONS.md": "6cae3020eb3528965931268d00a68dfff9786a0d5fd7766a36effc4fe2328561",
|
| 273 |
+
"docs/PROTOCOL.md": "1b6476e0dfbf3f4cff239415bff5eabd98c8a5ab71a068fb558b5fc1026e9400",
|
| 274 |
+
"docs/REPRODUCE.md": "92c24da765313fd34a14cdc1d16c7005b3fff8116191a07cd79801331e98cc37",
|
| 275 |
+
"docs/RESEARCH_PLAN.md": "7a19bc6c4f413e352c90fb4a54a46f23a47bfa0cef90f49920781bc933d6333c",
|
| 276 |
+
"docs/RESEARCH_REPRODUCE.md": "85a36aa7e7822acc1dfee964110cb47882c766cc2258ac494cc2df3302b759e3",
|
| 277 |
+
"docs/RESEARCH_RESULTS.md": "d11bcf9f6acc8b2fb4b04bed7a1ec4a4f6939017c7f3e621541dddf686a0ddbc",
|
| 278 |
+
"docs/RESULTS.md": "62bf8c94073e6f3d6dcbeb65c587f2b4831605b0933e03800f2006854c4c3878",
|
| 279 |
+
"docs/figures/final-confident-errors.png": "ffa76140ef7859c519ff053b753ee153d35f959e2572f0d6be826ed7dd51bd1f",
|
| 280 |
+
"docs/figures/final-confident-errors.svg": "356ff318a968cec194c45963e4a356d29d306c6c3f37adcda9523765709fdf17",
|
| 281 |
+
"docs/figures/final-learning-curves.png": "6301a655d11e4c949da132ba0448175f3257b6f50fac0271a19f76c4fb1ba81e",
|
| 282 |
+
"docs/figures/final-learning-curves.svg": "6c998ed3cc489fc3de1cf6609ed6cf7f6f97acc6c4ae00aa538e1a1c9893c25f",
|
| 283 |
+
"docs/figures/final-paired-nll.png": "dca841b44450a4207c12d51f0b15363e6ed6da861dbaa4e5759799ff77318037",
|
| 284 |
+
"docs/figures/final-paired-nll.svg": "4343b101d2098c38f651d72c954833191865b13f5369407acac0533565c5c054",
|
| 285 |
+
"docs/figures/scale-tinystories-diagnostics.png": "fd185444d6a9e67de291387145818eff971ec2240104ff03c11b95d019eac18a",
|
| 286 |
+
"docs/figures/scale-tinystories-diagnostics.svg": "9080a418122f7484e6cadf1c302d2b524fb3672f79c8d6325cdd98de05220422",
|
| 287 |
+
"docs/figures/scale-tinystories.png": "8ca07bed2c7ee93001a3954bb52752072ee743b85c9cf67f99860243378609d6",
|
| 288 |
+
"docs/figures/scale-tinystories.svg": "983a6ca961667e4b9604ef769bfe83b86457079c178f7608e50f9796db4cd824",
|
| 289 |
+
"docs/figures/v2-shakespeare-diagnostics.png": "05e39c24ec41e2a91083f4a2a3ea8e84cf5469ce612846178e672e1184fbac6f",
|
| 290 |
+
"docs/figures/v2-shakespeare-diagnostics.svg": "1f4f877fd93b0218ddd234e16d08f1d259092ecf4f1e254554ac1eb6618010c2",
|
| 291 |
+
"docs/figures/v2-shakespeare.png": "d9a8c215c07f14647e9bcdb501a51728f7b4d66d9761e30ddc937816253307fc",
|
| 292 |
+
"docs/figures/v2-shakespeare.svg": "8cdcb1c4e08f421bf72883df3deeb1d8c86c647fb7ce602f7dc779a95819dc41",
|
| 293 |
+
"docs/figures/v2-tinystories-diagnostics.png": "2e1d847decd0f8f4635f412a58dbec2737ec9f72411fb7c2fd9f506752308c4a",
|
| 294 |
+
"docs/figures/v2-tinystories-diagnostics.svg": "2d9a0a18976eb5da643ff705bef1ff5d9491aa398cfa9ac951253119dff0a033",
|
| 295 |
+
"docs/figures/v2-tinystories.png": "4e96941dc925d0ab7b56f9d1377bee6cd7bf158bc4b42f35568c6745f6e4be67",
|
| 296 |
+
"docs/figures/v2-tinystories.svg": "a3888b3595a0b57244788f8cd58f54fc91bf47cfcee1f2b927d66cdd3c6f7c54",
|
| 297 |
+
"experiments/__init__.py": "76fed41f773983690b4e7e54a031cd15990120ec0d3ffcdc4d70bc849ea8ee36",
|
| 298 |
+
"experiments/archive.py": "ec1dca88f63ac097850f3edf608d304adf33acadfcf93f0b8577e205b0c71861",
|
| 299 |
+
"experiments/diagnostics.py": "2d2a07a6a383e233420b865337a145ce8483e0bb60d75834ca40cc416b6aa012",
|
| 300 |
+
"experiments/io.py": "80b00225a4d71693d6ae7e5057bfd978515b76b576fcbbe0fc7b38edf1d23ff8",
|
| 301 |
+
"experiments/losses.py": "9896990b6882b698129ab3d0b2825f7ba5146e33433aefcde4158d2b45326970",
|
| 302 |
+
"experiments/pipeline.py": "a76dbde0a53dce6b9ef4b3121b38e1ac80dce52a5579139bf8c211b5dd42575a",
|
| 303 |
+
"experiments/prepare_stories.py": "26095106261fbc739d92920d49e65eec77b3828ca72ef0515a6c3df85e5d5bc2",
|
| 304 |
+
"experiments/reporting.py": "dc26418b519b9e729622ab0426cce2c64e0818c6f103d3c66bdbfed3a11aefc6",
|
| 305 |
+
"experiments/research.py": "6b94c64f553a5e8f2d9d936d5d85e0974c4dc0b60f72d826cc1cc0ad8903936f",
|
| 306 |
+
"experiments/sample.py": "dc6ed2815de0f3e67cbd777e60a5f9c52633ac77d8f173f1755342db04d5e6d2",
|
| 307 |
+
"experiments/sample_safetensors.py": "e6f30461fd8f8515fd47937359237b9d318c9a089d0a9747006fb2f79276d975",
|
| 308 |
+
"experiments/train.py": "0c2d4bd0cf708a659ab299cb3d294521655bfefb280ddaeb351164c40446c55b",
|
| 309 |
+
"output/pdf/loss-lab-research-report.pdf": "aeabb786f1efc3a35cdfeaeb76ba0851e46af55871f955d1f812fa80c0b61ec0",
|
| 310 |
+
"requirements-report.txt": "2485480cb9090be564943b86813cb5846ecc7a4d99e412d97ba3e7b561a1adff",
|
| 311 |
+
"requirements-research.txt": "1bbfa2cb9c22d87ec6a6d98b1a0475516be0a5e29ef88865f21622510341ead3",
|
| 312 |
+
"requirements.txt": "f54fde6250af67be2c903bc2363344c1e411c53098e356b6c16f80d0070bbb7a",
|
| 313 |
+
"results/.gitkeep": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
| 314 |
+
"results/MODEL_INDEX.json": "e57c1fe5caa0927967b98935648bd73365f9f144dfd6d66bfea92d1691775a3a",
|
| 315 |
+
"results/PROVENANCE.json": "d1513504b23363c6878da324fe7c87557436fd4c681f4e8181a10eaa57375c78",
|
| 316 |
+
"results/VERIFICATION.json": "849458322833bef9405a9d94b48ae4277c25e20fda1d91a91a80914066dee3d5",
|
| 317 |
+
"results/metrics/README.md": "86aa658090bed785b16bf8d15819804a6b364db81c310af5eaabd3cb71464ad5",
|
| 318 |
+
"results/metrics/final-scores.csv": "e469c2b62dbaca3a6ae8463f3c4dc48dc33ff370ab390eb6dbf94fee4feac89f",
|
| 319 |
+
"results/metrics/learning-rate-trials.csv": "bcda34b70c46886ad1e693b0d3e05c638fd088b850591c67acef6568152bc102",
|
| 320 |
+
"results/metrics/samples.jsonl": "93d297bad2951670e1f366153869029d3590cf406f15725bfc42ff0b447cfe50",
|
| 321 |
+
"results/metrics/validation-history.csv": "ff0391a427aca28c47f930e752c738913481dd435e264262739595811051db97",
|
| 322 |
+
"results/records/scale-tinystories/results.json": "9d20376bf112ed1f759e862426f0fb2e19bd28ba5a8e1395ddedc0522323f996",
|
| 323 |
+
"results/records/shakespeare/results.json": "f168fc0c3ecf2135f79fb569df1c69956f3f7014376f69526f92f140afb51854",
|
| 324 |
+
"results/records/tinystories/results.json": "b2a8ae61d7a0d5b6213955967b26248c0302f9ba19a378c4245a8ec19956aac0",
|
| 325 |
+
"results/records/v2-shakespeare/results.json": "b790992d002dd64eb971b5e89f9cd8c2d1801409633bd9a614aebb4f43e48680",
|
| 326 |
+
"results/records/v2-tinystories/results.json": "016fbc73e6a8f6cf7cf2ee952923ec59fe4647eff88e00772c2bf82b3ff68a14",
|
| 327 |
+
"scripts/build_dashboard.py": "a64123e6e0bf8a7912b81ced6643a353869761a822c487541e55c09b7e8bcf7c",
|
| 328 |
+
"scripts/export_figures.py": "99a4e1c4c0127ec178f94268f8beaad0d64e1ea9c3e89c17d2f46616163db129",
|
| 329 |
+
"scripts/package_release.py": "5ca5632c01f96252add70b13c0a593554fa54a18ccbb09ced9cfa70c4b509667",
|
| 330 |
+
"scripts/read_artifact.py": "23f36f8b046f7ca5dfc8938b28a1aaade916cf2f22cbbb621e8784d68e93397a",
|
| 331 |
+
"scripts/research_report.py": "4f54c9b95fa879233b396f1ae0f2b1ad34309a51b90b69a537de7e809941ce1a",
|
| 332 |
+
"scripts/serve.py": "454410bd2bf6486619f2178e931312b65febb843552020462a1c79cb5723f8d8",
|
| 333 |
+
"scripts/verify_results.py": "4e2955dce8633a26665d5aee2c6ef3336c7e5b8dd7e008dcbf938af64cd76b80",
|
| 334 |
+
"tests/test_diagnostics.py": "9effb4c56b28081366f23efc778672e9d19a598a3d92394843ab45463b040125",
|
| 335 |
+
"tests/test_io.py": "f2dfa187327277134e1393d6536f7bf26fd948f113e9e6a4ca603173d5262998",
|
| 336 |
+
"tests/test_losses.py": "d00c6dc9f077b73ce6c4cdef98070a3e3e66f1e9d57f9585af32c161c8b999bc",
|
| 337 |
+
"tests/test_publication_report.py": "4fca5153bd183733e9046a57d48bf58fa0bae7adfc92fd09beca142d5f9c33d5",
|
| 338 |
+
"tests/test_recorded_results.py": "5c37e2544ad31bf23dacbce6021b46da11af2d5987482beecae065522c704c61",
|
| 339 |
+
"tests/test_research.py": "27e9476b7caa5fba7bd0494a47e0c4de40bf18badb65a5494de6813c78da81c4",
|
| 340 |
+
"tests/test_resume.py": "1b728feb426f926ba72c0d18a821fc2f5e0fef9c819e7a1fa12be935be8f0633",
|
| 341 |
+
"tests/test_safe_sample.py": "bcdc909533ec694a3a7faf350dcea0845b91a45952decdec04b4b3fedf824826",
|
| 342 |
+
"tests/test_stories.py": "4fff9f4371f8ccca83fcf09ad17df4cc937bf02821ea23cd1ea74422c2c29ff1",
|
| 343 |
+
"tests/test_sync.py": "91d784c6abbe29b14b7b2a3e0c3e14fdb24b49b474ec3cbab837c10da609ff2c",
|
| 344 |
+
"vendor/nanogpt/LICENSE": "a59ec5cdb1c1e447e5266a014b3e7ded511f8d6e5a08931e931c87490ff821fe",
|
| 345 |
+
"vendor/nanogpt/model.py": "7c01703240dbec5d554527dc666e35b3df8391d0b117fddc07afcf325a21d11c"
|
| 346 |
+
}
|
| 347 |
+
}
|
source/VERSION
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
2.1.0
|
source/dashboard.html
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
source/docs/RESEARCH_REPRODUCE.md
CHANGED
|
@@ -24,12 +24,25 @@ To reproduce the original short-pilot baseline, build Dockerfile and run experim
|
|
| 24 |
|
| 25 |
## Verify and regenerate analysis
|
| 26 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 27 |
python3 -m venv .venv
|
| 28 |
.venv/bin/python -m pip install -r requirements-research.txt
|
| 29 |
.venv/bin/python -m pytest tests -q
|
| 30 |
.venv/bin/python -m experiments.reporting --records results/records --output results/report
|
| 31 |
.venv/bin/python scripts/export_figures.py
|
| 32 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 33 |
The checks cover proper scores, analytic logit gradients, native resume, dataset preparation, bounded archive reads and report calculations. GPU trajectories can vary between hardware placements despite paired seeds.
|
| 34 |
|
| 35 |
results/records/ retains the complete five study records. results/metrics/ contains final scores, tuning trials, validation histories and every saved generation. results/MODEL_INDEX.json maps all 42 main models to published files and hashes. Deployment routing metadata has been removed without changing numerical metrics, sample text or model files.
|
|
@@ -38,7 +51,7 @@ results/records/ retains the complete five study records. results/metrics/ conta
|
|
| 38 |
|
| 39 |
From source/ after installing the research requirements, download only one model directory:
|
| 40 |
|
| 41 |
-
hf download ctxnn1/loss-lab-ce-brier \
|
| 42 |
--include 'runs/research/v2-tinystories/models/ce-seed42/*' \
|
| 43 |
--local-dir downloaded
|
| 44 |
python -m experiments.sample_safetensors \
|
|
@@ -47,6 +60,8 @@ From source/ after installing the research requirements, download only one model
|
|
| 47 |
|
| 48 |
Use the matching Brier directory for the other arm. Pin --revision to an exact Hub commit for archival reproduction. New local generations may differ from the original GPU samples; the stored generation records remain available. These are custom nanoGPT weights, not Transformers AutoModel checkpoints.
|
| 49 |
|
|
|
|
|
|
|
| 50 |
## Dashboard
|
| 51 |
|
| 52 |
Open the delivered dashboard.html for the complete embedded snapshot. Keep docs/ beside it for documentation links. The authored UI, theme and reviewed JSON are in dashboard/src/. Rebuilding the editing shell requires the pinned installed Data authoring runtime; training, metrics, standalone figures and the portable HTML do not depend on that editor.
|
|
|
|
| 24 |
|
| 25 |
## Verify and regenerate analysis
|
| 26 |
|
| 27 |
+
From the portable project root, the following command uses only Python's standard library. It reconciles every run, tuning choice, CSV, saved sample, model-index entry and dashboard final score; it also checks RELEASE_MANIFEST.json when present:
|
| 28 |
+
|
| 29 |
+
python3 scripts/verify_results.py
|
| 30 |
+
|
| 31 |
+
To run the numerical tests and regenerate figures:
|
| 32 |
+
|
| 33 |
python3 -m venv .venv
|
| 34 |
.venv/bin/python -m pip install -r requirements-research.txt
|
| 35 |
.venv/bin/python -m pytest tests -q
|
| 36 |
.venv/bin/python -m experiments.reporting --records results/records --output results/report
|
| 37 |
.venv/bin/python scripts/export_figures.py
|
| 38 |
|
| 39 |
+
To rebuild the six-page research report and its three figures:
|
| 40 |
+
|
| 41 |
+
.venv/bin/python -m pip install -r requirements-report.txt
|
| 42 |
+
.venv/bin/python scripts/research_report.py
|
| 43 |
+
|
| 44 |
+
The result is output/pdf/loss-lab-research-report.pdf. Report creation is local and does not start a GPU job.
|
| 45 |
+
|
| 46 |
The checks cover proper scores, analytic logit gradients, native resume, dataset preparation, bounded archive reads and report calculations. GPU trajectories can vary between hardware placements despite paired seeds.
|
| 47 |
|
| 48 |
results/records/ retains the complete five study records. results/metrics/ contains final scores, tuning trials, validation histories and every saved generation. results/MODEL_INDEX.json maps all 42 main models to published files and hashes. Deployment routing metadata has been removed without changing numerical metrics, sample text or model files.
|
|
|
|
| 51 |
|
| 52 |
From source/ after installing the research requirements, download only one model directory:
|
| 53 |
|
| 54 |
+
hf download ctxnn1/loss-lab-ce-brier --revision v2.1.0 \
|
| 55 |
--include 'runs/research/v2-tinystories/models/ce-seed42/*' \
|
| 56 |
--local-dir downloaded
|
| 57 |
python -m experiments.sample_safetensors \
|
|
|
|
| 60 |
|
| 61 |
Use the matching Brier directory for the other arm. Pin --revision to an exact Hub commit for archival reproduction. New local generations may differ from the original GPU samples; the stored generation records remain available. These are custom nanoGPT weights, not Transformers AutoModel checkpoints.
|
| 62 |
|
| 63 |
+
The v2.1.0 release tag pins all published model and source files. The portable loss-lab-v2.1.0.zip download excludes large weights and prepared TinyStories files; its SHA-256 sidecar checks the download. Extract it, enter the loss-lab-v2.1.0 directory, and run scripts/verify_results.py before installing dependencies. To rebuild the same source-only bundle from a Git checkout, use scripts/package_release.py; refreshing its manifest is an explicit maintainer action.
|
| 64 |
+
|
| 65 |
## Dashboard
|
| 66 |
|
| 67 |
Open the delivered dashboard.html for the complete embedded snapshot. Keep docs/ beside it for documentation links. The authored UI, theme and reviewed JSON are in dashboard/src/. Rebuilding the editing shell requires the pinned installed Data authoring runtime; training, metrics, standalone figures and the portable HTML do not depend on that editor.
|
source/docs/figures/final-confident-errors.png
ADDED
|
source/docs/figures/final-confident-errors.svg
ADDED
|
|
source/docs/figures/final-learning-curves.png
ADDED
|
Git LFS Details
|
source/docs/figures/final-learning-curves.svg
ADDED
|
|
source/docs/figures/final-paired-nll.png
ADDED
|
source/docs/figures/final-paired-nll.svg
ADDED
|
|
source/output/pdf/loss-lab-research-report.pdf
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:aeabb786f1efc3a35cdfeaeb76ba0851e46af55871f955d1f812fa80c0b61ec0
|
| 3 |
+
size 603411
|
source/requirements-report.txt
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
-r requirements-research.txt
|
| 2 |
+
reportlab==4.4.9
|
| 3 |
+
pypdf==6.10.0
|
source/results/VERIFICATION.json
ADDED
|
@@ -0,0 +1,295 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"schema_version": 1,
|
| 3 |
+
"release_version": "2.1.0",
|
| 4 |
+
"ok": true,
|
| 5 |
+
"main_models": 42,
|
| 6 |
+
"tuning_runs": 42,
|
| 7 |
+
"training_runs": 84,
|
| 8 |
+
"saved_samples": 1248,
|
| 9 |
+
"validation_records": 1212,
|
| 10 |
+
"expanded_ce_lower_nll_pairs": 15,
|
| 11 |
+
"studies": {
|
| 12 |
+
"shakespeare": {
|
| 13 |
+
"seeds_per_loss": 3,
|
| 14 |
+
"steps": 3000,
|
| 15 |
+
"pilot_steps": 300,
|
| 16 |
+
"unit": "character",
|
| 17 |
+
"selected_learning_rates": {
|
| 18 |
+
"ce": 0.003,
|
| 19 |
+
"brier": 0.001
|
| 20 |
+
},
|
| 21 |
+
"paired_nll_differences": [
|
| 22 |
+
-0.040891035087115,
|
| 23 |
+
-0.07703939280402983,
|
| 24 |
+
-0.09543347791158507
|
| 25 |
+
],
|
| 26 |
+
"paired_nll_mean": -0.0711213019342433,
|
| 27 |
+
"ce_lower_nll_pairs": 0,
|
| 28 |
+
"metrics": {
|
| 29 |
+
"ce": {
|
| 30 |
+
"nll": {
|
| 31 |
+
"mean": 1.7689468973723783,
|
| 32 |
+
"sample_sd": 0.019594316099764218
|
| 33 |
+
},
|
| 34 |
+
"brier": {
|
| 35 |
+
"mean": 0.5955837475495004,
|
| 36 |
+
"sample_sd": 0.002047717360154703
|
| 37 |
+
},
|
| 38 |
+
"accuracy": {
|
| 39 |
+
"mean": 0.5574356758832565,
|
| 40 |
+
"sample_sd": 0.001229405326897443
|
| 41 |
+
},
|
| 42 |
+
"ece": {
|
| 43 |
+
"mean": 0.1465979823562783,
|
| 44 |
+
"sample_sd": 0.004311786561447637
|
| 45 |
+
}
|
| 46 |
+
},
|
| 47 |
+
"brier": {
|
| 48 |
+
"nll": {
|
| 49 |
+
"mean": 1.6978255954381352,
|
| 50 |
+
"sample_sd": 0.008174024052695898
|
| 51 |
+
},
|
| 52 |
+
"brier": {
|
| 53 |
+
"mean": 0.5900582065330118,
|
| 54 |
+
"sample_sd": 0.0006547766508392325
|
| 55 |
+
},
|
| 56 |
+
"accuracy": {
|
| 57 |
+
"mean": 0.5549635176651305,
|
| 58 |
+
"sample_sd": 0.0005867197468279228
|
| 59 |
+
},
|
| 60 |
+
"ece": {
|
| 61 |
+
"mean": 0.12231965395290234,
|
| 62 |
+
"sample_sd": 0.0017560299513301938
|
| 63 |
+
}
|
| 64 |
+
}
|
| 65 |
+
}
|
| 66 |
+
},
|
| 67 |
+
"tinystories": {
|
| 68 |
+
"seeds_per_loss": 3,
|
| 69 |
+
"steps": 3000,
|
| 70 |
+
"pilot_steps": 300,
|
| 71 |
+
"unit": "UTF-8 byte",
|
| 72 |
+
"selected_learning_rates": {
|
| 73 |
+
"ce": 0.003,
|
| 74 |
+
"brier": 0.001
|
| 75 |
+
},
|
| 76 |
+
"paired_nll_differences": [
|
| 77 |
+
0.07343195264683222,
|
| 78 |
+
0.06771696616793177,
|
| 79 |
+
0.0628220526782367
|
| 80 |
+
],
|
| 81 |
+
"paired_nll_mean": 0.06799032383100023,
|
| 82 |
+
"ce_lower_nll_pairs": 3,
|
| 83 |
+
"metrics": {
|
| 84 |
+
"ce": {
|
| 85 |
+
"nll": {
|
| 86 |
+
"mean": 0.6682189277573801,
|
| 87 |
+
"sample_sd": 0.0041052506867668434
|
| 88 |
+
},
|
| 89 |
+
"brier": {
|
| 90 |
+
"mean": 0.28152773529072256,
|
| 91 |
+
"sample_sd": 0.0013534167094511355
|
| 92 |
+
},
|
| 93 |
+
"accuracy": {
|
| 94 |
+
"mean": 0.7872145432692308,
|
| 95 |
+
"sample_sd": 0.0007805434222604225
|
| 96 |
+
},
|
| 97 |
+
"ece": {
|
| 98 |
+
"mean": 0.008419533708825823,
|
| 99 |
+
"sample_sd": 0.0009443544385507369
|
| 100 |
+
}
|
| 101 |
+
},
|
| 102 |
+
"brier": {
|
| 103 |
+
"nll": {
|
| 104 |
+
"mean": 0.7362092515883804,
|
| 105 |
+
"sample_sd": 0.0016854930610361192
|
| 106 |
+
},
|
| 107 |
+
"brier": {
|
| 108 |
+
"mean": 0.28437879477422606,
|
| 109 |
+
"sample_sd": 0.0006947109500440312
|
| 110 |
+
},
|
| 111 |
+
"accuracy": {
|
| 112 |
+
"mean": 0.7873230502136752,
|
| 113 |
+
"sample_sd": 0.0009759116694954518
|
| 114 |
+
},
|
| 115 |
+
"ece": {
|
| 116 |
+
"mean": 0.0124069764938547,
|
| 117 |
+
"sample_sd": 0.0017084594138647687
|
| 118 |
+
}
|
| 119 |
+
}
|
| 120 |
+
}
|
| 121 |
+
},
|
| 122 |
+
"v2-shakespeare": {
|
| 123 |
+
"seeds_per_loss": 5,
|
| 124 |
+
"steps": 3000,
|
| 125 |
+
"pilot_steps": 3000,
|
| 126 |
+
"unit": "character",
|
| 127 |
+
"selected_learning_rates": {
|
| 128 |
+
"ce": 0.0003,
|
| 129 |
+
"brier": 0.002
|
| 130 |
+
},
|
| 131 |
+
"paired_nll_differences": [
|
| 132 |
+
0.13322782821872048,
|
| 133 |
+
0.1069290629537134,
|
| 134 |
+
0.09488664912012212,
|
| 135 |
+
0.13477718075726464,
|
| 136 |
+
0.11693181778624973
|
| 137 |
+
],
|
| 138 |
+
"paired_nll_mean": 0.11735050776721408,
|
| 139 |
+
"ce_lower_nll_pairs": 5,
|
| 140 |
+
"metrics": {
|
| 141 |
+
"ce": {
|
| 142 |
+
"nll": {
|
| 143 |
+
"mean": 1.5637859763979678,
|
| 144 |
+
"sample_sd": 0.011654032333840027
|
| 145 |
+
},
|
| 146 |
+
"brier": {
|
| 147 |
+
"mean": 0.5784239581236744,
|
| 148 |
+
"sample_sd": 0.0007457970539479121
|
| 149 |
+
},
|
| 150 |
+
"accuracy": {
|
| 151 |
+
"mean": 0.5528153801843319,
|
| 152 |
+
"sample_sd": 0.0007425338856798578
|
| 153 |
+
},
|
| 154 |
+
"ece": {
|
| 155 |
+
"mean": 0.08483824757773274,
|
| 156 |
+
"sample_sd": 0.0017860099762222151
|
| 157 |
+
}
|
| 158 |
+
},
|
| 159 |
+
"brier": {
|
| 160 |
+
"nll": {
|
| 161 |
+
"mean": 1.681136484165182,
|
| 162 |
+
"sample_sd": 0.009236958551681444
|
| 163 |
+
},
|
| 164 |
+
"brier": {
|
| 165 |
+
"mean": 0.5859976530090095,
|
| 166 |
+
"sample_sd": 0.0024151379847103167
|
| 167 |
+
},
|
| 168 |
+
"accuracy": {
|
| 169 |
+
"mean": 0.5568656394009217,
|
| 170 |
+
"sample_sd": 0.0013798208913225745
|
| 171 |
+
},
|
| 172 |
+
"ece": {
|
| 173 |
+
"mean": 0.11393599177786892,
|
| 174 |
+
"sample_sd": 0.0035112504044219305
|
| 175 |
+
}
|
| 176 |
+
}
|
| 177 |
+
}
|
| 178 |
+
},
|
| 179 |
+
"v2-tinystories": {
|
| 180 |
+
"seeds_per_loss": 5,
|
| 181 |
+
"steps": 3000,
|
| 182 |
+
"pilot_steps": 3000,
|
| 183 |
+
"unit": "UTF-8 byte",
|
| 184 |
+
"selected_learning_rates": {
|
| 185 |
+
"ce": 0.001,
|
| 186 |
+
"brier": 0.001
|
| 187 |
+
},
|
| 188 |
+
"paired_nll_differences": [
|
| 189 |
+
0.10847842903593252,
|
| 190 |
+
0.10894760423079686,
|
| 191 |
+
0.11731689254777833,
|
| 192 |
+
0.12020073073893112,
|
| 193 |
+
0.11019709232454511
|
| 194 |
+
],
|
| 195 |
+
"paired_nll_mean": 0.11302814977559679,
|
| 196 |
+
"ce_lower_nll_pairs": 5,
|
| 197 |
+
"metrics": {
|
| 198 |
+
"ce": {
|
| 199 |
+
"nll": {
|
| 200 |
+
"mean": 0.6248011450461305,
|
| 201 |
+
"sample_sd": 0.002090470544375812
|
| 202 |
+
},
|
| 203 |
+
"brier": {
|
| 204 |
+
"mean": 0.2644443678152031,
|
| 205 |
+
"sample_sd": 0.000793626066429446
|
| 206 |
+
},
|
| 207 |
+
"accuracy": {
|
| 208 |
+
"mean": 0.8014833733974359,
|
| 209 |
+
"sample_sd": 0.0007005617469015655
|
| 210 |
+
},
|
| 211 |
+
"ece": {
|
| 212 |
+
"mean": 0.009101713022108202,
|
| 213 |
+
"sample_sd": 0.0003585957709725121
|
| 214 |
+
}
|
| 215 |
+
},
|
| 216 |
+
"brier": {
|
| 217 |
+
"nll": {
|
| 218 |
+
"mean": 0.7378292948217272,
|
| 219 |
+
"sample_sd": 0.005117114281099909
|
| 220 |
+
},
|
| 221 |
+
"brier": {
|
| 222 |
+
"mean": 0.2847987379332503,
|
| 223 |
+
"sample_sd": 0.0011952616021325135
|
| 224 |
+
},
|
| 225 |
+
"accuracy": {
|
| 226 |
+
"mean": 0.7871925080128205,
|
| 227 |
+
"sample_sd": 0.0011821594331386626
|
| 228 |
+
},
|
| 229 |
+
"ece": {
|
| 230 |
+
"mean": 0.012437610929973277,
|
| 231 |
+
"sample_sd": 0.0013493219245199195
|
| 232 |
+
}
|
| 233 |
+
}
|
| 234 |
+
}
|
| 235 |
+
},
|
| 236 |
+
"scale-tinystories": {
|
| 237 |
+
"seeds_per_loss": 5,
|
| 238 |
+
"steps": 6000,
|
| 239 |
+
"pilot_steps": 6000,
|
| 240 |
+
"unit": "UTF-8 byte",
|
| 241 |
+
"selected_learning_rates": {
|
| 242 |
+
"ce": 0.001,
|
| 243 |
+
"brier": 0.001
|
| 244 |
+
},
|
| 245 |
+
"paired_nll_differences": [
|
| 246 |
+
0.08257979378075231,
|
| 247 |
+
0.07834481366798185,
|
| 248 |
+
0.08558378573401781,
|
| 249 |
+
0.07915952007232685,
|
| 250 |
+
0.08243812965888175
|
| 251 |
+
],
|
| 252 |
+
"paired_nll_mean": 0.08162120858279212,
|
| 253 |
+
"ce_lower_nll_pairs": 5,
|
| 254 |
+
"metrics": {
|
| 255 |
+
"ce": {
|
| 256 |
+
"nll": {
|
| 257 |
+
"mean": 0.554432105478963,
|
| 258 |
+
"sample_sd": 0.001235368834922302
|
| 259 |
+
},
|
| 260 |
+
"brier": {
|
| 261 |
+
"mean": 0.237371782773437,
|
| 262 |
+
"sample_sd": 0.0002255373511480055
|
| 263 |
+
},
|
| 264 |
+
"accuracy": {
|
| 265 |
+
"mean": 0.8229076522435897,
|
| 266 |
+
"sample_sd": 0.00014028694516760552
|
| 267 |
+
},
|
| 268 |
+
"ece": {
|
| 269 |
+
"mean": 0.009006771796699375,
|
| 270 |
+
"sample_sd": 0.0010081384819452827
|
| 271 |
+
}
|
| 272 |
+
},
|
| 273 |
+
"brier": {
|
| 274 |
+
"nll": {
|
| 275 |
+
"mean": 0.6360533140617552,
|
| 276 |
+
"sample_sd": 0.0022464291715020967
|
| 277 |
+
},
|
| 278 |
+
"brier": {
|
| 279 |
+
"mean": 0.251661273534947,
|
| 280 |
+
"sample_sd": 0.0008282166414229327
|
| 281 |
+
},
|
| 282 |
+
"accuracy": {
|
| 283 |
+
"mean": 0.8133804086538462,
|
| 284 |
+
"sample_sd": 0.0007472720388563424
|
| 285 |
+
},
|
| 286 |
+
"ece": {
|
| 287 |
+
"mean": 0.010041667950811246,
|
| 288 |
+
"sample_sd": 0.0008460008148457641
|
| 289 |
+
}
|
| 290 |
+
}
|
| 291 |
+
}
|
| 292 |
+
}
|
| 293 |
+
},
|
| 294 |
+
"scope": "Recorded metrics, samples, model index and dashboard reconciled. Remote weight bytes are checked separately; no weights downloaded by this command."
|
| 295 |
+
}
|
source/scripts/package_release.py
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Package the verified portable project. No models, network or cloud actions."""
|
| 2 |
+
import argparse
|
| 3 |
+
import hashlib
|
| 4 |
+
import json
|
| 5 |
+
from pathlib import Path, PurePosixPath
|
| 6 |
+
import subprocess
|
| 7 |
+
import sys
|
| 8 |
+
import zipfile
|
| 9 |
+
|
| 10 |
+
ROOT = Path(__file__).resolve().parents[1]
|
| 11 |
+
sys.path.insert(0, str(ROOT))
|
| 12 |
+
from scripts.verify_results import require, verify, verify_manifest
|
| 13 |
+
|
| 14 |
+
|
| 15 |
+
def digest(path):
|
| 16 |
+
return hashlib.sha256(Path(path).read_bytes()).hexdigest()
|
| 17 |
+
|
| 18 |
+
|
| 19 |
+
def write_manifest(root):
|
| 20 |
+
files = subprocess.check_output(["git", "ls-files", "-z"], cwd=root).decode().split("\0")
|
| 21 |
+
ignored = subprocess.check_output(["git", "ls-files", "-ci", "--exclude-standard", "-z"], cwd=root).decode()
|
| 22 |
+
require(not ignored, "Tracked files match private/generated ignore rules")
|
| 23 |
+
mapping = {}
|
| 24 |
+
for name in sorted(filter(None, files)):
|
| 25 |
+
if name == "RELEASE_MANIFEST.json":
|
| 26 |
+
continue
|
| 27 |
+
path = root / name
|
| 28 |
+
require(not path.is_symlink() and path.is_file(), "Missing or linked release file: " + name)
|
| 29 |
+
require(not name.startswith(("artifacts/", ".git/", ".venv/")), "Private release path")
|
| 30 |
+
require(path.suffix not in {".pt", ".safetensors", ".bin", ".zip", ".tar"}, "Large training artifact in source release")
|
| 31 |
+
mapping[name] = digest(path)
|
| 32 |
+
manifest = {"schema_version": 1, "version": (root / "VERSION").read_text().strip(),
|
| 33 |
+
"scope": "Portable project and source bundle. Hub source lives under source/; published model hashes are in FILES_SHA256.json.",
|
| 34 |
+
"files": mapping}
|
| 35 |
+
(root / "RELEASE_MANIFEST.json").write_text(json.dumps(manifest, indent=2) + "\n")
|
| 36 |
+
|
| 37 |
+
|
| 38 |
+
def package(root=ROOT, refresh_manifest=False):
|
| 39 |
+
root = Path(root)
|
| 40 |
+
evidence = verify(root)
|
| 41 |
+
if refresh_manifest:
|
| 42 |
+
write_manifest(root)
|
| 43 |
+
count = verify_manifest(root)
|
| 44 |
+
require(count is not None, "No release manifest. A maintainer must generate it with --refresh-manifest after staging public files.")
|
| 45 |
+
manifest = json.loads((root / "RELEASE_MANIFEST.json").read_text())
|
| 46 |
+
version = manifest["version"]
|
| 47 |
+
require(version == evidence["release_version"], "Release version mismatch")
|
| 48 |
+
target = root / "results/delivery" / ("loss-lab-v" + version + ".zip")
|
| 49 |
+
target.parent.mkdir(parents=True, exist_ok=True)
|
| 50 |
+
prefix = "loss-lab-v" + version + "/"
|
| 51 |
+
with zipfile.ZipFile(target, "w", compression=zipfile.ZIP_DEFLATED, compresslevel=7) as archive:
|
| 52 |
+
for name in sorted([*manifest["files"], "RELEASE_MANIFEST.json"]):
|
| 53 |
+
rel = PurePosixPath(name)
|
| 54 |
+
require(not rel.is_absolute() and ".." not in rel.parts, "Unsafe archive path")
|
| 55 |
+
entry = zipfile.ZipInfo(prefix + name, date_time=(2026, 10, 28, 0, 0, 0))
|
| 56 |
+
entry.create_system = 3
|
| 57 |
+
entry.compress_type = zipfile.ZIP_DEFLATED
|
| 58 |
+
entry.external_attr = 0o100644 << 16
|
| 59 |
+
archive.writestr(entry, (root / name).read_bytes(), compresslevel=7)
|
| 60 |
+
with zipfile.ZipFile(target) as archive:
|
| 61 |
+
require(archive.testzip() is None, "Archive CRC check failed")
|
| 62 |
+
checksum = target.with_suffix(".zip.sha256")
|
| 63 |
+
checksum.write_text(digest(target) + " " + target.name + "\n")
|
| 64 |
+
return {"path": str(target), "bytes": target.stat().st_size, "sha256": digest(target),
|
| 65 |
+
"portable_files": count + 1, "models_indexed": evidence["main_models"], "weights_included": False}
|
| 66 |
+
|
| 67 |
+
|
| 68 |
+
if __name__ == "__main__":
|
| 69 |
+
parser = argparse.ArgumentParser(description=__doc__)
|
| 70 |
+
parser.add_argument("--refresh-manifest", action="store_true")
|
| 71 |
+
args = parser.parse_args()
|
| 72 |
+
print(json.dumps(package(refresh_manifest=args.refresh_manifest)))
|
source/scripts/research_report.py
ADDED
|
@@ -0,0 +1,273 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Create the final research PDF and original figures from verified records."""
|
| 2 |
+
import json
|
| 3 |
+
import os
|
| 4 |
+
from pathlib import Path
|
| 5 |
+
from statistics import mean
|
| 6 |
+
import sys
|
| 7 |
+
|
| 8 |
+
ROOT = Path(__file__).resolve().parents[1]
|
| 9 |
+
sys.path.insert(0, str(ROOT))
|
| 10 |
+
os.environ.setdefault("MPLCONFIGDIR", str(ROOT / "artifacts/matplotlib"))
|
| 11 |
+
os.environ.setdefault("XDG_CACHE_HOME", str(ROOT / "artifacts/cache"))
|
| 12 |
+
from scripts.verify_results import verify
|
| 13 |
+
|
| 14 |
+
import matplotlib
|
| 15 |
+
matplotlib.use("Agg")
|
| 16 |
+
import matplotlib.pyplot as plt
|
| 17 |
+
import numpy as np
|
| 18 |
+
from reportlab.lib import colors
|
| 19 |
+
from reportlab.lib.enums import TA_LEFT, TA_RIGHT
|
| 20 |
+
from reportlab.lib.styles import ParagraphStyle
|
| 21 |
+
from reportlab.pdfbase import pdfmetrics
|
| 22 |
+
from reportlab.pdfbase.ttfonts import TTFont
|
| 23 |
+
from reportlab.pdfgen.canvas import Canvas
|
| 24 |
+
from reportlab.platypus import Paragraph, Table, TableStyle
|
| 25 |
+
from xml.sax.saxutils import escape
|
| 26 |
+
|
| 27 |
+
EXPANDED = ("v2-shakespeare", "v2-tinystories", "scale-tinystories")
|
| 28 |
+
NAMES = {"v2-shakespeare": "Shakespeare", "v2-tinystories": "TinyStories 32 MiB", "scale-tinystories": "TinyStories 64 MiB"}
|
| 29 |
+
CE, BR, INK, MUTED = "#346b98", "#c77d43", "#202b38", "#647182"
|
| 30 |
+
FIGURES = ROOT / "docs/figures"
|
| 31 |
+
OUTPUT = ROOT / "output/pdf/loss-lab-research-report.pdf"
|
| 32 |
+
|
| 33 |
+
|
| 34 |
+
def load_records():
|
| 35 |
+
return {s: json.loads((ROOT / "results/records" / s / "results.json").read_text()) for s in EXPANDED}
|
| 36 |
+
|
| 37 |
+
|
| 38 |
+
def figures(data, evidence):
|
| 39 |
+
FIGURES.mkdir(parents=True, exist_ok=True)
|
| 40 |
+
plt.rcParams.update({"font.family": "DejaVu Sans", "font.size": 10, "axes.spines.top": False,
|
| 41 |
+
"axes.spines.right": False, "axes.labelcolor": MUTED, "text.color": INK,
|
| 42 |
+
"axes.edgecolor": "#ccd4dc", "xtick.color": MUTED, "ytick.color": MUTED,
|
| 43 |
+
"figure.facecolor": "white", "axes.facecolor": "white", "svg.fonttype": "none"})
|
| 44 |
+
fig, axes = plt.subplots(1, 3, figsize=(10.4, 2.5), constrained_layout=True)
|
| 45 |
+
for ax, study in zip(axes, EXPANDED):
|
| 46 |
+
values = evidence["studies"][study]["paired_nll_differences"]
|
| 47 |
+
ax.axvline(0, color="#94a0ac", lw=1, ls=":")
|
| 48 |
+
ax.scatter(values, np.arange(5), color=CE, s=28, zorder=3)
|
| 49 |
+
ax.scatter([mean(values)], [5.3], color=INK, marker="D", s=36, zorder=3)
|
| 50 |
+
ax.set(yticks=[0, 1, 2, 3, 4, 5.3], yticklabels=["42", "1337", "2026", "31415", "27182", "Mean"],
|
| 51 |
+
title=NAMES[study], xlim=(-.008, .155), ylim=(-.5, 5.8))
|
| 52 |
+
ax.invert_yaxis()
|
| 53 |
+
unit = "character" if "shakespeare" in study else "byte"
|
| 54 |
+
ax.set_xlabel("Brier - CE NLL (nats/" + unit + ")", fontsize=8)
|
| 55 |
+
ax.tick_params(axis="both", labelsize=8)
|
| 56 |
+
ax.grid(axis="x", alpha=.15)
|
| 57 |
+
for ext in ["png", "svg"]:
|
| 58 |
+
fig.savefig(FIGURES / ("final-paired-nll." + ext), dpi=200)
|
| 59 |
+
plt.close(fig)
|
| 60 |
+
fig, axes = plt.subplots(3, 2, figsize=(10.3, 9.5), constrained_layout=True)
|
| 61 |
+
for index, study in enumerate(EXPANDED):
|
| 62 |
+
for loss, color, style in [("ce", CE, "-"), ("brier", BR, "--")]:
|
| 63 |
+
runs = [r for r in data[study]["runs"] if r["phase"] == "main" and r["loss"] == loss]
|
| 64 |
+
history = [[h for h in r["history"] if h["step"] > 0] for r in runs]
|
| 65 |
+
x = [h["step"] for h in history[0]]
|
| 66 |
+
for column, metric in enumerate(["nll", "accuracy"]):
|
| 67 |
+
values = np.array([[h[metric] for h in rows] for rows in history])
|
| 68 |
+
if metric == "accuracy":
|
| 69 |
+
values *= 100
|
| 70 |
+
avg, spread = values.mean(0), values.std(0, ddof=1)
|
| 71 |
+
ax = axes[index, column]
|
| 72 |
+
ax.plot(x, avg, color=color, ls=style, lw=2, label="Cross entropy" if loss == "ce" else "Brier")
|
| 73 |
+
ax.fill_between(x, avg - spread, avg + spread, color=color, alpha=.13)
|
| 74 |
+
unit = "character" if "shakespeare" in study else "byte"
|
| 75 |
+
axes[index, 0].set_title(NAMES[study] + " - validation NLL", loc="left")
|
| 76 |
+
axes[index, 0].set_ylabel("Nats / " + unit)
|
| 77 |
+
axes[index, 1].set_title(NAMES[study] + " - token accuracy", loc="left")
|
| 78 |
+
axes[index, 1].set_ylabel("Accuracy (%)")
|
| 79 |
+
for ax in axes[index]:
|
| 80 |
+
ax.set_xlabel("Optimizer updates")
|
| 81 |
+
ax.grid(alpha=.15)
|
| 82 |
+
ax.legend(frameon=False, fontsize=8)
|
| 83 |
+
for ext in ["png", "svg"]:
|
| 84 |
+
fig.savefig(FIGURES / ("final-learning-curves." + ext), dpi=190)
|
| 85 |
+
plt.close(fig)
|
| 86 |
+
fig, ax = plt.subplots(figsize=(9.8, 2.8), constrained_layout=True)
|
| 87 |
+
ratios, counts = {}, {}
|
| 88 |
+
for loss, color, shift, label in [("ce", CE, -.17, "CE-trained model"), ("brier", BR, .17, "Brier-trained model")]:
|
| 89 |
+
values = []
|
| 90 |
+
for study in EXPANDED:
|
| 91 |
+
records = [g for r in data[study]["runs"] if r["phase"] == "main" and r["loss"] == loss
|
| 92 |
+
for g in r["test"]["gradient_diagnostics"] if g["group"] == "confidently_wrong"]
|
| 93 |
+
n = sum(g["count"] for g in records)
|
| 94 |
+
denominator = sum(g["count"] * g["ce_logit_gradient_l2"] for g in records)
|
| 95 |
+
numerator = sum(g["count"] * g["brier_logit_gradient_l2"] for g in records)
|
| 96 |
+
value = numerator / denominator
|
| 97 |
+
ratios[(study, loss)], counts[(study, loss)] = value, n
|
| 98 |
+
values.append(value)
|
| 99 |
+
ax.barh(np.arange(3) + shift, values, height=.29, color=color, label=label)
|
| 100 |
+
for y, value in zip(np.arange(3) + shift, values):
|
| 101 |
+
ax.text(value + .003, y, f"{value:.3f}", va="center", fontsize=9)
|
| 102 |
+
ax.set(yticks=np.arange(3), yticklabels=[NAMES[s] for s in EXPANDED], xlim=(0, .18),
|
| 103 |
+
xlabel="Brier / CE logit-gradient norm (ratio of token-weighted means)")
|
| 104 |
+
ax.invert_yaxis()
|
| 105 |
+
ax.legend(frameon=False, loc="lower right", fontsize=8)
|
| 106 |
+
ax.grid(axis="x", alpha=.15)
|
| 107 |
+
for ext in ["png", "svg"]:
|
| 108 |
+
fig.savefig(FIGURES / ("final-confident-errors." + ext), dpi=200)
|
| 109 |
+
plt.close(fig)
|
| 110 |
+
return ratios, counts
|
| 111 |
+
|
| 112 |
+
|
| 113 |
+
class Report:
|
| 114 |
+
def __init__(self):
|
| 115 |
+
fontroot = Path(matplotlib.get_data_path()) / "fonts/ttf"
|
| 116 |
+
for name, filename in [("Lab", "DejaVuSans.ttf"), ("LabBold", "DejaVuSans-Bold.ttf"), ("LabMono", "DejaVuSansMono.ttf")]:
|
| 117 |
+
pdfmetrics.registerFont(TTFont(name, str(fontroot / filename)))
|
| 118 |
+
pdfmetrics.registerFontFamily("Lab", normal="Lab", bold="LabBold", italic="Lab", boldItalic="LabBold")
|
| 119 |
+
OUTPUT.parent.mkdir(parents=True, exist_ok=True)
|
| 120 |
+
self.c = Canvas(str(OUTPUT), pagesize=(612, 792), invariant=1, pageCompression=1)
|
| 121 |
+
self.c.setTitle("Loss Lab: Cross Entropy and Brier in nanoGPT")
|
| 122 |
+
self.c.setAuthor("ctxnn1")
|
| 123 |
+
self.page_number = 0
|
| 124 |
+
self.body = ParagraphStyle("body", fontName="Lab", fontSize=9.3, leading=14, textColor=colors.HexColor(INK))
|
| 125 |
+
self.small = ParagraphStyle("small", parent=self.body, fontSize=7.9, leading=11, textColor=colors.HexColor(MUTED))
|
| 126 |
+
self.code = ParagraphStyle("code", parent=self.body, fontName="LabMono", fontSize=8, leading=12)
|
| 127 |
+
|
| 128 |
+
def page(self, title, kicker):
|
| 129 |
+
if self.page_number:
|
| 130 |
+
self.c.showPage()
|
| 131 |
+
self.page_number += 1
|
| 132 |
+
self.y = 721
|
| 133 |
+
self.c.setFillColor(colors.HexColor(CE))
|
| 134 |
+
self.c.rect(44, 745, 26, 3, fill=1, stroke=0)
|
| 135 |
+
self.c.setFont("LabBold", 8)
|
| 136 |
+
self.c.drawString(79, 743, "LOSS LAB / RESEARCH REPORT")
|
| 137 |
+
self.c.setFillColor(colors.HexColor(MUTED))
|
| 138 |
+
self.c.setFont("Lab", 7.5)
|
| 139 |
+
self.c.drawRightString(568, 743, "v2.1.0 / 28 OCTOBER 2026")
|
| 140 |
+
self.c.setStrokeColor(colors.HexColor("#d9dfe5"))
|
| 141 |
+
self.c.line(44, 43, 568, 43)
|
| 142 |
+
self.c.setFont("Lab", 7)
|
| 143 |
+
self.c.drawString(44, 29, "ctxnn1 | Exploratory small-model study | Experiments completed 24 October 2026 (IST)")
|
| 144 |
+
self.c.drawRightString(568, 29, str(self.page_number))
|
| 145 |
+
self.para(title, ParagraphStyle("title", parent=self.body, fontName="LabBold", fontSize=22, leading=28), gap=7)
|
| 146 |
+
self.para(kicker, self.small, gap=18)
|
| 147 |
+
|
| 148 |
+
def para(self, text, style=None, gap=10, width=524, x=44):
|
| 149 |
+
p = Paragraph(text, style or self.body)
|
| 150 |
+
_, height = p.wrap(width, 700)
|
| 151 |
+
if self.y - height < 57:
|
| 152 |
+
raise RuntimeError(f"Page {self.page_number} text overflow at {text[:65]}")
|
| 153 |
+
p.drawOn(self.c, x, self.y - height)
|
| 154 |
+
self.y -= height + gap
|
| 155 |
+
|
| 156 |
+
def heading(self, text):
|
| 157 |
+
self.para(text, ParagraphStyle("heading", parent=self.body, fontName="LabBold", fontSize=12, leading=17), gap=7)
|
| 158 |
+
|
| 159 |
+
def table(self, rows, widths, font=8.1):
|
| 160 |
+
cellstyle = ParagraphStyle("cell", parent=self.body, fontSize=font, leading=12)
|
| 161 |
+
formatted = [[Paragraph(str(value), cellstyle) for value in row] for row in rows]
|
| 162 |
+
table = Table(formatted, colWidths=widths, hAlign="LEFT")
|
| 163 |
+
table.setStyle(TableStyle([("BACKGROUND", (0, 0), (-1, 0), colors.HexColor("#edf2f6")),
|
| 164 |
+
("VALIGN", (0, 0), (-1, -1), "TOP"), ("LEFTPADDING", (0, 0), (-1, -1), 7),
|
| 165 |
+
("RIGHTPADDING", (0, 0), (-1, -1), 7), ("TOPPADDING", (0, 0), (-1, -1), 7),
|
| 166 |
+
("BOTTOMPADDING", (0, 0), (-1, -1), 7),
|
| 167 |
+
("LINEBELOW", (0, 0), (-1, 0), .6, colors.HexColor("#bfcbd5")),
|
| 168 |
+
("LINEBELOW", (0, 1), (-1, -1), .3, colors.HexColor("#e1e5e9"))]))
|
| 169 |
+
_, height = table.wrap(524, 700)
|
| 170 |
+
if self.y - height < 57:
|
| 171 |
+
raise RuntimeError(f"Page {self.page_number} table overflow")
|
| 172 |
+
table.drawOn(self.c, 44, self.y - height)
|
| 173 |
+
self.y -= height + 12
|
| 174 |
+
|
| 175 |
+
def image(self, name, height):
|
| 176 |
+
if self.y - height < 57:
|
| 177 |
+
raise RuntimeError(f"Page {self.page_number} image overflow")
|
| 178 |
+
self.c.drawImage(str(FIGURES / name), 44, self.y - height, width=524, height=height, preserveAspectRatio=True, anchor="c", mask="auto")
|
| 179 |
+
self.y -= height + 9
|
| 180 |
+
|
| 181 |
+
def finish(self):
|
| 182 |
+
self.c.save()
|
| 183 |
+
|
| 184 |
+
|
| 185 |
+
def build():
|
| 186 |
+
evidence = verify(ROOT)
|
| 187 |
+
data = load_records()
|
| 188 |
+
ratios, counts = figures(data, evidence)
|
| 189 |
+
r = Report()
|
| 190 |
+
r.page("Cross entropy wins held-out NLL<br/>under the expanded protocol", "Cross entropy and Brier score in small autoregressive language models")
|
| 191 |
+
r.heading("Abstract")
|
| 192 |
+
r.para("We compare softmax cross entropy with the vocabulary-summed Brier score using the same nanoGPT architecture and paired training seeds. Three expanded studies use loss-specific, full-duration learning-rate sweeps and five main seeds per loss. Cross entropy achieves lower final held-out negative log likelihood (NLL) in every expanded seed pair. The earlier Shakespeare ranking reverses under the expanded tuning protocol. Brier retains slightly higher Shakespeare token accuracy, illustrating that the metrics answer different questions.")
|
| 193 |
+
r.table([["Expanded study", "CE test NLL", "Brier test NLL", "Brier - CE"], *[
|
| 194 |
+
[NAMES[s], f"{evidence['studies'][s]['metrics']['ce']['nll']['mean']:.5f} +/- {evidence['studies'][s]['metrics']['ce']['nll']['sample_sd']:.5f}",
|
| 195 |
+
f"{evidence['studies'][s]['metrics']['brier']['nll']['mean']:.5f} +/- {evidence['studies'][s]['metrics']['brier']['nll']['sample_sd']:.5f}",
|
| 196 |
+
f"+{evidence['studies'][s]['paired_nll_mean']:.5f}"] for s in EXPANDED]], [132, 143, 143, 106], font=7.5)
|
| 197 |
+
r.para("Mean +/- sample SD across five seeds. NLL is nats per character for Shakespeare and nats per UTF-8 byte for TinyStories. Compare losses within a study; the tokenizations differ.", r.small)
|
| 198 |
+
r.image("final-paired-nll.png", 147)
|
| 199 |
+
r.para("Figure 1. All 15 paired differences are positive. Circles are predeclared main seeds; diamonds are within-study means. Positive values favor cross entropy. No significance threshold or universal LLM claim is inferred.", r.small)
|
| 200 |
+
r.para("The completed release includes 42 main models, 42 learning-rate trials and 1,248 predeclared text samples across the original baseline and expanded studies. Raw metrics, tensor-only weights, source, figures and the interactive dashboard are retained.")
|
| 201 |
+
|
| 202 |
+
r.page("The comparison holds the model fixed", "Methods and the frozen experimental design")
|
| 203 |
+
r.para("The experiment is motivated by Su Jianlin's discussion of alternatives to cross entropy [1]. Both arms apply softmax to the same model logits. The scores are computed in float32; the transformer uses bfloat16 on an H100. Native objective magnitudes are not compared against each other.")
|
| 204 |
+
r.para("L_CE(p, y) = -log p_y<br/>L_Brier(p, y) = sum_v (p_v - 1[v=y])^2", r.code)
|
| 205 |
+
r.table([["Control", "Setting"], ["Architecture", "6 transformer layers, 6 heads, width 384; dropout 0.1; no bias"],
|
| 206 |
+
["Model size and vocabulary", "10,745,088 parameters / 65 characters; 10,916,736 parameters / 256 bytes"],
|
| 207 |
+
["Context and update size", "256 character or 512 byte tokens; 16,384 training tokens per update"],
|
| 208 |
+
["Optimizer", "AdamW: betas (0.9, 0.95), weight decay 0.1, gradient clipping 1.0"],
|
| 209 |
+
["Schedule", "100-update warmup, then cosine decay to 10% of peak learning rate"],
|
| 210 |
+
["Pairing", "Same initial seed and minibatch stream within each CE/Brier main pair"],
|
| 211 |
+
["Selection", "Final validation NLL selects each loss's peak LR; test never selects rates"]], [146, 378])
|
| 212 |
+
r.table([["Expanded study", "Train tokens", "Pilot / main updates", "CE / Brier peak LR"], *[
|
| 213 |
+
[NAMES[s], f"{data[s]['dataset']['split_characters']['train']:,}", f"{data[s]['config']['pilot_steps']:,} / {data[s]['config']['steps']:,}",
|
| 214 |
+
f"{data[s]['selected_learning_rates']['ce']:g} / {data[s]['selected_learning_rates']['brier']:g}"] for s in EXPANDED]], [132, 110, 148, 134], font=7.8)
|
| 215 |
+
r.para("Each expanded loss tests peak rates 0.0003, 0.0006, 0.001, 0.002 and 0.003 using pilot seed 991 for the full duration. Main seeds are 42, 1337, 2026, 31415 and 27182. Each main model is trained from scratch to a fixed final checkpoint.")
|
| 216 |
+
r.para("Shakespeare uses contiguous 90% / 5% / 5% partitions and a training-only vocabulary. TinyStories [2] uses pinned, source-order, complete-story subsets; 32 MiB and 64 MiB denote preparation targets, so the final story can exceed the target slightly. Validation and test story selections remain fixed. Final test evaluations record 55,552 character or 199,680 byte token predictions per model in block-aligned windows.", r.small)
|
| 217 |
+
|
| 218 |
+
r.page("Learning dynamics differ by metric", "Validation trajectories for the three expanded studies")
|
| 219 |
+
r.image("final-learning-curves.png", 486)
|
| 220 |
+
r.para("Figure 2. Lines show five-seed means; bands show +/- one sample SD. Curves begin at the first 250-update validation checkpoint to make later learning visible; the complete histories, including initialization, are published. Solid blue is CE; dashed orange is Brier.", r.small)
|
| 221 |
+
r.para("Shakespeare's character accuracy is slightly higher for Brier even though CE has lower NLL. Both TinyStories studies favor CE on these two validation measures. The 64 MiB study also doubles the update budget, so its improvement cannot isolate the effect of more data from the effect of more optimization.")
|
| 222 |
+
|
| 223 |
+
r.page("Score geometry is measurable", "Secondary held-out outcomes and conditional logit gradients")
|
| 224 |
+
secondary = [["Study / trained with", "Test Brier", "Accuracy (%)", "ECE (%)"]]
|
| 225 |
+
for s in EXPANDED:
|
| 226 |
+
for loss in ["ce", "brier"]:
|
| 227 |
+
m = evidence["studies"][s]["metrics"][loss]
|
| 228 |
+
cell = lambda key, scale=1: (f"{m[key]['mean']*scale:.4f} +/- {m[key]['sample_sd']*scale:.4f}" if key == "brier" else f"{m[key]['mean']*scale:.3f} +/- {m[key]['sample_sd']*scale:.3f}")
|
| 229 |
+
secondary.append([NAMES[s] + " / " + ("CE" if loss == "ce" else "Brier"), cell("brier"), cell("accuracy", 100), cell("ece", 100)])
|
| 230 |
+
r.table(secondary, [176, 112, 118, 118], font=7.5)
|
| 231 |
+
r.para("ECE uses ten equal-width confidence bins. Lower Brier/ECE and higher accuracy are favorable. All reported uncertainty here is sample SD across training seeds, not a confidence interval.", r.small)
|
| 232 |
+
r.para("g_CE = p - e_y<br/>g_Brier = 2 (diag(p) - p p^T) (p - e_y)", r.code)
|
| 233 |
+
r.para("The additional softmax Jacobian can suppress Brier's logit gradient at confident errors [1]. Our analytic gradients of each unreduced per-token score are checked against autograd and evaluated on the same logits within each model. The following group has incorrect argmax and maximum predicted probability at least 0.9.")
|
| 234 |
+
r.image("final-confident-errors.png", 145)
|
| 235 |
+
r.para("Figure 3. For confidently wrong predictions, Brier's mean logit-gradient norm is roughly 8-13% of CE's on the same logits. These are ratios of token-weighted means. The groups contain different predictions for CE-trained and Brier-trained models; pooled occurrences across seeds are not independent test examples. This measures score geometry, not full parameter gradients or a causal explanation of every training difference.", r.small)
|
| 236 |
+
|
| 237 |
+
r.page("Samples and limits remain visible", "Qualitative evidence without sample selection by prose quality")
|
| 238 |
+
r.para("The fixed example below uses the larger TinyStories study, training seed 42, final step 6,000, temperature 0.7, sampling seed 12345 and the first predeclared prompt. The first 480 characters of each continuation are shown; complete text and every other predeclared sample remain in the dashboard and JSONL file.")
|
| 239 |
+
for loss, label in [("ce", "Cross entropy"), ("brier", "Brier")]:
|
| 240 |
+
run = next(x for x in data["scale-tinystories"]["runs"] if x["phase"] == "main" and x["loss"] == loss and x["seed"] == 42)
|
| 241 |
+
sample = next(x for x in run["samples"] if x["step"] == 6000 and x["temperature"] == .7 and x["prompt"] == data["scale-tinystories"]["config"]["prompts"][0])
|
| 242 |
+
r.heading(label)
|
| 243 |
+
r.para(escape(sample["prompt"] + sample["text"][:480]).replace("\n", "<br/>") + "<br/>[continuation truncated]", gap=14)
|
| 244 |
+
r.heading("What the evidence establishes")
|
| 245 |
+
r.para("The expanded protocol consistently favors CE for final test NLL in these small models. The original Shakespeare baseline favored Brier (CE 1.76895; Brier 1.69783), while the expanded study favors CE (1.56379 versus 1.68114). The expanded protocol changes pilot duration, LR grid and main-seed count together: the reversal shows sensitivity to tuning, without isolating one causal change.")
|
| 246 |
+
r.heading("Limits")
|
| 247 |
+
r.para("Five seeds describe this protocol, not all language models. The primary selection metric is validation NLL; choosing rates by another score could change the comparison. Source-order story subsets, short character/byte contexts, fixed final checkpoints and late Shakespeare overfitting limit generalization. No human or automated story-quality ranking was performed. Noise robustness, alternative output activations, other proper scores and larger models were not tested.", r.small)
|
| 248 |
+
|
| 249 |
+
r.page("A complete, reproducible release", "Artifact map, access and references")
|
| 250 |
+
r.table([["Artifact", "What it provides"], ["dashboard.html", "Interactive recorded comparison, samples, protocol and diagnostics"],
|
| 251 |
+
["results/records/", "All five study records, including every tuning and main run"],
|
| 252 |
+
["results/metrics/", "42 final scores, 42 trials, 1,212 validation records and 1,248 generations"],
|
| 253 |
+
["results/MODEL_INDEX.json", "42 native and tensor-only model paths, configurations, tokenizers and hashes"],
|
| 254 |
+
["RELEASE_MANIFEST.json", "SHA-256 identities of the portable project files"],
|
| 255 |
+
["scripts/verify_results.py", "Offline reconciliation of records, CSVs, samples, model index and dashboard"],
|
| 256 |
+
["Research.Dockerfile", "Pinned CUDA training environment; model and data paths are ordinary mounts"]], [170, 354])
|
| 257 |
+
r.heading("Verify without a GPU or cloud account")
|
| 258 |
+
r.para("python3 scripts/verify_results.py<br/>python3 -m venv .venv<br/>.venv/bin/python -m pip install -r requirements-research.txt<br/>.venv/bin/python -m pytest tests -q", r.code)
|
| 259 |
+
r.para("The portable download omits large model and prepared-data files. Download individual tensor-only model directories using MODEL_INDEX.json, then use experiments.sample_safetensors. The weights are custom nanoGPT checkpoints, not Transformers AutoModel checkpoints. Sampling examples and full training commands are in docs/RESEARCH_REPRODUCE.md.")
|
| 260 |
+
r.para('Public release: <link href="https://huggingface.co/ctxnn1/loss-lab-ce-brier/tree/v2.1.0" color="#346b98">huggingface.co/ctxnn1/loss-lab-ce-brier / v2.1.0</link><br/>Code: MIT. Dataset terms and attribution: docs/DATA_LICENSES.md. Citation metadata: CITATION.cff.', r.small)
|
| 261 |
+
r.heading("References")
|
| 262 |
+
for text in [
|
| 263 |
+
'[1] Su Jianlin. What alternatives to cross-entropy exist for LM loss? Scientific Spaces. <link href="https://spaces.ac.cn/archives/11854" color="#346b98">spaces.ac.cn/archives/11854</link>. Motivation and proper-score / softmax-gradient discussion.',
|
| 264 |
+
'[2] Ronen Eldan and Yuanzhi Li. TinyStories: How Small Can Language Models Be and Still Speak Coherent English? 2023. <link href="https://arxiv.org/abs/2305.07759" color="#346b98">arXiv:2305.07759</link>. Dataset revision and license are pinned in data/tinystories-source.json.',
|
| 265 |
+
'[3] Andrej Karpathy. nanoGPT. Vendored model at commit 3adf61e154c3fe3fca428ad6bc3818b27a3b8291. <link href="https://github.com/karpathy/nanoGPT/tree/3adf61e154c3fe3fca428ad6bc3818b27a3b8291" color="#346b98">Pinned source</link>.'
|
| 266 |
+
]:
|
| 267 |
+
r.para(text, r.small)
|
| 268 |
+
r.finish()
|
| 269 |
+
print(json.dumps({"pdf": str(OUTPUT), "pages": r.page_number, "figures": 3, "verified_main_models": evidence["main_models"]}))
|
| 270 |
+
|
| 271 |
+
|
| 272 |
+
if __name__ == "__main__":
|
| 273 |
+
build()
|
source/scripts/verify_results.py
ADDED
|
@@ -0,0 +1,182 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Reconcile the complete recorded study without GPU, network or credentials."""
|
| 2 |
+
import argparse
|
| 3 |
+
from collections import Counter
|
| 4 |
+
import csv
|
| 5 |
+
import hashlib
|
| 6 |
+
import json
|
| 7 |
+
import math
|
| 8 |
+
from pathlib import Path, PurePosixPath
|
| 9 |
+
import re
|
| 10 |
+
from statistics import mean, stdev
|
| 11 |
+
|
| 12 |
+
ROOT = Path(__file__).resolve().parents[1]
|
| 13 |
+
STUDIES = ("shakespeare", "tinystories", "v2-shakespeare", "v2-tinystories", "scale-tinystories")
|
| 14 |
+
PRIVATE_KEYS = {"job_id", "workspace", "bucket", "artifact_uri", "bundle_uri", "access_token", "secret_access_key"}
|
| 15 |
+
|
| 16 |
+
|
| 17 |
+
def require(condition, message):
|
| 18 |
+
if not condition:
|
| 19 |
+
raise ValueError(message)
|
| 20 |
+
|
| 21 |
+
|
| 22 |
+
def no_account_state(value):
|
| 23 |
+
if isinstance(value, dict):
|
| 24 |
+
require(not PRIVATE_KEYS.intersection(value), "Account-specific state in scientific records")
|
| 25 |
+
for item in value.values():
|
| 26 |
+
no_account_state(item)
|
| 27 |
+
elif isinstance(value, list):
|
| 28 |
+
for item in value:
|
| 29 |
+
no_account_state(item)
|
| 30 |
+
|
| 31 |
+
|
| 32 |
+
def reconcile_table(path, expected, key):
|
| 33 |
+
with path.open(newline="") as stream:
|
| 34 |
+
rows = list(csv.DictReader(stream))
|
| 35 |
+
index = {tuple(str(row[k]) for k in key): row for row in expected}
|
| 36 |
+
require(len(index) == len(expected), f"Duplicate expected rows: {path.name}")
|
| 37 |
+
require(len(rows) == len(expected), f"Wrong row count: {path.name}")
|
| 38 |
+
seen = set()
|
| 39 |
+
for row in rows:
|
| 40 |
+
identity = tuple(row[k] for k in key)
|
| 41 |
+
require(identity in index and identity not in seen, f"Duplicate or unknown row: {path.name} {identity}")
|
| 42 |
+
seen.add(identity)
|
| 43 |
+
for field, value in index[identity].items():
|
| 44 |
+
if isinstance(value, (float, int)) and not isinstance(value, bool):
|
| 45 |
+
actual = float(row[field])
|
| 46 |
+
require(math.isfinite(actual) and math.isclose(actual, value, rel_tol=1e-12, abs_tol=1e-12),
|
| 47 |
+
f"Value mismatch: {path.name} {identity} {field}")
|
| 48 |
+
else:
|
| 49 |
+
require(row[field] == str(value), f"Value mismatch: {path.name} {identity} {field}")
|
| 50 |
+
|
| 51 |
+
|
| 52 |
+
def verify(root=ROOT):
|
| 53 |
+
root = Path(root)
|
| 54 |
+
models = json.loads((root / "results/MODEL_INDEX.json").read_text())
|
| 55 |
+
model_index = {(m["study"], m["run_id"]): m for m in models}
|
| 56 |
+
require(len(model_index) == len(models) == 42, "Expected 42 unique indexed models")
|
| 57 |
+
finals, pilots, histories, samples, summaries = [], [], [], [], {}
|
| 58 |
+
checkpoint_paths, tensor_paths = set(), set()
|
| 59 |
+
data_by_study = {}
|
| 60 |
+
for study in STUDIES:
|
| 61 |
+
data = json.loads((root / "results/records" / study / "results.json").read_text())
|
| 62 |
+
no_account_state(data)
|
| 63 |
+
data_by_study[study] = data
|
| 64 |
+
cfg = data["config"]
|
| 65 |
+
require(data["status"] == "complete" and not data.get("active"), f"Incomplete study: {study}")
|
| 66 |
+
expected = {("pilot", loss, cfg["pilot_seed"], lr, cfg["pilot_steps"])
|
| 67 |
+
for loss in cfg["losses"] for lr in cfg["learning_rates"]}
|
| 68 |
+
expected |= {("main", loss, seed, data["selected_learning_rates"][loss], cfg["steps"])
|
| 69 |
+
for loss in cfg["losses"] for seed in cfg["seeds"]}
|
| 70 |
+
actual = [(r["phase"], r["loss"], r["seed"], r["lr"], r["steps"]) for r in data["runs"]]
|
| 71 |
+
require(len(actual) == len(expected) and set(actual) == expected, f"Task coverage mismatch: {study}")
|
| 72 |
+
for loss in cfg["losses"]:
|
| 73 |
+
trials = [r for r in data["runs"] if r["phase"] == "pilot" and r["loss"] == loss]
|
| 74 |
+
selected = min(trials, key=lambda r: r["final_validation"]["nll"])
|
| 75 |
+
require(selected["lr"] == data["selected_learning_rates"][loss], f"Validation LR selection mismatch: {study} {loss}")
|
| 76 |
+
for run in data["runs"]:
|
| 77 |
+
require(run["status"] == "complete", f"Incomplete run: {study} {run['id']}")
|
| 78 |
+
identity = dict(study=study, run_id=run["id"], phase=run["phase"], loss=run["loss"],
|
| 79 |
+
seed=run["seed"], learning_rate=run["lr"], steps=run["steps"])
|
| 80 |
+
history = run["history"]
|
| 81 |
+
require(history[-1]["step"] == run["steps"], f"Missing final validation: {study} {run['id']}")
|
| 82 |
+
require(len({h["step"] for h in history}) == len(history), "Duplicate validation step")
|
| 83 |
+
require(history[-1]["nll"] == run["final_validation"]["nll"], "Final validation mismatch")
|
| 84 |
+
for row in history:
|
| 85 |
+
histories.append({**identity, "step": row["step"], "tokens": row["tokens"],
|
| 86 |
+
**{k: row[k] for k in ["nll", "brier", "accuracy", "ece"]}})
|
| 87 |
+
if run["phase"] == "pilot":
|
| 88 |
+
require(not run.get("test") and not run.get("samples"), "Tuning must not use test scores or main samples")
|
| 89 |
+
pilots.append({**identity, "validation_nll": run["final_validation"]["nll"],
|
| 90 |
+
"selected": run["lr"] == data["selected_learning_rates"][run["loss"]]})
|
| 91 |
+
continue
|
| 92 |
+
require(run.get("test"), f"Missing held-out test: {study} {run['id']}")
|
| 93 |
+
finals.append({**identity, **{k: run["test"][k] for k in
|
| 94 |
+
["nll", "bpc", "perplexity", "brier", "accuracy", "ece", "eval_tokens"]}})
|
| 95 |
+
expected_samples = {(step, prompt, temperature, cfg["sample_seed"])
|
| 96 |
+
for step in range(cfg["sample_interval"], cfg["steps"] + 1, cfg["sample_interval"])
|
| 97 |
+
for prompt in cfg["prompts"] for temperature in cfg["temperatures"]}
|
| 98 |
+
actual_samples = [(s["step"], s["prompt"], s["temperature"], s["sample_seed"]) for s in run["samples"]]
|
| 99 |
+
require(len(actual_samples) == len(expected_samples) and set(actual_samples) == expected_samples,
|
| 100 |
+
f"Sample coverage mismatch: {study} {run['id']}")
|
| 101 |
+
samples.extend({"study": study, **sample} for sample in run["samples"])
|
| 102 |
+
model = model_index[(study, run["id"])]
|
| 103 |
+
require(model["native_sha256"] == run["checkpoint"]["sha256"], "Checkpoint hash mismatch")
|
| 104 |
+
require(model["loss"] == run["loss"] and model["seed"] == run["seed"] and
|
| 105 |
+
model["learning_rate"] == run["lr"] and model["steps"] == run["steps"], "Model index protocol mismatch")
|
| 106 |
+
for field in ["native_checkpoint", "safetensors", "config", "tokenizer"]:
|
| 107 |
+
rel = PurePosixPath(model[field])
|
| 108 |
+
require(not rel.is_absolute() and ".." not in rel.parts and rel.parts[0] == "runs", "Invalid model path")
|
| 109 |
+
require(re.fullmatch(r"[0-9a-f]{64}", model["safetensors_sha256"]), "Invalid tensor hash")
|
| 110 |
+
checkpoint_paths.add(model["native_checkpoint"])
|
| 111 |
+
tensor_paths.add(model["safetensors"])
|
| 112 |
+
main = [r for r in data["runs"] if r["phase"] == "main"]
|
| 113 |
+
paired = [next(r["test"]["nll"] for r in main if r["seed"] == seed and r["loss"] == "brier") -
|
| 114 |
+
next(r["test"]["nll"] for r in main if r["seed"] == seed and r["loss"] == "ce") for seed in cfg["seeds"]]
|
| 115 |
+
summaries[study] = {"seeds_per_loss": len(cfg["seeds"]), "steps": cfg["steps"],
|
| 116 |
+
"pilot_steps": cfg["pilot_steps"], "unit": data["dataset"]["unit"],
|
| 117 |
+
"selected_learning_rates": data["selected_learning_rates"],
|
| 118 |
+
"paired_nll_differences": paired, "paired_nll_mean": mean(paired),
|
| 119 |
+
"ce_lower_nll_pairs": sum(x > 0 for x in paired), "metrics": {}}
|
| 120 |
+
for loss in cfg["losses"]:
|
| 121 |
+
group = [r for r in main if r["loss"] == loss]
|
| 122 |
+
summaries[study]["metrics"][loss] = {metric: {"mean": mean(r["test"][metric] for r in group),
|
| 123 |
+
"sample_sd": stdev(r["test"][metric] for r in group)} for metric in ["nll", "brier", "accuracy", "ece"]}
|
| 124 |
+
require(len(checkpoint_paths) == len(tensor_paths) == 42, "Duplicate model paths")
|
| 125 |
+
require(len(finals) == len(pilots) == 42 and len(samples) == 1248, "Incomplete frozen experiment")
|
| 126 |
+
reconcile_table(root / "results/metrics/final-scores.csv", finals, ["study", "run_id"])
|
| 127 |
+
reconcile_table(root / "results/metrics/learning-rate-trials.csv", pilots, ["study", "run_id"])
|
| 128 |
+
reconcile_table(root / "results/metrics/validation-history.csv", histories, ["study", "run_id", "step"])
|
| 129 |
+
actual = [json.loads(line) for line in (root / "results/metrics/samples.jsonl").read_text().splitlines()]
|
| 130 |
+
signature = lambda row: json.dumps(row, sort_keys=True, ensure_ascii=False)
|
| 131 |
+
require(Counter(map(signature, actual)) == Counter(map(signature, samples)), "Stored sample text mismatch")
|
| 132 |
+
dashboard = json.loads((root / "dashboard/src/data.json").read_text())
|
| 133 |
+
require(dashboard["buildStatus"] == "complete", "Dashboard snapshot is unfinished")
|
| 134 |
+
queries = dashboard["queries"]
|
| 135 |
+
for query, count in [("finals", 42), ("samples", 1248), ("history", 666), ("pilots", 546), ("protocol", 5)]:
|
| 136 |
+
require(len(queries[query]["rows"]) == count, f"Dashboard coverage mismatch: {query}")
|
| 137 |
+
for row in queries["finals"]["rows"]:
|
| 138 |
+
expected = next(r for r in finals if r["study"] == row["dataset"] and r["run_id"] == row["run_id"])
|
| 139 |
+
for metric in ["nll", "brier", "accuracy", "ece"]:
|
| 140 |
+
require(expected[metric] == row[metric], f"Dashboard final score mismatch: {metric}")
|
| 141 |
+
for file in [root / "dashboard/src/data.json", root / "dashboard.html"]:
|
| 142 |
+
require(not any(key in file.read_bytes() for key in [b'"workspace":', b'"bucket":', b'"job_id":']),
|
| 143 |
+
"Deployment identifiers in delivered dashboard")
|
| 144 |
+
expanded = [summaries[s] for s in STUDIES if s.startswith(("v2-", "scale-"))]
|
| 145 |
+
return {"schema_version": 1, "release_version": (root / "VERSION").read_text().strip(), "ok": True,
|
| 146 |
+
"main_models": len(finals), "tuning_runs": len(pilots), "training_runs": len(finals) + len(pilots),
|
| 147 |
+
"saved_samples": len(samples), "validation_records": len(histories),
|
| 148 |
+
"expanded_ce_lower_nll_pairs": sum(s["ce_lower_nll_pairs"] for s in expanded),
|
| 149 |
+
"studies": summaries,
|
| 150 |
+
"scope": "Recorded metrics, samples, model index and dashboard reconciled. Remote weight bytes are checked separately; no weights downloaded by this command."}
|
| 151 |
+
|
| 152 |
+
|
| 153 |
+
def verify_manifest(root=ROOT):
|
| 154 |
+
root = Path(root)
|
| 155 |
+
path = root / "RELEASE_MANIFEST.json"
|
| 156 |
+
if not path.exists():
|
| 157 |
+
return None
|
| 158 |
+
manifest = json.loads(path.read_text())
|
| 159 |
+
for name, digest in manifest["files"].items():
|
| 160 |
+
rel = PurePosixPath(name)
|
| 161 |
+
require(not rel.is_absolute() and ".." not in rel.parts, "Unsafe release path")
|
| 162 |
+
file = root / name
|
| 163 |
+
require(file.is_file() and hashlib.sha256(file.read_bytes()).hexdigest() == digest,
|
| 164 |
+
"Release integrity mismatch: " + name)
|
| 165 |
+
return len(manifest["files"])
|
| 166 |
+
|
| 167 |
+
|
| 168 |
+
if __name__ == "__main__":
|
| 169 |
+
parser = argparse.ArgumentParser(description=__doc__)
|
| 170 |
+
parser.add_argument("--root", type=Path, default=ROOT)
|
| 171 |
+
parser.add_argument("--write-summary", type=Path)
|
| 172 |
+
args = parser.parse_args()
|
| 173 |
+
try:
|
| 174 |
+
result = verify(args.root)
|
| 175 |
+
count = verify_manifest(args.root)
|
| 176 |
+
if args.write_summary:
|
| 177 |
+
args.write_summary.parent.mkdir(parents=True, exist_ok=True)
|
| 178 |
+
args.write_summary.write_text(json.dumps(result, indent=2, allow_nan=False) + "\n")
|
| 179 |
+
print(json.dumps({"ok": True, "main_models": result["main_models"], "tuning_runs": result["tuning_runs"],
|
| 180 |
+
"saved_samples": result["saved_samples"], "release_files_verified": count}))
|
| 181 |
+
except (ValueError, KeyError, OSError) as error:
|
| 182 |
+
parser.exit(1, "Verification failed: " + str(error) + "\n")
|
source/tests/test_recorded_results.py
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import csv
|
| 2 |
+
from pathlib import Path
|
| 3 |
+
import shutil
|
| 4 |
+
|
| 5 |
+
import pytest
|
| 6 |
+
|
| 7 |
+
from scripts.verify_results import ROOT, verify
|
| 8 |
+
|
| 9 |
+
|
| 10 |
+
def test_published_evidence_reconciles_without_models_or_cloud_access():
|
| 11 |
+
result = verify(ROOT)
|
| 12 |
+
assert (result["main_models"], result["tuning_runs"], result["saved_samples"]) == (42, 42, 1248)
|
| 13 |
+
assert result["expanded_ce_lower_nll_pairs"] == 15
|
| 14 |
+
assert result["validation_records"] == 1212
|
| 15 |
+
|
| 16 |
+
|
| 17 |
+
def test_a_changed_export_cannot_pass_as_the_recorded_experiment(tmp_path):
|
| 18 |
+
for folder in ["results/records", "results/metrics"]:
|
| 19 |
+
shutil.copytree(ROOT / folder, tmp_path / folder)
|
| 20 |
+
shutil.copy2(ROOT / "results/MODEL_INDEX.json", tmp_path / "results/MODEL_INDEX.json")
|
| 21 |
+
path = tmp_path / "results/metrics/final-scores.csv"
|
| 22 |
+
with path.open(newline="") as stream:
|
| 23 |
+
reader = csv.DictReader(stream)
|
| 24 |
+
fields, rows = reader.fieldnames, list(reader)
|
| 25 |
+
rows[0]["nll"] = str(float(rows[0]["nll"]) + 0.1)
|
| 26 |
+
with path.open("w", newline="") as stream:
|
| 27 |
+
writer = csv.DictWriter(stream, fieldnames=fields)
|
| 28 |
+
writer.writeheader()
|
| 29 |
+
writer.writerows(rows)
|
| 30 |
+
with pytest.raises(ValueError, match="final-scores.csv.*nll"):
|
| 31 |
+
verify(tmp_path)
|