From c908729d6dc2ab4e19c00e519a1c25b06f40fa83 Mon Sep 17 00:00:00 2001 From: ModelHub XC Date: Thu, 23 Jul 2026 11:00:10 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=EF=BC=8C=E7=94=B1ModelHub=20XC=E7=A4=BE=E5=8C=BA=E6=8F=90?= =?UTF-8?q?=E4=BE=9B=E6=A8=A1=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Model: SZLHOLDINGS/SZL-Forge-1.5B-ReceiptAgent Source: Original Platform --- .gitattributes | 36 +++++ LICENSE | 202 ++++++++++++++++++++++++++++ README.md | 163 +++++++++++++++++++++++ SZL_ESTATE_MANAGED.json | 15 +++ adapter/README.md | 210 ++++++++++++++++++++++++++++++ adapter/adapter_config.json | 52 ++++++++ adapter/adapter_model.safetensors | 3 + chat_template.jinja | 54 ++++++++ config.json | 62 +++++++++ eval_receipt.signed.json | 31 +++++ generation_config.json | 14 ++ model.safetensors | 3 + owner_pubkey.json | 5 + receiptagent.schema.json | 121 +++++++++++++++++ tokenizer.json | 3 + tokenizer_config.json | 194 +++++++++++++++++++++++++++ training_receipt.signed.json | 28 ++++ 17 files changed, 1196 insertions(+) create mode 100644 .gitattributes create mode 100644 LICENSE create mode 100644 README.md create mode 100644 SZL_ESTATE_MANAGED.json create mode 100644 adapter/README.md create mode 100644 adapter/adapter_config.json create mode 100644 adapter/adapter_model.safetensors create mode 100644 chat_template.jinja create mode 100644 config.json create mode 100644 eval_receipt.signed.json create mode 100644 generation_config.json create mode 100644 model.safetensors create mode 100644 owner_pubkey.json create mode 100644 receiptagent.schema.json create mode 100644 tokenizer.json create mode 100644 tokenizer_config.json create mode 100644 training_receipt.signed.json diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..52373fe --- /dev/null +++ b/.gitattributes @@ -0,0 +1,36 @@ +*.7z filter=lfs diff=lfs merge=lfs -text +*.arrow filter=lfs diff=lfs merge=lfs -text +*.bin filter=lfs diff=lfs merge=lfs -text +*.bz2 filter=lfs diff=lfs merge=lfs -text +*.ckpt filter=lfs diff=lfs merge=lfs -text +*.ftz filter=lfs diff=lfs merge=lfs -text +*.gz filter=lfs diff=lfs merge=lfs -text +*.h5 filter=lfs diff=lfs merge=lfs -text +*.joblib filter=lfs diff=lfs merge=lfs -text +*.lfs.* filter=lfs diff=lfs merge=lfs -text +*.mlmodel filter=lfs diff=lfs merge=lfs -text +*.model filter=lfs diff=lfs merge=lfs -text +*.msgpack filter=lfs diff=lfs merge=lfs -text +*.npy filter=lfs diff=lfs merge=lfs -text +*.npz filter=lfs diff=lfs merge=lfs -text +*.onnx filter=lfs diff=lfs merge=lfs -text +*.ot filter=lfs diff=lfs merge=lfs -text +*.parquet filter=lfs diff=lfs merge=lfs -text +*.pb filter=lfs diff=lfs merge=lfs -text +*.pickle filter=lfs diff=lfs merge=lfs -text +*.pkl filter=lfs diff=lfs merge=lfs -text +*.pt filter=lfs diff=lfs merge=lfs -text +*.pth filter=lfs diff=lfs merge=lfs -text +*.rar filter=lfs diff=lfs merge=lfs -text +*.safetensors filter=lfs diff=lfs merge=lfs -text +saved_model/**/* filter=lfs diff=lfs merge=lfs -text +*.tar.* filter=lfs diff=lfs merge=lfs -text +*.tar filter=lfs diff=lfs merge=lfs -text +*.tflite filter=lfs diff=lfs merge=lfs -text +*.tgz filter=lfs diff=lfs merge=lfs -text +*.wasm filter=lfs diff=lfs merge=lfs -text +*.xz filter=lfs diff=lfs merge=lfs -text +*.zip filter=lfs diff=lfs merge=lfs -text +*.zst filter=lfs diff=lfs merge=lfs -text +*tfevents* filter=lfs diff=lfs merge=lfs -text +tokenizer.json filter=lfs diff=lfs merge=lfs -text diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/README.md b/README.md new file mode 100644 index 0000000..4a0d6ee --- /dev/null +++ b/README.md @@ -0,0 +1,163 @@ +--- +license: apache-2.0 +base_model: Qwen/Qwen2.5-1.5B-Instruct +library_name: transformers +pipeline_tag: text-generation +tags: + - qlora + - governed-agent + - proposal-only + - receipt-verified + - szl-holdings + - alloy +--- + +

+ [![receipts](https://img.shields.io/badge/receipts-training%20+%20eval%20signed-3af4c8?style=flat-square)](https://huggingface.co/SZLHOLDINGS/SZL-Forge-1.5B-ReceiptAgent/blob/main/training_receipt.signed.json) + [![weights](https://img.shields.io/badge/weights-1.5B%20safetensors%20+%20LoRA-5b8dee?style=flat-square)](https://huggingface.co/SZLHOLDINGS/SZL-Forge-1.5B-ReceiptAgent/tree/main) + [![family](https://img.shields.io/badge/family-SZL--Forge-d7b96b?style=flat-square)](https://huggingface.co/SZLHOLDINGS) +

+ + + +# SZL-Forge-1.5B-ReceiptAgent + +A **governed, proposal-only** agent fine-tune of `Qwen/Qwen2.5-1.5B-Instruct`. +It **proposes** evidence-bound, approval-gated decision **drafts** as JSON — it +never finalizes, never executes, and never fabricates a number, citation, or +receipt. When asked to overstep that boundary, it **refuses**. + +> **Provenance, not vibes.** Every capability claim on this card is backed by an +> ed25519 owner-signed receipt committed alongside the weights and +> **independently re-verified** by the Alloy backbone. Verify it yourself (see +> *Verify this model* below). Nothing here is asserted that a signature does not +> already prove. + +## What it does + +- Emits a single JSON **draft** conforming to the ReceiptAgent output schema: + `decision=DRAFT`, `approvalRequired=true`, `executed=false`, + `provenance=MODEL_PROPOSED`, `receiptBinding.status=NOT_BOUND`, and at least + one cited evidence source carrying an honest label + (`MEASURED / REPORTED / DECLARED / SIMULATED / UNKNOWN / UNAVAILABLE`). +- The model is a **proposer inside a controller boundary**: Alloy validates the + draft's arguments, gates on human approval, and executes any action *outside + the weights*. The model never decides or acts. + +## Training (REPORTED — owner-metal, not server-measured) + +- **Base model:** `Qwen/Qwen2.5-1.5B-Instruct` +- **Method:** QLoRA SFT with **response-only loss masking** and **refusal + oversampling** (the adversarial refusal set is held out from training). Full, + reproducible recipe: `train_receiptagent.py` in the forge kit. +- **Final train loss:** `0.1038` (REPORTED by the owner's signed training receipt) +- **Trained at:** `2026-07-13T21:33:44Z` on host `betterwithage` +- **Curriculum:** deterministic, schema-validated synthetic drafts + refusals; + every dataset file is sha256-pinned in the receipt and byte-reproducible. + +## Evaluation (REPORTED — held-out, owner-signed) + +Measured on a **held-out** curriculum, signed into `eval_receipt.signed.json` +and chained to the training receipt: + +| Metric | Result | +| --- | --- | +| Draft-conformance (schema-valid drafts) | **5 / 5 (100%)** | +| Adversarial-refusal (correctly refused overstep) | **6 / 6 (100%)** | +| Sanity gate (train-set reproduction, pre-eval) | drafts 15/15 · refusals 8/8 | + +The adversarial-refusal rate — not the memorizable conformance rate — is the +meaningful honesty score. + +## Verify this model (don't trust — check) + +1. The two receipts are ed25519-signed over a canonical JSON string and + **hash-chained** (`eval.trainingReceiptSha256` == `sha256(trainingCanonical)`). +2. The signing key is committed as `owner_pubkey.json` + (`keyId e7f01810aaa97394`); its `keyId` re-derives from the SPKI. +3. Every `datasets[*]` sha256 in the receipts equals the committed curriculum + files, and the output-schema sha equals `receiptagent.schema.json`. +4. The Alloy backbone re-runs all of the above per request and exposes the + verdict at **`/api/forge/family`** (`evidence.trainingStatus` / + `evidence.evalStatus`). Anyone can reproduce it against these files. + +**Honesty stance:** results are `REPORTED` (produced on owner metal), not +`MEASURED` by a third party. Trust anchor is `REPO_DECLARED` (the key ships in +this repo); it upgrades to `PINNED` when the operator pins `keyId` out-of-band. + +## Files & provenance bindings + +- **Merged model weights** (`*.safetensors`) — the receipts' `weightsArtifactSha256` + is a deterministic digest over the sorted `*.safetensors` of the merge + (basename + bytes), reproducible with `sha256_safetensors_dir` in the forge kit. + This — **not** any GGUF — is the artifact the signed weights hash covers. +- **LoRA adapter** (`*.safetensors`) — bound by `adapterSha256` the same way. +- `owner_pubkey.json`, `training_receipt.signed.json`, `eval_receipt.signed.json`, + `receiptagent.schema.json` — the verifiable provenance bundle. +- Any `*.gguf` is a **derived** convenience for llama.cpp / Ollama and is **not** + covered by the signed weights hash. + +## Run it + +```python +from transformers import AutoModelForCausalLM, AutoTokenizer + +model_id = "SZLHOLDINGS/SZL-Forge-1.5B-ReceiptAgent" +tok = AutoTokenizer.from_pretrained(model_id) +model = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype="auto", device_map="auto") + +messages = [{"role": "user", "content": "Draft a decision on raising the rolling-24h spend cap."}] +inputs = tok.apply_chat_template(messages, add_generation_prompt=True, return_tensors="pt").to(model.device) +out = model.generate(inputs, max_new_tokens=512, do_sample=False) +print(tok.decode(out[0][inputs.shape[-1]:], skip_special_tokens=True)) +``` + +The model returns a single JSON **draft** (`decision=DRAFT`, `approvalRequired=true`, +`executed=false`) or a **refusal** — never a finalized action. Validate the output +against `receiptagent.schema.json` before acting on it. + +### Adapter (PEFT) alternative + +The LoRA adapter ships under `adapter/` for stacking on the stock base: + +```python +from peft import PeftModel +from transformers import AutoModelForCausalLM + +base = AutoModelForCausalLM.from_pretrained( + "Qwen/Qwen2.5-1.5B-Instruct", torch_dtype="auto", device_map="auto" +) +model = PeftModel.from_pretrained( + base, "SZLHOLDINGS/SZL-Forge-1.5B-ReceiptAgent", subfolder="adapter" +) +``` + +## Intended use & limits + +- **Use:** proposing governed, evidence-cited decision drafts for a + human-in-the-loop controller (e.g. Alloy). +- **Not for:** autonomous execution, finalizing actions, or being treated as a + source of ground-truth numbers. It is a 1.5B proposer, not an oracle. + +## Citation + +Part of the **SZL-Forge** family by **SZL Holdings**. Provenance verifiable via +the Alloy governed-inference backbone. + +--- + +

+ SZL Holdings · + a-11-oy.com · + szl-forge (GitHub source · forge kit) · + Khipu GGUF +

+ +

SLSA: L1 honest · L2 attested · L3 roadmap. Λ = Conjecture 1. Trust ceiling 0.97.

diff --git a/SZL_ESTATE_MANAGED.json b/SZL_ESTATE_MANAGED.json new file mode 100644 index 0000000..422df31 --- /dev/null +++ b/SZL_ESTATE_MANAGED.json @@ -0,0 +1,15 @@ +{ + "canonical_flagship": "https://github.com/szl-holdings/a11oy", + "canonical_github_org": "https://github.com/szl-holdings", + "canonical_rule": "GitHub source, protected CI, release receipts, checksums, and provenance are authoritative. Hugging Face is the managed Hub surface.", + "clone_of": null, + "generation": "3c20fe2a6b0c9c56a045265b194a81e952fc949c", + "managed_at": "2026-07-22T08:48:33.215036+00:00", + "non_destructive": true, + "observed_sha_before_upgrade": "67043d13c3166a81cfd292c84b18e587781f3ba9", + "organization": "SZLHOLDINGS", + "repo_id": "SZLHOLDINGS/SZL-Forge-1.5B-ReceiptAgent", + "repo_type": "model", + "runtime": null, + "schema": "szl.hf-estate-managed/v1" +} diff --git a/adapter/README.md b/adapter/README.md new file mode 100644 index 0000000..51eed44 --- /dev/null +++ b/adapter/README.md @@ -0,0 +1,210 @@ +--- +base_model: unsloth/Qwen2.5-1.5B-Instruct-bnb-4bit +library_name: peft +pipeline_tag: text-generation +tags: +- base_model:adapter:unsloth/Qwen2.5-1.5B-Instruct-bnb-4bit +- lora +- sft +- transformers +- trl +- unsloth +--- + +# Model Card for Model ID + + + + + +## Model Details + +### Model Description + + + + + +- **Developed by:** [More Information Needed] +- **Funded by [optional]:** [More Information Needed] +- **Shared by [optional]:** [More Information Needed] +- **Model type:** [More Information Needed] +- **Language(s) (NLP):** [More Information Needed] +- **License:** [More Information Needed] +- **Finetuned from model [optional]:** [More Information Needed] + +### Model Sources [optional] + + + +- **Repository:** [More Information Needed] +- **Paper [optional]:** [More Information Needed] +- **Demo [optional]:** [More Information Needed] + +## Uses + + + +### Direct Use + + + +[More Information Needed] + +### Downstream Use [optional] + + + +[More Information Needed] + +### Out-of-Scope Use + + + +[More Information Needed] + +## Bias, Risks, and Limitations + + + +[More Information Needed] + +### Recommendations + + + +Users (both direct and downstream) should be made aware of the risks, biases and limitations of the model. More information needed for further recommendations. + +## How to Get Started with the Model + +Use the code below to get started with the model. + +[More Information Needed] + +## Training Details + +### Training Data + + + +[More Information Needed] + +### Training Procedure + + + +#### Preprocessing [optional] + +[More Information Needed] + + +#### Training Hyperparameters + +- **Training regime:** [More Information Needed] + +#### Speeds, Sizes, Times [optional] + + + +[More Information Needed] + +## Evaluation + + + +### Testing Data, Factors & Metrics + +#### Testing Data + + + +[More Information Needed] + +#### Factors + + + +[More Information Needed] + +#### Metrics + + + +[More Information Needed] + +### Results + +[More Information Needed] + +#### Summary + + + +## Model Examination [optional] + + + +[More Information Needed] + +## Environmental Impact + + + +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). + +- **Hardware Type:** [More Information Needed] +- **Hours used:** [More Information Needed] +- **Cloud Provider:** [More Information Needed] +- **Compute Region:** [More Information Needed] +- **Carbon Emitted:** [More Information Needed] + +## Technical Specifications [optional] + +### Model Architecture and Objective + +[More Information Needed] + +### Compute Infrastructure + +[More Information Needed] + +#### Hardware + +[More Information Needed] + +#### Software + +[More Information Needed] + +## Citation [optional] + + + +**BibTeX:** + +[More Information Needed] + +**APA:** + +[More Information Needed] + +## Glossary [optional] + + + +[More Information Needed] + +## More Information [optional] + +[More Information Needed] + +## Model Card Authors [optional] + +[More Information Needed] + +## Model Card Contact + +[More Information Needed] +### Framework versions + +- PEFT 0.19.1 \ No newline at end of file diff --git a/adapter/adapter_config.json b/adapter/adapter_config.json new file mode 100644 index 0000000..cc95e3a --- /dev/null +++ b/adapter/adapter_config.json @@ -0,0 +1,52 @@ +{ + "alora_invocation_tokens": null, + "alpha_pattern": {}, + "arrow_config": null, + "auto_mapping": { + "base_model_class": "Qwen2ForCausalLM", + "parent_library": "transformers.models.qwen2.modeling_qwen2", + "unsloth_fixed": true + }, + "base_model_name_or_path": "unsloth/Qwen2.5-1.5B-Instruct-bnb-4bit", + "bias": "none", + "corda_config": null, + "ensure_weight_tying": false, + "eva_config": null, + "exclude_modules": null, + "fan_in_fan_out": false, + "inference_mode": true, + "init_lora_weights": true, + "layer_replication": null, + "layers_pattern": null, + "layers_to_transform": null, + "loftq_config": {}, + "lora_alpha": 64, + "lora_bias": false, + "lora_dropout": 0, + "lora_ga_config": null, + "megatron_config": null, + "megatron_core": "megatron.core", + "modules_to_save": null, + "peft_type": "LORA", + "peft_version": "0.19.1", + "qalora_group_size": 16, + "r": 32, + "rank_pattern": {}, + "revision": null, + "target_modules": [ + "gate_proj", + "q_proj", + "k_proj", + "down_proj", + "v_proj", + "o_proj", + "up_proj" + ], + "target_parameters": null, + "task_type": "CAUSAL_LM", + "trainable_token_indices": null, + "use_bdlora": null, + "use_dora": false, + "use_qalora": false, + "use_rslora": false +} \ No newline at end of file diff --git a/adapter/adapter_model.safetensors b/adapter/adapter_model.safetensors new file mode 100644 index 0000000..0cb49f4 --- /dev/null +++ b/adapter/adapter_model.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:706aff139489d62cb1ac221c0f92a1a8595cd6a42032c542efe8028684e57cf2 +size 147770496 diff --git a/chat_template.jinja b/chat_template.jinja new file mode 100644 index 0000000..9840d40 --- /dev/null +++ b/chat_template.jinja @@ -0,0 +1,54 @@ +{%- if tools %} + {{- '<|im_start|>system\n' }} + {%- if messages[0]['role'] == 'system' %} + {{- messages[0]['content'] }} + {%- else %} + {{- 'You are Qwen, created by Alibaba Cloud. You are a helpful assistant.' }} + {%- endif %} + {{- "\n\n# Tools\n\nYou may call one or more functions to assist with the user query.\n\nYou are provided with function signatures within XML tags:\n" }} + {%- for tool in tools %} + {{- "\n" }} + {{- tool | tojson }} + {%- endfor %} + {{- "\n\n\nFor each function call, return a json object with function name and arguments within XML tags:\n\n{\"name\": , \"arguments\": }\n<|im_end|>\n" }} +{%- else %} + {%- if messages[0]['role'] == 'system' %} + {{- '<|im_start|>system\n' + messages[0]['content'] + '<|im_end|>\n' }} + {%- else %} + {{- '<|im_start|>system\nYou are Qwen, created by Alibaba Cloud. You are a helpful assistant.<|im_end|>\n' }} + {%- endif %} +{%- endif %} +{%- for message in messages %} + {%- if (message.role == "user") or (message.role == "system" and not loop.first) or (message.role == "assistant" and not message.tool_calls) %} + {{- '<|im_start|>' + message.role + '\n' + message.content + '<|im_end|>' + '\n' }} + {%- elif message.role == "assistant" %} + {{- '<|im_start|>' + message.role }} + {%- if message.content %} + {{- '\n' + message.content }} + {%- endif %} + {%- for tool_call in message.tool_calls %} + {%- if tool_call.function is defined %} + {%- set tool_call = tool_call.function %} + {%- endif %} + {{- '\n\n{"name": "' }} + {{- tool_call.name }} + {{- '", "arguments": ' }} + {{- tool_call.arguments | tojson }} + {{- '}\n' }} + {%- endfor %} + {{- '<|im_end|>\n' }} + {%- elif message.role == "tool" %} + {%- if (loop.index0 == 0) or (messages[loop.index0 - 1].role != "tool") %} + {{- '<|im_start|>user' }} + {%- endif %} + {{- '\n\n' }} + {{- message.content }} + {{- '\n' }} + {%- if loop.last or (messages[loop.index0 + 1].role != "tool") %} + {{- '<|im_end|>\n' }} + {%- endif %} + {%- endif %} +{%- endfor %} +{%- if add_generation_prompt %} + {{- '<|im_start|>assistant\n' }} +{%- endif %} diff --git a/config.json b/config.json new file mode 100644 index 0000000..8e6225e --- /dev/null +++ b/config.json @@ -0,0 +1,62 @@ +{ + "architectures": [ + "Qwen2ForCausalLM" + ], + "attention_dropout": 0.0, + "bos_token_id": null, + "torch_dtype": "bfloat16", + "eos_token_id": 151645, + "hidden_act": "silu", + "hidden_size": 1536, + "initializer_range": 0.02, + "intermediate_size": 8960, + "layer_types": [ + "full_attention", + "full_attention", + "full_attention", + "full_attention", + "full_attention", + "full_attention", + "full_attention", + "full_attention", + "full_attention", + "full_attention", + "full_attention", + "full_attention", + "full_attention", + "full_attention", + "full_attention", + "full_attention", + "full_attention", + "full_attention", + "full_attention", + "full_attention", + "full_attention", + "full_attention", + "full_attention", + "full_attention", + "full_attention", + "full_attention", + "full_attention", + "full_attention" + ], + "max_position_embeddings": 32768, + "max_window_layers": 21, + "model_type": "qwen2", + "num_attention_heads": 12, + "num_hidden_layers": 28, + "num_key_value_heads": 2, + "pad_token_id": 151654, + "rms_norm_eps": 1e-06, + "rope_parameters": { + "rope_theta": 1000000.0, + "rope_type": "default" + }, + "sliding_window": null, + "tie_word_embeddings": true, + "unsloth_fixed": true, + "unsloth_version": "2026.7.2", + "use_cache": true, + "use_sliding_window": false, + "vocab_size": 151936 +} \ No newline at end of file diff --git a/eval_receipt.signed.json b/eval_receipt.signed.json new file mode 100644 index 0000000..380df80 --- /dev/null +++ b/eval_receipt.signed.json @@ -0,0 +1,31 @@ +{ + "payload": { + "kind": "szl-forge-eval-receipt", + "v": 1, + "capabilityProfile": "SZL-Forge-1.5B-ReceiptAgent", + "baseModel": "Qwen/Qwen2.5-1.5B-Instruct", + "datasets": { + "train.jsonl": "775e25b526a96d1486e80aae048f731bdad02a0d94ea76144593e115802fa24f", + "eval.jsonl": "1a92bea9b163882ae7c7aa00be6c1fda3e9c98683f0214af985bfb184e27ff65", + "train.refusals.jsonl": "c5136b612951c209d1041839d1ac19a8fa378c31015d61dd7565994b4f3e2b47", + "adversarial.jsonl": "81d2a494ee41256c7909a54435c4e7971fea65de81fffbf3f2b8a008aab5a572", + "receiptagent.schema.json": "1db07ef9e1581cc8cc471dd42e79a21b728c4e3bf1222fd0f06f2b7257bb288e" + }, + "schemaFingerprintSha256": "68b41b9f198bef4238e561f66456a849afe8095a43df19299a434915b54361d5", + "outputSchemaSha256": "1db07ef9e1581cc8cc471dd42e79a21b728c4e3bf1222fd0f06f2b7257bb288e", + "weightsArtifactSha256": "851af12990cc2077bb610ebe3e4511a077f1fc59f8e7ebe21d40c73a7da64c69", + "servedModel": "receiptagent", + "trainingReceiptSha256": "9f342f33f295888f95490359bc87c2425ce80866dce8d4f1aa38ed5dcb54d93e", + "evalTotal": 5, + "evalContractValid": 5, + "adversarialTotal": 6, + "adversarialRefused": 6, + "evaluatedAt": "2026-07-13T21:36:22.878211+00:00", + "host": "betterwithage", + "keyId": "e7f01810aaa97394" + }, + "canonical": "{\"adversarialRefused\":6,\"adversarialTotal\":6,\"baseModel\":\"Qwen/Qwen2.5-1.5B-Instruct\",\"capabilityProfile\":\"SZL-Forge-1.5B-ReceiptAgent\",\"datasets\":{\"adversarial.jsonl\":\"81d2a494ee41256c7909a54435c4e7971fea65de81fffbf3f2b8a008aab5a572\",\"eval.jsonl\":\"1a92bea9b163882ae7c7aa00be6c1fda3e9c98683f0214af985bfb184e27ff65\",\"receiptagent.schema.json\":\"1db07ef9e1581cc8cc471dd42e79a21b728c4e3bf1222fd0f06f2b7257bb288e\",\"train.jsonl\":\"775e25b526a96d1486e80aae048f731bdad02a0d94ea76144593e115802fa24f\",\"train.refusals.jsonl\":\"c5136b612951c209d1041839d1ac19a8fa378c31015d61dd7565994b4f3e2b47\"},\"evalContractValid\":5,\"evalTotal\":5,\"evaluatedAt\":\"2026-07-13T21:36:22.878211+00:00\",\"host\":\"betterwithage\",\"keyId\":\"e7f01810aaa97394\",\"kind\":\"szl-forge-eval-receipt\",\"outputSchemaSha256\":\"1db07ef9e1581cc8cc471dd42e79a21b728c4e3bf1222fd0f06f2b7257bb288e\",\"schemaFingerprintSha256\":\"68b41b9f198bef4238e561f66456a849afe8095a43df19299a434915b54361d5\",\"servedModel\":\"receiptagent\",\"trainingReceiptSha256\":\"9f342f33f295888f95490359bc87c2425ce80866dce8d4f1aa38ed5dcb54d93e\",\"v\":1,\"weightsArtifactSha256\":\"851af12990cc2077bb610ebe3e4511a077f1fc59f8e7ebe21d40c73a7da64c69\"}", + "signatureBase64": "8YWgeNs/xy3IL12PKMhJpe1V09AD68U4Hsk/kq2rjNUfvlUCbuEaUwExlvZiG7OO5CCfEYFk8S8ZpHFI8BXQAQ==", + "publicKeySpkiBase64": "MCowBQYDK2VwAyEA0hrzlPL52zi3yA9Wj1uKL1CJMr12dTwKeIXYfJCg3a8=", + "keyId": "e7f01810aaa97394" +} diff --git a/generation_config.json b/generation_config.json new file mode 100644 index 0000000..82ca381 --- /dev/null +++ b/generation_config.json @@ -0,0 +1,14 @@ +{ + "do_sample": true, + "eos_token_id": [ + 151645, + 151643 + ], + "max_length": 32768, + "pad_token_id": 151654, + "repetition_penalty": 1.1, + "temperature": 0.7, + "top_k": 20, + "top_p": 0.8, + "transformers_version": "5.5.0" +} diff --git a/model.safetensors b/model.safetensors new file mode 100644 index 0000000..1a6ef2a --- /dev/null +++ b/model.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a797592fb35c32cc6ebf5739c0a1d9312123300acaf09987d207d86196bc6e7d +size 3087467144 diff --git a/owner_pubkey.json b/owner_pubkey.json new file mode 100644 index 0000000..2f55563 --- /dev/null +++ b/owner_pubkey.json @@ -0,0 +1,5 @@ +{ + "algo": "ed25519", + "publicKeySpkiBase64": "MCowBQYDK2VwAyEA0hrzlPL52zi3yA9Wj1uKL1CJMr12dTwKeIXYfJCg3a8=", + "keyId": "e7f01810aaa97394" +} diff --git a/receiptagent.schema.json b/receiptagent.schema.json new file mode 100644 index 0000000..00db5a7 --- /dev/null +++ b/receiptagent.schema.json @@ -0,0 +1,121 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "type": "object", + "properties": { + "proposalId": { + "description": "Opaque draft id. In this example it is obviously synthetic.", + "type": "string" + }, + "capabilityProfile": { + "description": "The governed capability profile contracted to emit this draft.", + "type": "string", + "const": "SZL-Forge-1.5B-ReceiptAgent" + }, + "provenance": { + "description": "Honest origin of the draft: SYNTHETIC = an illustrative example not produced by any model (as in RECEIPT_AGENT_EXAMPLE below); MODEL_PROPOSED = a real draft proposed by the ReceiptAgent model. Both are honest; a draft can never claim any other origin (e.g. HUMAN or MEASURED).", + "type": "string", + "enum": [ + "SYNTHETIC", + "MODEL_PROPOSED" + ] + }, + "claim": { + "description": "The proposed decision, stated as a DRAFT for human review.", + "type": "string" + }, + "decision": { + "description": "Always a draft — the model proposes; it never decides or finalizes.", + "type": "string", + "const": "DRAFT" + }, + "evidence": { + "description": "Evidence-bound: at least one cited source backs the claim.", + "minItems": 1, + "type": "array", + "items": { + "type": "object", + "properties": { + "sourceEndpoint": { + "description": "A real Alloy endpoint the controller would consult for this evidence (or a plainly-marked placeholder) — no live value is embedded here.", + "type": "string" + }, + "label": { + "description": "The source endpoint's OWN honesty tier — denotes what kind of evidence it provides, not a measurement captured in this synthetic example.", + "type": "string", + "enum": [ + "MEASURED", + "REPORTED", + "DECLARED", + "SIMULATED", + "UNKNOWN", + "UNAVAILABLE" + ] + }, + "note": { + "description": "Plain-language description of the evidence role.", + "type": "string" + } + }, + "required": [ + "sourceEndpoint", + "label", + "note" + ], + "additionalProperties": false + } + }, + "approvalRequired": { + "description": "Approval-gated: the draft can never proceed without human approval.", + "type": "boolean", + "const": true + }, + "controllerBoundary": { + "description": "States the A11oy runtime boundary — the controller decides, validates, gates on approval, and executes OUTSIDE the weights.", + "type": "string" + }, + "receiptBinding": { + "description": "How an approved, executed action would bind to a signed receipt.", + "type": "object", + "properties": { + "algorithm": { + "description": "The estate's real receipt scheme this draft would bind to on execution.", + "type": "string", + "const": "ed25519-over-sha256" + }, + "status": { + "description": "A synthetic, unexecuted draft is NOT receipt-bound; a real receipt is minted only when an approved action actually executes.", + "type": "string", + "const": "NOT_BOUND" + }, + "note": { + "description": "Why no receipt exists for this example.", + "type": "string" + } + }, + "required": [ + "algorithm", + "status", + "note" + ], + "additionalProperties": false + }, + "executed": { + "description": "A draft never self-executes; execution happens outside the model.", + "type": "boolean", + "const": false + } + }, + "required": [ + "proposalId", + "capabilityProfile", + "provenance", + "claim", + "decision", + "evidence", + "approvalRequired", + "controllerBoundary", + "receiptBinding", + "executed" + ], + "additionalProperties": false +} diff --git a/tokenizer.json b/tokenizer.json new file mode 100644 index 0000000..d73428d --- /dev/null +++ b/tokenizer.json @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6b4360dd6a184650ffc48056c2569bc603f896c5adfe94b10f1c79f809638aa5 +size 11422166 diff --git a/tokenizer_config.json b/tokenizer_config.json new file mode 100644 index 0000000..5ed5170 --- /dev/null +++ b/tokenizer_config.json @@ -0,0 +1,194 @@ +{ + "add_prefix_space": false, + "backend": "tokenizers", + "bos_token": null, + "clean_up_tokenization_spaces": false, + "eos_token": "<|im_end|>", + "errors": "replace", + "is_local": false, + "model_max_length": 32768, + "pad_token": "<|vision_pad|>", + "padding_side": "left", + "split_special_tokens": false, + "tokenizer_class": "Qwen2Tokenizer", + "unk_token": null, + "added_tokens_decoder": { + "151643": { + "content": "<|endoftext|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + "151644": { + "content": "<|im_start|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + "151645": { + "content": "<|im_end|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + "151646": { + "content": "<|object_ref_start|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + "151647": { + "content": "<|object_ref_end|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + "151648": { + "content": "<|box_start|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + "151649": { + "content": "<|box_end|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + "151650": { + "content": "<|quad_start|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + "151651": { + "content": "<|quad_end|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + "151652": { + "content": "<|vision_start|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + "151653": { + "content": "<|vision_end|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + "151654": { + "content": "<|vision_pad|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + "151655": { + "content": "<|image_pad|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + "151656": { + "content": "<|video_pad|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + "151657": { + "content": "", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": false + }, + "151658": { + "content": "", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": false + }, + "151659": { + "content": "<|fim_prefix|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": false + }, + "151660": { + "content": "<|fim_middle|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": false + }, + "151661": { + "content": "<|fim_suffix|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": false + }, + "151662": { + "content": "<|fim_pad|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": false + }, + "151663": { + "content": "<|repo_name|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": false + }, + "151664": { + "content": "<|file_sep|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": false + } + }, + "chat_template": "{%- if tools %}\n {{- '<|im_start|>system\\n' }}\n {%- if messages[0]['role'] == 'system' %}\n {{- messages[0]['content'] }}\n {%- else %}\n {{- 'You are Qwen, created by Alibaba Cloud. You are a helpful assistant.' }}\n {%- endif %}\n {{- \"\\n\\n# Tools\\n\\nYou may call one or more functions to assist with the user query.\\n\\nYou are provided with function signatures within XML tags:\\n\" }}\n {%- for tool in tools %}\n {{- \"\\n\" }}\n {{- tool | tojson }}\n {%- endfor %}\n {{- \"\\n\\n\\nFor each function call, return a json object with function name and arguments within XML tags:\\n\\n{\\\"name\\\": , \\\"arguments\\\": }\\n<|im_end|>\\n\" }}\n{%- else %}\n {%- if messages[0]['role'] == 'system' %}\n {{- '<|im_start|>system\\n' + messages[0]['content'] + '<|im_end|>\\n' }}\n {%- else %}\n {{- '<|im_start|>system\\nYou are Qwen, created by Alibaba Cloud. You are a helpful assistant.<|im_end|>\\n' }}\n {%- endif %}\n{%- endif %}\n{%- for message in messages %}\n {%- if (message.role == \"user\") or (message.role == \"system\" and not loop.first) or (message.role == \"assistant\" and not message.tool_calls) %}\n {{- '<|im_start|>' + message.role + '\\n' + message.content + '<|im_end|>' + '\\n' }}\n {%- elif message.role == \"assistant\" %}\n {{- '<|im_start|>' + message.role }}\n {%- if message.content %}\n {{- '\\n' + message.content }}\n {%- endif %}\n {%- for tool_call in message.tool_calls %}\n {%- if tool_call.function is defined %}\n {%- set tool_call = tool_call.function %}\n {%- endif %}\n {{- '\\n\\n{\"name\": \"' }}\n {{- tool_call.name }}\n {{- '\", \"arguments\": ' }}\n {{- tool_call.arguments | tojson }}\n {{- '}\\n' }}\n {%- endfor %}\n {{- '<|im_end|>\\n' }}\n {%- elif message.role == \"tool\" %}\n {%- if (loop.index0 == 0) or (messages[loop.index0 - 1].role != \"tool\") %}\n {{- '<|im_start|>user' }}\n {%- endif %}\n {{- '\\n\\n' }}\n {{- message.content }}\n {{- '\\n' }}\n {%- if loop.last or (messages[loop.index0 + 1].role != \"tool\") %}\n {{- '<|im_end|>\\n' }}\n {%- endif %}\n {%- endif %}\n{%- endfor %}\n{%- if add_generation_prompt %}\n {{- '<|im_start|>assistant\\n' }}\n{%- endif %}\n" +} \ No newline at end of file diff --git a/training_receipt.signed.json b/training_receipt.signed.json new file mode 100644 index 0000000..0c03f07 --- /dev/null +++ b/training_receipt.signed.json @@ -0,0 +1,28 @@ +{ + "payload": { + "kind": "szl-forge-training-receipt", + "v": 1, + "capabilityProfile": "SZL-Forge-1.5B-ReceiptAgent", + "baseModel": "Qwen/Qwen2.5-1.5B-Instruct", + "datasets": { + "train.jsonl": "775e25b526a96d1486e80aae048f731bdad02a0d94ea76144593e115802fa24f", + "eval.jsonl": "1a92bea9b163882ae7c7aa00be6c1fda3e9c98683f0214af985bfb184e27ff65", + "train.refusals.jsonl": "c5136b612951c209d1041839d1ac19a8fa378c31015d61dd7565994b4f3e2b47", + "adversarial.jsonl": "81d2a494ee41256c7909a54435c4e7971fea65de81fffbf3f2b8a008aab5a572", + "receiptagent.schema.json": "1db07ef9e1581cc8cc471dd42e79a21b728c4e3bf1222fd0f06f2b7257bb288e" + }, + "schemaFingerprintSha256": "68b41b9f198bef4238e561f66456a849afe8095a43df19299a434915b54361d5", + "outputSchemaSha256": "1db07ef9e1581cc8cc471dd42e79a21b728c4e3bf1222fd0f06f2b7257bb288e", + "adapterSha256": "5eb426c1a4cd17faa4c46590d3aff22671023f64a179e7b47b5bcab4c59e47cd", + "weightsArtifactSha256": "851af12990cc2077bb610ebe3e4511a077f1fc59f8e7ebe21d40c73a7da64c69", + "servedModel": "receiptagent", + "trainedAt": "2026-07-13T21:33:44.531784+00:00", + "host": "betterwithage", + "finalTrainLoss": "0.1038", + "keyId": "e7f01810aaa97394" + }, + "canonical": "{\"adapterSha256\":\"5eb426c1a4cd17faa4c46590d3aff22671023f64a179e7b47b5bcab4c59e47cd\",\"baseModel\":\"Qwen/Qwen2.5-1.5B-Instruct\",\"capabilityProfile\":\"SZL-Forge-1.5B-ReceiptAgent\",\"datasets\":{\"adversarial.jsonl\":\"81d2a494ee41256c7909a54435c4e7971fea65de81fffbf3f2b8a008aab5a572\",\"eval.jsonl\":\"1a92bea9b163882ae7c7aa00be6c1fda3e9c98683f0214af985bfb184e27ff65\",\"receiptagent.schema.json\":\"1db07ef9e1581cc8cc471dd42e79a21b728c4e3bf1222fd0f06f2b7257bb288e\",\"train.jsonl\":\"775e25b526a96d1486e80aae048f731bdad02a0d94ea76144593e115802fa24f\",\"train.refusals.jsonl\":\"c5136b612951c209d1041839d1ac19a8fa378c31015d61dd7565994b4f3e2b47\"},\"finalTrainLoss\":\"0.1038\",\"host\":\"betterwithage\",\"keyId\":\"e7f01810aaa97394\",\"kind\":\"szl-forge-training-receipt\",\"outputSchemaSha256\":\"1db07ef9e1581cc8cc471dd42e79a21b728c4e3bf1222fd0f06f2b7257bb288e\",\"schemaFingerprintSha256\":\"68b41b9f198bef4238e561f66456a849afe8095a43df19299a434915b54361d5\",\"servedModel\":\"receiptagent\",\"trainedAt\":\"2026-07-13T21:33:44.531784+00:00\",\"v\":1,\"weightsArtifactSha256\":\"851af12990cc2077bb610ebe3e4511a077f1fc59f8e7ebe21d40c73a7da64c69\"}", + "signatureBase64": "MkbmTtHiS1Arpax2EmADMRii9FHVse2Nihp3ouZSkMKnkuRJVFhMkp7W9ReWaViCRoFIJ96noXG0Y27ZpUXHAg==", + "publicKeySpkiBase64": "MCowBQYDK2VwAyEA0hrzlPL52zi3yA9Wj1uKL1CJMr12dTwKeIXYfJCg3a8=", + "keyId": "e7f01810aaa97394" +}