hadikhamoud commited on
Commit
4463cff
·
verified ·
1 Parent(s): 310db6e

Publish verified DRU-RE-Yehia release

Browse files
.gitattributes CHANGED
@@ -1,2 +1,8 @@
1
  adapter_model.safetensors filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
2
  tokenizer.model filter=lfs diff=lfs merge=lfs -text
 
1
  adapter_model.safetensors filter=lfs diff=lfs merge=lfs -text
2
+ latest_checkpoint/adapter_model.safetensors filter=lfs diff=lfs merge=lfs -text
3
+ latest_checkpoint/optimizer.pt filter=lfs diff=lfs merge=lfs -text
4
+ latest_checkpoint/rng_state.pth filter=lfs diff=lfs merge=lfs -text
5
+ latest_checkpoint/scheduler.pt filter=lfs diff=lfs merge=lfs -text
6
+ latest_checkpoint/training_args.bin filter=lfs diff=lfs merge=lfs -text
7
+ latest_checkpoint/tokenizer.model filter=lfs diff=lfs merge=lfs -text
8
  tokenizer.model filter=lfs diff=lfs merge=lfs -text
CHANGELOG.md CHANGED
@@ -95,10 +95,14 @@ no credentials, machine caches, or abandoned implementation files.
95
  - Added `tools/publish_huggingface.py`, locked to
96
  `U4RASD/DRU-RE-Yehia`, to upload only a verified complete folder and then
97
  verify two fresh remote downloads without revealing token values.
98
- - Added an Azure Git LFS rule for `adapter_model.safetensors` and a documented
99
- fresh-clone deletion gate.
100
-
101
- The full gated 7B base, optimizer state, caches, temporary logs, and secrets are
102
- deliberately excluded from the clean model repository. Exact mid-run resume
103
- requires a separately archived private numbered checkpoint; completed-model
104
- inference and retraining from step 0 do not.
 
 
 
 
 
95
  - Added `tools/publish_huggingface.py`, locked to
96
  `U4RASD/DRU-RE-Yehia`, to upload only a verified complete folder and then
97
  verify two fresh remote downloads without revealing token values.
98
+ - Added Azure Git LFS rules for the root adapter and final checkpoint binaries,
99
+ plus a documented fresh-clone deletion gate.
100
+ - Disabled RunPod's optional `hf_transfer` path before every Hub import because
101
+ the pinned environment does not install that optional package; standard Hub
102
+ upload/download remains enabled and was used successfully.
103
+
104
+ At Ahmad's explicit request, the complete latest step-2,943 Trainer checkpoint
105
+ is included with adapter, optimizer, scheduler, RNG, trainer state, tokenizer,
106
+ training arguments, and its own integrity manifest. The root adapter remains
107
+ the selected step-2,750 best inference model. The full gated 7B base, older
108
+ checkpoints, caches, temporary logs, predictions, and secrets remain excluded.
README.md CHANGED
@@ -24,15 +24,17 @@ one Arabic option code. The model does not have to reproduce a long relation
24
  phrase or generate explanatory text.
25
 
26
  This repository contains the clean training, dataset, audit, inference, and
27
- release-staging source. It intentionally excludes downloaded base weights,
28
- dataset JSONL files, checkpoints, optimizer state, caches, notebooks, prediction
29
- dumps, and rolling logs.
 
30
 
31
  > **Release status:** all three epochs and the final 1,687-row validation are
32
  > complete at global step 2,943. The selected step-2,750 best adapter is staged
33
  > at the repository root and passed the complete local release verifier: 448/448
34
  > tensors are finite and nonzero, all 41 worked classes are covered, and every
35
- > manifest hash matches. Hugging Face publication provenance is written to
 
36
  > `release/hf_remote_verification.json` by the guarded publisher.
37
 
38
  ## At a glance
@@ -105,6 +107,7 @@ DRU-RE-Yehia/
105
  ├── build_examples_appendix.py
106
  ├── plot_losses.py
107
  ├── monitor_resources.sh
 
108
  ├── stage_release.py
109
  ├── verify_release.py
110
  └── publish_huggingface.py
@@ -112,7 +115,8 @@ DRU-RE-Yehia/
112
 
113
  After a successful release-staging operation, the repository root additionally
114
  contains PEFT adapter/tokenizer files and `inference_config.json`; final run
115
- evidence is placed under `release/`. Full Yehia base weights are never copied.
 
116
 
117
  ## Task definition
118
 
@@ -813,7 +817,7 @@ positive micro F1. It is not training loss or teacher-forced validation loss.
813
  The trainer maintains:
814
 
815
  - `checkpoints/checkpoint-<step>/`: resumable Trainer checkpoints;
816
- - `latest_checkpoint/`: complete named copy of the latest scheduled checkpoint;
817
  - `best_checkpoint/`: complete named copy of the best validation checkpoint;
818
  - `best_adapter/`: adapter/tokenizer exported after training completes.
819
 
@@ -1108,7 +1112,10 @@ The staging utility refuses to proceed unless:
1108
  - all-linear evidence reports 225 eligible and 224 wrapped modules with only
1109
  LoRA parameters trainable and the output head frozen;
1110
  - all 448 saved adapter tensors are finite and nonzero;
1111
- - the best-checkpoint metric artifact exists.
 
 
 
1112
 
1113
  It copies only:
1114
 
@@ -1116,7 +1123,9 @@ It copies only:
1116
  - tokenizer/chat-template files required by the adapter;
1117
  - frozen inference configuration, including best-step no-relation bias;
1118
  - final run summary and best validation metrics;
1119
- - small audit evidence and a SHA-256 release manifest.
 
 
1120
 
1121
  All correctness checks finish before repository files are changed. Each staged
1122
  file is copied through a temporary sibling and atomically renamed, preventing an
@@ -1125,8 +1134,7 @@ interrupted copy from appearing as a complete release artifact.
1125
  It explicitly excludes:
1126
 
1127
  - Yehia base weights;
1128
- - optimizer/scheduler/RNG state;
1129
- - numbered and named resumable checkpoints;
1130
  - logs and resource time series;
1131
  - per-row validation prediction dumps;
1132
  - caches and temporary files.
@@ -1153,6 +1161,7 @@ The deletion-safe release is intentionally split across durable repositories:
1153
  | Exact transformed train/validation/official JSONL and resources | Hugging Face dataset `U4RASD/Yehia-RE-SFT` at commit `a060e47f56025778b97344d4d3de60a8fd53be7c` | Retraining and official inference input |
1154
  | Entire clean folder in this README, including source, resources, 41 examples, evidence, and release tools | Azure Git and Hugging Face model `U4RASD/DRU-RE-Yehia` | Reproduce, audit, train, and understand the system |
1155
  | Best adapter, tokenizer files, `inference_config.json`, final metrics, and release manifest | Root/release directories of the Hugging Face model repo; mirrored to Azure with Git LFS | Actual model inference and checkpoint provenance |
 
1156
  | Yehia 7B base at commit `b9dda4715eafee7e8090d2c83cfe078d75f4ebb8` | Upstream gated `Navid-AI/Yehia-7B-preview` | Required underneath the PEFT adapter |
1157
  | Token permissions | An external password manager or secret store, never either repository | Future access to gated/private repositories |
1158
 
@@ -1180,9 +1189,11 @@ missing. It also checks:
1180
  - exact 225 eligible / 224 wrapped all-linear evidence;
1181
  - the portable pinned base ID and revision in adapter/inference configs;
1182
  - 448 finite, nonzero adapter tensors;
 
 
1183
  - locked rank 16, alpha 32, dropout 0.05, RS-LoRA settings;
1184
  - the SHA-256 and byte size of every staged manifest entry;
1185
- - absence of full base weights and optimizer/checkpoint payloads;
1186
  - in remote-clean mode, absence of every unrecognized or stale remote file.
1187
 
1188
  This command intentionally fails before the final adapter is staged. A source
@@ -1214,7 +1225,8 @@ with the experiment record. No token value is printed or persisted.
1214
 
1215
  When the Azure DevOps repository URL is supplied, push this same directory—not
1216
  the live experiment directory. `.gitattributes` already places
1217
- `adapter_model.safetensors` under Git LFS. A representative workflow is:
 
1218
 
1219
  ```bash
1220
  git init -b main
@@ -1265,16 +1277,32 @@ The durable clean release is sufficient to:
1265
  - reproduce the transformed dataset;
1266
  - retrain from optimizer step 0;
1267
  - load the completed best adapter for inference;
1268
- - reproduce constrained decoding and output mapping.
 
1269
 
1270
- It intentionally does **not** preserve exact mid-training resume state. Exact
1271
- resume requires a complete numbered checkpoint containing adapter weights,
1272
- `optimizer.pt`, `scheduler.pt`, `trainer_state.json`, RNG state, and matching
1273
- training arguments. Once all three epochs and final validation are complete,
1274
- that state is not needed to use or retrain the released model. If exact
1275
- continuation of the completed run may be needed later, archive the final
1276
- numbered checkpoint separately in private Azure Blob/Artifact storage before
1277
- deleting the pod; do not mix it into the clean model repository.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1278
 
1279
  ### Deletion gate
1280
 
@@ -1283,19 +1311,20 @@ The training machine is safe to delete only after every item below is true:
1283
  - [ ] Three-epoch training and final 1,687-row validation completed normally.
1284
  - [ ] `run_summary.json` says `status=complete`.
1285
  - [ ] `tools/stage_release.py` staged the best—not merely latest—adapter.
 
 
1286
  - [ ] Local `tools/verify_release.py` passed.
1287
  - [ ] `tools/publish_huggingface.py` passed its fresh final-download check.
1288
  - [ ] The Hugging Face model `final_revision` was recorded.
1289
  - [ ] The pinned SFT dataset commit remains remotely readable and hash-verified.
1290
- - [ ] The entire clean folder was committed to Azure, with the adapter LFS
1291
- object present.
1292
  - [ ] A fresh Azure clone passed `tools/verify_release.py --remote-clean`.
1293
  - [ ] At least one end-to-end inference smoke test passed from a fresh checkout
1294
  using the gated pinned Yehia base, prepared input, and staged adapter.
1295
  - [ ] Azure Git commit, Hugging Face model commit, Hugging Face dataset commit,
1296
  and Yehia base commit were recorded together.
1297
  - [ ] Required future repository credentials/permissions exist outside the pod.
1298
- - [ ] Any optional exact-resume checkpoint desired later was archived separately.
1299
 
1300
  Until that entire gate passes, deleting the pod is premature. After it passes,
1301
  temporary caches, plots, rolling logs, downloaded base files, transformed local
@@ -1451,7 +1480,8 @@ no-relation bias, and decode through the same index. The supplied
1451
  - The gated 7B base model.
1452
  - The 133+ MB transformed JSONL dataset.
1453
  - Any source-dataset cache.
1454
- - Live training checkpoints or optimizer state.
 
1455
  - Notebook prompt experiments.
1456
  - Temporary benchmark scripts and abandoned objectives.
1457
  - Rolling trainer/resource logs.
@@ -1459,9 +1489,8 @@ no-relation bias, and decode through the same index. The supplied
1459
  - A premature adapter snapshot from an incomplete run.
1460
 
1461
  This keeps the model repository understandable while preserving every file
1462
- needed to download, audit, rebuild, retrain from step 0, evaluate, stage, and use
1463
- the selected system. Exact optimizer-state resume is the deliberate exception
1464
- described in the durability section above.
1465
 
1466
  ## Troubleshooting
1467
 
@@ -1548,7 +1577,8 @@ Before claiming a faithful retrain, verify:
1548
  - [ ] Fresh Hugging Face and Azure downloads both pass remote-clean verification.
1549
  - [ ] An end-to-end prepared-input inference passes from a fresh checkout.
1550
  - [ ] Immutable Azure, model, dataset, and base revisions are recorded.
1551
- - [ ] No base weights, optimizer state, logs, caches, or credentials are pushed.
 
1552
 
1553
  ## Pre-publication responsibility
1554
 
 
24
  phrase or generate explanatory text.
25
 
26
  This repository contains the clean training, dataset, audit, inference, and
27
+ release-staging source, the selected best inference adapter, and the latest
28
+ complete resumable Trainer checkpoint. It intentionally excludes downloaded
29
+ base weights, local dataset JSONL files, all older numbered checkpoints, caches,
30
+ notebooks, prediction dumps, and rolling logs.
31
 
32
  > **Release status:** all three epochs and the final 1,687-row validation are
33
  > complete at global step 2,943. The selected step-2,750 best adapter is staged
34
  > at the repository root and passed the complete local release verifier: 448/448
35
  > tensors are finite and nonzero, all 41 worked classes are covered, and every
36
+ > manifest hash matches. The full latest step-2,943 optimizer/scheduler/RNG
37
+ > checkpoint is preserved separately under `latest_checkpoint/`. Hugging Face publication provenance is written to
38
  > `release/hf_remote_verification.json` by the guarded publisher.
39
 
40
  ## At a glance
 
107
  ├── build_examples_appendix.py
108
  ├── plot_losses.py
109
  ├── monitor_resources.sh
110
+ ├── restore_latest_checkpoint.py
111
  ├── stage_release.py
112
  ├── verify_release.py
113
  └── publish_huggingface.py
 
115
 
116
  After a successful release-staging operation, the repository root additionally
117
  contains PEFT adapter/tokenizer files and `inference_config.json`; final run
118
+ evidence is placed under `release/`, and the complete latest Trainer state is
119
+ placed under `latest_checkpoint/`. Full Yehia base weights are never copied.
120
 
121
  ## Task definition
122
 
 
817
  The trainer maintains:
818
 
819
  - `checkpoints/checkpoint-<step>/`: resumable Trainer checkpoints;
820
+ - `latest_checkpoint/`: complete named copy of the final step-2,943 checkpoint;
821
  - `best_checkpoint/`: complete named copy of the best validation checkpoint;
822
  - `best_adapter/`: adapter/tokenizer exported after training completes.
823
 
 
1112
  - all-linear evidence reports 225 eligible and 224 wrapped modules with only
1113
  LoRA parameters trainable and the output head frozen;
1114
  - all 448 saved adapter tensors are finite and nonzero;
1115
+ - the best-checkpoint metric artifact exists;
1116
+ - `latest_checkpoint/` and numbered `checkpoint-2943/` are byte-identical;
1117
+ - the latest checkpoint has finite adapter/optimizer state, complete scheduler
1118
+ state, trainer global step 2,943, RNG state, and training arguments.
1119
 
1120
  It copies only:
1121
 
 
1123
  - tokenizer/chat-template files required by the adapter;
1124
  - frozen inference configuration, including best-step no-relation bias;
1125
  - final run summary and best validation metrics;
1126
+ - small audit evidence and a SHA-256 release manifest;
1127
+ - the complete latest step-2,943 resumable checkpoint, with a separate
1128
+ checkpoint integrity manifest.
1129
 
1130
  All correctness checks finish before repository files are changed. Each staged
1131
  file is copied through a temporary sibling and atomically renamed, preventing an
 
1134
  It explicitly excludes:
1135
 
1136
  - Yehia base weights;
1137
+ - all older numbered/named checkpoints other than the staged final latest copy;
 
1138
  - logs and resource time series;
1139
  - per-row validation prediction dumps;
1140
  - caches and temporary files.
 
1161
  | Exact transformed train/validation/official JSONL and resources | Hugging Face dataset `U4RASD/Yehia-RE-SFT` at commit `a060e47f56025778b97344d4d3de60a8fd53be7c` | Retraining and official inference input |
1162
  | Entire clean folder in this README, including source, resources, 41 examples, evidence, and release tools | Azure Git and Hugging Face model `U4RASD/DRU-RE-Yehia` | Reproduce, audit, train, and understand the system |
1163
  | Best adapter, tokenizer files, `inference_config.json`, final metrics, and release manifest | Root/release directories of the Hugging Face model repo; mirrored to Azure with Git LFS | Actual model inference and checkpoint provenance |
1164
+ | Latest complete `checkpoint-2943` adapter, optimizer, scheduler, RNG, trainer state, tokenizer, and training arguments | `latest_checkpoint/` in the Hugging Face model repo and Azure Git LFS mirror | Exact archival resume state from the completed run |
1165
  | Yehia 7B base at commit `b9dda4715eafee7e8090d2c83cfe078d75f4ebb8` | Upstream gated `Navid-AI/Yehia-7B-preview` | Required underneath the PEFT adapter |
1166
  | Token permissions | An external password manager or secret store, never either repository | Future access to gated/private repositories |
1167
 
 
1189
  - exact 225 eligible / 224 wrapped all-linear evidence;
1190
  - the portable pinned base ID and revision in adapter/inference configs;
1191
  - 448 finite, nonzero adapter tensors;
1192
+ - the complete step-2,943 checkpoint manifest, adapter, finite optimizer state,
1193
+ final scheduler state, RNG payload, and trainer provenance;
1194
  - locked rank 16, alpha 32, dropout 0.05, RS-LoRA settings;
1195
  - the SHA-256 and byte size of every staged manifest entry;
1196
+ - absence of full base weights and any unrecognized checkpoint payloads;
1197
  - in remote-clean mode, absence of every unrecognized or stale remote file.
1198
 
1199
  This command intentionally fails before the final adapter is staged. A source
 
1225
 
1226
  When the Azure DevOps repository URL is supplied, push this same directory—not
1227
  the live experiment directory. `.gitattributes` already places
1228
+ the root adapter plus large latest-checkpoint binaries under Git LFS. A
1229
+ representative workflow is:
1230
 
1231
  ```bash
1232
  git init -b main
 
1277
  - reproduce the transformed dataset;
1278
  - retrain from optimizer step 0;
1279
  - load the completed best adapter for inference;
1280
+ - reproduce constrained decoding and output mapping;
1281
+ - restore the exact latest completed Trainer state from step 2,943.
1282
 
1283
+ The root `adapter_model.safetensors` is the selected step-2,750 **best inference
1284
+ adapter**. `latest_checkpoint/adapter_model.safetensors` is the different final
1285
+ step-2,943 training state accompanied by its optimizer, scheduler, RNG,
1286
+ trainer state, and training arguments. Applications should use the root best
1287
+ adapter; the checkpoint directory exists for archival resume/recovery.
1288
+
1289
+ To restore it into the default run layout:
1290
+
1291
+ ```bash
1292
+ python tools/restore_latest_checkpoint.py
1293
+ ```
1294
+
1295
+ This verifies every checkpoint hash and tensor first, then atomically creates:
1296
+
1297
+ ```text
1298
+ runs/DRU-RE-Yehia/checkpoints/checkpoint-2943/
1299
+ ```
1300
+
1301
+ With the locked three-epoch configuration, that checkpoint is already at the
1302
+ training endpoint, so a normal resume performs no additional optimizer update
1303
+ and proceeds to finalization. Extending it to more epochs or changing the
1304
+ learning-rate schedule is a new experiment, not an exact continuation of the
1305
+ documented run. Older intermediate checkpoints are intentionally excluded.
1306
 
1307
  ### Deletion gate
1308
 
 
1311
  - [ ] Three-epoch training and final 1,687-row validation completed normally.
1312
  - [ ] `run_summary.json` says `status=complete`.
1313
  - [ ] `tools/stage_release.py` staged the best—not merely latest—adapter.
1314
+ - [ ] `latest_checkpoint/checkpoint_manifest.json` proves the complete final
1315
+ step-2,943 optimizer/scheduler/RNG checkpoint is present.
1316
  - [ ] Local `tools/verify_release.py` passed.
1317
  - [ ] `tools/publish_huggingface.py` passed its fresh final-download check.
1318
  - [ ] The Hugging Face model `final_revision` was recorded.
1319
  - [ ] The pinned SFT dataset commit remains remotely readable and hash-verified.
1320
+ - [ ] The entire clean folder was committed to Azure, with root adapter and
1321
+ latest-checkpoint LFS objects present.
1322
  - [ ] A fresh Azure clone passed `tools/verify_release.py --remote-clean`.
1323
  - [ ] At least one end-to-end inference smoke test passed from a fresh checkout
1324
  using the gated pinned Yehia base, prepared input, and staged adapter.
1325
  - [ ] Azure Git commit, Hugging Face model commit, Hugging Face dataset commit,
1326
  and Yehia base commit were recorded together.
1327
  - [ ] Required future repository credentials/permissions exist outside the pod.
 
1328
 
1329
  Until that entire gate passes, deleting the pod is premature. After it passes,
1330
  temporary caches, plots, rolling logs, downloaded base files, transformed local
 
1480
  - The gated 7B base model.
1481
  - The 133+ MB transformed JSONL dataset.
1482
  - Any source-dataset cache.
1483
+ - Intermediate checkpoints and optimizer states other than the final staged
1484
+ `latest_checkpoint/` copy.
1485
  - Notebook prompt experiments.
1486
  - Temporary benchmark scripts and abandoned objectives.
1487
  - Rolling trainer/resource logs.
 
1489
  - A premature adapter snapshot from an incomplete run.
1490
 
1491
  This keeps the model repository understandable while preserving every file
1492
+ needed to download, audit, rebuild, retrain from step 0, evaluate, stage, use
1493
+ the selected system, and restore the final optimizer state.
 
1494
 
1495
  ## Troubleshooting
1496
 
 
1577
  - [ ] Fresh Hugging Face and Azure downloads both pass remote-clean verification.
1578
  - [ ] An end-to-end prepared-input inference passes from a fresh checkout.
1579
  - [ ] Immutable Azure, model, dataset, and base revisions are recorded.
1580
+ - [ ] Only the explicitly manifested final optimizer checkpoint is pushed; no
1581
+ base weights, older checkpoints, logs, caches, or credentials are present.
1582
 
1583
  ## Pre-publication responsibility
1584
 
download_dataset.py CHANGED
@@ -10,6 +10,8 @@ import os
10
  from pathlib import Path
11
  from typing import Any, Dict
12
 
 
 
13
  from dotenv import load_dotenv
14
  from huggingface_hub import snapshot_download
15
 
 
10
  from pathlib import Path
11
  from typing import Any, Dict
12
 
13
+ os.environ["HF_HUB_ENABLE_HF_TRANSFER"] = "0"
14
+
15
  from dotenv import load_dotenv
16
  from huggingface_hub import snapshot_download
17
 
latest_checkpoint/README.md ADDED
@@ -0,0 +1,207 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ base_model: /root/workspace/models/Yehia-7B-preview
3
+ library_name: peft
4
+ pipeline_tag: text-generation
5
+ tags:
6
+ - base_model:adapter:/root/workspace/models/Yehia-7B-preview
7
+ - lora
8
+ - transformers
9
+ ---
10
+
11
+ # Model Card for Model ID
12
+
13
+ <!-- Provide a quick summary of what the model is/does. -->
14
+
15
+
16
+
17
+ ## Model Details
18
+
19
+ ### Model Description
20
+
21
+ <!-- Provide a longer summary of what this model is. -->
22
+
23
+
24
+
25
+ - **Developed by:** [More Information Needed]
26
+ - **Funded by [optional]:** [More Information Needed]
27
+ - **Shared by [optional]:** [More Information Needed]
28
+ - **Model type:** [More Information Needed]
29
+ - **Language(s) (NLP):** [More Information Needed]
30
+ - **License:** [More Information Needed]
31
+ - **Finetuned from model [optional]:** [More Information Needed]
32
+
33
+ ### Model Sources [optional]
34
+
35
+ <!-- Provide the basic links for the model. -->
36
+
37
+ - **Repository:** [More Information Needed]
38
+ - **Paper [optional]:** [More Information Needed]
39
+ - **Demo [optional]:** [More Information Needed]
40
+
41
+ ## Uses
42
+
43
+ <!-- Address questions around how the model is intended to be used, including the foreseeable users of the model and those affected by the model. -->
44
+
45
+ ### Direct Use
46
+
47
+ <!-- This section is for the model use without fine-tuning or plugging into a larger ecosystem/app. -->
48
+
49
+ [More Information Needed]
50
+
51
+ ### Downstream Use [optional]
52
+
53
+ <!-- This section is for the model use when fine-tuned for a task, or when plugged into a larger ecosystem/app -->
54
+
55
+ [More Information Needed]
56
+
57
+ ### Out-of-Scope Use
58
+
59
+ <!-- This section addresses misuse, malicious use, and uses that the model will not work well for. -->
60
+
61
+ [More Information Needed]
62
+
63
+ ## Bias, Risks, and Limitations
64
+
65
+ <!-- This section is meant to convey both technical and sociotechnical limitations. -->
66
+
67
+ [More Information Needed]
68
+
69
+ ### Recommendations
70
+
71
+ <!-- This section is meant to convey recommendations with respect to the bias, risk, and technical limitations. -->
72
+
73
+ Users (both direct and downstream) should be made aware of the risks, biases and limitations of the model. More information needed for further recommendations.
74
+
75
+ ## How to Get Started with the Model
76
+
77
+ Use the code below to get started with the model.
78
+
79
+ [More Information Needed]
80
+
81
+ ## Training Details
82
+
83
+ ### Training Data
84
+
85
+ <!-- This should link to a Dataset Card, perhaps with a short stub of information on what the training data is all about as well as documentation related to data pre-processing or additional filtering. -->
86
+
87
+ [More Information Needed]
88
+
89
+ ### Training Procedure
90
+
91
+ <!-- This relates heavily to the Technical Specifications. Content here should link to that section when it is relevant to the training procedure. -->
92
+
93
+ #### Preprocessing [optional]
94
+
95
+ [More Information Needed]
96
+
97
+
98
+ #### Training Hyperparameters
99
+
100
+ - **Training regime:** [More Information Needed] <!--fp32, fp16 mixed precision, bf16 mixed precision, bf16 non-mixed precision, fp16 non-mixed precision, fp8 mixed precision -->
101
+
102
+ #### Speeds, Sizes, Times [optional]
103
+
104
+ <!-- This section provides information about throughput, start/end time, checkpoint size if relevant, etc. -->
105
+
106
+ [More Information Needed]
107
+
108
+ ## Evaluation
109
+
110
+ <!-- This section describes the evaluation protocols and provides the results. -->
111
+
112
+ ### Testing Data, Factors & Metrics
113
+
114
+ #### Testing Data
115
+
116
+ <!-- This should link to a Dataset Card if possible. -->
117
+
118
+ [More Information Needed]
119
+
120
+ #### Factors
121
+
122
+ <!-- These are the things the evaluation is disaggregating by, e.g., subpopulations or domains. -->
123
+
124
+ [More Information Needed]
125
+
126
+ #### Metrics
127
+
128
+ <!-- These are the evaluation metrics being used, ideally with a description of why. -->
129
+
130
+ [More Information Needed]
131
+
132
+ ### Results
133
+
134
+ [More Information Needed]
135
+
136
+ #### Summary
137
+
138
+
139
+
140
+ ## Model Examination [optional]
141
+
142
+ <!-- Relevant interpretability work for the model goes here -->
143
+
144
+ [More Information Needed]
145
+
146
+ ## Environmental Impact
147
+
148
+ <!-- Total emissions (in grams of CO2eq) and additional considerations, such as electricity usage, go here. Edit the suggested text below accordingly -->
149
+
150
+ Carbon emissions can be estimated using the [Machine Learning Impact calculator](https://mlco2.github.io/impact#compute) presented in [Lacoste et al. (2019)](https://arxiv.org/abs/1910.09700).
151
+
152
+ - **Hardware Type:** [More Information Needed]
153
+ - **Hours used:** [More Information Needed]
154
+ - **Cloud Provider:** [More Information Needed]
155
+ - **Compute Region:** [More Information Needed]
156
+ - **Carbon Emitted:** [More Information Needed]
157
+
158
+ ## Technical Specifications [optional]
159
+
160
+ ### Model Architecture and Objective
161
+
162
+ [More Information Needed]
163
+
164
+ ### Compute Infrastructure
165
+
166
+ [More Information Needed]
167
+
168
+ #### Hardware
169
+
170
+ [More Information Needed]
171
+
172
+ #### Software
173
+
174
+ [More Information Needed]
175
+
176
+ ## Citation [optional]
177
+
178
+ <!-- If there is a paper or blog post introducing the model, the APA and Bibtex information for that should go in this section. -->
179
+
180
+ **BibTeX:**
181
+
182
+ [More Information Needed]
183
+
184
+ **APA:**
185
+
186
+ [More Information Needed]
187
+
188
+ ## Glossary [optional]
189
+
190
+ <!-- If relevant, include terms and calculations in this section that can help readers understand the model or model card. -->
191
+
192
+ [More Information Needed]
193
+
194
+ ## More Information [optional]
195
+
196
+ [More Information Needed]
197
+
198
+ ## Model Card Authors [optional]
199
+
200
+ [More Information Needed]
201
+
202
+ ## Model Card Contact
203
+
204
+ [More Information Needed]
205
+ ### Framework versions
206
+
207
+ - PEFT 0.17.1
latest_checkpoint/adapter_config.json ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "alpha_pattern": {},
3
+ "auto_mapping": null,
4
+ "base_model_name_or_path": "Navid-AI/Yehia-7B-preview",
5
+ "bias": "none",
6
+ "corda_config": null,
7
+ "eva_config": null,
8
+ "exclude_modules": null,
9
+ "fan_in_fan_out": false,
10
+ "inference_mode": true,
11
+ "init_lora_weights": true,
12
+ "layer_replication": null,
13
+ "layers_pattern": null,
14
+ "layers_to_transform": null,
15
+ "loftq_config": {},
16
+ "lora_alpha": 32,
17
+ "lora_bias": false,
18
+ "lora_dropout": 0.05,
19
+ "megatron_config": null,
20
+ "megatron_core": "megatron.core",
21
+ "modules_to_save": null,
22
+ "peft_type": "LORA",
23
+ "qalora_group_size": 16,
24
+ "r": 16,
25
+ "rank_pattern": {},
26
+ "revision": "b9dda4715eafee7e8090d2c83cfe078d75f4ebb8",
27
+ "target_modules": [
28
+ "down_proj",
29
+ "up_proj",
30
+ "o_proj",
31
+ "gate_proj",
32
+ "k_proj",
33
+ "q_proj",
34
+ "v_proj"
35
+ ],
36
+ "target_parameters": null,
37
+ "task_type": "CAUSAL_LM",
38
+ "trainable_token_indices": null,
39
+ "use_dora": false,
40
+ "use_qalora": false,
41
+ "use_rslora": true
42
+ }
latest_checkpoint/adapter_model.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:4390a7f0c09141c9e6c9dc0e82164e7d5a6eb2e07eca3f44c7f76467485bae71
3
+ size 159967880
latest_checkpoint/chat_template.jinja ADDED
@@ -0,0 +1 @@
 
 
1
+ {% if messages[0]['role'] == 'system' %}{% set loop_messages = messages[1:] %}{% set system_message = messages[0]['content'] %}{% else %}{% set loop_messages = messages %}{% set system_message = false %}{% endif %}{% for message in loop_messages %}{% if (message['role'] == 'user') != (loop.index0 % 2 == 0) %}{{ raise_exception('Conversation roles must alternate user/assistant/user/assistant/...') }}{% endif %}{% if loop.index0 == 0 and system_message != false %}{% set content = '<<SYS>>\n' + system_message + '\n<</SYS>>\n\n' + message['content'] %}{% else %}{% set content = message['content'] %}{% endif %}{% if message['role'] == 'user' %}{{ bos_token + ' [INST] ' + content.strip() + ' [/INST]' }}{% elif message['role'] == 'assistant' %}{{ ' ' + content.strip() + ' ' + eos_token }}{% endif %}{% endfor %}
latest_checkpoint/checkpoint_manifest.json ADDED
@@ -0,0 +1,80 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "status": "complete",
3
+ "checkpoint_type": "latest_complete_resumable_trainer_checkpoint",
4
+ "global_step": 2943,
5
+ "best_checkpoint_step": 2750,
6
+ "audit": {
7
+ "global_step": 2943,
8
+ "best_checkpoint_step": 2750,
9
+ "adapter": {
10
+ "tensor_count": 448,
11
+ "finite_tensors": 448,
12
+ "nonzero_tensors": 448
13
+ },
14
+ "optimizer": {
15
+ "tensor_count": 2688,
16
+ "finite_floating_tensor_count": 1792
17
+ },
18
+ "scheduler": {
19
+ "tensor_count": 0,
20
+ "finite_floating_tensor_count": 0
21
+ },
22
+ "rng_state_bytes": 14244,
23
+ "training_args_bytes": 5496
24
+ },
25
+ "files": {
26
+ "README.md": {
27
+ "bytes": 5232,
28
+ "sha256": "32c8a003763070b74cdb20f608f0e5a726570b11d56469cd4b80b2753bd274f4"
29
+ },
30
+ "adapter_config.json": {
31
+ "bytes": 975,
32
+ "sha256": "68656a0760952d4504c6f6cdfb03487622327b6391315289790192bfa6951721"
33
+ },
34
+ "adapter_model.safetensors": {
35
+ "bytes": 159967880,
36
+ "sha256": "4390a7f0c09141c9e6c9dc0e82164e7d5a6eb2e07eca3f44c7f76467485bae71"
37
+ },
38
+ "chat_template.jinja": {
39
+ "bytes": 816,
40
+ "sha256": "f1dff938141b507da4a409b6bb3431382088a97a963acd246a41f2f344ae831f"
41
+ },
42
+ "optimizer.pt": {
43
+ "bytes": 81735892,
44
+ "sha256": "58da25e4579a062fa12ad066e34b666619a4609957fbcc9d246212ca4a431fad"
45
+ },
46
+ "rng_state.pth": {
47
+ "bytes": 14244,
48
+ "sha256": "e1364bce33b92ffd2389bb5e6f0f8bb88878c2a769c50a7e2403c9cd9f3c1fd9"
49
+ },
50
+ "scheduler.pt": {
51
+ "bytes": 1064,
52
+ "sha256": "bd16c6406d87f70b6c298a5e4fb685236ce307ae801894a350532f2e95d3a1fe"
53
+ },
54
+ "special_tokens_map.json": {
55
+ "bytes": 551,
56
+ "sha256": "82d96d7a9e6ced037f12394b7ea6a5b02e6ca87e0d11edaa8d60d9be857ce7db"
57
+ },
58
+ "tokenizer.json": {
59
+ "bytes": 8508152,
60
+ "sha256": "a4ec65a3ef5dee870b4024cf17d9315aff58dc1555e05766f1c18ebfe8405dba"
61
+ },
62
+ "tokenizer.model": {
63
+ "bytes": 1228714,
64
+ "sha256": "feff3deb3537c4a47b77585053ad2aa00484da7907b188e0111cbed1f4592e67"
65
+ },
66
+ "tokenizer_config.json": {
67
+ "bytes": 4402,
68
+ "sha256": "92a93150cc2a9e821e6fc785bbb0aea3cec5d92df529974131efc1c857b52359"
69
+ },
70
+ "trainer_state.json": {
71
+ "bytes": 43812,
72
+ "sha256": "95489ed7a630b99057d444bd7469f2eeb2f9e5f618b077f8f1873f9a1d118251"
73
+ },
74
+ "training_args.bin": {
75
+ "bytes": 5496,
76
+ "sha256": "213db7d4f648a556f875d6706bbb4d0e9ef6f78fecf9b503048cedff8a477c00"
77
+ }
78
+ },
79
+ "full_base_weights_included": false
80
+ }
latest_checkpoint/optimizer.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:58da25e4579a062fa12ad066e34b666619a4609957fbcc9d246212ca4a431fad
3
+ size 81735892
latest_checkpoint/rng_state.pth ADDED
Binary file (14.2 kB). View file
 
latest_checkpoint/scheduler.pt ADDED
Binary file (1.06 kB). View file
 
latest_checkpoint/special_tokens_map.json ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "bos_token": {
3
+ "content": "<s>",
4
+ "lstrip": false,
5
+ "normalized": false,
6
+ "rstrip": false,
7
+ "single_word": false
8
+ },
9
+ "eos_token": {
10
+ "content": "</s>",
11
+ "lstrip": false,
12
+ "normalized": false,
13
+ "rstrip": false,
14
+ "single_word": false
15
+ },
16
+ "pad_token": {
17
+ "content": "</s>",
18
+ "lstrip": false,
19
+ "normalized": false,
20
+ "rstrip": false,
21
+ "single_word": false
22
+ },
23
+ "unk_token": {
24
+ "content": "<unk>",
25
+ "lstrip": false,
26
+ "normalized": false,
27
+ "rstrip": false,
28
+ "single_word": false
29
+ }
30
+ }
latest_checkpoint/tokenizer.json ADDED
The diff for this file is too large to render. See raw diff
 
latest_checkpoint/tokenizer.model ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:feff3deb3537c4a47b77585053ad2aa00484da7907b188e0111cbed1f4592e67
3
+ size 1228714
latest_checkpoint/tokenizer_config.json ADDED
@@ -0,0 +1,207 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "add_bos_token": false,
3
+ "add_eos_token": false,
4
+ "add_prefix_space": null,
5
+ "added_tokens_decoder": {
6
+ "0": {
7
+ "content": "<unk>",
8
+ "lstrip": false,
9
+ "normalized": false,
10
+ "rstrip": false,
11
+ "single_word": false,
12
+ "special": true
13
+ },
14
+ "1": {
15
+ "content": "<s>",
16
+ "lstrip": false,
17
+ "normalized": false,
18
+ "rstrip": false,
19
+ "single_word": false,
20
+ "special": true
21
+ },
22
+ "2": {
23
+ "content": "</s>",
24
+ "lstrip": false,
25
+ "normalized": false,
26
+ "rstrip": false,
27
+ "single_word": false,
28
+ "special": true
29
+ },
30
+ "3": {
31
+ "content": "0",
32
+ "lstrip": false,
33
+ "normalized": false,
34
+ "rstrip": false,
35
+ "single_word": false,
36
+ "special": false
37
+ },
38
+ "4": {
39
+ "content": "1",
40
+ "lstrip": false,
41
+ "normalized": false,
42
+ "rstrip": false,
43
+ "single_word": false,
44
+ "special": false
45
+ },
46
+ "5": {
47
+ "content": "2",
48
+ "lstrip": false,
49
+ "normalized": false,
50
+ "rstrip": false,
51
+ "single_word": false,
52
+ "special": false
53
+ },
54
+ "6": {
55
+ "content": "3",
56
+ "lstrip": false,
57
+ "normalized": false,
58
+ "rstrip": false,
59
+ "single_word": false,
60
+ "special": false
61
+ },
62
+ "7": {
63
+ "content": "4",
64
+ "lstrip": false,
65
+ "normalized": false,
66
+ "rstrip": false,
67
+ "single_word": false,
68
+ "special": false
69
+ },
70
+ "8": {
71
+ "content": "5",
72
+ "lstrip": false,
73
+ "normalized": false,
74
+ "rstrip": false,
75
+ "single_word": false,
76
+ "special": false
77
+ },
78
+ "9": {
79
+ "content": "6",
80
+ "lstrip": false,
81
+ "normalized": false,
82
+ "rstrip": false,
83
+ "single_word": false,
84
+ "special": false
85
+ },
86
+ "10": {
87
+ "content": "7",
88
+ "lstrip": false,
89
+ "normalized": false,
90
+ "rstrip": false,
91
+ "single_word": false,
92
+ "special": false
93
+ },
94
+ "11": {
95
+ "content": "8",
96
+ "lstrip": false,
97
+ "normalized": false,
98
+ "rstrip": false,
99
+ "single_word": false,
100
+ "special": false
101
+ },
102
+ "12": {
103
+ "content": "9",
104
+ "lstrip": false,
105
+ "normalized": false,
106
+ "rstrip": false,
107
+ "single_word": false,
108
+ "special": false
109
+ },
110
+ "13": {
111
+ "content": "٠",
112
+ "lstrip": false,
113
+ "normalized": false,
114
+ "rstrip": false,
115
+ "single_word": false,
116
+ "special": false
117
+ },
118
+ "14": {
119
+ "content": "١",
120
+ "lstrip": false,
121
+ "normalized": false,
122
+ "rstrip": false,
123
+ "single_word": false,
124
+ "special": false
125
+ },
126
+ "15": {
127
+ "content": "٢",
128
+ "lstrip": false,
129
+ "normalized": false,
130
+ "rstrip": false,
131
+ "single_word": false,
132
+ "special": false
133
+ },
134
+ "16": {
135
+ "content": "٣",
136
+ "lstrip": false,
137
+ "normalized": false,
138
+ "rstrip": false,
139
+ "single_word": false,
140
+ "special": false
141
+ },
142
+ "17": {
143
+ "content": "٤",
144
+ "lstrip": false,
145
+ "normalized": false,
146
+ "rstrip": false,
147
+ "single_word": false,
148
+ "special": false
149
+ },
150
+ "18": {
151
+ "content": "٥",
152
+ "lstrip": false,
153
+ "normalized": false,
154
+ "rstrip": false,
155
+ "single_word": false,
156
+ "special": false
157
+ },
158
+ "19": {
159
+ "content": "٦",
160
+ "lstrip": false,
161
+ "normalized": false,
162
+ "rstrip": false,
163
+ "single_word": false,
164
+ "special": false
165
+ },
166
+ "20": {
167
+ "content": "٧",
168
+ "lstrip": false,
169
+ "normalized": false,
170
+ "rstrip": false,
171
+ "single_word": false,
172
+ "special": false
173
+ },
174
+ "21": {
175
+ "content": "٨",
176
+ "lstrip": false,
177
+ "normalized": false,
178
+ "rstrip": false,
179
+ "single_word": false,
180
+ "special": false
181
+ },
182
+ "22": {
183
+ "content": "٩",
184
+ "lstrip": false,
185
+ "normalized": false,
186
+ "rstrip": false,
187
+ "single_word": false,
188
+ "special": false
189
+ }
190
+ },
191
+ "bos_token": "<s>",
192
+ "clean_up_tokenization_spaces": false,
193
+ "eos_token": "</s>",
194
+ "extra_special_tokens": {},
195
+ "legacy": false,
196
+ "max_length": null,
197
+ "model_max_length": 1000000000000000019884624838656,
198
+ "pad_to_multiple_of": null,
199
+ "pad_token": "</s>",
200
+ "pad_token_type_id": 0,
201
+ "padding_side": "right",
202
+ "sp_model_kwargs": {},
203
+ "spaces_between_special_tokens": false,
204
+ "tokenizer_class": "LlamaTokenizer",
205
+ "unk_token": "<unk>",
206
+ "use_default_system_prompt": false
207
+ }
latest_checkpoint/trainer_state.json ADDED
@@ -0,0 +1,1448 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "best_global_step": 2750,
3
+ "best_metric": 0.6332622601279317,
4
+ "best_model_checkpoint": "outputs/DRU-RE-Yehia-choice-final/checkpoints/checkpoint-2750",
5
+ "epoch": 3.0,
6
+ "eval_steps": 250,
7
+ "global_step": 2943,
8
+ "is_hyper_param_search": false,
9
+ "is_local_process_zero": true,
10
+ "is_world_process_zero": true,
11
+ "log_history": [
12
+ {
13
+ "epoch": 0.02039775624681285,
14
+ "grad_norm": 32.115570068359375,
15
+ "learning_rate": 6.418918918918919e-06,
16
+ "loss": 1.4138,
17
+ "step": 20
18
+ },
19
+ {
20
+ "epoch": 0.0407955124936257,
21
+ "grad_norm": 36.402008056640625,
22
+ "learning_rate": 1.3175675675675675e-05,
23
+ "loss": 1.0761,
24
+ "step": 40
25
+ },
26
+ {
27
+ "epoch": 0.06119326874043855,
28
+ "grad_norm": 36.12466812133789,
29
+ "learning_rate": 1.9932432432432434e-05,
30
+ "loss": 0.9291,
31
+ "step": 60
32
+ },
33
+ {
34
+ "epoch": 0.0815910249872514,
35
+ "grad_norm": 32.74873352050781,
36
+ "learning_rate": 2.668918918918919e-05,
37
+ "loss": 0.8514,
38
+ "step": 80
39
+ },
40
+ {
41
+ "epoch": 0.10198878123406425,
42
+ "grad_norm": 25.69573211669922,
43
+ "learning_rate": 3.344594594594595e-05,
44
+ "loss": 0.7376,
45
+ "step": 100
46
+ },
47
+ {
48
+ "epoch": 0.1223865374808771,
49
+ "grad_norm": 18.53243064880371,
50
+ "learning_rate": 4.0202702702702707e-05,
51
+ "loss": 0.6736,
52
+ "step": 120
53
+ },
54
+ {
55
+ "epoch": 0.14278429372768994,
56
+ "grad_norm": 42.1881217956543,
57
+ "learning_rate": 4.695945945945946e-05,
58
+ "loss": 0.5628,
59
+ "step": 140
60
+ },
61
+ {
62
+ "epoch": 0.1631820499745028,
63
+ "grad_norm": 29.84023666381836,
64
+ "learning_rate": 4.999808915274971e-05,
65
+ "loss": 0.7305,
66
+ "step": 160
67
+ },
68
+ {
69
+ "epoch": 0.18357980622131564,
70
+ "grad_norm": 14.481285095214844,
71
+ "learning_rate": 4.998482510897682e-05,
72
+ "loss": 0.4569,
73
+ "step": 180
74
+ },
75
+ {
76
+ "epoch": 0.2039775624681285,
77
+ "grad_norm": 11.743460655212402,
78
+ "learning_rate": 4.995893540384707e-05,
79
+ "loss": 0.6409,
80
+ "step": 200
81
+ },
82
+ {
83
+ "epoch": 0.22437531871494135,
84
+ "grad_norm": 20.807933807373047,
85
+ "learning_rate": 4.9920433120287726e-05,
86
+ "loss": 0.647,
87
+ "step": 220
88
+ },
89
+ {
90
+ "epoch": 0.2447730749617542,
91
+ "grad_norm": 9.826773643493652,
92
+ "learning_rate": 4.986933771478052e-05,
93
+ "loss": 0.5513,
94
+ "step": 240
95
+ },
96
+ {
97
+ "epoch": 0.25497195308516063,
98
+ "eval_accuracy": 0.6585655008891523,
99
+ "eval_decision_nll": 1.3316565713164505,
100
+ "eval_evaluated_rows": 1687,
101
+ "eval_global_step": 250,
102
+ "eval_invalid_output_rate": 0.0,
103
+ "eval_invalid_outputs": 0,
104
+ "eval_loss": 1.3316565713164505,
105
+ "eval_macro_f1_41": 0.6391334292743345,
106
+ "eval_no_relation_logit_bias": -1.0800000000000387,
107
+ "eval_positive_fn": 345,
108
+ "eval_positive_fp": 398,
109
+ "eval_positive_micro_f1": 0.5842193620593173,
110
+ "eval_positive_micro_precision": 0.5673913043478261,
111
+ "eval_positive_micro_recall": 0.6020761245674741,
112
+ "eval_positive_tp": 522,
113
+ "eval_raw_accuracy": 0.6674570243034973,
114
+ "eval_raw_macro_f1_41": 0.6304263381181072,
115
+ "eval_raw_positive_micro_f1": 0.5753588516746412,
116
+ "eval_raw_positive_micro_precision": 0.5975155279503106,
117
+ "eval_raw_positive_micro_recall": 0.5547866205305652,
118
+ "eval_raw_weighted_f1_41": 0.644239845397826,
119
+ "eval_rows": 1687,
120
+ "eval_unconstrained_accuracy": 0.6674570243034973,
121
+ "eval_unconstrained_invalid_output_rate": 0.0,
122
+ "eval_unconstrained_invalid_outputs": 0,
123
+ "eval_unconstrained_macro_f1_41": 0.6304263381181072,
124
+ "eval_unconstrained_positive_micro_f1": 0.5753588516746412,
125
+ "eval_unconstrained_positive_micro_precision": 0.5975155279503106,
126
+ "eval_unconstrained_positive_micro_recall": 0.5547866205305652,
127
+ "eval_unconstrained_weighted_f1_41": 0.644239845397826,
128
+ "eval_weighted_f1_41": 0.6476916479143388,
129
+ "step": 250
130
+ },
131
+ {
132
+ "epoch": 0.26517083120856705,
133
+ "grad_norm": 15.046053886413574,
134
+ "learning_rate": 4.98056750075297e-05,
135
+ "loss": 0.4321,
136
+ "step": 260
137
+ },
138
+ {
139
+ "epoch": 0.2855685874553799,
140
+ "grad_norm": 11.937222480773926,
141
+ "learning_rate": 4.972947716941413e-05,
142
+ "loss": 0.4411,
143
+ "step": 280
144
+ },
145
+ {
146
+ "epoch": 0.3059663437021928,
147
+ "grad_norm": 11.15040111541748,
148
+ "learning_rate": 4.9640782705730394e-05,
149
+ "loss": 0.4402,
150
+ "step": 300
151
+ },
152
+ {
153
+ "epoch": 0.3263640999490056,
154
+ "grad_norm": 9.428462982177734,
155
+ "learning_rate": 4.953963643673468e-05,
156
+ "loss": 0.4287,
157
+ "step": 320
158
+ },
159
+ {
160
+ "epoch": 0.34676185619581845,
161
+ "grad_norm": 25.721332550048828,
162
+ "learning_rate": 4.9426089474993696e-05,
163
+ "loss": 0.5057,
164
+ "step": 340
165
+ },
166
+ {
167
+ "epoch": 0.3671596124426313,
168
+ "grad_norm": 8.766318321228027,
169
+ "learning_rate": 4.930019919955576e-05,
170
+ "loss": 0.3315,
171
+ "step": 360
172
+ },
173
+ {
174
+ "epoch": 0.3875573686894442,
175
+ "grad_norm": 10.508740425109863,
176
+ "learning_rate": 4.916202922695526e-05,
177
+ "loss": 0.4607,
178
+ "step": 380
179
+ },
180
+ {
181
+ "epoch": 0.407955124936257,
182
+ "grad_norm": 4.016866683959961,
183
+ "learning_rate": 4.901164937906511e-05,
184
+ "loss": 0.2961,
185
+ "step": 400
186
+ },
187
+ {
188
+ "epoch": 0.42835288118306986,
189
+ "grad_norm": 21.203813552856445,
190
+ "learning_rate": 4.884913564781346e-05,
191
+ "loss": 0.3825,
192
+ "step": 420
193
+ },
194
+ {
195
+ "epoch": 0.4487506374298827,
196
+ "grad_norm": 2.3917906284332275,
197
+ "learning_rate": 4.867457015678244e-05,
198
+ "loss": 0.4058,
199
+ "step": 440
200
+ },
201
+ {
202
+ "epoch": 0.4691483936766956,
203
+ "grad_norm": 19.52354621887207,
204
+ "learning_rate": 4.848804111970836e-05,
205
+ "loss": 0.3567,
206
+ "step": 460
207
+ },
208
+ {
209
+ "epoch": 0.4895461499235084,
210
+ "grad_norm": 19.423274993896484,
211
+ "learning_rate": 4.8289642795904433e-05,
212
+ "loss": 0.3384,
213
+ "step": 480
214
+ },
215
+ {
216
+ "epoch": 0.5099439061703213,
217
+ "grad_norm": 4.385583877563477,
218
+ "learning_rate": 4.807947544262839e-05,
219
+ "loss": 0.3797,
220
+ "step": 500
221
+ },
222
+ {
223
+ "epoch": 0.5099439061703213,
224
+ "eval_accuracy": 0.6822762299940723,
225
+ "eval_decision_nll": 1.3185705768334208,
226
+ "eval_evaluated_rows": 1687,
227
+ "eval_global_step": 500,
228
+ "eval_invalid_output_rate": 0.0,
229
+ "eval_invalid_outputs": 0,
230
+ "eval_loss": 1.3185705768334208,
231
+ "eval_macro_f1_41": 0.6691422803869735,
232
+ "eval_no_relation_logit_bias": 0.31999999999995643,
233
+ "eval_positive_fn": 333,
234
+ "eval_positive_fp": 389,
235
+ "eval_positive_micro_f1": 0.5966480446927374,
236
+ "eval_positive_micro_precision": 0.5785482123510293,
237
+ "eval_positive_micro_recall": 0.615916955017301,
238
+ "eval_positive_tp": 534,
239
+ "eval_raw_accuracy": 0.6716064018968583,
240
+ "eval_raw_macro_f1_41": 0.6698756813978369,
241
+ "eval_raw_positive_micro_f1": 0.5944474686989656,
242
+ "eval_raw_positive_micro_precision": 0.5628865979381443,
243
+ "eval_raw_positive_micro_recall": 0.629757785467128,
244
+ "eval_raw_weighted_f1_41": 0.6513946323858064,
245
+ "eval_rows": 1687,
246
+ "eval_unconstrained_accuracy": 0.6716064018968583,
247
+ "eval_unconstrained_invalid_output_rate": 0.0,
248
+ "eval_unconstrained_invalid_outputs": 0,
249
+ "eval_unconstrained_macro_f1_41": 0.6698756813978369,
250
+ "eval_unconstrained_positive_micro_f1": 0.5944474686989656,
251
+ "eval_unconstrained_positive_micro_precision": 0.5628865979381443,
252
+ "eval_unconstrained_positive_micro_recall": 0.629757785467128,
253
+ "eval_unconstrained_weighted_f1_41": 0.6513946323858064,
254
+ "eval_weighted_f1_41": 0.6589857809303985,
255
+ "step": 500
256
+ },
257
+ {
258
+ "epoch": 0.5303416624171341,
259
+ "grad_norm": 2.1002912521362305,
260
+ "learning_rate": 4.785764526441913e-05,
261
+ "loss": 0.3829,
262
+ "step": 520
263
+ },
264
+ {
265
+ "epoch": 0.5507394186639469,
266
+ "grad_norm": 12.052459716796875,
267
+ "learning_rate": 4.762426435942812e-05,
268
+ "loss": 0.3276,
269
+ "step": 540
270
+ },
271
+ {
272
+ "epoch": 0.5711371749107598,
273
+ "grad_norm": 11.039682388305664,
274
+ "learning_rate": 4.7379450662772394e-05,
275
+ "loss": 0.337,
276
+ "step": 560
277
+ },
278
+ {
279
+ "epoch": 0.5915349311575727,
280
+ "grad_norm": 4.882332801818848,
281
+ "learning_rate": 4.7123327886938076e-05,
282
+ "loss": 0.3724,
283
+ "step": 580
284
+ },
285
+ {
286
+ "epoch": 0.6119326874043856,
287
+ "grad_norm": 4.446337699890137,
288
+ "learning_rate": 4.685602545926432e-05,
289
+ "loss": 0.2834,
290
+ "step": 600
291
+ },
292
+ {
293
+ "epoch": 0.6323304436511984,
294
+ "grad_norm": 10.867338180541992,
295
+ "learning_rate": 4.657767845653943e-05,
296
+ "loss": 0.4342,
297
+ "step": 620
298
+ },
299
+ {
300
+ "epoch": 0.6527281998980112,
301
+ "grad_norm": 0.6202830672264099,
302
+ "learning_rate": 4.628842753674203e-05,
303
+ "loss": 0.2548,
304
+ "step": 640
305
+ },
306
+ {
307
+ "epoch": 0.6731259561448241,
308
+ "grad_norm": 0.782004177570343,
309
+ "learning_rate": 4.598841886796192e-05,
310
+ "loss": 0.2398,
311
+ "step": 660
312
+ },
313
+ {
314
+ "epoch": 0.6935237123916369,
315
+ "grad_norm": 3.5981996059417725,
316
+ "learning_rate": 4.5677804054536544e-05,
317
+ "loss": 0.3756,
318
+ "step": 680
319
+ },
320
+ {
321
+ "epoch": 0.7139214686384497,
322
+ "grad_norm": 12.359613418579102,
323
+ "learning_rate": 4.5356740060440194e-05,
324
+ "loss": 0.3284,
325
+ "step": 700
326
+ },
327
+ {
328
+ "epoch": 0.7343192248852626,
329
+ "grad_norm": 4.867230415344238,
330
+ "learning_rate": 4.502538912996499e-05,
331
+ "loss": 0.3286,
332
+ "step": 720
333
+ },
334
+ {
335
+ "epoch": 0.7547169811320755,
336
+ "grad_norm": 26.788902282714844,
337
+ "learning_rate": 4.468391870573342e-05,
338
+ "loss": 0.2513,
339
+ "step": 740
340
+ },
341
+ {
342
+ "epoch": 0.7649158592554819,
343
+ "eval_accuracy": 0.6609365737996443,
344
+ "eval_decision_nll": 1.5595358801651227,
345
+ "eval_evaluated_rows": 1687,
346
+ "eval_global_step": 750,
347
+ "eval_invalid_output_rate": 0.0,
348
+ "eval_invalid_outputs": 0,
349
+ "eval_loss": 1.5595358801651227,
350
+ "eval_macro_f1_41": 0.6404558346600874,
351
+ "eval_no_relation_logit_bias": -0.64000000000004,
352
+ "eval_positive_fn": 362,
353
+ "eval_positive_fp": 349,
354
+ "eval_positive_micro_f1": 0.5868680999418943,
355
+ "eval_positive_micro_precision": 0.5913348946135831,
356
+ "eval_positive_micro_recall": 0.5824682814302191,
357
+ "eval_positive_tp": 505,
358
+ "eval_raw_accuracy": 0.6644931831653823,
359
+ "eval_raw_macro_f1_41": 0.6435209638657218,
360
+ "eval_raw_positive_micro_f1": 0.5820359281437126,
361
+ "eval_raw_positive_micro_precision": 0.6052303860523038,
362
+ "eval_raw_positive_micro_recall": 0.5605536332179931,
363
+ "eval_raw_weighted_f1_41": 0.6447652943100252,
364
+ "eval_rows": 1687,
365
+ "eval_unconstrained_accuracy": 0.6644931831653823,
366
+ "eval_unconstrained_invalid_output_rate": 0.0,
367
+ "eval_unconstrained_invalid_outputs": 0,
368
+ "eval_unconstrained_macro_f1_41": 0.6435209638657218,
369
+ "eval_unconstrained_positive_micro_f1": 0.5820359281437126,
370
+ "eval_unconstrained_positive_micro_precision": 0.6052303860523038,
371
+ "eval_unconstrained_positive_micro_recall": 0.5605536332179931,
372
+ "eval_unconstrained_weighted_f1_41": 0.6447652943100252,
373
+ "eval_weighted_f1_41": 0.6460930593744794,
374
+ "step": 750
375
+ },
376
+ {
377
+ "epoch": 0.7751147373788884,
378
+ "grad_norm": 9.591691970825195,
379
+ "learning_rate": 4.433250134408401e-05,
380
+ "loss": 0.2574,
381
+ "step": 760
382
+ },
383
+ {
384
+ "epoch": 0.7955124936257012,
385
+ "grad_norm": 4.1339945793151855,
386
+ "learning_rate": 4.39713146278729e-05,
387
+ "loss": 0.3176,
388
+ "step": 780
389
+ },
390
+ {
391
+ "epoch": 0.815910249872514,
392
+ "grad_norm": 6.561213493347168,
393
+ "learning_rate": 4.3600541076735346e-05,
394
+ "loss": 0.1778,
395
+ "step": 800
396
+ },
397
+ {
398
+ "epoch": 0.8363080061193269,
399
+ "grad_norm": 16.542247772216797,
400
+ "learning_rate": 4.322036805485245e-05,
401
+ "loss": 0.3041,
402
+ "step": 820
403
+ },
404
+ {
405
+ "epoch": 0.8567057623661397,
406
+ "grad_norm": 0.9108038544654846,
407
+ "learning_rate": 4.283098767626984e-05,
408
+ "loss": 0.2437,
409
+ "step": 840
410
+ },
411
+ {
412
+ "epoch": 0.8771035186129525,
413
+ "grad_norm": 3.841179847717285,
414
+ "learning_rate": 4.243259670781611e-05,
415
+ "loss": 0.3884,
416
+ "step": 860
417
+ },
418
+ {
419
+ "epoch": 0.8975012748597654,
420
+ "grad_norm": 10.145074844360352,
421
+ "learning_rate": 4.202539646966993e-05,
422
+ "loss": 0.2895,
423
+ "step": 880
424
+ },
425
+ {
426
+ "epoch": 0.9178990311065782,
427
+ "grad_norm": 0.8870783448219299,
428
+ "learning_rate": 4.1609592733626335e-05,
429
+ "loss": 0.2225,
430
+ "step": 900
431
+ },
432
+ {
433
+ "epoch": 0.9382967873533912,
434
+ "grad_norm": 0.04693833366036415,
435
+ "learning_rate": 4.118539561911339e-05,
436
+ "loss": 0.1843,
437
+ "step": 920
438
+ },
439
+ {
440
+ "epoch": 0.958694543600204,
441
+ "grad_norm": 8.443830490112305,
442
+ "learning_rate": 4.075301948701186e-05,
443
+ "loss": 0.2522,
444
+ "step": 940
445
+ },
446
+ {
447
+ "epoch": 0.9790922998470168,
448
+ "grad_norm": 0.20142008364200592,
449
+ "learning_rate": 4.031268283133158e-05,
450
+ "loss": 0.2275,
451
+ "step": 960
452
+ },
453
+ {
454
+ "epoch": 0.9994900560938297,
455
+ "grad_norm": 3.326535940170288,
456
+ "learning_rate": 3.986460816879913e-05,
457
+ "loss": 0.2407,
458
+ "step": 980
459
+ },
460
+ {
461
+ "epoch": 1.0193778684344723,
462
+ "grad_norm": 15.066499710083008,
463
+ "learning_rate": 3.9409021926412795e-05,
464
+ "loss": 0.2335,
465
+ "step": 1000
466
+ },
467
+ {
468
+ "epoch": 1.0193778684344723,
469
+ "eval_accuracy": 0.6597510373443983,
470
+ "eval_decision_nll": 1.9229287061029874,
471
+ "eval_evaluated_rows": 1687,
472
+ "eval_global_step": 1000,
473
+ "eval_invalid_output_rate": 0.0,
474
+ "eval_invalid_outputs": 0,
475
+ "eval_loss": 1.9229287061029874,
476
+ "eval_macro_f1_41": 0.6841875774786024,
477
+ "eval_no_relation_logit_bias": -4.340000000000028,
478
+ "eval_positive_fn": 306,
479
+ "eval_positive_fp": 448,
480
+ "eval_positive_micro_f1": 0.5980810234541578,
481
+ "eval_positive_micro_precision": 0.55599603567889,
482
+ "eval_positive_micro_recall": 0.6470588235294118,
483
+ "eval_positive_tp": 561,
484
+ "eval_raw_accuracy": 0.6674570243034973,
485
+ "eval_raw_macro_f1_41": 0.6585356377059267,
486
+ "eval_raw_positive_micro_f1": 0.5758477096966093,
487
+ "eval_raw_positive_micro_precision": 0.5945945945945946,
488
+ "eval_raw_positive_micro_recall": 0.558246828143022,
489
+ "eval_raw_weighted_f1_41": 0.6389810017230654,
490
+ "eval_rows": 1687,
491
+ "eval_unconstrained_accuracy": 0.6674570243034973,
492
+ "eval_unconstrained_invalid_output_rate": 0.0,
493
+ "eval_unconstrained_invalid_outputs": 0,
494
+ "eval_unconstrained_macro_f1_41": 0.6585356377059267,
495
+ "eval_unconstrained_positive_micro_f1": 0.5758477096966093,
496
+ "eval_unconstrained_positive_micro_precision": 0.5945945945945946,
497
+ "eval_unconstrained_positive_micro_recall": 0.558246828143022,
498
+ "eval_unconstrained_weighted_f1_41": 0.6389810017230654,
499
+ "eval_weighted_f1_41": 0.6457988065135049,
500
+ "step": 1000
501
+ },
502
+ {
503
+ "epoch": 1.039775624681285,
504
+ "grad_norm": 1.4003945589065552,
505
+ "learning_rate": 3.8946154327021434e-05,
506
+ "loss": 0.257,
507
+ "step": 1020
508
+ },
509
+ {
510
+ "epoch": 1.060173380928098,
511
+ "grad_norm": 9.492857933044434,
512
+ "learning_rate": 3.8476239272985284e-05,
513
+ "loss": 0.2098,
514
+ "step": 1040
515
+ },
516
+ {
517
+ "epoch": 1.0805711371749107,
518
+ "grad_norm": 0.42550796270370483,
519
+ "learning_rate": 3.7999514227977304e-05,
520
+ "loss": 0.1815,
521
+ "step": 1060
522
+ },
523
+ {
524
+ "epoch": 1.1009688934217237,
525
+ "grad_norm": 13.100898742675781,
526
+ "learning_rate": 3.751622009698492e-05,
527
+ "loss": 0.2888,
528
+ "step": 1080
529
+ },
530
+ {
531
+ "epoch": 1.1213666496685364,
532
+ "grad_norm": 19.209449768066406,
533
+ "learning_rate": 3.702660110457272e-05,
534
+ "loss": 0.1834,
535
+ "step": 1100
536
+ },
537
+ {
538
+ "epoch": 1.1417644059153493,
539
+ "grad_norm": 24.14339256286621,
540
+ "learning_rate": 3.65309046714677e-05,
541
+ "loss": 0.2111,
542
+ "step": 1120
543
+ },
544
+ {
545
+ "epoch": 1.1621621621621623,
546
+ "grad_norm": 1.1118710041046143,
547
+ "learning_rate": 3.602938128952933e-05,
548
+ "loss": 0.1372,
549
+ "step": 1140
550
+ },
551
+ {
552
+ "epoch": 1.182559918408975,
553
+ "grad_norm": 0.1752534657716751,
554
+ "learning_rate": 3.5522284395167724e-05,
555
+ "loss": 0.1914,
556
+ "step": 1160
557
+ },
558
+ {
559
+ "epoch": 1.202957674655788,
560
+ "grad_norm": 9.813786506652832,
561
+ "learning_rate": 3.50098702412738e-05,
562
+ "loss": 0.1248,
563
+ "step": 1180
564
+ },
565
+ {
566
+ "epoch": 1.2233554309026007,
567
+ "grad_norm": 16.98102569580078,
568
+ "learning_rate": 3.4492397767726195e-05,
569
+ "loss": 0.2289,
570
+ "step": 1200
571
+ },
572
+ {
573
+ "epoch": 1.2437531871494136,
574
+ "grad_norm": 0.7757235765457153,
575
+ "learning_rate": 3.397012847054035e-05,
576
+ "loss": 0.1747,
577
+ "step": 1220
578
+ },
579
+ {
580
+ "epoch": 1.2641509433962264,
581
+ "grad_norm": 0.39124366641044617,
582
+ "learning_rate": 3.34433262697259e-05,
583
+ "loss": 0.1529,
584
+ "step": 1240
585
+ },
586
+ {
587
+ "epoch": 1.2743498215196327,
588
+ "eval_accuracy": 0.6342620035566093,
589
+ "eval_decision_nll": 2.0380127403110038,
590
+ "eval_evaluated_rows": 1687,
591
+ "eval_global_step": 1250,
592
+ "eval_invalid_output_rate": 0.0,
593
+ "eval_invalid_outputs": 0,
594
+ "eval_loss": 2.0380127403110038,
595
+ "eval_macro_f1_41": 0.6698930909088061,
596
+ "eval_no_relation_logit_bias": -3.390000000000033,
597
+ "eval_positive_fn": 296,
598
+ "eval_positive_fp": 495,
599
+ "eval_positive_micro_f1": 0.5907915157785825,
600
+ "eval_positive_micro_precision": 0.5356472795497186,
601
+ "eval_positive_micro_recall": 0.6585928489042676,
602
+ "eval_positive_tp": 571,
603
+ "eval_raw_accuracy": 0.6544161232957914,
604
+ "eval_raw_macro_f1_41": 0.6698988570776612,
605
+ "eval_raw_positive_micro_f1": 0.5903814262023218,
606
+ "eval_raw_positive_micro_precision": 0.5668789808917197,
607
+ "eval_raw_positive_micro_recall": 0.615916955017301,
608
+ "eval_raw_weighted_f1_41": 0.6424805452797219,
609
+ "eval_rows": 1687,
610
+ "eval_unconstrained_accuracy": 0.6544161232957914,
611
+ "eval_unconstrained_invalid_output_rate": 0.0,
612
+ "eval_unconstrained_invalid_outputs": 0,
613
+ "eval_unconstrained_macro_f1_41": 0.6698988570776612,
614
+ "eval_unconstrained_positive_micro_f1": 0.5903814262023218,
615
+ "eval_unconstrained_positive_micro_precision": 0.5668789808917197,
616
+ "eval_unconstrained_positive_micro_recall": 0.615916955017301,
617
+ "eval_unconstrained_weighted_f1_41": 0.6424805452797219,
618
+ "eval_weighted_f1_41": 0.6300222619645572,
619
+ "step": 1250
620
+ },
621
+ {
622
+ "epoch": 1.2845486996430393,
623
+ "grad_norm": 22.90714454650879,
624
+ "learning_rate": 3.2912257375919126e-05,
625
+ "loss": 0.1949,
626
+ "step": 1260
627
+ },
628
+ {
629
+ "epoch": 1.3049464558898523,
630
+ "grad_norm": 0.18795835971832275,
631
+ "learning_rate": 3.237719015585787e-05,
632
+ "loss": 0.1413,
633
+ "step": 1280
634
+ },
635
+ {
636
+ "epoch": 1.325344212136665,
637
+ "grad_norm": 14.755730628967285,
638
+ "learning_rate": 3.1838394996766946e-05,
639
+ "loss": 0.1334,
640
+ "step": 1300
641
+ },
642
+ {
643
+ "epoch": 1.3457419683834777,
644
+ "grad_norm": 5.208130359649658,
645
+ "learning_rate": 3.12961441697225e-05,
646
+ "loss": 0.1567,
647
+ "step": 1320
648
+ },
649
+ {
650
+ "epoch": 1.3661397246302907,
651
+ "grad_norm": 21.01090431213379,
652
+ "learning_rate": 3.075071169206437e-05,
653
+ "loss": 0.1725,
654
+ "step": 1340
655
+ },
656
+ {
657
+ "epoch": 1.3865374808771036,
658
+ "grad_norm": 10.819672584533691,
659
+ "learning_rate": 3.0202373188926037e-05,
660
+ "loss": 0.1455,
661
+ "step": 1360
662
+ },
663
+ {
664
+ "epoch": 1.4069352371239163,
665
+ "grad_norm": 13.872186660766602,
666
+ "learning_rate": 2.965140575395211e-05,
667
+ "loss": 0.1137,
668
+ "step": 1380
669
+ },
670
+ {
671
+ "epoch": 1.4273329933707293,
672
+ "grad_norm": 0.21544072031974792,
673
+ "learning_rate": 2.9098087809273743e-05,
674
+ "loss": 0.243,
675
+ "step": 1400
676
+ },
677
+ {
678
+ "epoch": 1.447730749617542,
679
+ "grad_norm": 16.329748153686523,
680
+ "learning_rate": 2.854269896481261e-05,
681
+ "loss": 0.1533,
682
+ "step": 1420
683
+ },
684
+ {
685
+ "epoch": 1.468128505864355,
686
+ "grad_norm": 0.31907919049263,
687
+ "learning_rate": 2.7985519876984795e-05,
688
+ "loss": 0.1507,
689
+ "step": 1440
690
+ },
691
+ {
692
+ "epoch": 1.4885262621111677,
693
+ "grad_norm": 6.718308925628662,
694
+ "learning_rate": 2.7426832106875772e-05,
695
+ "loss": 0.1287,
696
+ "step": 1460
697
+ },
698
+ {
699
+ "epoch": 1.5089240183579806,
700
+ "grad_norm": 0.5384275317192078,
701
+ "learning_rate": 2.6866917977958246e-05,
702
+ "loss": 0.1687,
703
+ "step": 1480
704
+ },
705
+ {
706
+ "epoch": 1.5293217746047936,
707
+ "grad_norm": 2.506664514541626,
708
+ "learning_rate": 2.6306060433424712e-05,
709
+ "loss": 0.1143,
710
+ "step": 1500
711
+ },
712
+ {
713
+ "epoch": 1.5293217746047936,
714
+ "eval_accuracy": 0.7030231179608772,
715
+ "eval_decision_nll": 2.2493974038956783,
716
+ "eval_evaluated_rows": 1687,
717
+ "eval_global_step": 1500,
718
+ "eval_invalid_output_rate": 0.0,
719
+ "eval_invalid_outputs": 0,
720
+ "eval_loss": 2.2493974038956783,
721
+ "eval_macro_f1_41": 0.6625316285831848,
722
+ "eval_no_relation_logit_bias": -7.1200000000000205,
723
+ "eval_positive_fn": 288,
724
+ "eval_positive_fp": 385,
725
+ "eval_positive_micro_f1": 0.6324412889131622,
726
+ "eval_positive_micro_precision": 0.6006224066390041,
727
+ "eval_positive_micro_recall": 0.6678200692041523,
728
+ "eval_positive_tp": 579,
729
+ "eval_raw_accuracy": 0.6870183758150563,
730
+ "eval_raw_macro_f1_41": 0.610806649098418,
731
+ "eval_raw_positive_micro_f1": 0.5806861499364676,
732
+ "eval_raw_positive_micro_precision": 0.6463932107496464,
733
+ "eval_raw_positive_micro_recall": 0.5271049596309112,
734
+ "eval_raw_weighted_f1_41": 0.6527180202093893,
735
+ "eval_rows": 1687,
736
+ "eval_unconstrained_accuracy": 0.6870183758150563,
737
+ "eval_unconstrained_invalid_output_rate": 0.0,
738
+ "eval_unconstrained_invalid_outputs": 0,
739
+ "eval_unconstrained_macro_f1_41": 0.610806649098418,
740
+ "eval_unconstrained_positive_micro_f1": 0.5806861499364676,
741
+ "eval_unconstrained_positive_micro_precision": 0.6463932107496464,
742
+ "eval_unconstrained_positive_micro_recall": 0.5271049596309112,
743
+ "eval_unconstrained_weighted_f1_41": 0.6527180202093893,
744
+ "eval_weighted_f1_41": 0.6849216700402462,
745
+ "step": 1500
746
+ },
747
+ {
748
+ "epoch": 1.5497195308516063,
749
+ "grad_norm": 12.772496223449707,
750
+ "learning_rate": 2.5744542893206924e-05,
751
+ "loss": 0.1322,
752
+ "step": 1520
753
+ },
754
+ {
755
+ "epoch": 1.570117287098419,
756
+ "grad_norm": 10.884116172790527,
757
+ "learning_rate": 2.5182649110754324e-05,
758
+ "loss": 0.1996,
759
+ "step": 1540
760
+ },
761
+ {
762
+ "epoch": 1.590515043345232,
763
+ "grad_norm": 2.9933547973632812,
764
+ "learning_rate": 2.4620663029644068e-05,
765
+ "loss": 0.139,
766
+ "step": 1560
767
+ },
768
+ {
769
+ "epoch": 1.610912799592045,
770
+ "grad_norm": 4.138698101043701,
771
+ "learning_rate": 2.4058868640094857e-05,
772
+ "loss": 0.1658,
773
+ "step": 1580
774
+ },
775
+ {
776
+ "epoch": 1.6313105558388576,
777
+ "grad_norm": 35.998722076416016,
778
+ "learning_rate": 2.3497549835457328e-05,
779
+ "loss": 0.1253,
780
+ "step": 1600
781
+ },
782
+ {
783
+ "epoch": 1.6517083120856706,
784
+ "grad_norm": 15.26508617401123,
785
+ "learning_rate": 2.293699026875322e-05,
786
+ "loss": 0.1585,
787
+ "step": 1620
788
+ },
789
+ {
790
+ "epoch": 1.6721060683324835,
791
+ "grad_norm": 0.22217246890068054,
792
+ "learning_rate": 2.2377473209336214e-05,
793
+ "loss": 0.129,
794
+ "step": 1640
795
+ },
796
+ {
797
+ "epoch": 1.6925038245792963,
798
+ "grad_norm": 6.413891315460205,
799
+ "learning_rate": 2.1819281399746392e-05,
800
+ "loss": 0.1019,
801
+ "step": 1660
802
+ },
803
+ {
804
+ "epoch": 1.712901580826109,
805
+ "grad_norm": 0.07089672237634659,
806
+ "learning_rate": 2.126269691283117e-05,
807
+ "loss": 0.1216,
808
+ "step": 1680
809
+ },
810
+ {
811
+ "epoch": 1.733299337072922,
812
+ "grad_norm": 0.10279195755720139,
813
+ "learning_rate": 2.070800100920442e-05,
814
+ "loss": 0.1457,
815
+ "step": 1700
816
+ },
817
+ {
818
+ "epoch": 1.753697093319735,
819
+ "grad_norm": 4.6941633224487305,
820
+ "learning_rate": 2.015547399511624e-05,
821
+ "loss": 0.1023,
822
+ "step": 1720
823
+ },
824
+ {
825
+ "epoch": 1.7740948495665476,
826
+ "grad_norm": 0.09467876702547073,
827
+ "learning_rate": 1.960539508080485e-05,
828
+ "loss": 0.0874,
829
+ "step": 1740
830
+ },
831
+ {
832
+ "epoch": 1.784293727689954,
833
+ "eval_accuracy": 0.6882039122703023,
834
+ "eval_decision_nll": 2.1201932841528786,
835
+ "eval_evaluated_rows": 1687,
836
+ "eval_global_step": 1750,
837
+ "eval_invalid_output_rate": 0.0,
838
+ "eval_invalid_outputs": 0,
839
+ "eval_loss": 2.1201932841528786,
840
+ "eval_macro_f1_41": 0.6429354759970077,
841
+ "eval_no_relation_logit_bias": -3.970000000000031,
842
+ "eval_positive_fn": 329,
843
+ "eval_positive_fp": 352,
844
+ "eval_positive_micro_f1": 0.6124075128059191,
845
+ "eval_positive_micro_precision": 0.604494382022472,
846
+ "eval_positive_micro_recall": 0.6205305651672434,
847
+ "eval_positive_tp": 538,
848
+ "eval_raw_accuracy": 0.6899822169531713,
849
+ "eval_raw_macro_f1_41": 0.6036357001053071,
850
+ "eval_raw_positive_micro_f1": 0.5940353012781497,
851
+ "eval_raw_positive_micro_precision": 0.6288659793814433,
852
+ "eval_raw_positive_micro_recall": 0.5628604382929643,
853
+ "eval_raw_weighted_f1_41": 0.6622892735295407,
854
+ "eval_rows": 1687,
855
+ "eval_unconstrained_accuracy": 0.6899822169531713,
856
+ "eval_unconstrained_invalid_output_rate": 0.0,
857
+ "eval_unconstrained_invalid_outputs": 0,
858
+ "eval_unconstrained_macro_f1_41": 0.6036357001053071,
859
+ "eval_unconstrained_positive_micro_f1": 0.5940353012781497,
860
+ "eval_unconstrained_positive_micro_precision": 0.6288659793814433,
861
+ "eval_unconstrained_positive_micro_recall": 0.5628604382929643,
862
+ "eval_unconstrained_weighted_f1_41": 0.6622892735295407,
863
+ "eval_weighted_f1_41": 0.6686562598836959,
864
+ "step": 1750
865
+ },
866
+ {
867
+ "epoch": 1.7944926058133606,
868
+ "grad_norm": 9.511631965637207,
869
+ "learning_rate": 1.9058042239402378e-05,
870
+ "loss": 0.1082,
871
+ "step": 1760
872
+ },
873
+ {
874
+ "epoch": 1.8148903620601735,
875
+ "grad_norm": 26.438539505004883,
876
+ "learning_rate": 1.8513692066465866e-05,
877
+ "loss": 0.1342,
878
+ "step": 1780
879
+ },
880
+ {
881
+ "epoch": 1.8352881183069862,
882
+ "grad_norm": 0.6027206778526306,
883
+ "learning_rate": 1.7972619640204296e-05,
884
+ "loss": 0.1355,
885
+ "step": 1800
886
+ },
887
+ {
888
+ "epoch": 1.855685874553799,
889
+ "grad_norm": 35.500850677490234,
890
+ "learning_rate": 1.7435098382472486e-05,
891
+ "loss": 0.1114,
892
+ "step": 1820
893
+ },
894
+ {
895
+ "epoch": 1.876083630800612,
896
+ "grad_norm": 0.8295138478279114,
897
+ "learning_rate": 1.690139992060195e-05,
898
+ "loss": 0.1182,
899
+ "step": 1840
900
+ },
901
+ {
902
+ "epoch": 1.8964813870474249,
903
+ "grad_norm": 0.09546128660440445,
904
+ "learning_rate": 1.637179395013853e-05,
905
+ "loss": 0.1547,
906
+ "step": 1860
907
+ },
908
+ {
909
+ "epoch": 1.9168791432942376,
910
+ "grad_norm": 4.773397445678711,
911
+ "learning_rate": 1.584654809855639e-05,
912
+ "loss": 0.0366,
913
+ "step": 1880
914
+ },
915
+ {
916
+ "epoch": 1.9372768995410505,
917
+ "grad_norm": 0.06276191771030426,
918
+ "learning_rate": 1.5325927790016858e-05,
919
+ "loss": 0.1077,
920
+ "step": 1900
921
+ },
922
+ {
923
+ "epoch": 1.9576746557878635,
924
+ "grad_norm": 0.0431281216442585,
925
+ "learning_rate": 1.4810196111240898e-05,
926
+ "loss": 0.0775,
927
+ "step": 1920
928
+ },
929
+ {
930
+ "epoch": 1.9780724120346762,
931
+ "grad_norm": 0.09372670948505402,
932
+ "learning_rate": 1.429961367856256e-05,
933
+ "loss": 0.1194,
934
+ "step": 1940
935
+ },
936
+ {
937
+ "epoch": 1.998470168281489,
938
+ "grad_norm": 0.04784310609102249,
939
+ "learning_rate": 1.3794438506230967e-05,
940
+ "loss": 0.0708,
941
+ "step": 1960
942
+ },
943
+ {
944
+ "epoch": 2.0183579806221315,
945
+ "grad_norm": 0.1206798180937767,
946
+ "learning_rate": 1.3294925876027112e-05,
947
+ "loss": 0.0389,
948
+ "step": 1980
949
+ },
950
+ {
951
+ "epoch": 2.0387557368689446,
952
+ "grad_norm": 0.05475665628910065,
953
+ "learning_rate": 1.2801328208261526e-05,
954
+ "loss": 0.0852,
955
+ "step": 2000
956
+ },
957
+ {
958
+ "epoch": 2.0387557368689446,
959
+ "eval_accuracy": 0.7012448132780082,
960
+ "eval_decision_nll": 2.2389320018521834,
961
+ "eval_evaluated_rows": 1687,
962
+ "eval_global_step": 2000,
963
+ "eval_invalid_output_rate": 0.0,
964
+ "eval_invalid_outputs": 0,
965
+ "eval_loss": 2.2389320018521834,
966
+ "eval_macro_f1_41": 0.6462471485102084,
967
+ "eval_no_relation_logit_bias": -4.370000000000029,
968
+ "eval_positive_fn": 321,
969
+ "eval_positive_fp": 346,
970
+ "eval_positive_micro_f1": 0.6208072768618533,
971
+ "eval_positive_micro_precision": 0.6121076233183856,
972
+ "eval_positive_micro_recall": 0.629757785467128,
973
+ "eval_positive_tp": 546,
974
+ "eval_raw_accuracy": 0.6941315945465323,
975
+ "eval_raw_macro_f1_41": 0.6097002065413685,
976
+ "eval_raw_positive_micro_f1": 0.5943627450980392,
977
+ "eval_raw_positive_micro_precision": 0.6339869281045751,
978
+ "eval_raw_positive_micro_recall": 0.5594002306805075,
979
+ "eval_raw_weighted_f1_41": 0.6648000936336502,
980
+ "eval_rows": 1687,
981
+ "eval_unconstrained_accuracy": 0.6941315945465323,
982
+ "eval_unconstrained_invalid_output_rate": 0.0,
983
+ "eval_unconstrained_invalid_outputs": 0,
984
+ "eval_unconstrained_macro_f1_41": 0.6097002065413685,
985
+ "eval_unconstrained_positive_micro_f1": 0.5943627450980392,
986
+ "eval_unconstrained_positive_micro_precision": 0.6339869281045751,
987
+ "eval_unconstrained_positive_micro_recall": 0.5594002306805075,
988
+ "eval_unconstrained_weighted_f1_41": 0.6648000936336502,
989
+ "eval_weighted_f1_41": 0.6814423147512597,
990
+ "step": 2000
991
+ },
992
+ {
993
+ "epoch": 2.0591534931157573,
994
+ "grad_norm": 27.940425872802734,
995
+ "learning_rate": 1.2313894934217907e-05,
996
+ "loss": 0.1449,
997
+ "step": 2020
998
+ },
999
+ {
1000
+ "epoch": 2.07955124936257,
1001
+ "grad_norm": 0.05362895876169205,
1002
+ "learning_rate": 1.183287237010719e-05,
1003
+ "loss": 0.08,
1004
+ "step": 2040
1005
+ },
1006
+ {
1007
+ "epoch": 2.099949005609383,
1008
+ "grad_norm": 0.28913530707359314,
1009
+ "learning_rate": 1.1358503592595837e-05,
1010
+ "loss": 0.0454,
1011
+ "step": 2060
1012
+ },
1013
+ {
1014
+ "epoch": 2.120346761856196,
1015
+ "grad_norm": 0.01951238326728344,
1016
+ "learning_rate": 1.0891028315971105e-05,
1017
+ "loss": 0.097,
1018
+ "step": 2080
1019
+ },
1020
+ {
1021
+ "epoch": 2.1407445181030087,
1022
+ "grad_norm": 0.04203539341688156,
1023
+ "learning_rate": 1.0430682771005456e-05,
1024
+ "loss": 0.0559,
1025
+ "step": 2100
1026
+ },
1027
+ {
1028
+ "epoch": 2.1611422743498214,
1029
+ "grad_norm": 0.2714548110961914,
1030
+ "learning_rate": 9.977699585581324e-06,
1031
+ "loss": 0.0539,
1032
+ "step": 2120
1033
+ },
1034
+ {
1035
+ "epoch": 2.1815400305966346,
1036
+ "grad_norm": 22.596508026123047,
1037
+ "learning_rate": 9.532307667136493e-06,
1038
+ "loss": 0.12,
1039
+ "step": 2140
1040
+ },
1041
+ {
1042
+ "epoch": 2.2019377868434473,
1043
+ "grad_norm": 24.418514251708984,
1044
+ "learning_rate": 9.094732086989608e-06,
1045
+ "loss": 0.1384,
1046
+ "step": 2160
1047
+ },
1048
+ {
1049
+ "epoch": 2.22233554309026,
1050
+ "grad_norm": 9.244231224060059,
1051
+ "learning_rate": 8.665193966604157e-06,
1052
+ "loss": 0.0604,
1053
+ "step": 2180
1054
+ },
1055
+ {
1056
+ "epoch": 2.2427332993370728,
1057
+ "grad_norm": 0.3614042401313782,
1058
+ "learning_rate": 8.243910365848448e-06,
1059
+ "loss": 0.0793,
1060
+ "step": 2200
1061
+ },
1062
+ {
1063
+ "epoch": 2.263131055583886,
1064
+ "grad_norm": 2.0732710361480713,
1065
+ "learning_rate": 7.831094173308056e-06,
1066
+ "loss": 0.1103,
1067
+ "step": 2220
1068
+ },
1069
+ {
1070
+ "epoch": 2.2835288118306987,
1071
+ "grad_norm": 0.01613030396401882,
1072
+ "learning_rate": 7.4269539987061625e-06,
1073
+ "loss": 0.0436,
1074
+ "step": 2240
1075
+ },
1076
+ {
1077
+ "epoch": 2.293727689954105,
1078
+ "eval_accuracy": 0.6935388263189093,
1079
+ "eval_decision_nll": 2.150244537584161,
1080
+ "eval_evaluated_rows": 1687,
1081
+ "eval_global_step": 2250,
1082
+ "eval_invalid_output_rate": 0.0,
1083
+ "eval_invalid_outputs": 0,
1084
+ "eval_loss": 2.150244537584161,
1085
+ "eval_macro_f1_41": 0.6849303140069825,
1086
+ "eval_no_relation_logit_bias": -5.940000000000023,
1087
+ "eval_positive_fn": 273,
1088
+ "eval_positive_fp": 426,
1089
+ "eval_positive_micro_f1": 0.629570747217806,
1090
+ "eval_positive_micro_precision": 0.5823529411764706,
1091
+ "eval_positive_micro_recall": 0.6851211072664359,
1092
+ "eval_positive_tp": 594,
1093
+ "eval_raw_accuracy": 0.6905749851807943,
1094
+ "eval_raw_macro_f1_41": 0.6524529256483073,
1095
+ "eval_raw_positive_micro_f1": 0.5938069216757741,
1096
+ "eval_raw_positive_micro_precision": 0.6269230769230769,
1097
+ "eval_raw_positive_micro_recall": 0.5640138408304498,
1098
+ "eval_raw_weighted_f1_41": 0.660259626008938,
1099
+ "eval_rows": 1687,
1100
+ "eval_unconstrained_accuracy": 0.6905749851807943,
1101
+ "eval_unconstrained_invalid_output_rate": 0.0,
1102
+ "eval_unconstrained_invalid_outputs": 0,
1103
+ "eval_unconstrained_macro_f1_41": 0.6524529256483073,
1104
+ "eval_unconstrained_positive_micro_f1": 0.5938069216757741,
1105
+ "eval_unconstrained_positive_micro_precision": 0.6269230769230769,
1106
+ "eval_unconstrained_positive_micro_recall": 0.5640138408304498,
1107
+ "eval_unconstrained_weighted_f1_41": 0.660259626008938,
1108
+ "eval_weighted_f1_41": 0.6790266875399904,
1109
+ "step": 2250
1110
+ },
1111
+ {
1112
+ "epoch": 2.3039265680775114,
1113
+ "grad_norm": 0.03432675823569298,
1114
+ "learning_rate": 7.031694067486136e-06,
1115
+ "loss": 0.0656,
1116
+ "step": 2260
1117
+ },
1118
+ {
1119
+ "epoch": 2.3243243243243246,
1120
+ "grad_norm": 0.025095023214817047,
1121
+ "learning_rate": 6.645514117609616e-06,
1122
+ "loss": 0.0861,
1123
+ "step": 2280
1124
+ },
1125
+ {
1126
+ "epoch": 2.3447220805711373,
1127
+ "grad_norm": 16.071243286132812,
1128
+ "learning_rate": 6.268609298622327e-06,
1129
+ "loss": 0.0985,
1130
+ "step": 2300
1131
+ },
1132
+ {
1133
+ "epoch": 2.36511983681795,
1134
+ "grad_norm": 0.029141830280423164,
1135
+ "learning_rate": 5.901170073038523e-06,
1136
+ "loss": 0.0491,
1137
+ "step": 2320
1138
+ },
1139
+ {
1140
+ "epoch": 2.3855175930647627,
1141
+ "grad_norm": 35.70805358886719,
1142
+ "learning_rate": 5.543382120093946e-06,
1143
+ "loss": 0.0867,
1144
+ "step": 2340
1145
+ },
1146
+ {
1147
+ "epoch": 2.405915349311576,
1148
+ "grad_norm": 0.045629482716321945,
1149
+ "learning_rate": 5.195426241915963e-06,
1150
+ "loss": 0.021,
1151
+ "step": 2360
1152
+ },
1153
+ {
1154
+ "epoch": 2.4263131055583886,
1155
+ "grad_norm": 0.0359937809407711,
1156
+ "learning_rate": 4.857478272158217e-06,
1157
+ "loss": 0.0821,
1158
+ "step": 2380
1159
+ },
1160
+ {
1161
+ "epoch": 2.4467108618052014,
1162
+ "grad_norm": 7.41368293762207,
1163
+ "learning_rate": 4.529708987146114e-06,
1164
+ "loss": 0.1018,
1165
+ "step": 2400
1166
+ },
1167
+ {
1168
+ "epoch": 2.467108618052014,
1169
+ "grad_norm": 0.17788079380989075,
1170
+ "learning_rate": 4.212284019577792e-06,
1171
+ "loss": 0.0669,
1172
+ "step": 2420
1173
+ },
1174
+ {
1175
+ "epoch": 2.4875063742988273,
1176
+ "grad_norm": 0.026721414178609848,
1177
+ "learning_rate": 3.905363774824492e-06,
1178
+ "loss": 0.0176,
1179
+ "step": 2440
1180
+ },
1181
+ {
1182
+ "epoch": 2.50790413054564,
1183
+ "grad_norm": 0.28086280822753906,
1184
+ "learning_rate": 3.609103349872342e-06,
1185
+ "loss": 0.0158,
1186
+ "step": 2460
1187
+ },
1188
+ {
1189
+ "epoch": 2.5283018867924527,
1190
+ "grad_norm": 0.16154006123542786,
1191
+ "learning_rate": 3.323652454946774e-06,
1192
+ "loss": 0.0125,
1193
+ "step": 2480
1194
+ },
1195
+ {
1196
+ "epoch": 2.5486996430392654,
1197
+ "grad_norm": 27.4371337890625,
1198
+ "learning_rate": 3.0491553378589084e-06,
1199
+ "loss": 0.0363,
1200
+ "step": 2500
1201
+ },
1202
+ {
1203
+ "epoch": 2.5486996430392654,
1204
+ "eval_accuracy": 0.6923532898636633,
1205
+ "eval_decision_nll": 2.3230580910466165,
1206
+ "eval_evaluated_rows": 1687,
1207
+ "eval_global_step": 2500,
1208
+ "eval_invalid_output_rate": 0.0,
1209
+ "eval_invalid_outputs": 0,
1210
+ "eval_loss": 2.3230580910466165,
1211
+ "eval_macro_f1_41": 0.6831361552053256,
1212
+ "eval_no_relation_logit_bias": -5.8600000000000225,
1213
+ "eval_positive_fn": 288,
1214
+ "eval_positive_fp": 402,
1215
+ "eval_positive_micro_f1": 0.6266233766233766,
1216
+ "eval_positive_micro_precision": 0.5902140672782875,
1217
+ "eval_positive_micro_recall": 0.6678200692041523,
1218
+ "eval_positive_tp": 579,
1219
+ "eval_raw_accuracy": 0.6923532898636633,
1220
+ "eval_raw_macro_f1_41": 0.6521268255671399,
1221
+ "eval_raw_positive_micro_f1": 0.599880023995201,
1222
+ "eval_raw_positive_micro_precision": 0.625,
1223
+ "eval_raw_positive_micro_recall": 0.5767012687427913,
1224
+ "eval_raw_weighted_f1_41": 0.663769934218916,
1225
+ "eval_rows": 1687,
1226
+ "eval_unconstrained_accuracy": 0.6923532898636633,
1227
+ "eval_unconstrained_invalid_output_rate": 0.0,
1228
+ "eval_unconstrained_invalid_outputs": 0,
1229
+ "eval_unconstrained_macro_f1_41": 0.6521268255671399,
1230
+ "eval_unconstrained_positive_micro_f1": 0.599880023995201,
1231
+ "eval_unconstrained_positive_micro_precision": 0.625,
1232
+ "eval_unconstrained_positive_micro_recall": 0.5767012687427913,
1233
+ "eval_unconstrained_weighted_f1_41": 0.663769934218916,
1234
+ "eval_weighted_f1_41": 0.6767481730025282,
1235
+ "step": 2500
1236
+ },
1237
+ {
1238
+ "epoch": 2.5690973992860786,
1239
+ "grad_norm": 7.680412769317627,
1240
+ "learning_rate": 2.7857507111123755e-06,
1241
+ "loss": 0.0525,
1242
+ "step": 2520
1243
+ },
1244
+ {
1245
+ "epoch": 2.5894951555328913,
1246
+ "grad_norm": 17.607656478881836,
1247
+ "learning_rate": 2.533571681807295e-06,
1248
+ "loss": 0.0413,
1249
+ "step": 2540
1250
+ },
1251
+ {
1252
+ "epoch": 2.6098929117797045,
1253
+ "grad_norm": 0.10886464267969131,
1254
+ "learning_rate": 2.2927456843768206e-06,
1255
+ "loss": 0.104,
1256
+ "step": 2560
1257
+ },
1258
+ {
1259
+ "epoch": 2.6302906680265172,
1260
+ "grad_norm": 0.00933705735951662,
1261
+ "learning_rate": 2.0633944161903144e-06,
1262
+ "loss": 0.0434,
1263
+ "step": 2580
1264
+ },
1265
+ {
1266
+ "epoch": 2.65068842427333,
1267
+ "grad_norm": 0.08042579889297485,
1268
+ "learning_rate": 1.8456337760555915e-06,
1269
+ "loss": 0.0449,
1270
+ "step": 2600
1271
+ },
1272
+ {
1273
+ "epoch": 2.6710861805201427,
1274
+ "grad_norm": 0.31250545382499695,
1275
+ "learning_rate": 1.639573805651437e-06,
1276
+ "loss": 0.0805,
1277
+ "step": 2620
1278
+ },
1279
+ {
1280
+ "epoch": 2.6914839367669554,
1281
+ "grad_norm": 0.017284924164414406,
1282
+ "learning_rate": 1.4453186339199037e-06,
1283
+ "loss": 0.065,
1284
+ "step": 2640
1285
+ },
1286
+ {
1287
+ "epoch": 2.7118816930137686,
1288
+ "grad_norm": 0.13521786034107208,
1289
+ "learning_rate": 1.2629664244464463e-06,
1290
+ "loss": 0.0517,
1291
+ "step": 2660
1292
+ },
1293
+ {
1294
+ "epoch": 2.7322794492605813,
1295
+ "grad_norm": 55.31725311279297,
1296
+ "learning_rate": 1.0926093258546655e-06,
1297
+ "loss": 0.0267,
1298
+ "step": 2680
1299
+ },
1300
+ {
1301
+ "epoch": 2.752677205507394,
1302
+ "grad_norm": 0.017036089673638344,
1303
+ "learning_rate": 9.343334252405133e-07,
1304
+ "loss": 0.0397,
1305
+ "step": 2700
1306
+ },
1307
+ {
1308
+ "epoch": 2.773074961754207,
1309
+ "grad_norm": 0.18307919800281525,
1310
+ "learning_rate": 7.88218704669641e-07,
1311
+ "loss": 0.0858,
1312
+ "step": 2720
1313
+ },
1314
+ {
1315
+ "epoch": 2.79347271800102,
1316
+ "grad_norm": 12.35401725769043,
1317
+ "learning_rate": 6.543390007598016e-07,
1318
+ "loss": 0.1114,
1319
+ "step": 2740
1320
+ },
1321
+ {
1322
+ "epoch": 2.8036715961244263,
1323
+ "eval_accuracy": 0.6970954356846473,
1324
+ "eval_decision_nll": 2.2821931980316217,
1325
+ "eval_evaluated_rows": 1687,
1326
+ "eval_global_step": 2750,
1327
+ "eval_invalid_output_rate": 0.0,
1328
+ "eval_invalid_outputs": 0,
1329
+ "eval_loss": 2.2821931980316217,
1330
+ "eval_macro_f1_41": 0.6888990793956042,
1331
+ "eval_no_relation_logit_bias": -6.6600000000000215,
1332
+ "eval_positive_fn": 273,
1333
+ "eval_positive_fp": 415,
1334
+ "eval_positive_micro_f1": 0.6332622601279317,
1335
+ "eval_positive_micro_precision": 0.5887016848364718,
1336
+ "eval_positive_micro_recall": 0.6851211072664359,
1337
+ "eval_positive_tp": 594,
1338
+ "eval_raw_accuracy": 0.6917605216360403,
1339
+ "eval_raw_macro_f1_41": 0.6508407746399698,
1340
+ "eval_raw_positive_micro_f1": 0.5953827460510328,
1341
+ "eval_raw_positive_micro_precision": 0.6290115532734275,
1342
+ "eval_raw_positive_micro_recall": 0.5651672433679354,
1343
+ "eval_raw_weighted_f1_41": 0.6620183629552824,
1344
+ "eval_rows": 1687,
1345
+ "eval_unconstrained_accuracy": 0.6917605216360403,
1346
+ "eval_unconstrained_invalid_output_rate": 0.0,
1347
+ "eval_unconstrained_invalid_outputs": 0,
1348
+ "eval_unconstrained_macro_f1_41": 0.6508407746399698,
1349
+ "eval_unconstrained_positive_micro_f1": 0.5953827460510328,
1350
+ "eval_unconstrained_positive_micro_precision": 0.6290115532734275,
1351
+ "eval_unconstrained_positive_micro_recall": 0.5651672433679354,
1352
+ "eval_unconstrained_weighted_f1_41": 0.6620183629552824,
1353
+ "eval_weighted_f1_41": 0.6828491038015017,
1354
+ "step": 2750
1355
+ },
1356
+ {
1357
+ "epoch": 2.8138704742478327,
1358
+ "grad_norm": 0.687584638595581,
1359
+ "learning_rate": 5.327619673687528e-07,
1360
+ "loss": 0.0261,
1361
+ "step": 2760
1362
+ },
1363
+ {
1364
+ "epoch": 2.8342682304946454,
1365
+ "grad_norm": 0.028698189184069633,
1366
+ "learning_rate": 4.235490414065263e-07,
1367
+ "loss": 0.0681,
1368
+ "step": 2780
1369
+ },
1370
+ {
1371
+ "epoch": 2.8546659867414585,
1372
+ "grad_norm": 0.0782444030046463,
1373
+ "learning_rate": 3.2675541178931456e-07,
1374
+ "loss": 0.0228,
1375
+ "step": 2800
1376
+ },
1377
+ {
1378
+ "epoch": 2.8750637429882713,
1379
+ "grad_norm": 0.04141950607299805,
1380
+ "learning_rate": 2.424299915506828e-07,
1381
+ "loss": 0.0459,
1382
+ "step": 2820
1383
+ },
1384
+ {
1385
+ "epoch": 2.895461499235084,
1386
+ "grad_norm": 24.31253433227539,
1387
+ "learning_rate": 1.7061539312417108e-07,
1388
+ "loss": 0.0676,
1389
+ "step": 2840
1390
+ },
1391
+ {
1392
+ "epoch": 2.915859255481897,
1393
+ "grad_norm": 0.10220429301261902,
1394
+ "learning_rate": 1.1134790680984996e-07,
1395
+ "loss": 0.0602,
1396
+ "step": 2860
1397
+ },
1398
+ {
1399
+ "epoch": 2.93625701172871,
1400
+ "grad_norm": 4.274705410003662,
1401
+ "learning_rate": 6.465748243559556e-08,
1402
+ "loss": 0.0713,
1403
+ "step": 2880
1404
+ },
1405
+ {
1406
+ "epoch": 2.9566547679755226,
1407
+ "grad_norm": 0.014307630248367786,
1408
+ "learning_rate": 3.056771422247362e-08,
1409
+ "loss": 0.0698,
1410
+ "step": 2900
1411
+ },
1412
+ {
1413
+ "epoch": 2.9770525242223354,
1414
+ "grad_norm": 0.08406448364257812,
1415
+ "learning_rate": 9.095828861771516e-09,
1416
+ "loss": 0.137,
1417
+ "step": 2920
1418
+ },
1419
+ {
1420
+ "epoch": 2.9974502804691485,
1421
+ "grad_norm": 0.06355658918619156,
1422
+ "learning_rate": 2.526768098060073e-10,
1423
+ "loss": 0.0307,
1424
+ "step": 2940
1425
+ }
1426
+ ],
1427
+ "logging_steps": 20,
1428
+ "max_steps": 2943,
1429
+ "num_input_tokens_seen": 0,
1430
+ "num_train_epochs": 3,
1431
+ "save_steps": 250,
1432
+ "stateful_callbacks": {
1433
+ "TrainerControl": {
1434
+ "args": {
1435
+ "should_epoch_stop": false,
1436
+ "should_evaluate": false,
1437
+ "should_log": false,
1438
+ "should_save": true,
1439
+ "should_training_stop": true
1440
+ },
1441
+ "attributes": {}
1442
+ }
1443
+ },
1444
+ "total_flos": 5.100502627428434e+17,
1445
+ "train_batch_size": 4,
1446
+ "trial_name": null,
1447
+ "trial_params": null
1448
+ }
latest_checkpoint/training_args.bin ADDED
Binary file (5.5 kB). View file
 
model.py CHANGED
@@ -24,6 +24,7 @@ from pathlib import Path
24
  from typing import Any, Dict, Iterable, List, Mapping, Optional, Sequence, Tuple
25
 
26
  os.environ.setdefault("TOKENIZERS_PARALLELISM", "false")
 
27
 
28
  import bitsandbytes as bnb
29
  import numpy as np
 
24
  from typing import Any, Dict, Iterable, List, Mapping, Optional, Sequence, Tuple
25
 
26
  os.environ.setdefault("TOKENIZERS_PARALLELISM", "false")
27
+ os.environ["HF_HUB_ENABLE_HF_TRANSFER"] = "0"
28
 
29
  import bitsandbytes as bnb
30
  import numpy as np
predict.py CHANGED
@@ -10,6 +10,7 @@ from pathlib import Path
10
  from typing import Any, Dict, Iterable, List, Mapping
11
 
12
  os.environ.setdefault("TOKENIZERS_PARALLELISM", "false")
 
13
 
14
  import torch
15
  from dotenv import load_dotenv
 
10
  from typing import Any, Dict, Iterable, List, Mapping
11
 
12
  os.environ.setdefault("TOKENIZERS_PARALLELISM", "false")
13
+ os.environ["HF_HUB_ENABLE_HF_TRANSFER"] = "0"
14
 
15
  import torch
16
  from dotenv import load_dotenv
release/release_manifest.json CHANGED
@@ -8,6 +8,25 @@
8
  "finite_tensors": 448,
9
  "nonzero_tensors": 448
10
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
  "files": {
12
  "adapter_config.json": {
13
  "bytes": 975,
@@ -61,6 +80,62 @@
61
  "bytes": 504,
62
  "sha256": "d00476c1b9072f1b30b5fed98fbf484f2ca53f4fcef5baa96918343f39f786c8"
63
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
64
  "release/best_validation_metrics.json": {
65
  "bytes": 1369,
66
  "sha256": "a2d588206ad639c5b02cdee82e3698ac96919b11e8ea1783df5fd540b9e1ea54"
@@ -96,10 +171,7 @@
96
  },
97
  "excluded": [
98
  "base model weights",
99
- "optimizer state",
100
- "scheduler state",
101
- "RNG state",
102
- "numbered checkpoints",
103
  "training logs",
104
  "prediction dumps",
105
  "caches"
 
8
  "finite_tensors": 448,
9
  "nonzero_tensors": 448
10
  },
11
+ "latest_checkpoint": {
12
+ "global_step": 2943,
13
+ "best_checkpoint_step": 2750,
14
+ "adapter": {
15
+ "tensor_count": 448,
16
+ "finite_tensors": 448,
17
+ "nonzero_tensors": 448
18
+ },
19
+ "optimizer": {
20
+ "tensor_count": 2688,
21
+ "finite_floating_tensor_count": 1792
22
+ },
23
+ "scheduler": {
24
+ "tensor_count": 0,
25
+ "finite_floating_tensor_count": 0
26
+ },
27
+ "rng_state_bytes": 14244,
28
+ "training_args_bytes": 5496
29
+ },
30
  "files": {
31
  "adapter_config.json": {
32
  "bytes": 975,
 
80
  "bytes": 504,
81
  "sha256": "d00476c1b9072f1b30b5fed98fbf484f2ca53f4fcef5baa96918343f39f786c8"
82
  },
83
+ "latest_checkpoint/README.md": {
84
+ "bytes": 5232,
85
+ "sha256": "32c8a003763070b74cdb20f608f0e5a726570b11d56469cd4b80b2753bd274f4"
86
+ },
87
+ "latest_checkpoint/adapter_config.json": {
88
+ "bytes": 975,
89
+ "sha256": "68656a0760952d4504c6f6cdfb03487622327b6391315289790192bfa6951721"
90
+ },
91
+ "latest_checkpoint/adapter_model.safetensors": {
92
+ "bytes": 159967880,
93
+ "sha256": "4390a7f0c09141c9e6c9dc0e82164e7d5a6eb2e07eca3f44c7f76467485bae71"
94
+ },
95
+ "latest_checkpoint/chat_template.jinja": {
96
+ "bytes": 816,
97
+ "sha256": "f1dff938141b507da4a409b6bb3431382088a97a963acd246a41f2f344ae831f"
98
+ },
99
+ "latest_checkpoint/checkpoint_manifest.json": {
100
+ "bytes": 2447,
101
+ "sha256": "5094be1262aa9ac08dd2f3671151ae7166ac699805a734967d2194dc095a554f"
102
+ },
103
+ "latest_checkpoint/optimizer.pt": {
104
+ "bytes": 81735892,
105
+ "sha256": "58da25e4579a062fa12ad066e34b666619a4609957fbcc9d246212ca4a431fad"
106
+ },
107
+ "latest_checkpoint/rng_state.pth": {
108
+ "bytes": 14244,
109
+ "sha256": "e1364bce33b92ffd2389bb5e6f0f8bb88878c2a769c50a7e2403c9cd9f3c1fd9"
110
+ },
111
+ "latest_checkpoint/scheduler.pt": {
112
+ "bytes": 1064,
113
+ "sha256": "bd16c6406d87f70b6c298a5e4fb685236ce307ae801894a350532f2e95d3a1fe"
114
+ },
115
+ "latest_checkpoint/special_tokens_map.json": {
116
+ "bytes": 551,
117
+ "sha256": "82d96d7a9e6ced037f12394b7ea6a5b02e6ca87e0d11edaa8d60d9be857ce7db"
118
+ },
119
+ "latest_checkpoint/tokenizer.json": {
120
+ "bytes": 8508152,
121
+ "sha256": "a4ec65a3ef5dee870b4024cf17d9315aff58dc1555e05766f1c18ebfe8405dba"
122
+ },
123
+ "latest_checkpoint/tokenizer.model": {
124
+ "bytes": 1228714,
125
+ "sha256": "feff3deb3537c4a47b77585053ad2aa00484da7907b188e0111cbed1f4592e67"
126
+ },
127
+ "latest_checkpoint/tokenizer_config.json": {
128
+ "bytes": 4402,
129
+ "sha256": "92a93150cc2a9e821e6fc785bbb0aea3cec5d92df529974131efc1c857b52359"
130
+ },
131
+ "latest_checkpoint/trainer_state.json": {
132
+ "bytes": 43812,
133
+ "sha256": "95489ed7a630b99057d444bd7469f2eeb2f9e5f618b077f8f1873f9a1d118251"
134
+ },
135
+ "latest_checkpoint/training_args.bin": {
136
+ "bytes": 5496,
137
+ "sha256": "213db7d4f648a556f875d6706bbb4d0e9ef6f78fecf9b503048cedff8a477c00"
138
+ },
139
  "release/best_validation_metrics.json": {
140
  "bytes": 1369,
141
  "sha256": "a2d588206ad639c5b02cdee82e3698ac96919b11e8ea1783df5fd540b9e1ea54"
 
171
  },
172
  "excluded": [
173
  "base model weights",
174
+ "numbered checkpoints other than the staged latest step-2943 copy",
 
 
 
175
  "training logs",
176
  "prediction dumps",
177
  "caches"
setup_env.sh CHANGED
@@ -54,6 +54,7 @@ python -m py_compile \
54
  tools/build_examples_appendix.py \
55
  tools/plot_losses.py \
56
  tools/publish_huggingface.py \
 
57
  tools/stage_release.py \
58
  tools/verify_release.py
59
  python re_sft_common.py
 
54
  tools/build_examples_appendix.py \
55
  tools/plot_losses.py \
56
  tools/publish_huggingface.py \
57
+ tools/restore_latest_checkpoint.py \
58
  tools/stage_release.py \
59
  tools/verify_release.py
60
  python re_sft_common.py
tools/publish_huggingface.py CHANGED
@@ -15,6 +15,8 @@ import tempfile
15
  from datetime import datetime, timezone
16
  from pathlib import Path
17
 
 
 
18
  from dotenv import load_dotenv
19
  from huggingface_hub import HfApi, snapshot_download
20
 
@@ -100,6 +102,7 @@ def main() -> None:
100
  "local_release": {
101
  "manifest": local["manifest"],
102
  "adapter": local["adapter"],
 
103
  "worked_examples": local["worked_examples"],
104
  },
105
  "fresh_snapshot_verification": {
@@ -107,6 +110,7 @@ def main() -> None:
107
  "revision": remote["revision"],
108
  "manifest": remote["manifest"],
109
  "adapter": remote["adapter"],
 
110
  "worked_examples": remote["worked_examples"],
111
  "remote_clean_mode": remote["remote_clean_mode"],
112
  },
@@ -134,6 +138,10 @@ def main() -> None:
134
  "final_revision": final_revision,
135
  "fresh_final_download_verified": final_remote["status"] == "passed",
136
  "adapter_tensors": final_remote["adapter"]["tensors"],
 
 
 
 
137
  "worked_example_classes": final_remote["worked_examples"]["classes"],
138
  "token_values_printed": False,
139
  },
 
15
  from datetime import datetime, timezone
16
  from pathlib import Path
17
 
18
+ os.environ["HF_HUB_ENABLE_HF_TRANSFER"] = "0"
19
+
20
  from dotenv import load_dotenv
21
  from huggingface_hub import HfApi, snapshot_download
22
 
 
102
  "local_release": {
103
  "manifest": local["manifest"],
104
  "adapter": local["adapter"],
105
+ "latest_checkpoint": local["latest_checkpoint"],
106
  "worked_examples": local["worked_examples"],
107
  },
108
  "fresh_snapshot_verification": {
 
110
  "revision": remote["revision"],
111
  "manifest": remote["manifest"],
112
  "adapter": remote["adapter"],
113
+ "latest_checkpoint": remote["latest_checkpoint"],
114
  "worked_examples": remote["worked_examples"],
115
  "remote_clean_mode": remote["remote_clean_mode"],
116
  },
 
138
  "final_revision": final_revision,
139
  "fresh_final_download_verified": final_remote["status"] == "passed",
140
  "adapter_tensors": final_remote["adapter"]["tensors"],
141
+ "latest_checkpoint_global_step": final_remote["latest_checkpoint"][
142
+ "global_step"
143
+ ],
144
+ "latest_checkpoint_files": final_remote["latest_checkpoint"]["files"],
145
  "worked_example_classes": final_remote["worked_examples"]["classes"],
146
  "token_values_printed": False,
147
  },
tools/restore_latest_checkpoint.py ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ """Restore the published step-2943 Trainer checkpoint into a run directory."""
3
+
4
+ from __future__ import annotations
5
+
6
+ import argparse
7
+ import json
8
+ import os
9
+ import shutil
10
+ from pathlib import Path
11
+
12
+ from dotenv import load_dotenv
13
+
14
+ from verify_release import verify_latest_checkpoint
15
+
16
+
17
+ ROOT = Path(__file__).resolve().parents[1]
18
+ load_dotenv(ROOT / ".env")
19
+
20
+
21
+ def resolve(value: str) -> Path:
22
+ path = Path(value)
23
+ return path if path.is_absolute() else ROOT / path
24
+
25
+
26
+ def main() -> None:
27
+ parser = argparse.ArgumentParser()
28
+ parser.add_argument(
29
+ "--output-dir",
30
+ default=os.environ.get("CHOICE_OUTPUT_DIR", "runs/DRU-RE-Yehia"),
31
+ help="Trainer run root that will receive checkpoints/checkpoint-2943.",
32
+ )
33
+ parser.add_argument("--overwrite", action="store_true")
34
+ args = parser.parse_args()
35
+
36
+ audit = verify_latest_checkpoint(ROOT)
37
+ source = ROOT / "latest_checkpoint"
38
+ output = resolve(args.output_dir)
39
+ destination = output / "checkpoints/checkpoint-2943"
40
+ temporary = output / "checkpoints/.checkpoint-2943.restoring"
41
+ if destination.exists() and not args.overwrite:
42
+ raise RuntimeError(
43
+ f"Destination already exists: {destination}. Use --overwrite only intentionally."
44
+ )
45
+ if temporary.exists():
46
+ shutil.rmtree(temporary)
47
+ temporary.parent.mkdir(parents=True, exist_ok=True)
48
+ shutil.copytree(source, temporary)
49
+ if destination.exists():
50
+ shutil.rmtree(destination)
51
+ os.replace(temporary, destination)
52
+ print(
53
+ json.dumps(
54
+ {
55
+ "status": "passed",
56
+ "source": str(source),
57
+ "destination": str(destination),
58
+ "global_step": audit["global_step"],
59
+ "checkpoint_files": audit["files"],
60
+ "full_base_weights_included": False,
61
+ },
62
+ ensure_ascii=False,
63
+ indent=2,
64
+ )
65
+ )
66
+
67
+
68
+ if __name__ == "__main__":
69
+ main()
tools/stage_release.py CHANGED
@@ -1,5 +1,5 @@
1
  #!/usr/bin/env python3
2
- """Stage only the completed best adapter and durable evidence for Hub upload."""
3
 
4
  from __future__ import annotations
5
 
@@ -29,6 +29,14 @@ ADAPTER_FILES = {
29
  "tokenizer.model",
30
  "tokenizer_config.json",
31
  }
 
 
 
 
 
 
 
 
32
  EVIDENCE_FILES = {
33
  "all_linear_eligible_modules.json",
34
  "decision_token_inventory.json",
@@ -94,6 +102,115 @@ def validate_adapter_tensors(path: Path) -> Dict[str, Any]:
94
  return {"tensor_count": tensor_count, "finite_tensors": tensor_count, "nonzero_tensors": nonzero_count}
95
 
96
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
97
  def metric_step(path: Path) -> int:
98
  match = re.search(r"step_(\d+)\.json$", path.name)
99
  if not match:
@@ -205,6 +322,7 @@ def main() -> None:
205
  f"Refusing release: LoRA evidence {key}={lora.get(key)!r}, expected {expected!r}"
206
  )
207
  tensor_audit = validate_adapter_tensors(source / "adapter_model.safetensors")
 
208
 
209
  # All correctness checks above complete before the repository is modified.
210
  copied = []
@@ -221,6 +339,16 @@ def main() -> None:
221
  staged_adapter_config["revision"] = base_model_revision
222
  write_json(repo_dir / "adapter_config.json", staged_adapter_config)
223
 
 
 
 
 
 
 
 
 
 
 
224
  release_dir = repo_dir / "release"
225
  release_dir.mkdir(parents=True, exist_ok=True)
226
  for source_path, destination in (
@@ -289,6 +417,7 @@ def main() -> None:
289
  "selection_metric": "positive_micro_f1",
290
  "selection_metric_value": best_metrics["positive_micro_f1"],
291
  "adapter_tensor_audit": tensor_audit,
 
292
  "files": {
293
  str(path.relative_to(repo_dir)): {
294
  "bytes": path.stat().st_size,
@@ -298,10 +427,7 @@ def main() -> None:
298
  },
299
  "excluded": [
300
  "base model weights",
301
- "optimizer state",
302
- "scheduler state",
303
- "RNG state",
304
- "numbered checkpoints",
305
  "training logs",
306
  "prediction dumps",
307
  "caches",
 
1
  #!/usr/bin/env python3
2
+ """Stage the completed best adapter, latest resumable state, and evidence."""
3
 
4
  from __future__ import annotations
5
 
 
29
  "tokenizer.model",
30
  "tokenizer_config.json",
31
  }
32
+ LATEST_CHECKPOINT_FILES = ADAPTER_FILES | {
33
+ "README.md",
34
+ "optimizer.pt",
35
+ "rng_state.pth",
36
+ "scheduler.pt",
37
+ "trainer_state.json",
38
+ "training_args.bin",
39
+ }
40
  EVIDENCE_FILES = {
41
  "all_linear_eligible_modules.json",
42
  "decision_token_inventory.json",
 
102
  return {"tensor_count": tensor_count, "finite_tensors": tensor_count, "nonzero_tensors": nonzero_count}
103
 
104
 
105
+ def validate_tensor_tree(
106
+ value: Any, label: str, require_tensor: bool = True
107
+ ) -> Dict[str, int]:
108
+ tensor_count = 0
109
+ floating_tensor_count = 0
110
+ stack = [value]
111
+ while stack:
112
+ current = stack.pop()
113
+ if isinstance(current, dict):
114
+ stack.extend(current.values())
115
+ elif isinstance(current, (list, tuple)):
116
+ stack.extend(current)
117
+ elif isinstance(current, torch.Tensor):
118
+ tensor_count += 1
119
+ if current.is_floating_point() or current.is_complex():
120
+ floating_tensor_count += 1
121
+ if not torch.isfinite(current).all().item():
122
+ raise RuntimeError(f"Refusing release: non-finite tensor in {label}")
123
+ if require_tensor and tensor_count == 0:
124
+ raise RuntimeError(f"Refusing release: no tensors found in {label}")
125
+ return {
126
+ "tensor_count": tensor_count,
127
+ "finite_floating_tensor_count": floating_tensor_count,
128
+ }
129
+
130
+
131
+ def validate_latest_checkpoint(run_dir: Path) -> Dict[str, Any]:
132
+ latest = run_dir / "latest_checkpoint"
133
+ numbered = run_dir / "checkpoints" / "checkpoint-2943"
134
+ for directory in (latest, numbered):
135
+ if not directory.is_dir():
136
+ raise FileNotFoundError(directory)
137
+ for name in sorted(LATEST_CHECKPOINT_FILES):
138
+ if not (directory / name).is_file():
139
+ raise FileNotFoundError(directory / name)
140
+ for name in sorted(LATEST_CHECKPOINT_FILES):
141
+ if sha256(latest / name) != sha256(numbered / name):
142
+ raise RuntimeError(f"Refusing release: latest checkpoint diverges for {name}")
143
+
144
+ state = read_json(latest / "trainer_state.json")
145
+ if state.get("global_step") != 2943:
146
+ raise RuntimeError("Refusing release: latest checkpoint is not global step 2943")
147
+ if not str(state.get("best_model_checkpoint", "")).endswith("checkpoint-2750"):
148
+ raise RuntimeError("Refusing release: latest checkpoint has wrong best-checkpoint provenance")
149
+ adapter = validate_adapter_tensors(latest / "adapter_model.safetensors")
150
+ optimizer = torch.load(latest / "optimizer.pt", map_location="cpu", weights_only=True)
151
+ scheduler = torch.load(latest / "scheduler.pt", map_location="cpu", weights_only=True)
152
+ if scheduler.get("last_epoch") != 2943 or scheduler.get("_step_count") != 2944:
153
+ raise RuntimeError("Refusing release: latest scheduler state is incomplete")
154
+ return {
155
+ "global_step": 2943,
156
+ "best_checkpoint_step": 2750,
157
+ "adapter": adapter,
158
+ "optimizer": validate_tensor_tree(optimizer, "latest_checkpoint/optimizer.pt"),
159
+ "scheduler": validate_tensor_tree(
160
+ scheduler, "latest_checkpoint/scheduler.pt", require_tensor=False
161
+ ),
162
+ "rng_state_bytes": (latest / "rng_state.pth").stat().st_size,
163
+ "training_args_bytes": (latest / "training_args.bin").stat().st_size,
164
+ }
165
+
166
+
167
+ def stage_latest_checkpoint(
168
+ source: Path,
169
+ repo_dir: Path,
170
+ base_model_id: str,
171
+ base_model_revision: str,
172
+ audit: Dict[str, Any],
173
+ ) -> list[Path]:
174
+ temporary = repo_dir / ".latest_checkpoint.staging"
175
+ destination = repo_dir / "latest_checkpoint"
176
+ if temporary.exists():
177
+ shutil.rmtree(temporary)
178
+ temporary.mkdir(parents=True)
179
+ for name in sorted(LATEST_CHECKPOINT_FILES):
180
+ shutil.copy2(source / name, temporary / name)
181
+
182
+ adapter_config = read_json(temporary / "adapter_config.json")
183
+ adapter_config["base_model_name_or_path"] = base_model_id
184
+ adapter_config["revision"] = base_model_revision
185
+ write_json(temporary / "adapter_config.json", adapter_config)
186
+ manifest_files = {
187
+ name: {
188
+ "bytes": (temporary / name).stat().st_size,
189
+ "sha256": sha256(temporary / name),
190
+ }
191
+ for name in sorted(LATEST_CHECKPOINT_FILES)
192
+ }
193
+ write_json(
194
+ temporary / "checkpoint_manifest.json",
195
+ {
196
+ "status": "complete",
197
+ "checkpoint_type": "latest_complete_resumable_trainer_checkpoint",
198
+ "global_step": 2943,
199
+ "best_checkpoint_step": 2750,
200
+ "audit": audit,
201
+ "files": manifest_files,
202
+ "full_base_weights_included": False,
203
+ },
204
+ )
205
+ if destination.exists():
206
+ shutil.rmtree(destination)
207
+ os.replace(temporary, destination)
208
+ return [
209
+ destination / name
210
+ for name in sorted(LATEST_CHECKPOINT_FILES | {"checkpoint_manifest.json"})
211
+ ]
212
+
213
+
214
  def metric_step(path: Path) -> int:
215
  match = re.search(r"step_(\d+)\.json$", path.name)
216
  if not match:
 
322
  f"Refusing release: LoRA evidence {key}={lora.get(key)!r}, expected {expected!r}"
323
  )
324
  tensor_audit = validate_adapter_tensors(source / "adapter_model.safetensors")
325
+ latest_checkpoint_audit = validate_latest_checkpoint(run_dir)
326
 
327
  # All correctness checks above complete before the repository is modified.
328
  copied = []
 
339
  staged_adapter_config["revision"] = base_model_revision
340
  write_json(repo_dir / "adapter_config.json", staged_adapter_config)
341
 
342
+ copied.extend(
343
+ stage_latest_checkpoint(
344
+ run_dir / "latest_checkpoint",
345
+ repo_dir,
346
+ base_model_id,
347
+ base_model_revision,
348
+ latest_checkpoint_audit,
349
+ )
350
+ )
351
+
352
  release_dir = repo_dir / "release"
353
  release_dir.mkdir(parents=True, exist_ok=True)
354
  for source_path, destination in (
 
417
  "selection_metric": "positive_micro_f1",
418
  "selection_metric_value": best_metrics["positive_micro_f1"],
419
  "adapter_tensor_audit": tensor_audit,
420
+ "latest_checkpoint": latest_checkpoint_audit,
421
  "files": {
422
  str(path.relative_to(repo_dir)): {
423
  "bytes": path.stat().st_size,
 
427
  },
428
  "excluded": [
429
  "base model weights",
430
+ "numbered checkpoints other than the staged latest step-2943 copy",
 
 
 
431
  "training logs",
432
  "prediction dumps",
433
  "caches",
tools/verify_release.py CHANGED
@@ -50,6 +50,7 @@ REQUIRED_SOURCE = {
50
  "tools/monitor_resources.sh",
51
  "tools/plot_losses.py",
52
  "tools/publish_huggingface.py",
 
53
  "tools/stage_release.py",
54
  "tools/verify_release.py",
55
  "resources/wojood_ontology.json",
@@ -88,6 +89,25 @@ REQUIRED_RELEASE = {
88
  "release/validation_history.json",
89
  "release/release_manifest.json",
90
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
91
  OPTIONAL_CLEAN_FILES = {
92
  "evidence/README.md",
93
  "evidence/train_class_counts.json",
@@ -195,8 +215,7 @@ def verify_lora_evidence(root: Path) -> Dict[str, Any]:
195
  return dict(expected)
196
 
197
 
198
- def verify_adapter(root: Path) -> Dict[str, Any]:
199
- config = read_json(root / "adapter_config.json")
200
  locked: Mapping[str, Any] = {
201
  "r": 16,
202
  "lora_alpha": 32,
@@ -209,7 +228,9 @@ def verify_adapter(root: Path) -> Dict[str, Any]:
209
  }
210
  for key, value in locked.items():
211
  if config.get(key) != value:
212
- raise RuntimeError(f"Adapter config {key}={config.get(key)!r}, expected {value!r}")
 
 
213
  expected_resolved_targets = {
214
  "q_proj",
215
  "k_proj",
@@ -220,27 +241,111 @@ def verify_adapter(root: Path) -> Dict[str, Any]:
220
  "down_proj",
221
  }
222
  if set(config.get("target_modules") or []) != expected_resolved_targets:
223
- raise RuntimeError("Adapter config has an unexpected resolved target-module set")
224
  if config.get("modules_to_save") is not None:
225
- raise RuntimeError("Adapter unexpectedly saves additional non-LoRA modules")
 
 
 
226
 
227
  tensor_count = 0
228
  nonzero_count = 0
229
- with safe_open(root / "adapter_model.safetensors", framework="pt", device="cpu") as handle:
230
  for name in handle.keys():
231
  tensor = handle.get_tensor(name)
232
  tensor_count += 1
233
  if not torch.isfinite(tensor).all().item():
234
- raise RuntimeError(f"Adapter contains non-finite tensor {name}")
235
  if torch.count_nonzero(tensor).item() > 0:
236
  nonzero_count += 1
237
  if tensor_count != 448 or nonzero_count != 448:
238
  raise RuntimeError(
239
- f"Expected 448 finite/nonzero adapter tensors, found {tensor_count}/{nonzero_count}"
240
  )
241
  return {"tensors": tensor_count, "finite": tensor_count, "nonzero": nonzero_count}
242
 
243
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
244
  def verify_inference_config(root: Path) -> Dict[str, Any]:
245
  config = read_json(root / "inference_config.json")
246
  expected = {
@@ -347,7 +452,9 @@ def verify_manifest(root: Path) -> Dict[str, Any]:
347
  "release/run_summary.json",
348
  "release/run_config.json",
349
  "release/best_validation_metrics.json",
 
350
  }
 
351
  if not required_manifested.issubset(files):
352
  raise RuntimeError("Release manifest omits one or more critical release artifacts")
353
  return {"manifested_files": len(files), "best_checkpoint_step": manifest.get("best_checkpoint_step")}
@@ -389,14 +496,20 @@ def reject_accidental_payloads(root: Path, require_remote_clean: bool) -> None:
389
  # publisher explicitly ignores them. Do not inspect their payloads
390
  # as if they were part of the clean release tree.
391
  continue
392
- if path.is_file() and path.name in forbidden_names:
 
393
  raise RuntimeError(f"Training/base payload must not be published: {relative}")
394
  if path.is_file() and path.suffix == ".safetensors" and path.name != "adapter_model.safetensors":
395
  raise RuntimeError(f"Unexpected safetensors payload: {relative}")
396
  if require_remote_clean and (root / ".env").exists():
397
  raise RuntimeError("A remote release checkout must never contain .env")
398
  if require_remote_clean:
399
- allowed = REQUIRED_SOURCE | REQUIRED_RELEASE | OPTIONAL_CLEAN_FILES
 
 
 
 
 
400
  unexpected = []
401
  for path in root.rglob("*"):
402
  if not path.is_file():
@@ -417,6 +530,7 @@ def verify_release(root: Path, require_remote_clean: bool = False) -> Dict[str,
417
  root = root.resolve()
418
  require_files(root, REQUIRED_SOURCE)
419
  require_files(root, REQUIRED_RELEASE)
 
420
  reject_accidental_payloads(root, require_remote_clean=require_remote_clean)
421
  inference = verify_inference_config(root)
422
  result = {
@@ -428,11 +542,12 @@ def verify_release(root: Path, require_remote_clean: bool = False) -> Dict[str,
428
  "base_model": verify_base_evidence(root),
429
  "lora": verify_lora_evidence(root),
430
  "adapter": verify_adapter(root),
 
431
  "inference": inference,
432
  "final_run": verify_final_run(root, inference),
433
  "manifest": verify_manifest(root),
434
  "remote_clean_mode": require_remote_clean,
435
- "gated_base_access_tested": False,
436
  }
437
  return result
438
 
 
50
  "tools/monitor_resources.sh",
51
  "tools/plot_losses.py",
52
  "tools/publish_huggingface.py",
53
+ "tools/restore_latest_checkpoint.py",
54
  "tools/stage_release.py",
55
  "tools/verify_release.py",
56
  "resources/wojood_ontology.json",
 
89
  "release/validation_history.json",
90
  "release/release_manifest.json",
91
  }
92
+ LATEST_CHECKPOINT_NAMES = {
93
+ "README.md",
94
+ "adapter_config.json",
95
+ "adapter_model.safetensors",
96
+ "chat_template.jinja",
97
+ "checkpoint_manifest.json",
98
+ "optimizer.pt",
99
+ "rng_state.pth",
100
+ "scheduler.pt",
101
+ "special_tokens_map.json",
102
+ "tokenizer.json",
103
+ "tokenizer.model",
104
+ "tokenizer_config.json",
105
+ "trainer_state.json",
106
+ "training_args.bin",
107
+ }
108
+ REQUIRED_LATEST_CHECKPOINT = {
109
+ f"latest_checkpoint/{name}" for name in LATEST_CHECKPOINT_NAMES
110
+ }
111
  OPTIONAL_CLEAN_FILES = {
112
  "evidence/README.md",
113
  "evidence/train_class_counts.json",
 
215
  return dict(expected)
216
 
217
 
218
+ def verify_adapter_config(config: Mapping[str, Any], label: str) -> None:
 
219
  locked: Mapping[str, Any] = {
220
  "r": 16,
221
  "lora_alpha": 32,
 
228
  }
229
  for key, value in locked.items():
230
  if config.get(key) != value:
231
+ raise RuntimeError(
232
+ f"{label} adapter config {key}={config.get(key)!r}, expected {value!r}"
233
+ )
234
  expected_resolved_targets = {
235
  "q_proj",
236
  "k_proj",
 
241
  "down_proj",
242
  }
243
  if set(config.get("target_modules") or []) != expected_resolved_targets:
244
+ raise RuntimeError(f"{label} has an unexpected resolved target-module set")
245
  if config.get("modules_to_save") is not None:
246
+ raise RuntimeError(f"{label} unexpectedly saves additional non-LoRA modules")
247
+
248
+
249
+ def verify_adapter_safetensors(path: Path, label: str) -> Dict[str, Any]:
250
 
251
  tensor_count = 0
252
  nonzero_count = 0
253
+ with safe_open(path, framework="pt", device="cpu") as handle:
254
  for name in handle.keys():
255
  tensor = handle.get_tensor(name)
256
  tensor_count += 1
257
  if not torch.isfinite(tensor).all().item():
258
+ raise RuntimeError(f"{label} contains non-finite tensor {name}")
259
  if torch.count_nonzero(tensor).item() > 0:
260
  nonzero_count += 1
261
  if tensor_count != 448 or nonzero_count != 448:
262
  raise RuntimeError(
263
+ f"Expected 448 finite/nonzero {label} tensors, found {tensor_count}/{nonzero_count}"
264
  )
265
  return {"tensors": tensor_count, "finite": tensor_count, "nonzero": nonzero_count}
266
 
267
 
268
+ def verify_adapter(root: Path) -> Dict[str, Any]:
269
+ verify_adapter_config(read_json(root / "adapter_config.json"), "root adapter")
270
+ return verify_adapter_safetensors(
271
+ root / "adapter_model.safetensors", "root adapter"
272
+ )
273
+
274
+
275
+ def verify_tensor_tree(
276
+ value: Any, label: str, require_tensor: bool = True
277
+ ) -> Dict[str, int]:
278
+ tensor_count = 0
279
+ floating_tensor_count = 0
280
+ stack = [value]
281
+ while stack:
282
+ current = stack.pop()
283
+ if isinstance(current, dict):
284
+ stack.extend(current.values())
285
+ elif isinstance(current, (list, tuple)):
286
+ stack.extend(current)
287
+ elif isinstance(current, torch.Tensor):
288
+ tensor_count += 1
289
+ if current.is_floating_point() or current.is_complex():
290
+ floating_tensor_count += 1
291
+ if not torch.isfinite(current).all().item():
292
+ raise RuntimeError(f"Non-finite tensor in {label}")
293
+ if require_tensor and tensor_count == 0:
294
+ raise RuntimeError(f"No tensors found in {label}")
295
+ return {
296
+ "tensor_count": tensor_count,
297
+ "finite_floating_tensor_count": floating_tensor_count,
298
+ }
299
+
300
+
301
+ def verify_latest_checkpoint(root: Path) -> Dict[str, Any]:
302
+ directory = root / "latest_checkpoint"
303
+ state = read_json(directory / "trainer_state.json")
304
+ if state.get("global_step") != 2943:
305
+ raise RuntimeError("Latest checkpoint is not global step 2943")
306
+ if not str(state.get("best_model_checkpoint", "")).endswith("checkpoint-2750"):
307
+ raise RuntimeError("Latest checkpoint has incorrect best-checkpoint provenance")
308
+ verify_adapter_config(
309
+ read_json(directory / "adapter_config.json"), "latest checkpoint"
310
+ )
311
+ adapter = verify_adapter_safetensors(
312
+ directory / "adapter_model.safetensors", "latest checkpoint adapter"
313
+ )
314
+ optimizer = torch.load(
315
+ directory / "optimizer.pt", map_location="cpu", weights_only=True
316
+ )
317
+ scheduler = torch.load(
318
+ directory / "scheduler.pt", map_location="cpu", weights_only=True
319
+ )
320
+ if scheduler.get("last_epoch") != 2943 or scheduler.get("_step_count") != 2944:
321
+ raise RuntimeError("Latest checkpoint scheduler state is incomplete")
322
+ optimizer_audit = verify_tensor_tree(optimizer, "latest checkpoint optimizer")
323
+ scheduler_audit = verify_tensor_tree(
324
+ scheduler, "latest checkpoint scheduler", require_tensor=False
325
+ )
326
+
327
+ manifest = read_json(directory / "checkpoint_manifest.json")
328
+ if manifest.get("status") != "complete" or manifest.get("global_step") != 2943:
329
+ raise RuntimeError("Latest checkpoint manifest is incomplete")
330
+ files = manifest.get("files") or {}
331
+ expected_names = LATEST_CHECKPOINT_NAMES - {"checkpoint_manifest.json"}
332
+ if set(files) != expected_names:
333
+ raise RuntimeError("Latest checkpoint manifest has the wrong file inventory")
334
+ for name, expected in files.items():
335
+ path = directory / name
336
+ if path.stat().st_size != expected.get("bytes") or sha256(path) != expected.get("sha256"):
337
+ raise RuntimeError(f"Latest checkpoint manifest mismatch for {name}")
338
+ return {
339
+ "status": "complete",
340
+ "global_step": 2943,
341
+ "best_checkpoint_step": 2750,
342
+ "adapter": adapter,
343
+ "optimizer": optimizer_audit,
344
+ "scheduler": scheduler_audit,
345
+ "files": len(files) + 1,
346
+ }
347
+
348
+
349
  def verify_inference_config(root: Path) -> Dict[str, Any]:
350
  config = read_json(root / "inference_config.json")
351
  expected = {
 
452
  "release/run_summary.json",
453
  "release/run_config.json",
454
  "release/best_validation_metrics.json",
455
+ "latest_checkpoint/checkpoint_manifest.json",
456
  }
457
+ required_manifested.update(REQUIRED_LATEST_CHECKPOINT)
458
  if not required_manifested.issubset(files):
459
  raise RuntimeError("Release manifest omits one or more critical release artifacts")
460
  return {"manifested_files": len(files), "best_checkpoint_step": manifest.get("best_checkpoint_step")}
 
496
  # publisher explicitly ignores them. Do not inspect their payloads
497
  # as if they were part of the clean release tree.
498
  continue
499
+ relative_name = relative.as_posix()
500
+ if path.is_file() and path.name in forbidden_names and relative_name not in REQUIRED_LATEST_CHECKPOINT:
501
  raise RuntimeError(f"Training/base payload must not be published: {relative}")
502
  if path.is_file() and path.suffix == ".safetensors" and path.name != "adapter_model.safetensors":
503
  raise RuntimeError(f"Unexpected safetensors payload: {relative}")
504
  if require_remote_clean and (root / ".env").exists():
505
  raise RuntimeError("A remote release checkout must never contain .env")
506
  if require_remote_clean:
507
+ allowed = (
508
+ REQUIRED_SOURCE
509
+ | REQUIRED_RELEASE
510
+ | REQUIRED_LATEST_CHECKPOINT
511
+ | OPTIONAL_CLEAN_FILES
512
+ )
513
  unexpected = []
514
  for path in root.rglob("*"):
515
  if not path.is_file():
 
530
  root = root.resolve()
531
  require_files(root, REQUIRED_SOURCE)
532
  require_files(root, REQUIRED_RELEASE)
533
+ require_files(root, REQUIRED_LATEST_CHECKPOINT)
534
  reject_accidental_payloads(root, require_remote_clean=require_remote_clean)
535
  inference = verify_inference_config(root)
536
  result = {
 
542
  "base_model": verify_base_evidence(root),
543
  "lora": verify_lora_evidence(root),
544
  "adapter": verify_adapter(root),
545
+ "latest_checkpoint": verify_latest_checkpoint(root),
546
  "inference": inference,
547
  "final_run": verify_final_run(root, inference),
548
  "manifest": verify_manifest(root),
549
  "remote_clean_mode": require_remote_clean,
550
+ "gated_base_access_evidence_verified": True,
551
  }
552
  return result
553