smoh commited on
Commit
7cadd41
·
verified ·
1 Parent(s): 02cc6ca

Stage qualified native runtime 0.2.0

Browse files
runtimes/v0.2.0/DOWNLOAD.md ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Download and install the qualified runtime
2
+
3
+ Use Python 3.12 or newer for installation. Inference runs through the native executable and needs neither Python nor network access. The Hugging Face repository is private; authenticate locally with an account authorized for DataFog.
4
+
5
+ ```sh
6
+ python -m pip install 'huggingface_hub==1.27.0'
7
+ hf auth login
8
+ ```
9
+
10
+ Select exactly one tested target: `linux-x86_64`, `linux-aarch64`, `macos-arm64`, `macos-x86_64`, or `windows-x86_64`. The release index records the tested OS, exact archive hash, runtime source commit, model revision and MCP compatibility revision. Linux ARM64 qualification on Ubuntu is not a Raspberry Pi OS qualification. Windows qualification on Server 2022 does not establish every desktop Windows version.
11
+
12
+ Save this script as `download_install.py`. Replace the revision with the immutable runtime commit from the staging report. It downloads only your selected archive and the versioned installer, forces a fresh download, and verifies the archive and all installed file hashes.
13
+
14
+ ```python
15
+ import argparse
16
+ import json
17
+ import subprocess
18
+ import sys
19
+ from pathlib import Path
20
+ from huggingface_hub import hf_hub_download
21
+
22
+ parser = argparse.ArgumentParser()
23
+ parser.add_argument('--platform', required=True)
24
+ parser.add_argument('--destination', type=Path, required=True)
25
+ args = parser.parse_args()
26
+ revision = 'RUNTIME_COMMIT'
27
+ repo = 'DataFog/datafog-pii'
28
+ prefix = 'runtimes/v0.2.0'
29
+ downloads = Path('datafog-runtime-download').resolve()
30
+
31
+ def download(name):
32
+ return Path(hf_hub_download(
33
+ repo_id=repo, revision=revision, filename=f'{prefix}/{name}',
34
+ local_dir=downloads, force_download=True,
35
+ ))
36
+
37
+ index = json.loads(download('release-index.json').read_text(encoding='utf-8'))
38
+ record = next(item for item in index['platforms'] if item['platform'] == args.platform)
39
+ archive = download(record['archive']['filename'])
40
+ download('tools/common.py')
41
+ installer = download('tools/install_bundle.py')
42
+ subprocess.run([
43
+ sys.executable, str(installer), '--archive', str(archive),
44
+ '--sha256', record['archive']['sha256'],
45
+ '--destination', str(args.destination.resolve()),
46
+ ], check=True)
47
+ ```
48
+
49
+ Run it with your target and a new absolute destination; the installer refuses an existing directory and a mismatched host architecture.
50
+
51
+ ```sh
52
+ python download_install.py --platform macos-arm64 --destination /absolute/new/datafog-bundle
53
+ ```
54
+
55
+ On Windows, use `--platform windows-x86_64` and a path such as `C:\DataFog\bundle`. Install Microsoft's x64 Visual C++ Redistributable (2019-compatible v14). The installer probes startup and reports a missing runtime dependency. Intel macOS requires 15 or newer; ARM macOS requires 14 or newer.
56
+
57
+ Use datafog-mcp PR #33's compatibility revision `01d7f74e693a7892ab1ed504d0d8f8c1e7ce51d3` (stacked on PR #32). Configure the installed path in MCP policy:
58
+
59
+ ```toml
60
+ [model]
61
+ bundle_directory = "/absolute/new/datafog-bundle"
62
+ ```
63
+
64
+ On Windows, TOML literal strings avoid escaping backslashes:
65
+
66
+ ```toml
67
+ [model]
68
+ bundle_directory = 'C:\DataFog\bundle'
69
+ ```
70
+
71
+ Keep weights, tokenizer, configuration and calibration together. GLiNER is not part of this download.
runtimes/v0.2.0/LICENSE ADDED
@@ -0,0 +1,202 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ Apache License
3
+ Version 2.0, January 2004
4
+ http://www.apache.org/licenses/
5
+
6
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
7
+
8
+ 1. Definitions.
9
+
10
+ "License" shall mean the terms and conditions for use, reproduction,
11
+ and distribution as defined by Sections 1 through 9 of this document.
12
+
13
+ "Licensor" shall mean the copyright owner or entity authorized by
14
+ the copyright owner that is granting the License.
15
+
16
+ "Legal Entity" shall mean the union of the acting entity and all
17
+ other entities that control, are controlled by, or are under common
18
+ control with that entity. For the purposes of this definition,
19
+ "control" means (i) the power, direct or indirect, to cause the
20
+ direction or management of such entity, whether by contract or
21
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
22
+ outstanding shares, or (iii) beneficial ownership of such entity.
23
+
24
+ "You" (or "Your") shall mean an individual or Legal Entity
25
+ exercising permissions granted by this License.
26
+
27
+ "Source" form shall mean the preferred form for making modifications,
28
+ including but not limited to software source code, documentation
29
+ source, and configuration files.
30
+
31
+ "Object" form shall mean any form resulting from mechanical
32
+ transformation or translation of a Source form, including but
33
+ not limited to compiled object code, generated documentation,
34
+ and conversions to other media types.
35
+
36
+ "Work" shall mean the work of authorship, whether in Source or
37
+ Object form, made available under the License, as indicated by a
38
+ copyright notice that is included in or attached to the work
39
+ (an example is provided in the Appendix below).
40
+
41
+ "Derivative Works" shall mean any work, whether in Source or Object
42
+ form, that is based on (or derived from) the Work and for which the
43
+ editorial revisions, annotations, elaborations, or other modifications
44
+ represent, as a whole, an original work of authorship. For the purposes
45
+ of this License, Derivative Works shall not include works that remain
46
+ separable from, or merely link (or bind by name) to the interfaces of,
47
+ the Work and Derivative Works thereof.
48
+
49
+ "Contribution" shall mean any work of authorship, including
50
+ the original version of the Work and any modifications or additions
51
+ to that Work or Derivative Works thereof, that is intentionally
52
+ submitted to Licensor for inclusion in the Work by the copyright owner
53
+ or by an individual or Legal Entity authorized to submit on behalf of
54
+ the copyright owner. For the purposes of this definition, "submitted"
55
+ means any form of electronic, verbal, or written communication sent
56
+ to the Licensor or its representatives, including but not limited to
57
+ communication on electronic mailing lists, source code control systems,
58
+ and issue tracking systems that are managed by, or on behalf of, the
59
+ Licensor for the purpose of discussing and improving the Work, but
60
+ excluding communication that is conspicuously marked or otherwise
61
+ designated in writing by the copyright owner as "Not a Contribution."
62
+
63
+ "Contributor" shall mean Licensor and any individual or Legal Entity
64
+ on behalf of whom a Contribution has been received by Licensor and
65
+ subsequently incorporated within the Work.
66
+
67
+ 2. Grant of Copyright License. Subject to the terms and conditions of
68
+ this License, each Contributor hereby grants to You a perpetual,
69
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
70
+ copyright license to reproduce, prepare Derivative Works of,
71
+ publicly display, publicly perform, sublicense, and distribute the
72
+ Work and such Derivative Works in Source or Object form.
73
+
74
+ 3. Grant of Patent License. Subject to the terms and conditions of
75
+ this License, each Contributor hereby grants to You a perpetual,
76
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
77
+ (except as stated in this section) patent license to make, have made,
78
+ use, offer to sell, sell, import, and otherwise transfer the Work,
79
+ where such license applies only to those patent claims licensable
80
+ by such Contributor that are necessarily infringed by their
81
+ Contribution(s) alone or by combination of their Contribution(s)
82
+ with the Work to which such Contribution(s) was submitted. If You
83
+ institute patent litigation against any entity (including a
84
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
85
+ or a Contribution incorporated within the Work constitutes direct
86
+ or contributory patent infringement, then any patent licenses
87
+ granted to You under this License for that Work shall terminate
88
+ as of the date such litigation is filed.
89
+
90
+ 4. Redistribution. You may reproduce and distribute copies of the
91
+ Work or Derivative Works thereof in any medium, with or without
92
+ modifications, and in Source or Object form, provided that You
93
+ meet the following conditions:
94
+
95
+ (a) You must give any other recipients of the Work or
96
+ Derivative Works a copy of this License; and
97
+
98
+ (b) You must cause any modified files to carry prominent notices
99
+ stating that You changed the files; and
100
+
101
+ (c) You must retain, in the Source form of any Derivative Works
102
+ that You distribute, all copyright, patent, trademark, and
103
+ attribution notices from the Source form of the Work,
104
+ excluding those notices that do not pertain to any part of
105
+ the Derivative Works; and
106
+
107
+ (d) If the Work includes a "NOTICE" text file as part of its
108
+ distribution, then any Derivative Works that You distribute must
109
+ include a readable copy of the attribution notices contained
110
+ within such NOTICE file, excluding those notices that do not
111
+ pertain to any part of the Derivative Works, in at least one
112
+ of the following places: within a NOTICE text file distributed
113
+ as part of the Derivative Works; within the Source form or
114
+ documentation, if provided along with the Derivative Works; or,
115
+ within a display generated by the Derivative Works, if and
116
+ wherever such third-party notices normally appear. The contents
117
+ of the NOTICE file are for informational purposes only and
118
+ do not modify the License. You may add Your own attribution
119
+ notices within Derivative Works that You distribute, alongside
120
+ or as an addendum to the NOTICE text from the Work, provided
121
+ that such additional attribution notices cannot be construed
122
+ as modifying the License.
123
+
124
+ You may add Your own copyright statement to Your modifications and
125
+ may provide additional or different license terms and conditions
126
+ for use, reproduction, or distribution of Your modifications, or
127
+ for any such Derivative Works as a whole, provided Your use,
128
+ reproduction, and distribution of the Work otherwise complies with
129
+ the conditions stated in this License.
130
+
131
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
132
+ any Contribution intentionally submitted for inclusion in the Work
133
+ by You to the Licensor shall be under the terms and conditions of
134
+ this License, without any additional terms or conditions.
135
+ Notwithstanding the above, nothing herein shall supersede or modify
136
+ the terms of any separate license agreement you may have executed
137
+ with Licensor regarding such Contributions.
138
+
139
+ 6. Trademarks. This License does not grant permission to use the trade
140
+ names, trademarks, service marks, or product names of the Licensor,
141
+ except as required for reasonable and customary use in describing the
142
+ origin of the Work and reproducing the content of the NOTICE file.
143
+
144
+ 7. Disclaimer of Warranty. Unless required by applicable law or
145
+ agreed to in writing, Licensor provides the Work (and each
146
+ Contributor provides its Contributions) on an "AS IS" BASIS,
147
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
148
+ implied, including, without limitation, any warranties or conditions
149
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
150
+ PARTICULAR PURPOSE. You are solely responsible for determining the
151
+ appropriateness of using or redistributing the Work and assume any
152
+ risks associated with Your exercise of permissions under this License.
153
+
154
+ 8. Limitation of Liability. In no event and under no legal theory,
155
+ whether in tort (including negligence), contract, or otherwise,
156
+ unless required by applicable law (such as deliberate and grossly
157
+ negligent acts) or agreed to in writing, shall any Contributor be
158
+ liable to You for damages, including any direct, indirect, special,
159
+ incidental, or consequential damages of any character arising as a
160
+ result of this License or out of the use or inability to use the
161
+ Work (including but not limited to damages for loss of goodwill,
162
+ work stoppage, computer failure or malfunction, or any and all
163
+ other commercial damages or losses), even if such Contributor
164
+ has been advised of the possibility of such damages.
165
+
166
+ 9. Accepting Warranty or Additional Liability. While redistributing
167
+ the Work or Derivative Works thereof, You may choose to offer,
168
+ and charge a fee for, acceptance of support, warranty, indemnity,
169
+ or other liability obligations and/or rights consistent with this
170
+ License. However, in accepting such obligations, You may act only
171
+ on Your own behalf and on Your sole responsibility, not on behalf
172
+ of any other Contributor, and only if You agree to indemnify,
173
+ defend, and hold each Contributor harmless for any liability
174
+ incurred by, or claims asserted against, such Contributor by reason
175
+ of your accepting any such warranty or additional liability.
176
+
177
+ END OF TERMS AND CONDITIONS
178
+
179
+ APPENDIX: How to apply the Apache License to your work.
180
+
181
+ To apply the Apache License to your work, attach the following
182
+ boilerplate notice, with the fields enclosed by brackets "[]"
183
+ replaced with your own identifying information. (Don't include
184
+ the brackets!) The text should be enclosed in the appropriate
185
+ comment syntax for the file format. We also recommend that a
186
+ file or class name and description of purpose be included on the
187
+ same "printed page" as the copyright notice for easier
188
+ identification within third-party archives.
189
+
190
+ Copyright [yyyy] [name of copyright owner]
191
+
192
+ Licensed under the Apache License, Version 2.0 (the "License");
193
+ you may not use this file except in compliance with the License.
194
+ You may obtain a copy of the License at
195
+
196
+ http://www.apache.org/licenses/LICENSE-2.0
197
+
198
+ Unless required by applicable law or agreed to in writing, software
199
+ distributed under the License is distributed on an "AS IS" BASIS,
200
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
201
+ See the License for the specific language governing permissions and
202
+ limitations under the License.
runtimes/v0.2.0/NOTICE ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ DataFog PII v0.1.0 — Copyright 2026 DataFog contributors.
2
+ Derived from distilbert/distilbert-base-cased (Apache-2.0), revision 6ea81172465e8b0ad3fddeed32b986cdcdcffcf0.
3
+ Fine-tuned with NVIDIA Nemotron-PII (2025), Amy Steier, Andre Manoel, Alexa Haushalter, Maarten Van Segbroeck. CC BY 4.0.
4
+ https://huggingface.co/datasets/nvidia/Nemotron-PII
5
+ https://creativecommons.org/licenses/by/4.0/
6
+ DataFog modifications: structural filtering, seven-label projection, grouped partitions, DistilBERT fine-tuning, windowing, span decoding and pooled calibration. This attribution does not imply NVIDIA endorsement.
7
+ ONNX Runtime and Rust dependencies retain their respective notices under licenses/ and bundle/licenses/.
runtimes/v0.2.0/README.md ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ Experimental DataFog PII model 0.1.0 with native runtime 0.2.0.
2
+
3
+ Epoch-2 model weights, tokenizer, label mappings and pooled calibration remain frozen at Hugging Face revision 02cc6ca86a11dcb2b328861687770a22a7ea1b76. Native runtime adds platform-specific library names and disables ORT telemetry. MCP Windows executable selection is proposed in datafog-mcp PR #33 (stacked on #32).
4
+
5
+ These exact archives passed native boundary tests, fresh archive installation, seven Python/native and original-Mac golden cases, and actual MCP integration tests on their recorded native runners. See release-index.json and per-platform qualification reports for archive hashes and tested environment scope. Other OS versions/devices and production quality remain unqualified.
6
+
7
+ Weights: Apache-2.0; dataset attribution: CC-BY-4.0; upstream runtime/dependency notices are included. GLiNER is a separate comparison, not part of this model.
runtimes/v0.2.0/datafog-pii-0.1.0-runtime-0.2.0-linux-aarch64.tar.gz ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:c22fd91dd601e22ccb13d074a555e58a6926e7b57adb5234171261763fa5b203
3
+ size 263744529
runtimes/v0.2.0/datafog-pii-0.1.0-runtime-0.2.0-linux-x86_64.tar.gz ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:355f54837d3f4ff0aebc72700cb38591176b29e0f75c63c66e04d874df4eb713
3
+ size 265799226
runtimes/v0.2.0/datafog-pii-0.1.0-runtime-0.2.0-macos-arm64.tar.gz ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:b2980aa1de1702957da3182a0aee3ac3fed2686cf146f52eb037256936b04e37
3
+ size 262335474
runtimes/v0.2.0/datafog-pii-0.1.0-runtime-0.2.0-macos-x86_64.tar.gz ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:47ae14fe1a37704672c2e6ebcad5e428b4cef9b3c538f092fa9789975199a53a
3
+ size 262222950
runtimes/v0.2.0/datafog-pii-0.1.0-runtime-0.2.0-windows-x86_64.tar.gz ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:cd4738fcff9f440fa80ce6a71be8c71719e2137d7fd35a8c099f42238740a8f3
3
+ size 249849360
runtimes/v0.2.0/linux-aarch64-qualification.json ADDED
@@ -0,0 +1,99 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "status": "qualified",
3
+ "platform": "linux-aarch64",
4
+ "tested_host": "Linux-6.17.0-1022-azure-aarch64-with-glibc2.39",
5
+ "archive": {
6
+ "filename": "datafog-pii-0.1.0-runtime-0.2.0-linux-aarch64.tar.gz",
7
+ "sha256": "c22fd91dd601e22ccb13d074a555e58a6926e7b57adb5234171261763fa5b203",
8
+ "bytes": 263744529,
9
+ "provenance": {
10
+ "model_version": "0.1.0",
11
+ "runtime_version": "0.2.0",
12
+ "platform": "linux-aarch64",
13
+ "host": "Linux-6.17.0-1022-azure-aarch64-with-glibc2.39",
14
+ "hf_revision": "02cc6ca86a11dcb2b328861687770a22a7ea1b76",
15
+ "runtime": {
16
+ "url": "https://files.pythonhosted.org/packages/16/bd/cbc5b8f91963689fdd622f463508c01d0aa95d3f944747b1e0b1eb2160b8/onnxruntime-1.30.0-cp312-cp312-manylinux_2_28_aarch64.whl",
17
+ "filename": "onnxruntime-1.30.0-cp312-cp312-manylinux_2_28_aarch64.whl",
18
+ "sha256": "6c32a000d5139a38ba9349030b0032e3331acb559d596b22738d9d2b343a2b83",
19
+ "source": "official PyPI CPU wheel",
20
+ "version": "1.30.0"
21
+ },
22
+ "native_files": [
23
+ "libonnxruntime_providers_shared.so",
24
+ "libonnxruntime.so.1.30.0"
25
+ ],
26
+ "telemetry_disabled": true,
27
+ "repository_commit": "b9ce97fe0e3e07b833ac0f122cdaf234af186555",
28
+ "rustc": "rustc 1.94.1 (e408947bf 2026-03-25)",
29
+ "python": "3.12.14 (main, Aug 13 2026, 02:48:06) [GCC 13.3.0]",
30
+ "status": "candidate; qualification evidence required"
31
+ }
32
+ },
33
+ "hf_revision": "02cc6ca86a11dcb2b328861687770a22a7ea1b76",
34
+ "model_version": "0.1.0",
35
+ "runtime_version": "0.2.0",
36
+ "mcp_base_revision": "c2c45ec62728d85b7472131a3df9ccb67afd4a02",
37
+ "mcp_compatibility_revision": "01d7f74e693a7892ab1ed504d0d8f8c1e7ce51d3",
38
+ "mcp_tests": {
39
+ "tests": 33,
40
+ "failures": 0,
41
+ "errors": 0,
42
+ "skipped": 0
43
+ },
44
+ "native_unit_tests": 3,
45
+ "golden_cases": 7,
46
+ "same_host_parity": {
47
+ "bundle": "/home/runner/work/DataFog-models/DataFog-models/.work/installed",
48
+ "cases": [
49
+ {
50
+ "bytes": 0,
51
+ "windows": 1,
52
+ "findings": 0
53
+ },
54
+ {
55
+ "bytes": 11,
56
+ "windows": 1,
57
+ "findings": 2
58
+ },
59
+ {
60
+ "bytes": 52,
61
+ "windows": 1,
62
+ "findings": 2
63
+ },
64
+ {
65
+ "bytes": 26,
66
+ "windows": 1,
67
+ "findings": 0
68
+ },
69
+ {
70
+ "bytes": 28,
71
+ "windows": 1,
72
+ "findings": 3
73
+ },
74
+ {
75
+ "bytes": 9933,
76
+ "windows": 5,
77
+ "findings": 3
78
+ },
79
+ {
80
+ "bytes": 4559,
81
+ "windows": 3,
82
+ "findings": 2
83
+ }
84
+ ],
85
+ "max_abs_logit_difference": 0.0,
86
+ "logits_bit_identical": true,
87
+ "logit_atol": 0.0001,
88
+ "logit_rtol": 1e-05,
89
+ "token_ids_masks_global_byte_offsets_parity": true,
90
+ "findings_redaction_parity": true,
91
+ "actual_python_predictor_parity": true,
92
+ "malformed_request_explicit_error_and_recovery": true,
93
+ "cold_process_debug_batch_seconds": 7.486043384999988,
94
+ "note": "Parity fixtures prove implementation consistency, not detection quality."
95
+ },
96
+ "workflow_run": "37249503334",
97
+ "qualification_commit": "e11c772943b0f040cbba90252672bf30df5ed24f",
98
+ "scope": "Named native CI environment; not every OS version, Linux distribution, or device."
99
+ }
runtimes/v0.2.0/linux-x86_64-qualification.json ADDED
@@ -0,0 +1,99 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "status": "qualified",
3
+ "platform": "linux-x86_64",
4
+ "tested_host": "Linux-6.8.0-1064-azure-x86_64-with-glibc2.35",
5
+ "archive": {
6
+ "filename": "datafog-pii-0.1.0-runtime-0.2.0-linux-x86_64.tar.gz",
7
+ "sha256": "355f54837d3f4ff0aebc72700cb38591176b29e0f75c63c66e04d874df4eb713",
8
+ "bytes": 265799226,
9
+ "provenance": {
10
+ "model_version": "0.1.0",
11
+ "runtime_version": "0.2.0",
12
+ "platform": "linux-x86_64",
13
+ "host": "Linux-6.8.0-1064-azure-x86_64-with-glibc2.35",
14
+ "hf_revision": "02cc6ca86a11dcb2b328861687770a22a7ea1b76",
15
+ "runtime": {
16
+ "url": "https://files.pythonhosted.org/packages/34/35/e7f862dbacbc99fadd9b14a614e49c99bf0f35fd9927a82f096e3de33531/onnxruntime-1.30.0-cp312-cp312-manylinux_2_28_x86_64.whl",
17
+ "filename": "onnxruntime-1.30.0-cp312-cp312-manylinux_2_28_x86_64.whl",
18
+ "sha256": "fa688e7891a6aa206636fe7372e27ee75fd17713289f6b4fc7b190e0a7de9328",
19
+ "source": "official PyPI CPU wheel",
20
+ "version": "1.30.0"
21
+ },
22
+ "native_files": [
23
+ "libonnxruntime_providers_shared.so",
24
+ "libonnxruntime.so.1.30.0"
25
+ ],
26
+ "telemetry_disabled": true,
27
+ "repository_commit": "b9ce97fe0e3e07b833ac0f122cdaf234af186555",
28
+ "rustc": "rustc 1.94.1 (e408947bf 2026-03-25)",
29
+ "python": "3.12.14 (main, Aug 13 2026, 02:48:23) [GCC 11.4.0]",
30
+ "status": "candidate; qualification evidence required"
31
+ }
32
+ },
33
+ "hf_revision": "02cc6ca86a11dcb2b328861687770a22a7ea1b76",
34
+ "model_version": "0.1.0",
35
+ "runtime_version": "0.2.0",
36
+ "mcp_base_revision": "c2c45ec62728d85b7472131a3df9ccb67afd4a02",
37
+ "mcp_compatibility_revision": "01d7f74e693a7892ab1ed504d0d8f8c1e7ce51d3",
38
+ "mcp_tests": {
39
+ "tests": 33,
40
+ "failures": 0,
41
+ "errors": 0,
42
+ "skipped": 0
43
+ },
44
+ "native_unit_tests": 3,
45
+ "golden_cases": 7,
46
+ "same_host_parity": {
47
+ "bundle": "/home/runner/work/DataFog-models/DataFog-models/.work/installed",
48
+ "cases": [
49
+ {
50
+ "bytes": 0,
51
+ "windows": 1,
52
+ "findings": 0
53
+ },
54
+ {
55
+ "bytes": 11,
56
+ "windows": 1,
57
+ "findings": 2
58
+ },
59
+ {
60
+ "bytes": 52,
61
+ "windows": 1,
62
+ "findings": 2
63
+ },
64
+ {
65
+ "bytes": 26,
66
+ "windows": 1,
67
+ "findings": 0
68
+ },
69
+ {
70
+ "bytes": 28,
71
+ "windows": 1,
72
+ "findings": 3
73
+ },
74
+ {
75
+ "bytes": 9933,
76
+ "windows": 5,
77
+ "findings": 3
78
+ },
79
+ {
80
+ "bytes": 4559,
81
+ "windows": 3,
82
+ "findings": 2
83
+ }
84
+ ],
85
+ "max_abs_logit_difference": 0.0,
86
+ "logits_bit_identical": true,
87
+ "logit_atol": 0.0001,
88
+ "logit_rtol": 1e-05,
89
+ "token_ids_masks_global_byte_offsets_parity": true,
90
+ "findings_redaction_parity": true,
91
+ "actual_python_predictor_parity": true,
92
+ "malformed_request_explicit_error_and_recovery": true,
93
+ "cold_process_debug_batch_seconds": 4.687581455,
94
+ "note": "Parity fixtures prove implementation consistency, not detection quality."
95
+ },
96
+ "workflow_run": "37249503334",
97
+ "qualification_commit": "e11c772943b0f040cbba90252672bf30df5ed24f",
98
+ "scope": "Named native CI environment; not every OS version, Linux distribution, or device."
99
+ }
runtimes/v0.2.0/macos-arm64-qualification.json ADDED
@@ -0,0 +1,98 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "status": "qualified",
3
+ "platform": "macos-arm64",
4
+ "tested_host": "macOS-14.8.9-arm64-arm-64bit",
5
+ "archive": {
6
+ "filename": "datafog-pii-0.1.0-runtime-0.2.0-macos-arm64.tar.gz",
7
+ "sha256": "b2980aa1de1702957da3182a0aee3ac3fed2686cf146f52eb037256936b04e37",
8
+ "bytes": 262335474,
9
+ "provenance": {
10
+ "model_version": "0.1.0",
11
+ "runtime_version": "0.2.0",
12
+ "platform": "macos-arm64",
13
+ "host": "macOS-14.8.9-arm64-arm-64bit",
14
+ "hf_revision": "02cc6ca86a11dcb2b328861687770a22a7ea1b76",
15
+ "runtime": {
16
+ "url": "https://files.pythonhosted.org/packages/31/6f/48169f2e62b405bff5053cbd1d73fb5ce41ef7ecd13bb3bfcc191e689b8a/onnxruntime-1.30.0-cp312-cp312-macosx_14_0_arm64.whl",
17
+ "filename": "onnxruntime-1.30.0-cp312-cp312-macosx_14_0_arm64.whl",
18
+ "sha256": "001ed726c9bd5e2bc92faade7d37d889e9606a350b7d5529f0227df2e3bb57fd",
19
+ "source": "official PyPI CPU wheel",
20
+ "version": "1.30.0"
21
+ },
22
+ "native_files": [
23
+ "libonnxruntime.1.30.0.dylib"
24
+ ],
25
+ "telemetry_disabled": true,
26
+ "repository_commit": "b9ce97fe0e3e07b833ac0f122cdaf234af186555",
27
+ "rustc": "rustc 1.94.1 (e408947bf 2026-03-25)",
28
+ "python": "3.12.10 (v3.12.10:0cc81280367, Apr 8 2025, 08:46:59) [Clang 13.0.0 (clang-1300.0.29.30)]",
29
+ "status": "candidate; qualification evidence required"
30
+ }
31
+ },
32
+ "hf_revision": "02cc6ca86a11dcb2b328861687770a22a7ea1b76",
33
+ "model_version": "0.1.0",
34
+ "runtime_version": "0.2.0",
35
+ "mcp_base_revision": "c2c45ec62728d85b7472131a3df9ccb67afd4a02",
36
+ "mcp_compatibility_revision": "01d7f74e693a7892ab1ed504d0d8f8c1e7ce51d3",
37
+ "mcp_tests": {
38
+ "tests": 33,
39
+ "failures": 0,
40
+ "errors": 0,
41
+ "skipped": 0
42
+ },
43
+ "native_unit_tests": 3,
44
+ "golden_cases": 7,
45
+ "same_host_parity": {
46
+ "bundle": "/Users/runner/work/DataFog-models/DataFog-models/.work/installed",
47
+ "cases": [
48
+ {
49
+ "bytes": 0,
50
+ "windows": 1,
51
+ "findings": 0
52
+ },
53
+ {
54
+ "bytes": 11,
55
+ "windows": 1,
56
+ "findings": 2
57
+ },
58
+ {
59
+ "bytes": 52,
60
+ "windows": 1,
61
+ "findings": 2
62
+ },
63
+ {
64
+ "bytes": 26,
65
+ "windows": 1,
66
+ "findings": 0
67
+ },
68
+ {
69
+ "bytes": 28,
70
+ "windows": 1,
71
+ "findings": 3
72
+ },
73
+ {
74
+ "bytes": 9933,
75
+ "windows": 5,
76
+ "findings": 3
77
+ },
78
+ {
79
+ "bytes": 4559,
80
+ "windows": 3,
81
+ "findings": 2
82
+ }
83
+ ],
84
+ "max_abs_logit_difference": 0.0,
85
+ "logits_bit_identical": true,
86
+ "logit_atol": 0.0001,
87
+ "logit_rtol": 1e-05,
88
+ "token_ids_masks_global_byte_offsets_parity": true,
89
+ "findings_redaction_parity": true,
90
+ "actual_python_predictor_parity": true,
91
+ "malformed_request_explicit_error_and_recovery": true,
92
+ "cold_process_debug_batch_seconds": 4.529053791000024,
93
+ "note": "Parity fixtures prove implementation consistency, not detection quality."
94
+ },
95
+ "workflow_run": "37249503334",
96
+ "qualification_commit": "e11c772943b0f040cbba90252672bf30df5ed24f",
97
+ "scope": "Named native CI environment; not every OS version, Linux distribution, or device."
98
+ }
runtimes/v0.2.0/macos-x86_64-qualification.json ADDED
@@ -0,0 +1,100 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "status": "qualified",
3
+ "platform": "macos-x86_64",
4
+ "tested_host": "macOS-15.7.9-x86_64-i386-64bit",
5
+ "archive": {
6
+ "filename": "datafog-pii-0.1.0-runtime-0.2.0-macos-x86_64.tar.gz",
7
+ "sha256": "47ae14fe1a37704672c2e6ebcad5e428b4cef9b3c538f092fa9789975199a53a",
8
+ "bytes": 262222950,
9
+ "provenance": {
10
+ "model_version": "0.1.0",
11
+ "runtime_version": "0.2.0",
12
+ "platform": "macos-x86_64",
13
+ "host": "macOS-15.7.9-x86_64-i386-64bit",
14
+ "hf_revision": "02cc6ca86a11dcb2b328861687770a22a7ea1b76",
15
+ "runtime": {
16
+ "source": "native source build",
17
+ "repo": "https://github.com/microsoft/onnxruntime.git",
18
+ "revision": "f2c39fe2f838cf35ce7da92824f5a5e3ee6e88a7",
19
+ "version": "1.30.0",
20
+ "minimum_macos": "15.0",
21
+ "wheel_sha256": "b5038ea18c33ae7928ab4839d177d3de1ca5b7ab96b2775e0c7cb83a405d5021",
22
+ "wheel_filename": "onnxruntime-1.30.0-cp312-cp312-macosx_15_0_universal2.whl"
23
+ },
24
+ "native_files": [
25
+ "libonnxruntime.1.30.0.dylib"
26
+ ],
27
+ "telemetry_disabled": true,
28
+ "repository_commit": "b9ce97fe0e3e07b833ac0f122cdaf234af186555",
29
+ "rustc": "rustc 1.94.1 (e408947bf 2026-03-25)",
30
+ "python": "3.12.10 (v3.12.10:0cc81280367, Apr 8 2025, 08:47:00) [Clang 13.0.0 (clang-1300.0.29.30)]",
31
+ "status": "candidate; qualification evidence required"
32
+ }
33
+ },
34
+ "hf_revision": "02cc6ca86a11dcb2b328861687770a22a7ea1b76",
35
+ "model_version": "0.1.0",
36
+ "runtime_version": "0.2.0",
37
+ "mcp_base_revision": "c2c45ec62728d85b7472131a3df9ccb67afd4a02",
38
+ "mcp_compatibility_revision": "01d7f74e693a7892ab1ed504d0d8f8c1e7ce51d3",
39
+ "mcp_tests": {
40
+ "tests": 33,
41
+ "failures": 0,
42
+ "errors": 0,
43
+ "skipped": 0
44
+ },
45
+ "native_unit_tests": 3,
46
+ "golden_cases": 7,
47
+ "same_host_parity": {
48
+ "bundle": "/Users/runner/work/DataFog-models/DataFog-models/.work/installed",
49
+ "cases": [
50
+ {
51
+ "bytes": 0,
52
+ "windows": 1,
53
+ "findings": 0
54
+ },
55
+ {
56
+ "bytes": 11,
57
+ "windows": 1,
58
+ "findings": 2
59
+ },
60
+ {
61
+ "bytes": 52,
62
+ "windows": 1,
63
+ "findings": 2
64
+ },
65
+ {
66
+ "bytes": 26,
67
+ "windows": 1,
68
+ "findings": 0
69
+ },
70
+ {
71
+ "bytes": 28,
72
+ "windows": 1,
73
+ "findings": 3
74
+ },
75
+ {
76
+ "bytes": 9933,
77
+ "windows": 5,
78
+ "findings": 3
79
+ },
80
+ {
81
+ "bytes": 4559,
82
+ "windows": 3,
83
+ "findings": 2
84
+ }
85
+ ],
86
+ "max_abs_logit_difference": 0.0,
87
+ "logits_bit_identical": true,
88
+ "logit_atol": 0.0001,
89
+ "logit_rtol": 1e-05,
90
+ "token_ids_masks_global_byte_offsets_parity": true,
91
+ "findings_redaction_parity": true,
92
+ "actual_python_predictor_parity": true,
93
+ "malformed_request_explicit_error_and_recovery": true,
94
+ "cold_process_debug_batch_seconds": 8.927164207999795,
95
+ "note": "Parity fixtures prove implementation consistency, not detection quality."
96
+ },
97
+ "workflow_run": "37249503334",
98
+ "qualification_commit": "e11c772943b0f040cbba90252672bf30df5ed24f",
99
+ "scope": "Named native CI environment; not every OS version, Linux distribution, or device."
100
+ }
runtimes/v0.2.0/manifest.json ADDED
@@ -0,0 +1,72 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "files": {
3
+ "LICENSE": {
4
+ "sha256": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30",
5
+ "bytes": 11358
6
+ },
7
+ "macos-x86_64-qualification.json": {
8
+ "sha256": "6c51bbc4f7615d323942ee43183d322e18d1d291efcfd8c338dca30a37fcc9e4",
9
+ "bytes": 3157
10
+ },
11
+ "macos-arm64-qualification.json": {
12
+ "sha256": "9f5431f724b70e3c015dd279973bc004c9a9d1957bb97a2c52736f4705c04b68",
13
+ "bytes": 3154
14
+ },
15
+ "datafog-pii-0.1.0-runtime-0.2.0-macos-arm64.tar.gz": {
16
+ "sha256": "b2980aa1de1702957da3182a0aee3ac3fed2686cf146f52eb037256936b04e37",
17
+ "bytes": 262335474
18
+ },
19
+ "linux-x86_64-qualification.json": {
20
+ "sha256": "a48c1ed0b2701d0564f11b8f455d9c4340fbca364c6925e7410cc7cb5b1851cf",
21
+ "bytes": 3194
22
+ },
23
+ "DOWNLOAD.md": {
24
+ "sha256": "66f0ed9ff28f5e4b561228ae76e48cb0fa418f9004a9d5f86b82f20843cd2b74",
25
+ "bytes": 3155
26
+ },
27
+ "windows-x86_64-qualification.json": {
28
+ "sha256": "d28a8c5901065bdeedebca34064c4b317dfba376fedc6cea53edb1e214d17181",
29
+ "bytes": 4146
30
+ },
31
+ "NOTICE": {
32
+ "sha256": "095e3c86feea233ae4b87d9d5650b9e9850c2bb708eac4f09b46655bf84a37c9",
33
+ "bytes": 709
34
+ },
35
+ "datafog-pii-0.1.0-runtime-0.2.0-windows-x86_64.tar.gz": {
36
+ "sha256": "cd4738fcff9f440fa80ce6a71be8c71719e2137d7fd35a8c099f42238740a8f3",
37
+ "bytes": 249849360
38
+ },
39
+ "datafog-pii-0.1.0-runtime-0.2.0-linux-aarch64.tar.gz": {
40
+ "sha256": "c22fd91dd601e22ccb13d074a555e58a6926e7b57adb5234171261763fa5b203",
41
+ "bytes": 263744529
42
+ },
43
+ "README.md": {
44
+ "sha256": "d0a219aaee0efdd38fa56384da2629d10a23179d4c70448caf6278ceb6ae0707",
45
+ "bytes": 922
46
+ },
47
+ "release-index.json": {
48
+ "sha256": "934d98c05c1b26697879ee3f00cc2fef1f07cc6cc0e53a443099098e15e227fc",
49
+ "bytes": 19035
50
+ },
51
+ "linux-aarch64-qualification.json": {
52
+ "sha256": "a6792194812ad71c757abfde9710a5a70c4581238626b052d3083a7b3659d3da",
53
+ "bytes": 3209
54
+ },
55
+ "datafog-pii-0.1.0-runtime-0.2.0-macos-x86_64.tar.gz": {
56
+ "sha256": "47ae14fe1a37704672c2e6ebcad5e428b4cef9b3c538f092fa9789975199a53a",
57
+ "bytes": 262222950
58
+ },
59
+ "datafog-pii-0.1.0-runtime-0.2.0-linux-x86_64.tar.gz": {
60
+ "sha256": "355f54837d3f4ff0aebc72700cb38591176b29e0f75c63c66e04d874df4eb713",
61
+ "bytes": 265799226
62
+ },
63
+ "tools/install_bundle.py": {
64
+ "sha256": "08534261ef2e3fefe27b224eee1d0e6aa26ff62fce98db00f5abd8562641f3de",
65
+ "bytes": 2866
66
+ },
67
+ "tools/common.py": {
68
+ "sha256": "b72fbea9ad2ae4ea9e231a420137d7e5ad5270089bb33f754537e0325338074e",
69
+ "bytes": 1931
70
+ }
71
+ }
72
+ }
runtimes/v0.2.0/release-index.json ADDED
@@ -0,0 +1,523 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "model": "datafog-pii",
3
+ "model_version": "0.1.0",
4
+ "runtime_version": "0.2.0",
5
+ "hf_revision": "02cc6ca86a11dcb2b328861687770a22a7ea1b76",
6
+ "source_commit": "b9ce97fe0e3e07b833ac0f122cdaf234af186555",
7
+ "platforms": [
8
+ {
9
+ "status": "qualified",
10
+ "platform": "linux-x86_64",
11
+ "tested_host": "Linux-6.8.0-1064-azure-x86_64-with-glibc2.35",
12
+ "archive": {
13
+ "filename": "datafog-pii-0.1.0-runtime-0.2.0-linux-x86_64.tar.gz",
14
+ "sha256": "355f54837d3f4ff0aebc72700cb38591176b29e0f75c63c66e04d874df4eb713",
15
+ "bytes": 265799226,
16
+ "provenance": {
17
+ "model_version": "0.1.0",
18
+ "runtime_version": "0.2.0",
19
+ "platform": "linux-x86_64",
20
+ "host": "Linux-6.8.0-1064-azure-x86_64-with-glibc2.35",
21
+ "hf_revision": "02cc6ca86a11dcb2b328861687770a22a7ea1b76",
22
+ "runtime": {
23
+ "url": "https://files.pythonhosted.org/packages/34/35/e7f862dbacbc99fadd9b14a614e49c99bf0f35fd9927a82f096e3de33531/onnxruntime-1.30.0-cp312-cp312-manylinux_2_28_x86_64.whl",
24
+ "filename": "onnxruntime-1.30.0-cp312-cp312-manylinux_2_28_x86_64.whl",
25
+ "sha256": "fa688e7891a6aa206636fe7372e27ee75fd17713289f6b4fc7b190e0a7de9328",
26
+ "source": "official PyPI CPU wheel",
27
+ "version": "1.30.0"
28
+ },
29
+ "native_files": [
30
+ "libonnxruntime_providers_shared.so",
31
+ "libonnxruntime.so.1.30.0"
32
+ ],
33
+ "telemetry_disabled": true,
34
+ "repository_commit": "b9ce97fe0e3e07b833ac0f122cdaf234af186555",
35
+ "rustc": "rustc 1.94.1 (e408947bf 2026-03-25)",
36
+ "python": "3.12.14 (main, Aug 13 2026, 02:48:23) [GCC 11.4.0]",
37
+ "status": "candidate; qualification evidence required"
38
+ }
39
+ },
40
+ "hf_revision": "02cc6ca86a11dcb2b328861687770a22a7ea1b76",
41
+ "model_version": "0.1.0",
42
+ "runtime_version": "0.2.0",
43
+ "mcp_base_revision": "c2c45ec62728d85b7472131a3df9ccb67afd4a02",
44
+ "mcp_compatibility_revision": "01d7f74e693a7892ab1ed504d0d8f8c1e7ce51d3",
45
+ "mcp_tests": {
46
+ "tests": 33,
47
+ "failures": 0,
48
+ "errors": 0,
49
+ "skipped": 0
50
+ },
51
+ "native_unit_tests": 3,
52
+ "golden_cases": 7,
53
+ "same_host_parity": {
54
+ "bundle": "/home/runner/work/DataFog-models/DataFog-models/.work/installed",
55
+ "cases": [
56
+ {
57
+ "bytes": 0,
58
+ "windows": 1,
59
+ "findings": 0
60
+ },
61
+ {
62
+ "bytes": 11,
63
+ "windows": 1,
64
+ "findings": 2
65
+ },
66
+ {
67
+ "bytes": 52,
68
+ "windows": 1,
69
+ "findings": 2
70
+ },
71
+ {
72
+ "bytes": 26,
73
+ "windows": 1,
74
+ "findings": 0
75
+ },
76
+ {
77
+ "bytes": 28,
78
+ "windows": 1,
79
+ "findings": 3
80
+ },
81
+ {
82
+ "bytes": 9933,
83
+ "windows": 5,
84
+ "findings": 3
85
+ },
86
+ {
87
+ "bytes": 4559,
88
+ "windows": 3,
89
+ "findings": 2
90
+ }
91
+ ],
92
+ "max_abs_logit_difference": 0.0,
93
+ "logits_bit_identical": true,
94
+ "logit_atol": 0.0001,
95
+ "logit_rtol": 1e-05,
96
+ "token_ids_masks_global_byte_offsets_parity": true,
97
+ "findings_redaction_parity": true,
98
+ "actual_python_predictor_parity": true,
99
+ "malformed_request_explicit_error_and_recovery": true,
100
+ "cold_process_debug_batch_seconds": 4.687581455,
101
+ "note": "Parity fixtures prove implementation consistency, not detection quality."
102
+ },
103
+ "workflow_run": "37249503334",
104
+ "qualification_commit": "e11c772943b0f040cbba90252672bf30df5ed24f",
105
+ "scope": "Named native CI environment; not every OS version, Linux distribution, or device."
106
+ },
107
+ {
108
+ "status": "qualified",
109
+ "platform": "linux-aarch64",
110
+ "tested_host": "Linux-6.17.0-1022-azure-aarch64-with-glibc2.39",
111
+ "archive": {
112
+ "filename": "datafog-pii-0.1.0-runtime-0.2.0-linux-aarch64.tar.gz",
113
+ "sha256": "c22fd91dd601e22ccb13d074a555e58a6926e7b57adb5234171261763fa5b203",
114
+ "bytes": 263744529,
115
+ "provenance": {
116
+ "model_version": "0.1.0",
117
+ "runtime_version": "0.2.0",
118
+ "platform": "linux-aarch64",
119
+ "host": "Linux-6.17.0-1022-azure-aarch64-with-glibc2.39",
120
+ "hf_revision": "02cc6ca86a11dcb2b328861687770a22a7ea1b76",
121
+ "runtime": {
122
+ "url": "https://files.pythonhosted.org/packages/16/bd/cbc5b8f91963689fdd622f463508c01d0aa95d3f944747b1e0b1eb2160b8/onnxruntime-1.30.0-cp312-cp312-manylinux_2_28_aarch64.whl",
123
+ "filename": "onnxruntime-1.30.0-cp312-cp312-manylinux_2_28_aarch64.whl",
124
+ "sha256": "6c32a000d5139a38ba9349030b0032e3331acb559d596b22738d9d2b343a2b83",
125
+ "source": "official PyPI CPU wheel",
126
+ "version": "1.30.0"
127
+ },
128
+ "native_files": [
129
+ "libonnxruntime_providers_shared.so",
130
+ "libonnxruntime.so.1.30.0"
131
+ ],
132
+ "telemetry_disabled": true,
133
+ "repository_commit": "b9ce97fe0e3e07b833ac0f122cdaf234af186555",
134
+ "rustc": "rustc 1.94.1 (e408947bf 2026-03-25)",
135
+ "python": "3.12.14 (main, Aug 13 2026, 02:48:06) [GCC 13.3.0]",
136
+ "status": "candidate; qualification evidence required"
137
+ }
138
+ },
139
+ "hf_revision": "02cc6ca86a11dcb2b328861687770a22a7ea1b76",
140
+ "model_version": "0.1.0",
141
+ "runtime_version": "0.2.0",
142
+ "mcp_base_revision": "c2c45ec62728d85b7472131a3df9ccb67afd4a02",
143
+ "mcp_compatibility_revision": "01d7f74e693a7892ab1ed504d0d8f8c1e7ce51d3",
144
+ "mcp_tests": {
145
+ "tests": 33,
146
+ "failures": 0,
147
+ "errors": 0,
148
+ "skipped": 0
149
+ },
150
+ "native_unit_tests": 3,
151
+ "golden_cases": 7,
152
+ "same_host_parity": {
153
+ "bundle": "/home/runner/work/DataFog-models/DataFog-models/.work/installed",
154
+ "cases": [
155
+ {
156
+ "bytes": 0,
157
+ "windows": 1,
158
+ "findings": 0
159
+ },
160
+ {
161
+ "bytes": 11,
162
+ "windows": 1,
163
+ "findings": 2
164
+ },
165
+ {
166
+ "bytes": 52,
167
+ "windows": 1,
168
+ "findings": 2
169
+ },
170
+ {
171
+ "bytes": 26,
172
+ "windows": 1,
173
+ "findings": 0
174
+ },
175
+ {
176
+ "bytes": 28,
177
+ "windows": 1,
178
+ "findings": 3
179
+ },
180
+ {
181
+ "bytes": 9933,
182
+ "windows": 5,
183
+ "findings": 3
184
+ },
185
+ {
186
+ "bytes": 4559,
187
+ "windows": 3,
188
+ "findings": 2
189
+ }
190
+ ],
191
+ "max_abs_logit_difference": 0.0,
192
+ "logits_bit_identical": true,
193
+ "logit_atol": 0.0001,
194
+ "logit_rtol": 1e-05,
195
+ "token_ids_masks_global_byte_offsets_parity": true,
196
+ "findings_redaction_parity": true,
197
+ "actual_python_predictor_parity": true,
198
+ "malformed_request_explicit_error_and_recovery": true,
199
+ "cold_process_debug_batch_seconds": 7.486043384999988,
200
+ "note": "Parity fixtures prove implementation consistency, not detection quality."
201
+ },
202
+ "workflow_run": "37249503334",
203
+ "qualification_commit": "e11c772943b0f040cbba90252672bf30df5ed24f",
204
+ "scope": "Named native CI environment; not every OS version, Linux distribution, or device."
205
+ },
206
+ {
207
+ "status": "qualified",
208
+ "platform": "macos-arm64",
209
+ "tested_host": "macOS-14.8.9-arm64-arm-64bit",
210
+ "archive": {
211
+ "filename": "datafog-pii-0.1.0-runtime-0.2.0-macos-arm64.tar.gz",
212
+ "sha256": "b2980aa1de1702957da3182a0aee3ac3fed2686cf146f52eb037256936b04e37",
213
+ "bytes": 262335474,
214
+ "provenance": {
215
+ "model_version": "0.1.0",
216
+ "runtime_version": "0.2.0",
217
+ "platform": "macos-arm64",
218
+ "host": "macOS-14.8.9-arm64-arm-64bit",
219
+ "hf_revision": "02cc6ca86a11dcb2b328861687770a22a7ea1b76",
220
+ "runtime": {
221
+ "url": "https://files.pythonhosted.org/packages/31/6f/48169f2e62b405bff5053cbd1d73fb5ce41ef7ecd13bb3bfcc191e689b8a/onnxruntime-1.30.0-cp312-cp312-macosx_14_0_arm64.whl",
222
+ "filename": "onnxruntime-1.30.0-cp312-cp312-macosx_14_0_arm64.whl",
223
+ "sha256": "001ed726c9bd5e2bc92faade7d37d889e9606a350b7d5529f0227df2e3bb57fd",
224
+ "source": "official PyPI CPU wheel",
225
+ "version": "1.30.0"
226
+ },
227
+ "native_files": [
228
+ "libonnxruntime.1.30.0.dylib"
229
+ ],
230
+ "telemetry_disabled": true,
231
+ "repository_commit": "b9ce97fe0e3e07b833ac0f122cdaf234af186555",
232
+ "rustc": "rustc 1.94.1 (e408947bf 2026-03-25)",
233
+ "python": "3.12.10 (v3.12.10:0cc81280367, Apr 8 2025, 08:46:59) [Clang 13.0.0 (clang-1300.0.29.30)]",
234
+ "status": "candidate; qualification evidence required"
235
+ }
236
+ },
237
+ "hf_revision": "02cc6ca86a11dcb2b328861687770a22a7ea1b76",
238
+ "model_version": "0.1.0",
239
+ "runtime_version": "0.2.0",
240
+ "mcp_base_revision": "c2c45ec62728d85b7472131a3df9ccb67afd4a02",
241
+ "mcp_compatibility_revision": "01d7f74e693a7892ab1ed504d0d8f8c1e7ce51d3",
242
+ "mcp_tests": {
243
+ "tests": 33,
244
+ "failures": 0,
245
+ "errors": 0,
246
+ "skipped": 0
247
+ },
248
+ "native_unit_tests": 3,
249
+ "golden_cases": 7,
250
+ "same_host_parity": {
251
+ "bundle": "/Users/runner/work/DataFog-models/DataFog-models/.work/installed",
252
+ "cases": [
253
+ {
254
+ "bytes": 0,
255
+ "windows": 1,
256
+ "findings": 0
257
+ },
258
+ {
259
+ "bytes": 11,
260
+ "windows": 1,
261
+ "findings": 2
262
+ },
263
+ {
264
+ "bytes": 52,
265
+ "windows": 1,
266
+ "findings": 2
267
+ },
268
+ {
269
+ "bytes": 26,
270
+ "windows": 1,
271
+ "findings": 0
272
+ },
273
+ {
274
+ "bytes": 28,
275
+ "windows": 1,
276
+ "findings": 3
277
+ },
278
+ {
279
+ "bytes": 9933,
280
+ "windows": 5,
281
+ "findings": 3
282
+ },
283
+ {
284
+ "bytes": 4559,
285
+ "windows": 3,
286
+ "findings": 2
287
+ }
288
+ ],
289
+ "max_abs_logit_difference": 0.0,
290
+ "logits_bit_identical": true,
291
+ "logit_atol": 0.0001,
292
+ "logit_rtol": 1e-05,
293
+ "token_ids_masks_global_byte_offsets_parity": true,
294
+ "findings_redaction_parity": true,
295
+ "actual_python_predictor_parity": true,
296
+ "malformed_request_explicit_error_and_recovery": true,
297
+ "cold_process_debug_batch_seconds": 4.529053791000024,
298
+ "note": "Parity fixtures prove implementation consistency, not detection quality."
299
+ },
300
+ "workflow_run": "37249503334",
301
+ "qualification_commit": "e11c772943b0f040cbba90252672bf30df5ed24f",
302
+ "scope": "Named native CI environment; not every OS version, Linux distribution, or device."
303
+ },
304
+ {
305
+ "status": "qualified",
306
+ "platform": "macos-x86_64",
307
+ "tested_host": "macOS-15.7.9-x86_64-i386-64bit",
308
+ "archive": {
309
+ "filename": "datafog-pii-0.1.0-runtime-0.2.0-macos-x86_64.tar.gz",
310
+ "sha256": "47ae14fe1a37704672c2e6ebcad5e428b4cef9b3c538f092fa9789975199a53a",
311
+ "bytes": 262222950,
312
+ "provenance": {
313
+ "model_version": "0.1.0",
314
+ "runtime_version": "0.2.0",
315
+ "platform": "macos-x86_64",
316
+ "host": "macOS-15.7.9-x86_64-i386-64bit",
317
+ "hf_revision": "02cc6ca86a11dcb2b328861687770a22a7ea1b76",
318
+ "runtime": {
319
+ "source": "native source build",
320
+ "repo": "https://github.com/microsoft/onnxruntime.git",
321
+ "revision": "f2c39fe2f838cf35ce7da92824f5a5e3ee6e88a7",
322
+ "version": "1.30.0",
323
+ "minimum_macos": "15.0",
324
+ "wheel_sha256": "b5038ea18c33ae7928ab4839d177d3de1ca5b7ab96b2775e0c7cb83a405d5021",
325
+ "wheel_filename": "onnxruntime-1.30.0-cp312-cp312-macosx_15_0_universal2.whl"
326
+ },
327
+ "native_files": [
328
+ "libonnxruntime.1.30.0.dylib"
329
+ ],
330
+ "telemetry_disabled": true,
331
+ "repository_commit": "b9ce97fe0e3e07b833ac0f122cdaf234af186555",
332
+ "rustc": "rustc 1.94.1 (e408947bf 2026-03-25)",
333
+ "python": "3.12.10 (v3.12.10:0cc81280367, Apr 8 2025, 08:47:00) [Clang 13.0.0 (clang-1300.0.29.30)]",
334
+ "status": "candidate; qualification evidence required"
335
+ }
336
+ },
337
+ "hf_revision": "02cc6ca86a11dcb2b328861687770a22a7ea1b76",
338
+ "model_version": "0.1.0",
339
+ "runtime_version": "0.2.0",
340
+ "mcp_base_revision": "c2c45ec62728d85b7472131a3df9ccb67afd4a02",
341
+ "mcp_compatibility_revision": "01d7f74e693a7892ab1ed504d0d8f8c1e7ce51d3",
342
+ "mcp_tests": {
343
+ "tests": 33,
344
+ "failures": 0,
345
+ "errors": 0,
346
+ "skipped": 0
347
+ },
348
+ "native_unit_tests": 3,
349
+ "golden_cases": 7,
350
+ "same_host_parity": {
351
+ "bundle": "/Users/runner/work/DataFog-models/DataFog-models/.work/installed",
352
+ "cases": [
353
+ {
354
+ "bytes": 0,
355
+ "windows": 1,
356
+ "findings": 0
357
+ },
358
+ {
359
+ "bytes": 11,
360
+ "windows": 1,
361
+ "findings": 2
362
+ },
363
+ {
364
+ "bytes": 52,
365
+ "windows": 1,
366
+ "findings": 2
367
+ },
368
+ {
369
+ "bytes": 26,
370
+ "windows": 1,
371
+ "findings": 0
372
+ },
373
+ {
374
+ "bytes": 28,
375
+ "windows": 1,
376
+ "findings": 3
377
+ },
378
+ {
379
+ "bytes": 9933,
380
+ "windows": 5,
381
+ "findings": 3
382
+ },
383
+ {
384
+ "bytes": 4559,
385
+ "windows": 3,
386
+ "findings": 2
387
+ }
388
+ ],
389
+ "max_abs_logit_difference": 0.0,
390
+ "logits_bit_identical": true,
391
+ "logit_atol": 0.0001,
392
+ "logit_rtol": 1e-05,
393
+ "token_ids_masks_global_byte_offsets_parity": true,
394
+ "findings_redaction_parity": true,
395
+ "actual_python_predictor_parity": true,
396
+ "malformed_request_explicit_error_and_recovery": true,
397
+ "cold_process_debug_batch_seconds": 8.927164207999795,
398
+ "note": "Parity fixtures prove implementation consistency, not detection quality."
399
+ },
400
+ "workflow_run": "37249503334",
401
+ "qualification_commit": "e11c772943b0f040cbba90252672bf30df5ed24f",
402
+ "scope": "Named native CI environment; not every OS version, Linux distribution, or device."
403
+ },
404
+ {
405
+ "status": "qualified",
406
+ "platform": "windows-x86_64",
407
+ "tested_host": "Windows-2022Server-10.0.20348-SP0",
408
+ "archive": {
409
+ "filename": "datafog-pii-0.1.0-runtime-0.2.0-windows-x86_64.tar.gz",
410
+ "sha256": "cd4738fcff9f440fa80ce6a71be8c71719e2137d7fd35a8c099f42238740a8f3",
411
+ "bytes": 249849360,
412
+ "provenance": {
413
+ "model_version": "0.1.0",
414
+ "runtime_version": "0.2.0",
415
+ "platform": "windows-x86_64",
416
+ "host": "Windows-2022Server-10.0.20348-SP0",
417
+ "hf_revision": "02cc6ca86a11dcb2b328861687770a22a7ea1b76",
418
+ "runtime": {
419
+ "url": "https://files.pythonhosted.org/packages/a6/13/0f1699f6de549c9324bc9112a2a85b14c517904cd11b562a654643b755a1/onnxruntime-1.30.0-cp312-cp312-win_amd64.whl",
420
+ "filename": "onnxruntime-1.30.0-cp312-cp312-win_amd64.whl",
421
+ "sha256": "f3501472571f1b1eee50e017851e7929f5ea37312d2d8c2494a19e8fc58b4a38",
422
+ "source": "official PyPI CPU wheel",
423
+ "version": "1.30.0"
424
+ },
425
+ "native_files": [
426
+ "onnxruntime.dll",
427
+ "onnxruntime_providers_shared.dll"
428
+ ],
429
+ "telemetry_disabled": true,
430
+ "repository_commit": "b9ce97fe0e3e07b833ac0f122cdaf234af186555",
431
+ "rustc": "rustc 1.94.1 (e408947bf 2026-03-25)",
432
+ "python": "3.12.10 (tags/v3.12.10:0cc8128, Apr 8 2025, 12:21:36) [MSC v.1943 64 bit (AMD64)]",
433
+ "status": "candidate; qualification evidence required",
434
+ "manifest_path_repair": {
435
+ "original_archive_sha256": "afcceebb647288f88eda67e9c18d46ce22e384a96902f8b2fbd56b8a08527d99",
436
+ "packaging_commit": "51324937c52852fc70bec96674c3ed39a617dac0",
437
+ "native_files_unchanged": {
438
+ "datafog-pii.exe": {
439
+ "sha256": "569e3f310c4a969ef5338c2d6f89c34db0413522f9b6210fb1fd77569f9dea27",
440
+ "bytes": 4235264
441
+ },
442
+ "onnxruntime.dll": {
443
+ "sha256": "e42c5c917207ff706530315177e39dca2539695a6a8d968a22225e34291b1f12",
444
+ "bytes": 18446176
445
+ },
446
+ "onnxruntime_providers_shared.dll": {
447
+ "sha256": "46b999f9d5cd9d284091407e9f50a262624e6a71265fc428a1dfbd42d149bd81",
448
+ "bytes": 21856
449
+ }
450
+ },
451
+ "change": "Canonical POSIX manifest paths; no executable/library/model change"
452
+ }
453
+ }
454
+ },
455
+ "hf_revision": "02cc6ca86a11dcb2b328861687770a22a7ea1b76",
456
+ "model_version": "0.1.0",
457
+ "runtime_version": "0.2.0",
458
+ "mcp_base_revision": "c2c45ec62728d85b7472131a3df9ccb67afd4a02",
459
+ "mcp_compatibility_revision": "01d7f74e693a7892ab1ed504d0d8f8c1e7ce51d3",
460
+ "mcp_tests": {
461
+ "tests": 33,
462
+ "failures": 0,
463
+ "errors": 0,
464
+ "skipped": 0
465
+ },
466
+ "native_unit_tests": 3,
467
+ "golden_cases": 7,
468
+ "same_host_parity": {
469
+ "bundle": "D:\\a\\DataFog-models\\DataFog-models\\.work\\installed",
470
+ "cases": [
471
+ {
472
+ "bytes": 0,
473
+ "windows": 1,
474
+ "findings": 0
475
+ },
476
+ {
477
+ "bytes": 11,
478
+ "windows": 1,
479
+ "findings": 2
480
+ },
481
+ {
482
+ "bytes": 52,
483
+ "windows": 1,
484
+ "findings": 2
485
+ },
486
+ {
487
+ "bytes": 26,
488
+ "windows": 1,
489
+ "findings": 0
490
+ },
491
+ {
492
+ "bytes": 28,
493
+ "windows": 1,
494
+ "findings": 3
495
+ },
496
+ {
497
+ "bytes": 9933,
498
+ "windows": 5,
499
+ "findings": 3
500
+ },
501
+ {
502
+ "bytes": 4559,
503
+ "windows": 3,
504
+ "findings": 2
505
+ }
506
+ ],
507
+ "max_abs_logit_difference": 0.0,
508
+ "logits_bit_identical": true,
509
+ "logit_atol": 0.0001,
510
+ "logit_rtol": 1e-05,
511
+ "token_ids_masks_global_byte_offsets_parity": true,
512
+ "findings_redaction_parity": true,
513
+ "actual_python_predictor_parity": true,
514
+ "malformed_request_explicit_error_and_recovery": true,
515
+ "cold_process_debug_batch_seconds": 2.6044589999999914,
516
+ "note": "Parity fixtures prove implementation consistency, not detection quality."
517
+ },
518
+ "workflow_run": "37249503334",
519
+ "qualification_commit": "e11c772943b0f040cbba90252672bf30df5ed24f",
520
+ "scope": "Named native CI environment; not every OS version, Linux distribution, or device."
521
+ }
522
+ ]
523
+ }
runtimes/v0.2.0/tools/common.py ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Integrity and archive helpers shared by release tooling."""
2
+
3
+ import hashlib
4
+ import json
5
+ import platform
6
+ import tarfile
7
+ from pathlib import Path
8
+
9
+ ROOT = Path(__file__).resolve().parents[1]
10
+ SPEC = ROOT / "models/datafog-pii/release.json"
11
+
12
+
13
+ def read(path):
14
+ return json.loads(Path(path).read_text(encoding="utf-8"))
15
+
16
+
17
+ def write(path, value):
18
+ path = Path(path)
19
+ path.parent.mkdir(parents=True, exist_ok=True)
20
+ path.write_text(json.dumps(value, indent=2) + "\n", encoding="utf-8")
21
+
22
+
23
+ def sha256(path):
24
+ with Path(path).open("rb") as stream:
25
+ return hashlib.file_digest(stream, "sha256").hexdigest()
26
+
27
+
28
+ def identity(path):
29
+ return {"sha256": sha256(path), "bytes": Path(path).stat().st_size}
30
+
31
+
32
+ def safe_path(root, name):
33
+ candidate = Path(name)
34
+ if candidate.is_absolute() or ".." in candidate.parts or "\\" in name or ":" in name:
35
+ raise ValueError(f"Unsafe relative path: {name}")
36
+ return Path(root) / candidate
37
+
38
+
39
+ def verify_files(root, files):
40
+ for name, expected in files.items():
41
+ path = safe_path(root, name)
42
+ if not path.is_file() or identity(path) != expected:
43
+ raise ValueError(f"Integrity verification failed: {name}")
44
+
45
+
46
+ def host_platform():
47
+ system = {"Darwin": "macos", "Linux": "linux", "Windows": "windows"}[platform.system()]
48
+ machine = platform.machine().lower()
49
+ arch = {"amd64": "x86_64", "x86_64": "x86_64", "arm64": "arm64", "aarch64": "arm64"}[machine]
50
+ if system == "linux" and arch == "arm64":
51
+ arch = "aarch64"
52
+ return f"{system}-{arch}"
53
+
54
+
55
+ def extract_archive(archive, destination):
56
+ with tarfile.open(archive) as stream:
57
+ for member in stream.getmembers():
58
+ safe_path(destination, member.name)
59
+ if not (member.isfile() or member.isdir()):
60
+ raise ValueError("Links and special files are forbidden in release archives")
61
+ stream.extractall(destination, filter="data")
runtimes/v0.2.0/tools/install_bundle.py ADDED
@@ -0,0 +1,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Install a downloaded native archive with an expected SHA-256."""
2
+
3
+ import argparse
4
+ import json
5
+ import platform
6
+ import subprocess
7
+ import tempfile
8
+ from pathlib import Path
9
+
10
+ from common import extract_archive, host_platform, read, sha256, verify_files
11
+
12
+
13
+ def read_response(text):
14
+ return json.loads(text)
15
+
16
+
17
+ def install(archive, expected_sha256, destination):
18
+ if sha256(archive) != expected_sha256:
19
+ raise ValueError("Archive checksum mismatch")
20
+ if destination.exists():
21
+ raise ValueError("Destination exists; install to a fresh directory")
22
+ destination.parent.mkdir(parents=True, exist_ok=True)
23
+ with tempfile.TemporaryDirectory(dir=destination.parent) as temporary:
24
+ bundle = Path(temporary) / "bundle"
25
+ bundle.mkdir()
26
+ extract_archive(archive, bundle)
27
+ manifest = read(bundle / "bundle-manifest.json")
28
+ if manifest["platform"] != host_platform():
29
+ raise ValueError("Archive platform does not match this host")
30
+ verify_files(bundle, manifest["files"])
31
+ if manifest["platform"].startswith("macos"):
32
+ minimum = 14 if manifest["platform"] == "macos-arm64" else 15
33
+ if int(platform.mac_ver()[0].split(".")[0]) < minimum:
34
+ raise ValueError(f"This archive requires macOS {minimum} or newer")
35
+ if platform.system() == "Windows":
36
+ # A subprocess load check leaves no DLL handles open during the final rename.
37
+ try:
38
+ probe = subprocess.run(
39
+ [str((bundle / "datafog-pii.exe").resolve()), str(bundle.resolve())],
40
+ input='{"text":""}\n',
41
+ text=True,
42
+ encoding="utf-8",
43
+ capture_output=True,
44
+ timeout=30,
45
+ check=True,
46
+ )
47
+ if read_response(probe.stdout).get("findings") != []:
48
+ raise ValueError("Invalid empty-input startup response")
49
+ except (OSError, subprocess.SubprocessError, ValueError) as error:
50
+ raise ValueError(
51
+ "Native runtime could not load. Install Microsoft's x64 Visual C++ "
52
+ "Redistributable (2019-compatible v14) and retry."
53
+ ) from error
54
+ executable = "datafog-pii.exe" if platform.system() == "Windows" else "datafog-pii"
55
+ (bundle / executable).chmod(0o755)
56
+ bundle.rename(destination)
57
+
58
+
59
+ def main():
60
+ parser = argparse.ArgumentParser(description=__doc__)
61
+ parser.add_argument("--archive", type=Path, required=True)
62
+ parser.add_argument("--sha256", required=True)
63
+ parser.add_argument("--destination", type=Path, required=True)
64
+ args = parser.parse_args()
65
+ install(args.archive, args.sha256, args.destination)
66
+ print(args.destination.resolve())
67
+
68
+
69
+ if __name__ == "__main__":
70
+ main()
runtimes/v0.2.0/windows-x86_64-qualification.json ADDED
@@ -0,0 +1,118 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "status": "qualified",
3
+ "platform": "windows-x86_64",
4
+ "tested_host": "Windows-2022Server-10.0.20348-SP0",
5
+ "archive": {
6
+ "filename": "datafog-pii-0.1.0-runtime-0.2.0-windows-x86_64.tar.gz",
7
+ "sha256": "cd4738fcff9f440fa80ce6a71be8c71719e2137d7fd35a8c099f42238740a8f3",
8
+ "bytes": 249849360,
9
+ "provenance": {
10
+ "model_version": "0.1.0",
11
+ "runtime_version": "0.2.0",
12
+ "platform": "windows-x86_64",
13
+ "host": "Windows-2022Server-10.0.20348-SP0",
14
+ "hf_revision": "02cc6ca86a11dcb2b328861687770a22a7ea1b76",
15
+ "runtime": {
16
+ "url": "https://files.pythonhosted.org/packages/a6/13/0f1699f6de549c9324bc9112a2a85b14c517904cd11b562a654643b755a1/onnxruntime-1.30.0-cp312-cp312-win_amd64.whl",
17
+ "filename": "onnxruntime-1.30.0-cp312-cp312-win_amd64.whl",
18
+ "sha256": "f3501472571f1b1eee50e017851e7929f5ea37312d2d8c2494a19e8fc58b4a38",
19
+ "source": "official PyPI CPU wheel",
20
+ "version": "1.30.0"
21
+ },
22
+ "native_files": [
23
+ "onnxruntime.dll",
24
+ "onnxruntime_providers_shared.dll"
25
+ ],
26
+ "telemetry_disabled": true,
27
+ "repository_commit": "b9ce97fe0e3e07b833ac0f122cdaf234af186555",
28
+ "rustc": "rustc 1.94.1 (e408947bf 2026-03-25)",
29
+ "python": "3.12.10 (tags/v3.12.10:0cc8128, Apr 8 2025, 12:21:36) [MSC v.1943 64 bit (AMD64)]",
30
+ "status": "candidate; qualification evidence required",
31
+ "manifest_path_repair": {
32
+ "original_archive_sha256": "afcceebb647288f88eda67e9c18d46ce22e384a96902f8b2fbd56b8a08527d99",
33
+ "packaging_commit": "51324937c52852fc70bec96674c3ed39a617dac0",
34
+ "native_files_unchanged": {
35
+ "datafog-pii.exe": {
36
+ "sha256": "569e3f310c4a969ef5338c2d6f89c34db0413522f9b6210fb1fd77569f9dea27",
37
+ "bytes": 4235264
38
+ },
39
+ "onnxruntime.dll": {
40
+ "sha256": "e42c5c917207ff706530315177e39dca2539695a6a8d968a22225e34291b1f12",
41
+ "bytes": 18446176
42
+ },
43
+ "onnxruntime_providers_shared.dll": {
44
+ "sha256": "46b999f9d5cd9d284091407e9f50a262624e6a71265fc428a1dfbd42d149bd81",
45
+ "bytes": 21856
46
+ }
47
+ },
48
+ "change": "Canonical POSIX manifest paths; no executable/library/model change"
49
+ }
50
+ }
51
+ },
52
+ "hf_revision": "02cc6ca86a11dcb2b328861687770a22a7ea1b76",
53
+ "model_version": "0.1.0",
54
+ "runtime_version": "0.2.0",
55
+ "mcp_base_revision": "c2c45ec62728d85b7472131a3df9ccb67afd4a02",
56
+ "mcp_compatibility_revision": "01d7f74e693a7892ab1ed504d0d8f8c1e7ce51d3",
57
+ "mcp_tests": {
58
+ "tests": 33,
59
+ "failures": 0,
60
+ "errors": 0,
61
+ "skipped": 0
62
+ },
63
+ "native_unit_tests": 3,
64
+ "golden_cases": 7,
65
+ "same_host_parity": {
66
+ "bundle": "D:\\a\\DataFog-models\\DataFog-models\\.work\\installed",
67
+ "cases": [
68
+ {
69
+ "bytes": 0,
70
+ "windows": 1,
71
+ "findings": 0
72
+ },
73
+ {
74
+ "bytes": 11,
75
+ "windows": 1,
76
+ "findings": 2
77
+ },
78
+ {
79
+ "bytes": 52,
80
+ "windows": 1,
81
+ "findings": 2
82
+ },
83
+ {
84
+ "bytes": 26,
85
+ "windows": 1,
86
+ "findings": 0
87
+ },
88
+ {
89
+ "bytes": 28,
90
+ "windows": 1,
91
+ "findings": 3
92
+ },
93
+ {
94
+ "bytes": 9933,
95
+ "windows": 5,
96
+ "findings": 3
97
+ },
98
+ {
99
+ "bytes": 4559,
100
+ "windows": 3,
101
+ "findings": 2
102
+ }
103
+ ],
104
+ "max_abs_logit_difference": 0.0,
105
+ "logits_bit_identical": true,
106
+ "logit_atol": 0.0001,
107
+ "logit_rtol": 1e-05,
108
+ "token_ids_masks_global_byte_offsets_parity": true,
109
+ "findings_redaction_parity": true,
110
+ "actual_python_predictor_parity": true,
111
+ "malformed_request_explicit_error_and_recovery": true,
112
+ "cold_process_debug_batch_seconds": 2.6044589999999914,
113
+ "note": "Parity fixtures prove implementation consistency, not detection quality."
114
+ },
115
+ "workflow_run": "37249503334",
116
+ "qualification_commit": "e11c772943b0f040cbba90252672bf30df5ed24f",
117
+ "scope": "Named native CI environment; not every OS version, Linux distribution, or device."
118
+ }