spybyscript commited on
Commit
a99cb34
·
0 Parent(s):

LiteRT conversion of fastino/GLiNER2.5-Decide, with Qualcomm NPU files

Browse files
.gitattributes ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tar filter=lfs diff=lfs merge=lfs -text
29
+ *.tflite filter=lfs diff=lfs merge=lfs -text
30
+ *.tgz filter=lfs diff=lfs merge=lfs -text
31
+ *.wasm filter=lfs diff=lfs merge=lfs -text
32
+ *.xz filter=lfs diff=lfs merge=lfs -text
33
+ *.zip filter=lfs diff=lfs merge=lfs -text
34
+ *.zst filter=lfs diff=lfs merge=lfs -text
35
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
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.
NOTICE.txt ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ GLiNER2.5-Decide (fastino/GLiNER2.5-Decide @ bbe10ff77ebb238777c17d3a8ac9260e30929057), by Fastino, licensed under the Apache License 2.0 (LICENSE). Its encoder is DeBERTa-v3-large (Microsoft, MIT License).
2
+
3
+ Changes: converted to LiteRT by spybyscript (wfp16, fp16hw). The graph code (rank-4 attention, the relative-position buckets baked as constants, the FP16-hardware rewrites) is ported from litert-community/GLiNER2.5-Decide-LiteRT @ c687e899 (Apache-2.0), rewritten for one file with a signature per bucket and a per-position output. The token embedding table is shipped as a float16 file outside the graph. Weights are the original apart from the precision each variant states. Only the encoder and the classification head are exported.
4
+
5
+ npu/ holds single-signature cuts of the fp16hw graph and files precompiled from it for Qualcomm Hexagon NPUs with Qualcomm's QAIRT 2.50.0 (ai-edge-litert 2.3.0); their weights are fp16hw's.
6
+
7
+ model-card.md is the original model card; README.md describes this conversion.
README.md ADDED
@@ -0,0 +1,147 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: apache-2.0
3
+ language:
4
+ - en
5
+ base_model: fastino/GLiNER2.5-Decide
6
+ library_name: litert
7
+ tags:
8
+ - gliner2
9
+ - litert
10
+ - tflite
11
+ - android
12
+ - on-device
13
+ ---
14
+
15
+ # GLiNER2.5-Decide — LiteRT (Android)
16
+
17
+ An on-device conversion of GLiNER2.5-Decide for Android's LiteRT: one file for every input length (about half the size of a file per length), validated against the gliner2 library on 2,338 decisions, with phone measurements and Qualcomm NPU files.
18
+
19
+ Converted from [fastino/GLiNER2.5-Decide](https://huggingface.co/fastino/GLiNER2.5-Decide) at revision `bbe10ff77ebb238777c17d3a8ac9260e30929057` (Apache-2.0, by Fastino).
20
+ One `.tflite` per variant, each with four signatures (`s128`, `s160`, `s256`, `s512`)
21
+ that share one set of weights; the token table is a separate float16 file the host maps. `config.json` is the full contract.
22
+
23
+ | File | Size | Precision |
24
+ |---|---|---|
25
+ | `gliner25_decide_wfp16.tflite` | 1026 MB | FULLY_CONNECTED weights stored float16 behind DEQUANTIZE (ai-edge-quantizer FLOAT_CASTING); FP32 activations, relative-position tables, norms and biases; finite -1e4 mask |
26
+ | `gliner25_decide_fp16hw.tflite` | 1026 MB | wfp16's storage (float16 FULLY_CONNECTED weights behind DEQUANTIZE) over the FP16-hardware graph: LayerNorm power-of-two pre-scale (x*2^-k, eps*4^-k, k from the corpus' FP32 ranges), first feed-forward FULLY_CONNECTED split in two halves, finite -1e4 mask |
27
+ | `gliner25_decide_embeddings_f16.bin` | 262 MB | float16 [128011, 1024], little-endian, row-major |
28
+
29
+ ## Use
30
+
31
+ Tokenize with `tokenizer.json` and pack the prompt exactly as gliner2 2.0.0 does. Pick the smallest signature that holds the ids
32
+ (refuse more than 512), zero-pad the ids, look each one up in the table (row `id` at byte `id * 2048`) and upcast to float32 into
33
+ `inputs_embeds` [1, N, 1024]; `attention_mask` [1, N] is 1.0 for tokens and 0.0 for padding. `logits` [1, N] holds the classifier
34
+ at every position: read each task's `[L]` marker positions and take a softmax over them (sigmoid for multi-label tasks).
35
+
36
+ LiteRT `CompiledModel`: on the GPU set the precision explicitly (FP32 for `wfp16`) and constant tensor sharing; on the CPU set
37
+ XNNPACK's weight cache path, or XNNPACK packs a copy of the weights for every signature.
38
+
39
+ ## Validation (Mac, not a phone)
40
+
41
+ 616 Decide calls (2,338 decisions) recorded from the gliner2 2.0.0 library on a synthetic English corpus of short
42
+ conversational statements, packed by the library's collator, padded to the smallest
43
+ bucket and decoded by a Python mirror of an on-device host. ai-edge-litert 2.2.0 on arm64 Mac (Apple M5 Max, macOS 27.0.1):
44
+ the CPU, and the Mac's GPU through the same ML Drift accelerator the phone uses (Metal here, OpenCL on Android) as a check of
45
+ the precision modes. These timings are Mac measurements, not phone numbers.
46
+
47
+ | Variant | Runtime | Labels as the library | Max probability drift | Mac ms per call p50 by bucket | Gate |
48
+ |---|---|---|---|---|---|
49
+ | `wfp16` | CPU (XNNPACK, 4 threads) | 2338/2338 (100.00%) | 0.00032 | 128: 58.3, 160: 68.1, 512: 248.6 | pass |
50
+ | `wfp16` | Mac GPU (Metal, ML Drift), FP32 precision | 2338/2338 (100.00%) | 0.00032 | 128: 21.0, 160: 23.8, 512: 76.1 | pass |
51
+ | `wfp16` | Mac GPU (Metal, ML Drift), default precision (FP16) | 2226/2338 (95.21%) | 0.30555 | 128: 16.3, 160: 20.5, 512: 49.6 | fail |
52
+ | `fp16hw` | CPU (XNNPACK, 4 threads) | 2338/2338 (100.00%) | 0.00032 | 128: 60.2, 160: 70.5, 512: 255.1 | pass |
53
+ | `fp16hw` | Mac GPU (Metal, ML Drift), FP32 precision | 2338/2338 (100.00%) | 0.00032 | 128: 22.1, 160: 25.7, 512: 79.8 | pass |
54
+ | `fp16hw` | Mac GPU (Metal, ML Drift), default precision (FP16) | 2332/2338 (99.74%) | 0.01158 | 128: 16.6, 160: 22.1, 512: 50.7 | pass |
55
+
56
+ The acceptance gate: label agreement ≥ 95 %, largest probability drift ≤ 0.05. `validation.json` holds every number.
57
+
58
+ ## On a phone (Galaxy Z Fold 8, 2026-10-28/29)
59
+
60
+ Snapdragon 8 Elite Gen 5 (SM8850), Adreno 840, Android 17, LiteRT 2.2.0. One request per signature from the
61
+ test set, warm, on a rested phone (it throttles within minutes of continuous runs):
62
+
63
+ | Setting | s128 | s160 | s512 | RAM taken | Labels as the library |
64
+ |---|---|---|---|---|---|
65
+ | `fp16hw`, GPU FP16 | 62 ms | 81 ms | 439 ms | about 1.0 GB | 9 / 9 |
66
+ | `fp16hw`, GPU FP16 with FP32 accumulation | 80 ms | 99 ms | 496 ms | about 1.05 GB | 9 / 9 |
67
+ | `wfp16`, GPU FP32 | 136 ms | 173 ms | 758 ms | about 1.9 GB | 9 / 9 |
68
+ | `wfp16`, CPU (4 threads, XNNPACK weight cache) | 120 ms | 155 ms | 972 ms | about 0.4–0.5 GB, plus droppable file pages | 9 / 9 |
69
+
70
+ - **Set constant tensor sharing on the GPU.** Without it each signature holds its own copy of the weights: 5.3 GB of graphics memory against 1.9 GB. The "graphics" figure in PSS counts the weights twice; the RAM the system loses is about 1.0 GB.
71
+ - **Use LOW GPU priority in a rendering app.** At the default, NORMAL or HIGH priority, each 512-token call held the app's renderer off the GPU for about 400 ms. LOW costs no frames but adds about 95–130 ms to every call.
72
+ - **The first load is the slowest.** It takes 6–8 s on the GPU. The program cache shortens later loads very little.
73
+ - **These are LiteRT 2.2.0's numbers.** On LiteRT 2.3.2 the GPU at LOW priority is slower on the same phone: 472 ms a call at s160 (2026-10-30; about 176 ms on 2.2.0) and 2.75 s at s512 (2026-11-01).
74
+
75
+ ## Qualcomm NPU (`npu/`)
76
+
77
+ Files for the Hexagon NPU of Snapdragon phones, through LiteRT's Qualcomm accelerator: LiteRT 2.3.2 with
78
+ `litert-npu-runtime-qualcomm` 2.3.2 and Qualcomm's `qnn-runtime` 2.50.0 (Qualcomm's AI Stack License). They are not part
79
+ of the GPU and CPU files above. Every one comes from `gliner25_decide_fp16hw.tflite`, because the NPU computes at FP16.
80
+ Inputs, outputs and host steps are the same as above; `npu/manifest.json` lists each file with its chip, signatures,
81
+ size, SHA-256 and the versions it was built with.
82
+
83
+ | Files | What they are |
84
+ |---|---|
85
+ | `npu/gliner25_decide_fp16hw_s128.tflite`, `_s160`, `_s256` (660 MB / 673 MB / 710 MB) | One signature each, cut from `fp16hw` (on LiteRT's CPU their logits equal the full file's). The phone compiles them for its own NPU at first use, so they serve any Snapdragon LiteRT supports: about 20 / 45 / 130 s on an SM8850, once per OS build. s512 is left out: compiling it on a phone ran out of memory on a Galaxy S26 (litert-community). |
86
+ | `npu/qualcomm/gliner25_decide_fp16hw_<chip>.tflite` | Precompiled on x86-64 Linux (ai-edge-litert 2.3.0, QAIRT 2.50.0.260828): all four signatures over one copy of the weights (`qualcomm_enable_weight_sharing=true`, the compiler's default O3). Each signature runs all 1,846 operations in one NPU partition, so nothing in the file falls back to the GPU or the CPU. The phone loads it without compiling. It runs only on its chip (`Build.SOC_MODEL`) and only with the runtime versions above. Building one takes 13–18 minutes and up to 24 GB of memory on the Linux host. |
87
+
88
+ | Chip | Snapdragon | Hexagon | Precompiled file | Size | Run on |
89
+ |---|---|---|---|---|---|
90
+ | SM8850 | 8 Elite Gen 5 | V81 | `npu/qualcomm/gliner25_decide_fp16hw_SM8850.tflite` | 877 MB | Galaxy Z Fold 8, 2026-11-01 |
91
+ | SM8750 | 8 Elite | V79 | `npu/qualcomm/gliner25_decide_fp16hw_SM8750.tflite` | 875 MB | compiled, not run on a phone yet |
92
+ | SM8650 | 8 Gen 3 | V75 | `npu/qualcomm/gliner25_decide_fp16hw_SM8650.tflite` | 860 MB | compiled, not run on a phone yet |
93
+ | SM8550 | 8 Gen 2 | V73 | `npu/qualcomm/gliner25_decide_fp16hw_SM8550.tflite` | 862 MB | Galaxy S23 Ultra, 2026-11-02 |
94
+ | SM8450 | 8 Gen 1 | V69 | `npu/qualcomm/gliner25_decide_fp16hw_SM8450.tflite` | 856 MB | compiled, not run on a phone yet |
95
+
96
+ ### On a Galaxy Z Fold 8 (SM8850, 2026-11-01)
97
+
98
+ LiteRT 2.3.2 with `qnn-runtime` 2.50.0, Android 17. Each file ran the test requests that fit its signature, 10 calls
99
+ each, after a 60 s rest (thermal status 0 before and after). "Run" is the model alone, without the host's table lookup.
100
+
101
+ | File | Load | Run p50 | Largest logit difference from PyTorch FP32 | Labels as the library |
102
+ |---|---|---|---|---|
103
+ | `npu/qualcomm/gliner25_decide_fp16hw_SM8850.tflite` at s160 | 1.5 s | 31.4 ms | 0.0032 | 12 / 12 |
104
+ | `npu/qualcomm/gliner25_decide_fp16hw_SM8850.tflite` at s512 | 1.8 s | 644 ms | 0.015 | 16 / 16 |
105
+ | the cuts, compiled on the phone: s128 / s160 / s256 | 0.45–0.72 s once compiled | 21.3 / 30.0 / 87.6 ms | 0.0032 / 0.0032 / 0.0029 | 4 / 4, 12 / 12, 12 / 12 |
106
+ | the cuts, each precompiled on Linux for SM8850 | 0.65–0.77 s | 22.4 / 29.9 / 86.8 ms | 0.0032 / 0.0032 / 0.0029 | 4 / 4, 12 / 12, 12 / 12 |
107
+
108
+ - **Precompiled files run like the phone's own compile,** within about 1 ms, with the same logits, and skip the compile.
109
+ - **s512 on the NPU:** the four-signature file holds 52 MB of dirty memory and 859 MB of file pages there. On the same
110
+ phone and LiteRT version the GPU path (`fp16hw`, FP16, LOW priority) took 2.75 s a call at s512, 24 s to load and
111
+ 2.0 GB of dirty memory.
112
+ - s128 and s256 from the four-signature file have not been run yet. From a three-signature file built the same way
113
+ (s128 to s256, 755 MB) they ran at 21.8 and 88.3 ms.
114
+
115
+ ### On a Galaxy S23 Ultra (SM8550, 2026-11-02)
116
+
117
+ LiteRT 2.3.2 with `qnn-runtime` 2.50.0, Android 16, 8 GB of memory. The same method as on the Fold. For the GPU rows the
118
+ "Run" column is the whole call, because the GPU runs asynchronously.
119
+
120
+ | File | Load | Run p50 | Largest logit difference from PyTorch FP32 | Labels as the library |
121
+ |---|---|---|---|---|
122
+ | `npu/qualcomm/gliner25_decide_fp16hw_SM8550.tflite` at s128 / s160 / s256 | 1.5–1.6 s | 32.2 / 53.9 / 170 ms | 0.0039 / 0.0042 / 0.0042 | 4 / 4, 12 / 12, 12 / 12 |
123
+ | `npu/qualcomm/gliner25_decide_fp16hw_SM8550.tflite` at s512 | 1.7 s | 1,149 ms | 0.014 | 16 / 16 |
124
+ | the cuts, compiled on the phone: s128 / s160 / s256 | 21 / 41 / 117 s to compile | 31.3 / 53.2 / 164 ms | 0.0039 / 0.0042 / 0.0042 | 4 / 4, 12 / 12, 12 / 12 |
125
+ | the cuts, each precompiled on Linux for SM8550 | 0.5–0.65 s | 32.0 / 53.9 / 162 ms | 0.0039 / 0.0042 / 0.0042 | 4 / 4, 12 / 12, 12 / 12 |
126
+ | `fp16hw` on the GPU (FP16, LOW priority), s160 / s512 | 6.3 / 7.7 s | 369 / 2,099 ms | 0.019 / 0.053 | 12 / 12, 16 / 16 |
127
+
128
+ - **Precompiled files run like the phone's own compile** here too, with the same logits.
129
+ - **Memory:** the four-signature file holds 50–69 MB of dirty memory and 853 MB of file pages. The GPU held 1.4 GB (s160)
130
+ and 2.0 GB (s512) of dirty memory. A compile on the phone holds about 1.3 GB of dirty memory in the process that
131
+ compiles; reloaded from LiteRT's compiler cache, the model holds about 50 MB, like a precompiled file.
132
+ - **s512:** 1.17 s a call on the NPU against 2.10 s on the GPU.
133
+
134
+ ## Compared with litert-community/GLiNER2.5-Decide-LiteRT
135
+
136
+ | | this conversion | litert-community (rev c687e899) |
137
+ |---|---|---|
138
+ | Files | one `.tflite` with signatures s128 / s160 / s256 / s512 over one set of weights (1.03 GB), plus the 262 MB table | one file per length: s128 / s256 / s512, 2.18 GB together, plus the table |
139
+ | Lengths | adds s160: requests of 129 to 160 tokens no longer pad to 256 | 128 / 256 / 512 |
140
+ | Output | `logits` at every position (the host reads the `[L]` markers, as smdesai's Core ML port does) | `label_routing` input, 32 label logits out |
141
+ | Validation | every recorded library call (616 calls, 2,338 decisions): wfp16 2,338 / 2,338; fp16hw at GPU FP16 2,332 / 2,338 | 42 decisions |
142
+ | GPU speed on SM8850 | s128 62 ms at FP16 (Fold 8) | s128 60 ms with FP32 accumulation (S26) |
143
+
144
+ ## Files
145
+
146
+ `LICENSE` (Apache-2.0), `NOTICE.txt` (attribution and changes), `model-card.md` (the original card), `config.json`
147
+ (contract), `validation.json`, `SHA256SUMS`, tokenizer files, `source/` (the checkpoint's configs), and `npu/` (the Qualcomm NPU files above).
SHA256SUMS ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 LICENSE
2
+ 0a8689579d9a76e8b3b1c6769e7293d7ad0672394545f7fab94c24eb167a96a0 NOTICE.txt
3
+ 3a835c128e6eec1f68b7dd4a458403347a83991034eb69b93c12b99fd693d69e README.md
4
+ b3595e87167c626611cb102d066bda3a07af7c521520a1e4ee04d52db33ab5f2 config.json
5
+ f90f5d837721b3d4df7194a89ea18bbea5c449e6944fb6078664f1a8d20484fd gliner25_decide_embeddings_f16.bin
6
+ b5567c71caddf9ce476e242c8778622375a8b2c415cf078248f75b092452b605 gliner25_decide_fp16hw.tflite
7
+ eed09fce5c62a0629f4cc192b97401a5a11b01571a63b1e64829b5011668a52c gliner25_decide_wfp16.tflite
8
+ ce29834da27c7ddacc74e5ebb560c9104e1b83d04a8ba8dd82059737e9dbd419 model-card.md
9
+ 323e3f48ad74ba4110f69c58d40d8e2f55e5f1b9723cfb82c30c2a622be86f7a npu/gliner25_decide_fp16hw_s128.tflite
10
+ 1783d73131c2395c3e39e6364536e2f9643b4c1eba3051db21b4cd91a868e0ed npu/gliner25_decide_fp16hw_s160.tflite
11
+ 08fbd3820bace55861948c392a130ab934895d2d75a54e7e1666aabdf0ba16e1 npu/gliner25_decide_fp16hw_s256.tflite
12
+ b31f074d8dbf701eaa0a4d2597eb70edba2f6bd60d3537733c5c997c2ba099a2 npu/manifest.json
13
+ b82f3b26b9cd9ce59ea1340486e81bec51a4aae6fcb7b5ff7769b717326dc32a npu/qualcomm/gliner25_decide_fp16hw_SM8450.tflite
14
+ 86bfd5ca3aea9075dcb0482c04572dcfd247f2f6f3bb040ac0d989d8e60ed6bd npu/qualcomm/gliner25_decide_fp16hw_SM8550.tflite
15
+ 48a382ae593afe724eb40b833991b5c8fb8dbb2bb6b14c74ebf9abb862177e02 npu/qualcomm/gliner25_decide_fp16hw_SM8650.tflite
16
+ 5357988607b7287eedcbd7328f1db3ed91ed34afc4bce3f8042ae47c5a5b32df npu/qualcomm/gliner25_decide_fp16hw_SM8750.tflite
17
+ 84e72594a330efdb86e09e4319e30f02ed75f63917fc55346ed47351ca1b30c6 npu/qualcomm/gliner25_decide_fp16hw_SM8850.tflite
18
+ e748e5b80575471c91b3f0dd00f513ba58242544fcb7e1236e0021e61abd7673 source/config.json
19
+ bd32f1484ba5a199f7a63df44df3814b839fffcf6e64478323c4689868ef6015 source/encoder_config/config.json
20
+ 84ea70143f533d7e99b393d87f20010887a9ac2cba955828ef313886e4e83f4f special_tokens_map.json
21
+ 3ad87d9ffe669147063e70850927dd2da90249e2acc5c8527f1eb65df467bcc8 tokenizer.json
22
+ 323199a4e946039410899f3779f2aa3eaef1500213c512727ad0f623d4f21309 tokenizer_config.json
23
+ 61af75058de96a0cce60c500e4d34ba0a6b94c8e4b1950057ac31a558c3fc457 validation.json
config.json ADDED
@@ -0,0 +1,380 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "source": "fastino/GLiNER2.5-Decide@bbe10ff77ebb238777c17d3a8ac9260e30929057",
3
+ "variant": "wfp16",
4
+ "precision": "FULLY_CONNECTED weights stored float16 behind DEQUANTIZE (ai-edge-quantizer FLOAT_CASTING); FP32 activations, relative-position tables, norms and biases; finite -1e4 mask",
5
+ "runtime": {
6
+ "litert": "2.2.0 (validated on the Mac with ai-edge-litert 2.2.0; com.google.ai.edge.litert:litert:2.2.0 on Android)",
7
+ "api": "CompiledModel",
8
+ "converter": {
9
+ "litert-torch": "0.9.4",
10
+ "ai-edge-litert": "2.2.0",
11
+ "ai-edge-quantizer": "0.9.0",
12
+ "litert-converter": "0.4.0",
13
+ "torch": "2.13.0",
14
+ "transformers": "4.57.6",
15
+ "gliner2": "2.0.0"
16
+ }
17
+ },
18
+ "graphs": [
19
+ {
20
+ "path": "gliner25_decide_wfp16.tflite",
21
+ "variant": "wfp16",
22
+ "shipped": true,
23
+ "about": "FULLY_CONNECTED weights stored float16 behind DEQUANTIZE (ai-edge-quantizer FLOAT_CASTING); FP32 activations, relative-position tables, norms and biases; finite -1e4 mask",
24
+ "bytes": 1026117712,
25
+ "signatures": [
26
+ {
27
+ "key": "s128",
28
+ "inputs": [
29
+ {
30
+ "name": "attention_mask",
31
+ "dtype": "float32",
32
+ "shape": [
33
+ 1,
34
+ 128
35
+ ],
36
+ "about": "1.0 for the request's tokens, 0.0 for padding"
37
+ },
38
+ {
39
+ "name": "inputs_embeds",
40
+ "dtype": "float32",
41
+ "shape": [
42
+ 1,
43
+ 128,
44
+ 1024
45
+ ],
46
+ "about": "rows of the float16 token table at the zero-padded ids, upcast to float32 (padding rows are id 0's)"
47
+ }
48
+ ],
49
+ "outputs": [
50
+ {
51
+ "name": "logits",
52
+ "dtype": "float32",
53
+ "shape": [
54
+ 1,
55
+ 128
56
+ ],
57
+ "about": "the classifier at every position"
58
+ }
59
+ ]
60
+ },
61
+ {
62
+ "key": "s160",
63
+ "inputs": [
64
+ {
65
+ "name": "attention_mask",
66
+ "dtype": "float32",
67
+ "shape": [
68
+ 1,
69
+ 160
70
+ ],
71
+ "about": "1.0 for the request's tokens, 0.0 for padding"
72
+ },
73
+ {
74
+ "name": "inputs_embeds",
75
+ "dtype": "float32",
76
+ "shape": [
77
+ 1,
78
+ 160,
79
+ 1024
80
+ ],
81
+ "about": "rows of the float16 token table at the zero-padded ids, upcast to float32 (padding rows are id 0's)"
82
+ }
83
+ ],
84
+ "outputs": [
85
+ {
86
+ "name": "logits",
87
+ "dtype": "float32",
88
+ "shape": [
89
+ 1,
90
+ 160
91
+ ],
92
+ "about": "the classifier at every position"
93
+ }
94
+ ]
95
+ },
96
+ {
97
+ "key": "s256",
98
+ "inputs": [
99
+ {
100
+ "name": "attention_mask",
101
+ "dtype": "float32",
102
+ "shape": [
103
+ 1,
104
+ 256
105
+ ],
106
+ "about": "1.0 for the request's tokens, 0.0 for padding"
107
+ },
108
+ {
109
+ "name": "inputs_embeds",
110
+ "dtype": "float32",
111
+ "shape": [
112
+ 1,
113
+ 256,
114
+ 1024
115
+ ],
116
+ "about": "rows of the float16 token table at the zero-padded ids, upcast to float32 (padding rows are id 0's)"
117
+ }
118
+ ],
119
+ "outputs": [
120
+ {
121
+ "name": "logits",
122
+ "dtype": "float32",
123
+ "shape": [
124
+ 1,
125
+ 256
126
+ ],
127
+ "about": "the classifier at every position"
128
+ }
129
+ ]
130
+ },
131
+ {
132
+ "key": "s512",
133
+ "inputs": [
134
+ {
135
+ "name": "attention_mask",
136
+ "dtype": "float32",
137
+ "shape": [
138
+ 1,
139
+ 512
140
+ ],
141
+ "about": "1.0 for the request's tokens, 0.0 for padding"
142
+ },
143
+ {
144
+ "name": "inputs_embeds",
145
+ "dtype": "float32",
146
+ "shape": [
147
+ 1,
148
+ 512,
149
+ 1024
150
+ ],
151
+ "about": "rows of the float16 token table at the zero-padded ids, upcast to float32 (padding rows are id 0's)"
152
+ }
153
+ ],
154
+ "outputs": [
155
+ {
156
+ "name": "logits",
157
+ "dtype": "float32",
158
+ "shape": [
159
+ 1,
160
+ 512
161
+ ],
162
+ "about": "the classifier at every position"
163
+ }
164
+ ]
165
+ }
166
+ ],
167
+ "use": "GPU with explicit FP32 precision (litert-community: the default GPU precision changed 28 of 42 decisions), or the CPU"
168
+ },
169
+ {
170
+ "path": "gliner25_decide_fp16hw.tflite",
171
+ "variant": "fp16hw",
172
+ "shipped": false,
173
+ "about": "wfp16's storage (float16 FULLY_CONNECTED weights behind DEQUANTIZE) over the FP16-hardware graph: LayerNorm power-of-two pre-scale (x*2^-k, eps*4^-k, k from the corpus' FP32 ranges), first feed-forward FULLY_CONNECTED split in two halves, finite -1e4 mask",
174
+ "bytes": 1026073648,
175
+ "signatures": [
176
+ {
177
+ "key": "s128",
178
+ "inputs": [
179
+ {
180
+ "name": "attention_mask",
181
+ "dtype": "float32",
182
+ "shape": [
183
+ 1,
184
+ 128
185
+ ],
186
+ "about": "1.0 for the request's tokens, 0.0 for padding"
187
+ },
188
+ {
189
+ "name": "inputs_embeds",
190
+ "dtype": "float32",
191
+ "shape": [
192
+ 1,
193
+ 128,
194
+ 1024
195
+ ],
196
+ "about": "rows of the float16 token table at the zero-padded ids, upcast to float32 (padding rows are id 0's)"
197
+ }
198
+ ],
199
+ "outputs": [
200
+ {
201
+ "name": "logits",
202
+ "dtype": "float32",
203
+ "shape": [
204
+ 1,
205
+ 128
206
+ ],
207
+ "about": "the classifier at every position"
208
+ }
209
+ ]
210
+ },
211
+ {
212
+ "key": "s160",
213
+ "inputs": [
214
+ {
215
+ "name": "attention_mask",
216
+ "dtype": "float32",
217
+ "shape": [
218
+ 1,
219
+ 160
220
+ ],
221
+ "about": "1.0 for the request's tokens, 0.0 for padding"
222
+ },
223
+ {
224
+ "name": "inputs_embeds",
225
+ "dtype": "float32",
226
+ "shape": [
227
+ 1,
228
+ 160,
229
+ 1024
230
+ ],
231
+ "about": "rows of the float16 token table at the zero-padded ids, upcast to float32 (padding rows are id 0's)"
232
+ }
233
+ ],
234
+ "outputs": [
235
+ {
236
+ "name": "logits",
237
+ "dtype": "float32",
238
+ "shape": [
239
+ 1,
240
+ 160
241
+ ],
242
+ "about": "the classifier at every position"
243
+ }
244
+ ]
245
+ },
246
+ {
247
+ "key": "s256",
248
+ "inputs": [
249
+ {
250
+ "name": "attention_mask",
251
+ "dtype": "float32",
252
+ "shape": [
253
+ 1,
254
+ 256
255
+ ],
256
+ "about": "1.0 for the request's tokens, 0.0 for padding"
257
+ },
258
+ {
259
+ "name": "inputs_embeds",
260
+ "dtype": "float32",
261
+ "shape": [
262
+ 1,
263
+ 256,
264
+ 1024
265
+ ],
266
+ "about": "rows of the float16 token table at the zero-padded ids, upcast to float32 (padding rows are id 0's)"
267
+ }
268
+ ],
269
+ "outputs": [
270
+ {
271
+ "name": "logits",
272
+ "dtype": "float32",
273
+ "shape": [
274
+ 1,
275
+ 256
276
+ ],
277
+ "about": "the classifier at every position"
278
+ }
279
+ ]
280
+ },
281
+ {
282
+ "key": "s512",
283
+ "inputs": [
284
+ {
285
+ "name": "attention_mask",
286
+ "dtype": "float32",
287
+ "shape": [
288
+ 1,
289
+ 512
290
+ ],
291
+ "about": "1.0 for the request's tokens, 0.0 for padding"
292
+ },
293
+ {
294
+ "name": "inputs_embeds",
295
+ "dtype": "float32",
296
+ "shape": [
297
+ 1,
298
+ 512,
299
+ 1024
300
+ ],
301
+ "about": "rows of the float16 token table at the zero-padded ids, upcast to float32 (padding rows are id 0's)"
302
+ }
303
+ ],
304
+ "outputs": [
305
+ {
306
+ "name": "logits",
307
+ "dtype": "float32",
308
+ "shape": [
309
+ 1,
310
+ 512
311
+ ],
312
+ "about": "the classifier at every position"
313
+ }
314
+ ]
315
+ }
316
+ ],
317
+ "use": "GPU at FP16 precision, or the Qualcomm NPU (FP16 compute); the FP32 paths give the same decisions as wfp16 (the rewrites are exact in FP32)"
318
+ }
319
+ ],
320
+ "table": {
321
+ "path": "gliner25_decide_embeddings_f16.bin",
322
+ "dtype": "float16",
323
+ "byteOrder": "little-endian",
324
+ "shape": [
325
+ 128011,
326
+ 1024
327
+ ],
328
+ "layout": "row-major, no header: row `id` is bytes [id * 2048, id * 2048 + 2048), 1024 float16 values",
329
+ "bytes": 262166528,
330
+ "sha256": "f90f5d837721b3d4df7194a89ea18bbea5c449e6944fb6078664f1a8d20484fd",
331
+ "use": "memory-map the file; for each position of the bucket take the row of its zero-padded id (padding takes id 0's row) and upcast to float32 into inputs_embeds"
332
+ },
333
+ "buckets": [
334
+ 128,
335
+ 160,
336
+ 256,
337
+ 512
338
+ ],
339
+ "host": {
340
+ "bucket": "the smallest of s128 / s160 / s256 / s512 that holds the request's ids; refuse longer than 512 tokens, never truncate",
341
+ "inputs": "inputs_embeds float32 [1, N, 1024] and attention_mask float32 [1, N] (1.0 for tokens, 0.0 for padding); bind them by name: the flatbuffer's SignatureDef lists attention_mask, inputs_embeds, while ai-edge-litert 2.2.0's CompiledModel reports inputs_embeds, attention_mask",
342
+ "outputs": "logits float32 [1, N]: read the [L] marker positions of each task (single-label: softmax over the task's markers; multi-label: sigmoid), as smdesai's Core ML port (GLiNER25-Decide-FP16-CoreML) does with its logits",
343
+ "temperature": 1.0
344
+ },
345
+ "accelerators": {
346
+ "gpu": "set GpuOptions precision explicitly (FP32 for wfp16; FP16 only with fp16hw) and constantTensorSharing, so the signatures share the weights on the GPU as they do in the file",
347
+ "cpu": "set CpuOptions' XNNPACK weight cache path: without it XNNPACK packs a copy of the weights for every signature (Mac, wfp16: see validation.json memory); 4 threads in the validation",
348
+ "npu": "fp16hw only (FP16 compute); not run on the Mac"
349
+ },
350
+ "positionTables": "each signature holds its own FP32 copy of the relative-position tables (the converter folds each bucket's slice; 24 layers x 2 x [1, 16, 64, 2N]); every other constant is stored once and shared by all signatures",
351
+ "coremlDifferences": [
352
+ "a signature per bucket (s128, s160, s256, s512) instead of the multifunction package's context128/context256/context512",
353
+ "the token table lives outside the graph (inputs_embeds), as litert-community's port does; the Core ML port takes input_ids",
354
+ "attention_mask is float32 instead of int32; logits are the same [1, N] float32 at every position",
355
+ "precision: FULLY_CONNECTED weights stored float16 behind DEQUANTIZE (ai-edge-quantizer FLOAT_CASTING); FP32 activations, relative-position tables, norms and biases; finite -1e4 mask (the Core ML port runs FP16 on the GPU)"
356
+ ],
357
+ "tokenizer": {
358
+ "file": "tokenizer.json",
359
+ "specialTokens": {
360
+ "[PAD]": 0,
361
+ "[CLS]": 1,
362
+ "[SEP]": 2,
363
+ "[UNK]": 3,
364
+ "[MASK]": 128000,
365
+ "[SEP_STRUCT]": 128001,
366
+ "[SEP_TEXT]": 128002,
367
+ "[P]": 128003,
368
+ "[C]": 128004,
369
+ "[E]": 128005,
370
+ "[R]": 128006,
371
+ "[L]": 128007,
372
+ "[EXAMPLE]": 128008,
373
+ "[OUTPUT]": 128009,
374
+ "[DESCRIPTION]": 128010
375
+ }
376
+ },
377
+ "provenance": {
378
+ "graph": "ported from litert-community/GLiNER2.5-Decide-LiteRT@c687e899 (Apache-2.0)"
379
+ }
380
+ }
gliner25_decide_embeddings_f16.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:f90f5d837721b3d4df7194a89ea18bbea5c449e6944fb6078664f1a8d20484fd
3
+ size 262166528
gliner25_decide_fp16hw.tflite ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:b5567c71caddf9ce476e242c8778622375a8b2c415cf078248f75b092452b605
3
+ size 1026073648
gliner25_decide_wfp16.tflite ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:eed09fce5c62a0629f4cc192b97401a5a11b01571a63b1e64829b5011668a52c
3
+ size 1026117712
model-card.md ADDED
@@ -0,0 +1,501 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ library_name: gliner2
3
+ license: apache-2.0
4
+ language:
5
+ - en
6
+ pipeline_tag: token-classification
7
+ tags:
8
+ - gliner2
9
+ - Text classification
10
+ - Intent classification
11
+ - Sentiment Analysis
12
+ - Topic classification
13
+ - Named Entity Recognition
14
+ base_model: fastino/gliner2-large-v1
15
+ ---
16
+ <div align="center">
17
+ <a href="https://fastino.ai/lp/gliner?utm_source=huggingface" target="_blank" rel="noopener noreferrer">
18
+ <img src="GLiNER-2.5-Decision-HF-Banner.png" alt="Fastino Agent - Fine-tune GLiNER with a single prompt" width="100%"/>
19
+ </a>
20
+ </div>
21
+
22
+ <div style="display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 16px;">
23
+ <a href="https://agent.fastino.ai" target="_blank" rel="noreferrer" style="text-decoration:none;">
24
+ <img src="https://img.shields.io/badge/Finetune-GLiNER2.5-EA4335" alt="Fine-tune and Deploy GLiNER2.5 with Fastino Agent" style="vertical-align:middle;">
25
+ </a>
26
+ <a href="https://arxiv.org/abs/2507.18546" target="_blank" rel="noreferrer" style="text-decoration:none;">
27
+ <img src="https://img.shields.io/badge/arXiv-2507.18546-b31b1b.svg?logo=arxiv" alt="arXiv Paper" style="vertical-align:middle;">
28
+ </a>
29
+ <a href="https://github.com/fastino-ai/GLiNER2" target="_blank" rel="noreferrer" style="text-decoration:none;">
30
+ <img src="https://img.shields.io/badge/GitHub-GLiNER2-black?logo=github" alt="GitHub" style="vertical-align:middle;">
31
+ </a>
32
+ <a href="https://x.com/fastinoAI" target="_blank" rel="noreferrer" style="text-decoration:none;">
33
+ <img src="https://img.shields.io/twitter/follow/:fastinoAI" alt="Follow @fastinoAI" style="vertical-align:middle;">
34
+ </a>
35
+ </div>
36
+
37
+ # GLiNER2.5-Decide
38
+
39
+ **The classification model in the GLiNER2.5 family.** One 340M checkpoint, any label set you pass at call time: intent, routing, sentiment, priority, policy, and multi-label tags, in a single forward pass. No prompt template. No generated tokens. Load it with `AutoExtractor` and ship it locally.
40
+
41
+ On a 17-domain held-out suite it leads open typed-decision models, including a 1B GLiNER2 and a 4B generative baseline. A single call can score several heads at once. Single-label tasks return one string. Multi-label tasks return every label above the threshold.
42
+
43
+ This release is not a general-purpose model. It does not reason, explain, or answer open questions. It was not trained on public benchmarks. It is a specialist for operational decisions: customer and banking intent, travel and clinic requests, review sentiment, document type, email and ticket routing, human handoff, agent completion, moderation, severity, urgency, and spam. The same call also answers a question about a passage, classifies a book, uses labels that carry a description, and scores an ordinal scale.
44
+
45
+ Outputs below are potential results for these inputs. They show the shape `classify_text` returns.
46
+
47
+ ## Install
48
+
49
+ ```bash
50
+ pip install gliner2
51
+ ```
52
+
53
+ ```python
54
+ from gliner2 import AutoExtractor
55
+
56
+ model = AutoExtractor.from_pretrained("fastino/GLiNER2.5-Decide")
57
+ ```
58
+
59
+ ## Examples
60
+
61
+ ### Customer support intent
62
+
63
+ Route a live message before a human ever sees it. Refunds, cancellations, login failures, and shipping delays share one inbox and one label set. Decide picks the action the queue should take, so the right workflow starts on the first turn.
64
+
65
+ ```python
66
+ model.classify_text(
67
+ "My subscription renewed on April 15 for ¥5,400 after the service was already down. Can I get that charge refunded?",
68
+ {"intent": [
69
+ "order_status", "refund_request", "cancel_subscription", "update_payment",
70
+ "login_problem", "shipping_delay", "bug_report", "speak_to_human", "other",
71
+ ]},
72
+ )
73
+ ```
74
+
75
+ Potential output:
76
+
77
+ ```text
78
+ {"intent": "refund_request"}
79
+ ```
80
+
81
+ ### Banking request
82
+
83
+ A single customer message often mixes a failed payment, a beneficiary change, and a fee question. The label set is the product catalog: transfers, cards, fraud, mortgages. The model maps the utterance onto the operation the core system should open.
84
+
85
+ ```python
86
+ model.classify_text(
87
+ "The transfer I sent this morning is still pending, and I think I used the wrong sort code. Can you stop it and add Emily as the beneficiary instead?",
88
+ {"intent": [
89
+ "transfer_pending", "transfer_cancel", "beneficiary_add", "card_lost",
90
+ "balance_inquiry", "fraud_report", "mortgage_application", "fee_explanation",
91
+ ]},
92
+ )
93
+ ```
94
+
95
+ Potential output:
96
+
97
+ ```text
98
+ {"intent": "transfer_cancel"}
99
+ ```
100
+
101
+ ### Travel request
102
+
103
+ Booking, changing, cancelling, and seat requests look similar in free text and trigger different inventory calls. Use this when a chat or email has to become a structured booking action without a form.
104
+
105
+ ```python
106
+ model.classify_text(
107
+ "I need to move my Friday flight to Paris to Saturday morning, same cabin, and keep the aisle seat if you can.",
108
+ {"request": ["book", "change", "cancel", "status", "seat_change", "refund", "baggage"]},
109
+ )
110
+ ```
111
+
112
+ Potential output:
113
+
114
+ ```text
115
+ {"request": "change"}
116
+ ```
117
+
118
+ ### Clinic request
119
+
120
+ Patients describe symptoms and the thing they want in the same sentence: an appointment, a refill, a result, a referral. Front-desk routing needs that distinction before anyone is put on a schedule.
121
+
122
+ ```python
123
+ model.classify_text(
124
+ "The rash came back after the antibiotics finished. Can I get a same-week appointment with dermatology, or should I just refill the cream?",
125
+ {"request": [
126
+ "book_appointment", "refill_prescription", "test_results",
127
+ "referral", "billing_question", "cancel_appointment",
128
+ ]},
129
+ )
130
+ ```
131
+
132
+ Potential output:
133
+
134
+ ```text
135
+ {"request": "book_appointment"}
136
+ ```
137
+
138
+ ### Review sentiment
139
+
140
+ Star ratings hide mixed reviews. A product can be praised and rejected in one paragraph. A four-way sentiment label is what a dashboard, a reply policy, or a ranking feature actually needs.
141
+
142
+ ```python
143
+ model.classify_text(
144
+ "Battery dies before lunch, but the keyboard and the screen are the best I have used on a laptop.",
145
+ {"sentiment": ["positive", "negative", "mixed", "neutral"]},
146
+ )
147
+ ```
148
+
149
+ Potential output:
150
+
151
+ ```text
152
+ {"sentiment": "mixed"}
153
+ ```
154
+
155
+ ### Product aspects
156
+
157
+ Sentiment says the review is mixed. Aspects say why: battery, keyboard, screen. Several labels apply at once, so this head is multi-label. That is the input to aspect-level analytics and to a reply that mentions the right part of the product.
158
+
159
+ ```python
160
+ model.classify_text(
161
+ "Battery dies before lunch, but the keyboard and the screen are the best I have used on a laptop.",
162
+ {"aspects": {
163
+ "labels": ["battery", "keyboard", "screen", "camera", "price", "support"],
164
+ "multi_label": True,
165
+ "cls_threshold": 0.4,
166
+ }},
167
+ )
168
+ ```
169
+
170
+ Potential output:
171
+
172
+ ```text
173
+ {"aspects": ["battery", "keyboard", "screen"]}
174
+ ```
175
+
176
+ ### News topic
177
+
178
+ Wire copy, alerts, and scraped headlines have to land in a section before they are ranked or summarized. The label set is the section list of the product, not a fixed taxonomy baked into the model.
179
+
180
+ ```python
181
+ model.classify_text(
182
+ "The central bank held rates and said inflation is still above target, pushing bank stocks lower in afternoon trading.",
183
+ {"topic": ["politics", "business", "sports", "science", "entertainment", "world"]},
184
+ )
185
+ ```
186
+
187
+ Potential output:
188
+
189
+ ```text
190
+ {"topic": "business"}
191
+ ```
192
+
193
+ ### Document type
194
+
195
+ Inboxes and shared drives mix invoices, contracts, resumes, and notes. Classifying the document is the gate in front of extraction: an invoice goes to payables, a contract goes to review, a resume goes to screening.
196
+
197
+ ```python
198
+ model.classify_text(
199
+ "INVOICE 1842\nBill to: Northstar QA\nAmount due: 2,400 USD\nDue: 30 April 2026\nWire instructions are on page 2.",
200
+ {"document_type": ["invoice", "receipt", "contract", "resume", "support_email", "meeting_notes"]},
201
+ )
202
+ ```
203
+
204
+ Potential output:
205
+
206
+ ```text
207
+ {"document_type": "invoice"}
208
+ ```
209
+
210
+ ### Email triage
211
+
212
+ A shared mailbox needs three answers before a message is filed: what the sender wants, how soon it matters, and which team owns it. One call scores all three heads on the same text, so the router does not run the model three times.
213
+
214
+ ```python
215
+ model.classify_text(
216
+ "From: compliance@group.example\nSubject: Protocol update — action required today\n\nPlease confirm the new retention rule is applied before Friday's audit.",
217
+ {
218
+ "intent": ["fyi", "request", "approval", "complaint", "newsletter", "security_alert"],
219
+ "urgency": ["low", "normal", "high", "critical"],
220
+ "route": ["support", "billing", "legal", "security", "finance", "archive"],
221
+ },
222
+ )
223
+ ```
224
+
225
+ Potential output:
226
+
227
+ ```text
228
+ {"intent": "request", "urgency": "high", "route": "legal"}
229
+ ```
230
+
231
+ ### Ticket routing
232
+
233
+ Employees describe a problem, not a department. Payroll, benefits, IT access, and facilities share the same portal. The queue label is the assignment, so the ticket opens in the right team instead of bouncing through a dispatcher.
234
+
235
+ ```python
236
+ model.classify_text(
237
+ "[subject] 401k deduction missing from this paystub\n[body] Last month's contribution posted. This month the line is gone and HR told me to open a ticket.",
238
+ {"queue": [
239
+ "payroll", "benefits", "it_access", "facilities",
240
+ "expense_reimbursement", "manager_approval",
241
+ ]},
242
+ )
243
+ ```
244
+
245
+ Potential output:
246
+
247
+ ```text
248
+ {"queue": "benefits"}
249
+ ```
250
+
251
+ ### Handoff to a person
252
+
253
+ Most turns should stay automated. A repeated complaint, an explicit request for a human, or a case the bot cannot close should leave the flow. This is the yes/no gate in front of an agent queue.
254
+
255
+ ```python
256
+ model.classify_text(
257
+ "This is the third time I have explained the same missing refund. Stop the bot and get me a person.",
258
+ {"handoff": ["yes", "no"]},
259
+ )
260
+ ```
261
+
262
+ Potential output:
263
+
264
+ ```text
265
+ {"handoff": "yes"}
266
+ ```
267
+
268
+ ### Did the agent finish?
269
+
270
+ A trace can look busy and still be incomplete: a draft saved, a button disabled, a required field empty. Supervisors and eval harnesses need a finish decision from the goal plus the last state, not from whether the model stopped talking.
271
+
272
+ ```python
273
+ model.classify_text(
274
+ "Goal: email the Q4 summary to every partner.\nLast action: draft saved in the hub.\nSend button is still disabled because two partners have no address.",
275
+ {"finished": ["yes", "no"]},
276
+ )
277
+ ```
278
+
279
+ Potential output:
280
+
281
+ ```text
282
+ {"finished": "no"}
283
+ ```
284
+
285
+ ### Moderation
286
+
287
+ User content and model output both need a policy decision before they are shown or acted on. The labels are the policy, from allow through personal data, harassment, scam, and spam, so a filter can block, redact, or escalate.
288
+
289
+ ```python
290
+ model.classify_text(
291
+ "Post the customer's home address in the public thread so everyone can see where the package actually went.",
292
+ {"policy": ["allow", "personal_data", "harassment", "scam", "violence", "spam"]},
293
+ )
294
+ ```
295
+
296
+ Potential output:
297
+
298
+ ```text
299
+ {"policy": "personal_data"}
300
+ ```
301
+
302
+ ### Incident severity
303
+
304
+ Pages and deploys produce more notes than pages. Severity is what decides whether this wakes someone up. Staging-only tag drift is not a production checkout failure, and the label should say so.
305
+
306
+ ```python
307
+ model.classify_text(
308
+ "The deploy left resource tags inconsistent across staging. Production checkout is unaffected. No customer reports yet.",
309
+ {"severity": ["info", "low", "medium", "high", "critical"]},
310
+ )
311
+ ```
312
+
313
+ Potential output:
314
+
315
+ ```text
316
+ {"severity": "low"}
317
+ ```
318
+
319
+ ### Urgency score
320
+
321
+ Some queues want a rank, not a bucket. Pass `"0"` through `"5"` as ordinary strings. A payroll cutoff before 5pm and a typo in a wiki page should not receive the same score, and the label is what the SLA system reads.
322
+
323
+ ```python
324
+ model.classify_text(
325
+ "Payroll file has to be corrected before the 5pm cutoff or the whole company is paid late.",
326
+ {"urgency": ["0", "1", "2", "3", "4", "5"]},
327
+ )
328
+ ```
329
+
330
+ Potential output:
331
+
332
+ ```text
333
+ {"urgency": "5"}
334
+ ```
335
+
336
+ ### Spam or not
337
+
338
+ The first filter on an inbox or a comment stream. Phishing and mailbox-full lures should never reach the intent router. A two-label decision keeps that check cheap enough to run on every message.
339
+
340
+ ```python
341
+ model.classify_text(
342
+ "Your mailbox is almost full. Click here in the next hour or we will delete every message.",
343
+ {"label": ["spam", "ham"]},
344
+ )
345
+ ```
346
+
347
+ Potential output:
348
+
349
+ ```text
350
+ {"label": "spam"}
351
+ ```
352
+
353
+ ### Several decisions at once
354
+
355
+ Real requests carry more than one fact. A guest can need a room move, a billing release, and a maintenance ticket in the same call. Intent, priority, a human gate, and multi-label topics are scored together, which is how a property system opens the right work orders without a chain of prompts.
356
+
357
+ ```python
358
+ model.classify_text(
359
+ "Guest in room 1408 says the AC has been out since yesterday and they want to move tonight or leave. They also asked for the incidentals hold to be released.",
360
+ {
361
+ "intent": ["maintenance", "room_change", "checkout", "billing", "complaint", "amenity_request"],
362
+ "priority": ["low", "normal", "high", "urgent"],
363
+ "needs_human": ["yes", "no"],
364
+ "topics": {
365
+ "labels": ["hvac", "billing", "housekeeping", "noise", "safety"],
366
+ "multi_label": True,
367
+ "cls_threshold": 0.4,
368
+ },
369
+ },
370
+ )
371
+ ```
372
+
373
+ Potential output:
374
+
375
+ ```text
376
+ {
377
+ "intent": "room_change",
378
+ "priority": "high",
379
+ "needs_human": "yes",
380
+ "topics": ["hvac", "billing"]
381
+ }
382
+ ```
383
+
384
+ ### Question over a passage
385
+
386
+ The text is the source. The question is the task. Yes or no is the whole answer: no chain of thought, no extracted sentence, just the decision a checker or a form needs.
387
+
388
+ ```python
389
+ model.classify_text(
390
+ "The treaty was signed in Paris in 1992. It entered into force the following year, after the last signatory ratified it.",
391
+ {"answer": {
392
+ "labels": ["yes", "no"],
393
+ "prompt": "Did the treaty enter into force in 1992?",
394
+ }},
395
+ )
396
+ ```
397
+
398
+ Potential output:
399
+
400
+ ```text
401
+ {"answer": "no"}
402
+ ```
403
+
404
+ ### Book
405
+
406
+ A catalog, a slush pile, or a library inbox needs a genre before anyone writes a blurb. The passage is enough. The label set is the shelf list.
407
+
408
+ ```python
409
+ model.classify_text(
410
+ "She closed the ledger, blew out the lamp, and listened for the stair. The house had been empty since the winter the river took the bridge.",
411
+ {"genre": ["mystery", "romance", "history", "science_fiction", "literary_fiction", "cookbook"]},
412
+ )
413
+ ```
414
+
415
+ Potential output:
416
+
417
+ ```text
418
+ {"genre": "literary_fiction"}
419
+ ```
420
+
421
+ ### Labels with a description
422
+
423
+ When the name of a label is not enough, pass a short description with it. The description is part of the decision, which is how a private taxonomy stays precise without a bigger model.
424
+
425
+ ```python
426
+ model.classify_text(
427
+ "Please reset the card PIN. The new one never arrived and the old one is locked after three tries.",
428
+ {"intent": {
429
+ "labels": {
430
+ "card_pin_change": "The customer wants a new PIN or the current PIN replaced",
431
+ "card_lost": "The physical card is missing",
432
+ "balance_inquiry": "The customer wants the current balance",
433
+ },
434
+ }},
435
+ )
436
+ ```
437
+
438
+ Potential output:
439
+
440
+ ```text
441
+ {"intent": "card_pin_change"}
442
+ ```
443
+
444
+ ### Ordinal score
445
+
446
+ Some products want a rank, not a class. Pass the scale as ordinary strings, from `"0"` to `"10"`. A review, a rubric, or a satisfaction form can read the label directly.
447
+
448
+ ```python
449
+ model.classify_text(
450
+ "I finished it in two nights. The ending is earned, the middle drags, and I would still hand it to a friend.",
451
+ {"rating": ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]},
452
+ )
453
+ ```
454
+
455
+ Potential output:
456
+
457
+ ```text
458
+ {"rating": "7"}
459
+ ```
460
+
461
+ ## Benchmark
462
+
463
+ Exact-match accuracy on [`fastino/fast-decisions`](https://huggingface.co/datasets/fastino/fast-decisions): 17 domains, 300 held-out examples each, the same text and the same candidate labels for every model.
464
+
465
+ | Model | Avg |
466
+ |---|---:|
467
+ | **GLiNER2.5-Decide** | **60.2%** |
468
+ | GLiNER2 XL (1B) | 59.6% |
469
+ | JevK5 | 57.6% |
470
+ | SemIf (Qwen3.5-4B) | 56.4% |
471
+ | GLiFormer large-v1 | 49.0% |
472
+ | Laya Router | 46.6% |
473
+
474
+ A 340M encoder, ahead of models up to 4B. Domain list and label sets are on the [dataset card](https://huggingface.co/datasets/fastino/fast-decisions).
475
+
476
+ ## Details
477
+
478
+ - **What it is:** a specialist classifier for operational decisions, including questions over a passage, books, described labels, and ordinal scores
479
+ - **What it is not:** a general-purpose model. No reasoning, no explanations, no open-ended answers. Not trained on public benchmarks.
480
+ - **Encoder:** DeBERTa-v3-large
481
+ - **Parameters:** 340M
482
+ - **Runs on:** CPU or GPU, through `gliner2`
483
+ - **License:** Apache 2.0
484
+
485
+ ## Fine-tuning
486
+
487
+ Decide can be fine-tuned locally with the `gliner2` trainer (see the [training guide](https://github.com/fastino-ai/GLiNER2#-training-custom-models)). The [Fastino API](https://agent.fastino.ai) also offers hosted fine-tuning and serving for GLiNER models, usually faster than training locally. Agents can find the hosted workflow in [`SKILL.md`](SKILL.md).
488
+
489
+ ## Citation
490
+
491
+ ```bibtex
492
+ @misc{zaratiana2025gliner2efficientmultitaskinformation,
493
+ title={GLiNER2: An Efficient Multi-Task Information Extraction System with Schema-Driven Interface},
494
+ author={Urchade Zaratiana and Gil Pasternak and Oliver Boyd and George Hurn-Maloney and Ash Lewis},
495
+ year={2025},
496
+ eprint={2507.18546},
497
+ archivePrefix={arXiv},
498
+ primaryClass={cs.CL},
499
+ url={https://arxiv.org/abs/2507.18546},
500
+ }
501
+ ```
npu/gliner25_decide_fp16hw_s128.tflite ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:323e3f48ad74ba4110f69c58d40d8e2f55e5f1b9723cfb82c30c2a622be86f7a
3
+ size 660145456
npu/gliner25_decide_fp16hw_s160.tflite ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:1783d73131c2395c3e39e6364536e2f9643b4c1eba3051db21b4cd91a868e0ed
3
+ size 672733200
npu/gliner25_decide_fp16hw_s256.tflite ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:08fbd3820bace55861948c392a130ab934895d2d75a54e7e1666aabdf0ba16e1
3
+ size 710482320
npu/manifest.json ADDED
@@ -0,0 +1,123 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "about": "Qualcomm Hexagon NPU files for GLiNER2.5-Decide (README.md, 'Qualcomm NPU'). Every file comes from gliner25_decide_fp16hw.tflite. The cuts compile on the phone; a precompiled file runs only on its chip (Build.SOC_MODEL) and with the runtime versions below. checkedOn is null for files not yet run on a phone.",
3
+ "source": {
4
+ "path": "gliner25_decide_fp16hw.tflite",
5
+ "sha256": "b5567c71caddf9ce476e242c8778622375a8b2c415cf078248f75b092452b605"
6
+ },
7
+ "runtime": {
8
+ "litert": "2.3.2",
9
+ "litertNpuRuntimeQualcomm": "2.3.2",
10
+ "qnnRuntime": "2.50.0"
11
+ },
12
+ "compiler": {
13
+ "aiEdgeLitert": "2.3.0",
14
+ "qairt": "2.50.0.260828",
15
+ "host": "x86-64 Ubuntu 24.04",
16
+ "options": {
17
+ "qualcomm_enable_weight_sharing": true,
18
+ "qualcomm_optimization_level": "O3 (the default)"
19
+ }
20
+ },
21
+ "cuts": [
22
+ {
23
+ "path": "npu/gliner25_decide_fp16hw_s128.tflite",
24
+ "signature": "s128",
25
+ "bytes": 660145456,
26
+ "sha256": "323e3f48ad74ba4110f69c58d40d8e2f55e5f1b9723cfb82c30c2a622be86f7a"
27
+ },
28
+ {
29
+ "path": "npu/gliner25_decide_fp16hw_s160.tflite",
30
+ "signature": "s160",
31
+ "bytes": 672733200,
32
+ "sha256": "1783d73131c2395c3e39e6364536e2f9643b4c1eba3051db21b4cd91a868e0ed"
33
+ },
34
+ {
35
+ "path": "npu/gliner25_decide_fp16hw_s256.tflite",
36
+ "signature": "s256",
37
+ "bytes": 710482320,
38
+ "sha256": "08fbd3820bace55861948c392a130ab934895d2d75a54e7e1666aabdf0ba16e1"
39
+ }
40
+ ],
41
+ "precompiled": [
42
+ {
43
+ "path": "npu/qualcomm/gliner25_decide_fp16hw_SM8850.tflite",
44
+ "soc": "SM8850",
45
+ "snapdragon": "8 Elite Gen 5",
46
+ "hexagon": "V81",
47
+ "signatures": [
48
+ "s128",
49
+ "s160",
50
+ "s256",
51
+ "s512"
52
+ ],
53
+ "bytes": 876858672,
54
+ "sha256": "84e72594a330efdb86e09e4319e30f02ed75f63917fc55346ed47351ca1b30c6",
55
+ "compileSeconds": 1065.2,
56
+ "checkedOn": "Galaxy Z Fold 8, 2026-11-01"
57
+ },
58
+ {
59
+ "path": "npu/qualcomm/gliner25_decide_fp16hw_SM8750.tflite",
60
+ "soc": "SM8750",
61
+ "snapdragon": "8 Elite",
62
+ "hexagon": "V79",
63
+ "signatures": [
64
+ "s128",
65
+ "s160",
66
+ "s256",
67
+ "s512"
68
+ ],
69
+ "bytes": 874827056,
70
+ "sha256": "5357988607b7287eedcbd7328f1db3ed91ed34afc4bce3f8042ae47c5a5b32df",
71
+ "compileSeconds": 788.9,
72
+ "checkedOn": null
73
+ },
74
+ {
75
+ "path": "npu/qualcomm/gliner25_decide_fp16hw_SM8650.tflite",
76
+ "soc": "SM8650",
77
+ "snapdragon": "8 Gen 3",
78
+ "hexagon": "V75",
79
+ "signatures": [
80
+ "s128",
81
+ "s160",
82
+ "s256",
83
+ "s512"
84
+ ],
85
+ "bytes": 860486960,
86
+ "sha256": "48a382ae593afe724eb40b833991b5c8fb8dbb2bb6b14c74ebf9abb862177e02",
87
+ "compileSeconds": 787.0,
88
+ "checkedOn": null
89
+ },
90
+ {
91
+ "path": "npu/qualcomm/gliner25_decide_fp16hw_SM8550.tflite",
92
+ "soc": "SM8550",
93
+ "snapdragon": "8 Gen 2",
94
+ "hexagon": "V73",
95
+ "signatures": [
96
+ "s128",
97
+ "s160",
98
+ "s256",
99
+ "s512"
100
+ ],
101
+ "bytes": 862100784,
102
+ "sha256": "86bfd5ca3aea9075dcb0482c04572dcfd247f2f6f3bb040ac0d989d8e60ed6bd",
103
+ "compileSeconds": 951.1,
104
+ "checkedOn": "Galaxy S23 Ultra, 2026-11-02"
105
+ },
106
+ {
107
+ "path": "npu/qualcomm/gliner25_decide_fp16hw_SM8450.tflite",
108
+ "soc": "SM8450",
109
+ "snapdragon": "8 Gen 1",
110
+ "hexagon": "V69",
111
+ "signatures": [
112
+ "s128",
113
+ "s160",
114
+ "s256",
115
+ "s512"
116
+ ],
117
+ "bytes": 855567664,
118
+ "sha256": "b82f3b26b9cd9ce59ea1340486e81bec51a4aae6fcb7b5ff7769b717326dc32a",
119
+ "compileSeconds": 342.1,
120
+ "checkedOn": null
121
+ }
122
+ ]
123
+ }
npu/qualcomm/gliner25_decide_fp16hw_SM8450.tflite ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:b82f3b26b9cd9ce59ea1340486e81bec51a4aae6fcb7b5ff7769b717326dc32a
3
+ size 855567664
npu/qualcomm/gliner25_decide_fp16hw_SM8550.tflite ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:86bfd5ca3aea9075dcb0482c04572dcfd247f2f6f3bb040ac0d989d8e60ed6bd
3
+ size 862100784
npu/qualcomm/gliner25_decide_fp16hw_SM8650.tflite ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:48a382ae593afe724eb40b833991b5c8fb8dbb2bb6b14c74ebf9abb862177e02
3
+ size 860486960
npu/qualcomm/gliner25_decide_fp16hw_SM8750.tflite ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:5357988607b7287eedcbd7328f1db3ed91ed34afc4bce3f8042ae47c5a5b32df
3
+ size 874827056
npu/qualcomm/gliner25_decide_fp16hw_SM8850.tflite ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:84e72594a330efdb86e09e4319e30f02ed75f63917fc55346ed47351ca1b30c6
3
+ size 876858672
source/config.json ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "_attn_implementation_autoset": true,
3
+ "_name_or_path": "/home/urchadezaratiana/checkpoints/checkpoint-45500",
4
+ "architecture": "span",
5
+ "architecture_version": 1,
6
+ "architectures": [
7
+ "SpanExtractor"
8
+ ],
9
+ "attn_implementation": "sdpa",
10
+ "config_version": 3,
11
+ "counting_layer": "count_lstm",
12
+ "max_len": null,
13
+ "max_width": 8,
14
+ "model_name": "microsoft/deberta-v3-large",
15
+ "model_type": "extractor",
16
+ "span_head": {
17
+ "dropout": 0.1,
18
+ "max_width": 8,
19
+ "span_mode": "markerV0"
20
+ },
21
+ "token_pooling": "first",
22
+ "transformers_version": "4.48.1",
23
+ "use_moe": false
24
+ }
source/encoder_config/config.json ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "_attn_implementation_autoset": true,
3
+ "_name_or_path": "/home/urchadezaratiana/checkpoints/checkpoint-45500/encoder_config/config.json",
4
+ "attention_probs_dropout_prob": 0.1,
5
+ "dtype": "float32",
6
+ "hidden_act": "gelu",
7
+ "hidden_dropout_prob": 0.1,
8
+ "hidden_size": 1024,
9
+ "initializer_range": 0.02,
10
+ "intermediate_size": 4096,
11
+ "layer_norm_eps": 1e-07,
12
+ "legacy": true,
13
+ "max_position_embeddings": 512,
14
+ "max_relative_positions": -1,
15
+ "model_type": "deberta-v2",
16
+ "norm_rel_ebd": "layer_norm",
17
+ "num_attention_heads": 16,
18
+ "num_hidden_layers": 24,
19
+ "pad_token_id": 0,
20
+ "pooler_dropout": 0,
21
+ "pooler_hidden_act": "gelu",
22
+ "pooler_hidden_size": 1024,
23
+ "pos_att_type": [
24
+ "p2c",
25
+ "c2p"
26
+ ],
27
+ "position_biased_input": false,
28
+ "position_buckets": 256,
29
+ "relative_attention": true,
30
+ "share_att_key": true,
31
+ "transformers_version": "4.48.1",
32
+ "type_vocab_size": 0,
33
+ "vocab_size": 128011
34
+ }
special_tokens_map.json ADDED
@@ -0,0 +1,123 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "additional_special_tokens": [
3
+ {
4
+ "content": "[SEP_STRUCT]",
5
+ "lstrip": false,
6
+ "normalized": false,
7
+ "rstrip": false,
8
+ "single_word": false
9
+ },
10
+ {
11
+ "content": "[SEP_TEXT]",
12
+ "lstrip": false,
13
+ "normalized": false,
14
+ "rstrip": false,
15
+ "single_word": false
16
+ },
17
+ {
18
+ "content": "[P]",
19
+ "lstrip": false,
20
+ "normalized": false,
21
+ "rstrip": false,
22
+ "single_word": false
23
+ },
24
+ {
25
+ "content": "[C]",
26
+ "lstrip": false,
27
+ "normalized": false,
28
+ "rstrip": false,
29
+ "single_word": false
30
+ },
31
+ {
32
+ "content": "[E]",
33
+ "lstrip": false,
34
+ "normalized": false,
35
+ "rstrip": false,
36
+ "single_word": false
37
+ },
38
+ {
39
+ "content": "[R]",
40
+ "lstrip": false,
41
+ "normalized": false,
42
+ "rstrip": false,
43
+ "single_word": false
44
+ },
45
+ {
46
+ "content": "[L]",
47
+ "lstrip": false,
48
+ "normalized": false,
49
+ "rstrip": false,
50
+ "single_word": false
51
+ },
52
+ {
53
+ "content": "[EXAMPLE]",
54
+ "lstrip": false,
55
+ "normalized": false,
56
+ "rstrip": false,
57
+ "single_word": false
58
+ },
59
+ {
60
+ "content": "[OUTPUT]",
61
+ "lstrip": false,
62
+ "normalized": false,
63
+ "rstrip": false,
64
+ "single_word": false
65
+ },
66
+ {
67
+ "content": "[DESCRIPTION]",
68
+ "lstrip": false,
69
+ "normalized": false,
70
+ "rstrip": false,
71
+ "single_word": false
72
+ }
73
+ ],
74
+ "bos_token": {
75
+ "content": "[CLS]",
76
+ "lstrip": false,
77
+ "normalized": false,
78
+ "rstrip": false,
79
+ "single_word": false
80
+ },
81
+ "cls_token": {
82
+ "content": "[CLS]",
83
+ "lstrip": false,
84
+ "normalized": false,
85
+ "rstrip": false,
86
+ "single_word": false
87
+ },
88
+ "eos_token": {
89
+ "content": "[SEP]",
90
+ "lstrip": false,
91
+ "normalized": false,
92
+ "rstrip": false,
93
+ "single_word": false
94
+ },
95
+ "mask_token": {
96
+ "content": "[MASK]",
97
+ "lstrip": false,
98
+ "normalized": false,
99
+ "rstrip": false,
100
+ "single_word": false
101
+ },
102
+ "pad_token": {
103
+ "content": "[PAD]",
104
+ "lstrip": false,
105
+ "normalized": false,
106
+ "rstrip": false,
107
+ "single_word": false
108
+ },
109
+ "sep_token": {
110
+ "content": "[SEP]",
111
+ "lstrip": false,
112
+ "normalized": false,
113
+ "rstrip": false,
114
+ "single_word": false
115
+ },
116
+ "unk_token": {
117
+ "content": "[UNK]",
118
+ "lstrip": false,
119
+ "normalized": true,
120
+ "rstrip": false,
121
+ "single_word": false
122
+ }
123
+ }
tokenizer.json ADDED
The diff for this file is too large to render. See raw diff
 
tokenizer_config.json ADDED
@@ -0,0 +1,156 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "add_prefix_space": true,
3
+ "added_tokens_decoder": {
4
+ "0": {
5
+ "content": "[PAD]",
6
+ "lstrip": false,
7
+ "normalized": false,
8
+ "rstrip": false,
9
+ "single_word": false,
10
+ "special": true
11
+ },
12
+ "1": {
13
+ "content": "[CLS]",
14
+ "lstrip": false,
15
+ "normalized": false,
16
+ "rstrip": false,
17
+ "single_word": false,
18
+ "special": true
19
+ },
20
+ "2": {
21
+ "content": "[SEP]",
22
+ "lstrip": false,
23
+ "normalized": false,
24
+ "rstrip": false,
25
+ "single_word": false,
26
+ "special": true
27
+ },
28
+ "3": {
29
+ "content": "[UNK]",
30
+ "lstrip": false,
31
+ "normalized": true,
32
+ "rstrip": false,
33
+ "single_word": false,
34
+ "special": true
35
+ },
36
+ "128000": {
37
+ "content": "[MASK]",
38
+ "lstrip": false,
39
+ "normalized": false,
40
+ "rstrip": false,
41
+ "single_word": false,
42
+ "special": true
43
+ },
44
+ "128001": {
45
+ "content": "[SEP_STRUCT]",
46
+ "lstrip": false,
47
+ "normalized": false,
48
+ "rstrip": false,
49
+ "single_word": false,
50
+ "special": true
51
+ },
52
+ "128002": {
53
+ "content": "[SEP_TEXT]",
54
+ "lstrip": false,
55
+ "normalized": false,
56
+ "rstrip": false,
57
+ "single_word": false,
58
+ "special": true
59
+ },
60
+ "128003": {
61
+ "content": "[P]",
62
+ "lstrip": false,
63
+ "normalized": false,
64
+ "rstrip": false,
65
+ "single_word": false,
66
+ "special": true
67
+ },
68
+ "128004": {
69
+ "content": "[C]",
70
+ "lstrip": false,
71
+ "normalized": false,
72
+ "rstrip": false,
73
+ "single_word": false,
74
+ "special": true
75
+ },
76
+ "128005": {
77
+ "content": "[E]",
78
+ "lstrip": false,
79
+ "normalized": false,
80
+ "rstrip": false,
81
+ "single_word": false,
82
+ "special": true
83
+ },
84
+ "128006": {
85
+ "content": "[R]",
86
+ "lstrip": false,
87
+ "normalized": false,
88
+ "rstrip": false,
89
+ "single_word": false,
90
+ "special": true
91
+ },
92
+ "128007": {
93
+ "content": "[L]",
94
+ "lstrip": false,
95
+ "normalized": false,
96
+ "rstrip": false,
97
+ "single_word": false,
98
+ "special": true
99
+ },
100
+ "128008": {
101
+ "content": "[EXAMPLE]",
102
+ "lstrip": false,
103
+ "normalized": false,
104
+ "rstrip": false,
105
+ "single_word": false,
106
+ "special": true
107
+ },
108
+ "128009": {
109
+ "content": "[OUTPUT]",
110
+ "lstrip": false,
111
+ "normalized": false,
112
+ "rstrip": false,
113
+ "single_word": false,
114
+ "special": true
115
+ },
116
+ "128010": {
117
+ "content": "[DESCRIPTION]",
118
+ "lstrip": false,
119
+ "normalized": false,
120
+ "rstrip": false,
121
+ "single_word": false,
122
+ "special": true
123
+ }
124
+ },
125
+ "additional_special_tokens": [
126
+ "[SEP_STRUCT]",
127
+ "[SEP_TEXT]",
128
+ "[P]",
129
+ "[C]",
130
+ "[E]",
131
+ "[R]",
132
+ "[L]",
133
+ "[EXAMPLE]",
134
+ "[OUTPUT]",
135
+ "[DESCRIPTION]"
136
+ ],
137
+ "backend": "tokenizers",
138
+ "bos_token": "[CLS]",
139
+ "clean_up_tokenization_spaces": false,
140
+ "cls_token": "[CLS]",
141
+ "do_lower_case": false,
142
+ "eos_token": "[SEP]",
143
+ "extra_special_tokens": {},
144
+ "is_local": false,
145
+ "local_files_only": false,
146
+ "mask_token": "[MASK]",
147
+ "model_max_length": 1000000000000000019884624838656,
148
+ "pad_token": "[PAD]",
149
+ "sep_token": "[SEP]",
150
+ "sp_model_kwargs": {},
151
+ "split_by_punct": false,
152
+ "tokenizer_class": "DebertaV2Tokenizer",
153
+ "unk_id": 3,
154
+ "unk_token": "[UNK]",
155
+ "vocab_type": "spm"
156
+ }
validation.json ADDED
@@ -0,0 +1,1527 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "model": "gliner25-decide-litert",
3
+ "source": "fastino/GLiNER2.5-Decide@bbe10ff77ebb238777c17d3a8ac9260e30929057",
4
+ "date": "2026-10-28",
5
+ "versions": {
6
+ "litert-torch": "0.9.4",
7
+ "ai-edge-litert": "2.2.0",
8
+ "ai-edge-quantizer": "0.9.0",
9
+ "litert-converter": "0.4.0",
10
+ "torch": "2.13.0",
11
+ "transformers": "4.57.6",
12
+ "gliner2": "2.0.0"
13
+ },
14
+ "machine": "arm64 Mac (Apple M5 Max, macOS 27.0.1)",
15
+ "buckets": [
16
+ 128,
17
+ 160,
18
+ 256,
19
+ 512
20
+ ],
21
+ "threads": 4,
22
+ "corpus": {
23
+ "calls": 616,
24
+ "quick": false,
25
+ "source": "gliner2 2.0.0 library calls recorded on a synthetic English corpus of short conversational statements",
26
+ "byBucket": {
27
+ "128": 8,
28
+ "160": 321,
29
+ "512": 287
30
+ }
31
+ },
32
+ "gate": {
33
+ "agreement": 0.95,
34
+ "drift": 0.05
35
+ },
36
+ "variants": {
37
+ "wfp16": {
38
+ "about": "FULLY_CONNECTED weights stored float16 behind DEQUANTIZE (ai-edge-quantizer FLOAT_CASTING); FP32 activations, relative-position tables, norms and biases; finite -1e4 mask",
39
+ "file": "gliner25_decide_wfp16.tflite",
40
+ "bytes": 1026117712,
41
+ "buildSeconds": 5.6,
42
+ "tableSharing": null,
43
+ "tablesFp16": null,
44
+ "audit": {
45
+ "bytes": 1026117712,
46
+ "signatures": [
47
+ {
48
+ "key": "s128",
49
+ "inputs": [
50
+ {
51
+ "name": "attention_mask",
52
+ "dtype": "float32",
53
+ "shape": [
54
+ 1,
55
+ 128
56
+ ]
57
+ },
58
+ {
59
+ "name": "inputs_embeds",
60
+ "dtype": "float32",
61
+ "shape": [
62
+ 1,
63
+ 128,
64
+ 1024
65
+ ]
66
+ }
67
+ ],
68
+ "outputs": [
69
+ {
70
+ "name": "logits",
71
+ "dtype": "float32",
72
+ "shape": [
73
+ 1,
74
+ 128
75
+ ]
76
+ }
77
+ ]
78
+ },
79
+ {
80
+ "key": "s160",
81
+ "inputs": [
82
+ {
83
+ "name": "attention_mask",
84
+ "dtype": "float32",
85
+ "shape": [
86
+ 1,
87
+ 160
88
+ ]
89
+ },
90
+ {
91
+ "name": "inputs_embeds",
92
+ "dtype": "float32",
93
+ "shape": [
94
+ 1,
95
+ 160,
96
+ 1024
97
+ ]
98
+ }
99
+ ],
100
+ "outputs": [
101
+ {
102
+ "name": "logits",
103
+ "dtype": "float32",
104
+ "shape": [
105
+ 1,
106
+ 160
107
+ ]
108
+ }
109
+ ]
110
+ },
111
+ {
112
+ "key": "s256",
113
+ "inputs": [
114
+ {
115
+ "name": "attention_mask",
116
+ "dtype": "float32",
117
+ "shape": [
118
+ 1,
119
+ 256
120
+ ]
121
+ },
122
+ {
123
+ "name": "inputs_embeds",
124
+ "dtype": "float32",
125
+ "shape": [
126
+ 1,
127
+ 256,
128
+ 1024
129
+ ]
130
+ }
131
+ ],
132
+ "outputs": [
133
+ {
134
+ "name": "logits",
135
+ "dtype": "float32",
136
+ "shape": [
137
+ 1,
138
+ 256
139
+ ]
140
+ }
141
+ ]
142
+ },
143
+ {
144
+ "key": "s512",
145
+ "inputs": [
146
+ {
147
+ "name": "attention_mask",
148
+ "dtype": "float32",
149
+ "shape": [
150
+ 1,
151
+ 512
152
+ ]
153
+ },
154
+ {
155
+ "name": "inputs_embeds",
156
+ "dtype": "float32",
157
+ "shape": [
158
+ 1,
159
+ 512,
160
+ 1024
161
+ ]
162
+ }
163
+ ],
164
+ "outputs": [
165
+ {
166
+ "name": "logits",
167
+ "dtype": "float32",
168
+ "shape": [
169
+ 1,
170
+ 512
171
+ ]
172
+ }
173
+ ]
174
+ }
175
+ ],
176
+ "operators": {
177
+ "s128": 1749,
178
+ "s160": 1749,
179
+ "s256": 1749,
180
+ "s512": 1749
181
+ },
182
+ "opHistogram": {
183
+ "s128": {
184
+ "ADD": 266,
185
+ "BATCH_MATMUL": 96,
186
+ "DEQUANTIZE": 146,
187
+ "FULLY_CONNECTED": 146,
188
+ "GELU": 24,
189
+ "MEAN": 98,
190
+ "MUL": 220,
191
+ "RESHAPE": 341,
192
+ "RSQRT": 49,
193
+ "SLICE": 96,
194
+ "SOFTMAX": 24,
195
+ "SQUARED_DIFFERENCE": 49,
196
+ "SUB": 50,
197
+ "TRANSPOSE": 144
198
+ },
199
+ "s160": {
200
+ "ADD": 266,
201
+ "BATCH_MATMUL": 96,
202
+ "DEQUANTIZE": 146,
203
+ "FULLY_CONNECTED": 146,
204
+ "GELU": 24,
205
+ "MEAN": 98,
206
+ "MUL": 220,
207
+ "RESHAPE": 341,
208
+ "RSQRT": 49,
209
+ "SLICE": 96,
210
+ "SOFTMAX": 24,
211
+ "SQUARED_DIFFERENCE": 49,
212
+ "SUB": 50,
213
+ "TRANSPOSE": 144
214
+ },
215
+ "s256": {
216
+ "ADD": 266,
217
+ "BATCH_MATMUL": 96,
218
+ "DEQUANTIZE": 146,
219
+ "FULLY_CONNECTED": 146,
220
+ "GELU": 24,
221
+ "MEAN": 98,
222
+ "MUL": 220,
223
+ "RESHAPE": 341,
224
+ "RSQRT": 49,
225
+ "SLICE": 96,
226
+ "SOFTMAX": 24,
227
+ "SQUARED_DIFFERENCE": 49,
228
+ "SUB": 50,
229
+ "TRANSPOSE": 144
230
+ },
231
+ "s512": {
232
+ "ADD": 266,
233
+ "BATCH_MATMUL": 96,
234
+ "DEQUANTIZE": 146,
235
+ "FULLY_CONNECTED": 146,
236
+ "GELU": 24,
237
+ "MEAN": 98,
238
+ "MUL": 220,
239
+ "RESHAPE": 341,
240
+ "RSQRT": 49,
241
+ "SLICE": 96,
242
+ "SOFTMAX": 24,
243
+ "SQUARED_DIFFERENCE": 49,
244
+ "SUB": 50,
245
+ "TRANSPOSE": 144
246
+ }
247
+ },
248
+ "tensorDtypes": {
249
+ "FLOAT32": 8184,
250
+ "FLOAT16": 584,
251
+ "INT32": 60
252
+ },
253
+ "int64Tensors": 0,
254
+ "constantBytesBySignatures": {
255
+ "s128+s160+s256+s512": 609464416,
256
+ "s512": 201326716,
257
+ "s256": 100663420,
258
+ "s160": 62914684,
259
+ "s128": 50331772
260
+ },
261
+ "activationsWithLeadingDimNot1": [
262
+ {
263
+ "signature": "s128",
264
+ "shape": [
265
+ 128,
266
+ 1024
267
+ ]
268
+ },
269
+ {
270
+ "signature": "s128",
271
+ "shape": [
272
+ 128,
273
+ 1024
274
+ ]
275
+ },
276
+ {
277
+ "signature": "s128",
278
+ "shape": [
279
+ 128,
280
+ 1024
281
+ ]
282
+ },
283
+ {
284
+ "signature": "s128",
285
+ "shape": [
286
+ 128,
287
+ 1024
288
+ ]
289
+ },
290
+ {
291
+ "signature": "s128",
292
+ "shape": [
293
+ 128,
294
+ 1024
295
+ ]
296
+ },
297
+ {
298
+ "signature": "s128",
299
+ "shape": [
300
+ 128,
301
+ 1024
302
+ ]
303
+ },
304
+ {
305
+ "signature": "s128",
306
+ "shape": [
307
+ 128,
308
+ 1024
309
+ ]
310
+ },
311
+ {
312
+ "signature": "s128",
313
+ "shape": [
314
+ 128,
315
+ 1024
316
+ ]
317
+ }
318
+ ]
319
+ },
320
+ "parity": {
321
+ "cpu": {
322
+ "calls": 616,
323
+ "decisions": 2338,
324
+ "agree": 2338,
325
+ "agreement": 1.0,
326
+ "driftMax": 0.00032,
327
+ "driftP99": 0.00017,
328
+ "driftP50": 1.7e-05,
329
+ "over005": 0,
330
+ "msByBucket": {
331
+ "128": {
332
+ "calls": 8,
333
+ "p50": 58.3,
334
+ "p95": 64.8
335
+ },
336
+ "160": {
337
+ "calls": 321,
338
+ "p50": 68.1,
339
+ "p95": 70.5
340
+ },
341
+ "512": {
342
+ "calls": 287,
343
+ "p50": 248.6,
344
+ "p95": 255.8
345
+ }
346
+ },
347
+ "loadSeconds": 0.53,
348
+ "fullyAccelerated": true,
349
+ "gate": "pass"
350
+ },
351
+ "gpu_fp32": {
352
+ "calls": 616,
353
+ "decisions": 2338,
354
+ "agree": 2338,
355
+ "agreement": 1.0,
356
+ "driftMax": 0.00032,
357
+ "driftP99": 0.00017,
358
+ "driftP50": 1.7e-05,
359
+ "over005": 0,
360
+ "msByBucket": {
361
+ "128": {
362
+ "calls": 8,
363
+ "p50": 21.0,
364
+ "p95": 21.9
365
+ },
366
+ "160": {
367
+ "calls": 321,
368
+ "p50": 23.8,
369
+ "p95": 25.4
370
+ },
371
+ "512": {
372
+ "calls": 287,
373
+ "p50": 76.1,
374
+ "p95": 79.5
375
+ }
376
+ },
377
+ "loadSeconds": 1.8,
378
+ "fullyAccelerated": true,
379
+ "gate": "pass"
380
+ },
381
+ "gpu_fp16": {
382
+ "calls": 616,
383
+ "decisions": 2338,
384
+ "agree": 2226,
385
+ "agreement": 0.9521,
386
+ "driftMax": 0.30555,
387
+ "driftP99": 0.12811,
388
+ "driftP50": 0.012985,
389
+ "over005": 241,
390
+ "msByBucket": {
391
+ "128": {
392
+ "calls": 8,
393
+ "p50": 16.3,
394
+ "p95": 16.3
395
+ },
396
+ "160": {
397
+ "calls": 321,
398
+ "p50": 20.5,
399
+ "p95": 20.8
400
+ },
401
+ "512": {
402
+ "calls": 287,
403
+ "p50": 49.6,
404
+ "p95": 49.8
405
+ }
406
+ },
407
+ "loadSeconds": 1.73,
408
+ "fullyAccelerated": true,
409
+ "gate": [
410
+ "probability drift 0.30555"
411
+ ]
412
+ }
413
+ },
414
+ "logitDifferenceFromTorch": {
415
+ "cpu": {
416
+ "160": 0.000954,
417
+ "512": 0.0015
418
+ },
419
+ "gpu_fp32": {
420
+ "160": 0.000952,
421
+ "512": 0.00151
422
+ },
423
+ "gpu_fp16": {
424
+ "160": 1.24,
425
+ "512": 0.556
426
+ }
427
+ },
428
+ "memory": {
429
+ "cpuNoCache": {
430
+ "loadSeconds": 0.62,
431
+ "baseline": {
432
+ "rssMb": 194.2,
433
+ "footprintMb": 149.3
434
+ },
435
+ "afterLoad": {
436
+ "rssMb": 6374.3,
437
+ "footprintMb": 5348.1
438
+ },
439
+ "afterEachSignature": {
440
+ "s128": {
441
+ "rssMb": 6385.7,
442
+ "footprintMb": 5359.0
443
+ },
444
+ "s160": {
445
+ "rssMb": 6403.3,
446
+ "footprintMb": 5376.6
447
+ },
448
+ "s256": {
449
+ "rssMb": 6441.6,
450
+ "footprintMb": 5414.9
451
+ },
452
+ "s512": {
453
+ "rssMb": 6583.8,
454
+ "footprintMb": 5557.2
455
+ }
456
+ },
457
+ "peakRssMb": 6583.8
458
+ },
459
+ "cpuCacheFirst": {
460
+ "loadSeconds": 0.33,
461
+ "baseline": {
462
+ "rssMb": 194.2,
463
+ "footprintMb": 149.3
464
+ },
465
+ "afterLoad": {
466
+ "rssMb": 1708.6,
467
+ "footprintMb": 679.0
468
+ },
469
+ "afterEachSignature": {
470
+ "s128": {
471
+ "rssMb": 2871.1,
472
+ "footprintMb": 680.4
473
+ },
474
+ "s160": {
475
+ "rssMb": 2888.9,
476
+ "footprintMb": 698.3
477
+ },
478
+ "s256": {
479
+ "rssMb": 2927.2,
480
+ "footprintMb": 736.6
481
+ },
482
+ "s512": {
483
+ "rssMb": 3069.4,
484
+ "footprintMb": 878.8
485
+ }
486
+ },
487
+ "peakRssMb": 3069.4
488
+ },
489
+ "cpuCacheWarm": {
490
+ "loadSeconds": 0.22,
491
+ "baseline": {
492
+ "rssMb": 194.5,
493
+ "footprintMb": 149.5
494
+ },
495
+ "afterLoad": {
496
+ "rssMb": 1691.0,
497
+ "footprintMb": 661.5
498
+ },
499
+ "afterEachSignature": {
500
+ "s128": {
501
+ "rssMb": 2853.5,
502
+ "footprintMb": 662.9
503
+ },
504
+ "s160": {
505
+ "rssMb": 2871.3,
506
+ "footprintMb": 680.7
507
+ },
508
+ "s256": {
509
+ "rssMb": 2909.6,
510
+ "footprintMb": 719.0
511
+ },
512
+ "s512": {
513
+ "rssMb": 3051.8,
514
+ "footprintMb": 861.4
515
+ }
516
+ },
517
+ "peakRssMb": 3051.8
518
+ }
519
+ }
520
+ },
521
+ "fp16hw": {
522
+ "about": "wfp16's storage (float16 FULLY_CONNECTED weights behind DEQUANTIZE) over the FP16-hardware graph: LayerNorm power-of-two pre-scale (x*2^-k, eps*4^-k, k from the corpus' FP32 ranges), first feed-forward FULLY_CONNECTED split in two halves, finite -1e4 mask",
523
+ "file": "gliner25_decide_fp16hw.tflite",
524
+ "bytes": 1026073648,
525
+ "buildSeconds": 5.7,
526
+ "tableSharing": null,
527
+ "tablesFp16": null,
528
+ "audit": {
529
+ "bytes": 1026073648,
530
+ "signatures": [
531
+ {
532
+ "key": "s128",
533
+ "inputs": [
534
+ {
535
+ "name": "attention_mask",
536
+ "dtype": "float32",
537
+ "shape": [
538
+ 1,
539
+ 128
540
+ ]
541
+ },
542
+ {
543
+ "name": "inputs_embeds",
544
+ "dtype": "float32",
545
+ "shape": [
546
+ 1,
547
+ 128,
548
+ 1024
549
+ ]
550
+ }
551
+ ],
552
+ "outputs": [
553
+ {
554
+ "name": "logits",
555
+ "dtype": "float32",
556
+ "shape": [
557
+ 1,
558
+ 128
559
+ ]
560
+ }
561
+ ]
562
+ },
563
+ {
564
+ "key": "s160",
565
+ "inputs": [
566
+ {
567
+ "name": "attention_mask",
568
+ "dtype": "float32",
569
+ "shape": [
570
+ 1,
571
+ 160
572
+ ]
573
+ },
574
+ {
575
+ "name": "inputs_embeds",
576
+ "dtype": "float32",
577
+ "shape": [
578
+ 1,
579
+ 160,
580
+ 1024
581
+ ]
582
+ }
583
+ ],
584
+ "outputs": [
585
+ {
586
+ "name": "logits",
587
+ "dtype": "float32",
588
+ "shape": [
589
+ 1,
590
+ 160
591
+ ]
592
+ }
593
+ ]
594
+ },
595
+ {
596
+ "key": "s256",
597
+ "inputs": [
598
+ {
599
+ "name": "attention_mask",
600
+ "dtype": "float32",
601
+ "shape": [
602
+ 1,
603
+ 256
604
+ ]
605
+ },
606
+ {
607
+ "name": "inputs_embeds",
608
+ "dtype": "float32",
609
+ "shape": [
610
+ 1,
611
+ 256,
612
+ 1024
613
+ ]
614
+ }
615
+ ],
616
+ "outputs": [
617
+ {
618
+ "name": "logits",
619
+ "dtype": "float32",
620
+ "shape": [
621
+ 1,
622
+ 256
623
+ ]
624
+ }
625
+ ]
626
+ },
627
+ {
628
+ "key": "s512",
629
+ "inputs": [
630
+ {
631
+ "name": "attention_mask",
632
+ "dtype": "float32",
633
+ "shape": [
634
+ 1,
635
+ 512
636
+ ]
637
+ },
638
+ {
639
+ "name": "inputs_embeds",
640
+ "dtype": "float32",
641
+ "shape": [
642
+ 1,
643
+ 512,
644
+ 1024
645
+ ]
646
+ }
647
+ ],
648
+ "outputs": [
649
+ {
650
+ "name": "logits",
651
+ "dtype": "float32",
652
+ "shape": [
653
+ 1,
654
+ 512
655
+ ]
656
+ }
657
+ ]
658
+ }
659
+ ],
660
+ "operators": {
661
+ "s128": 1846,
662
+ "s160": 1846,
663
+ "s256": 1846,
664
+ "s512": 1846
665
+ },
666
+ "opHistogram": {
667
+ "s128": {
668
+ "ADD": 266,
669
+ "BATCH_MATMUL": 96,
670
+ "CONCATENATION": 24,
671
+ "DEQUANTIZE": 170,
672
+ "FULLY_CONNECTED": 170,
673
+ "GELU": 24,
674
+ "MEAN": 98,
675
+ "MUL": 245,
676
+ "RESHAPE": 341,
677
+ "RSQRT": 49,
678
+ "SLICE": 96,
679
+ "SOFTMAX": 24,
680
+ "SQUARED_DIFFERENCE": 49,
681
+ "SUB": 50,
682
+ "TRANSPOSE": 144
683
+ },
684
+ "s160": {
685
+ "ADD": 266,
686
+ "BATCH_MATMUL": 96,
687
+ "CONCATENATION": 24,
688
+ "DEQUANTIZE": 170,
689
+ "FULLY_CONNECTED": 170,
690
+ "GELU": 24,
691
+ "MEAN": 98,
692
+ "MUL": 245,
693
+ "RESHAPE": 341,
694
+ "RSQRT": 49,
695
+ "SLICE": 96,
696
+ "SOFTMAX": 24,
697
+ "SQUARED_DIFFERENCE": 49,
698
+ "SUB": 50,
699
+ "TRANSPOSE": 144
700
+ },
701
+ "s256": {
702
+ "ADD": 266,
703
+ "BATCH_MATMUL": 96,
704
+ "CONCATENATION": 24,
705
+ "DEQUANTIZE": 170,
706
+ "FULLY_CONNECTED": 170,
707
+ "GELU": 24,
708
+ "MEAN": 98,
709
+ "MUL": 245,
710
+ "RESHAPE": 341,
711
+ "RSQRT": 49,
712
+ "SLICE": 96,
713
+ "SOFTMAX": 24,
714
+ "SQUARED_DIFFERENCE": 49,
715
+ "SUB": 50,
716
+ "TRANSPOSE": 144
717
+ },
718
+ "s512": {
719
+ "ADD": 266,
720
+ "BATCH_MATMUL": 96,
721
+ "CONCATENATION": 24,
722
+ "DEQUANTIZE": 170,
723
+ "FULLY_CONNECTED": 170,
724
+ "GELU": 24,
725
+ "MEAN": 98,
726
+ "MUL": 245,
727
+ "RESHAPE": 341,
728
+ "RSQRT": 49,
729
+ "SLICE": 96,
730
+ "SOFTMAX": 24,
731
+ "SQUARED_DIFFERENCE": 49,
732
+ "SUB": 50,
733
+ "TRANSPOSE": 144
734
+ }
735
+ },
736
+ "tensorDtypes": {
737
+ "FLOAT32": 8716,
738
+ "FLOAT16": 680,
739
+ "INT32": 60
740
+ },
741
+ "int64Tensors": 0,
742
+ "constantBytesBySignatures": {
743
+ "s128+s160+s256+s512": 609464464,
744
+ "s512": 201326716,
745
+ "s256": 100663420,
746
+ "s160": 62914684,
747
+ "s128": 50331772
748
+ },
749
+ "activationsWithLeadingDimNot1": [
750
+ {
751
+ "signature": "s128",
752
+ "shape": [
753
+ 128,
754
+ 1024
755
+ ]
756
+ },
757
+ {
758
+ "signature": "s128",
759
+ "shape": [
760
+ 128,
761
+ 1024
762
+ ]
763
+ },
764
+ {
765
+ "signature": "s128",
766
+ "shape": [
767
+ 128,
768
+ 1024
769
+ ]
770
+ },
771
+ {
772
+ "signature": "s128",
773
+ "shape": [
774
+ 128,
775
+ 1024
776
+ ]
777
+ },
778
+ {
779
+ "signature": "s128",
780
+ "shape": [
781
+ 128,
782
+ 1024
783
+ ]
784
+ },
785
+ {
786
+ "signature": "s128",
787
+ "shape": [
788
+ 128,
789
+ 1024
790
+ ]
791
+ },
792
+ {
793
+ "signature": "s128",
794
+ "shape": [
795
+ 128,
796
+ 1024
797
+ ]
798
+ },
799
+ {
800
+ "signature": "s128",
801
+ "shape": [
802
+ 128,
803
+ 1024
804
+ ]
805
+ }
806
+ ]
807
+ },
808
+ "parity": {
809
+ "cpu": {
810
+ "calls": 616,
811
+ "decisions": 2338,
812
+ "agree": 2338,
813
+ "agreement": 1.0,
814
+ "driftMax": 0.00032,
815
+ "driftP99": 0.00017,
816
+ "driftP50": 1.7e-05,
817
+ "over005": 0,
818
+ "msByBucket": {
819
+ "128": {
820
+ "calls": 8,
821
+ "p50": 60.2,
822
+ "p95": 61.2
823
+ },
824
+ "160": {
825
+ "calls": 321,
826
+ "p50": 70.5,
827
+ "p95": 72.1
828
+ },
829
+ "512": {
830
+ "calls": 287,
831
+ "p50": 255.1,
832
+ "p95": 263.6
833
+ }
834
+ },
835
+ "loadSeconds": 0.61,
836
+ "fullyAccelerated": true,
837
+ "gate": "pass"
838
+ },
839
+ "gpu_fp32": {
840
+ "calls": 616,
841
+ "decisions": 2338,
842
+ "agree": 2338,
843
+ "agreement": 1.0,
844
+ "driftMax": 0.00032,
845
+ "driftP99": 0.00017,
846
+ "driftP50": 1.7e-05,
847
+ "over005": 0,
848
+ "msByBucket": {
849
+ "128": {
850
+ "calls": 8,
851
+ "p50": 22.1,
852
+ "p95": 22.6
853
+ },
854
+ "160": {
855
+ "calls": 321,
856
+ "p50": 25.7,
857
+ "p95": 27.2
858
+ },
859
+ "512": {
860
+ "calls": 287,
861
+ "p50": 79.8,
862
+ "p95": 84.1
863
+ }
864
+ },
865
+ "loadSeconds": 1.92,
866
+ "fullyAccelerated": true,
867
+ "gate": "pass"
868
+ },
869
+ "gpu_fp16": {
870
+ "calls": 616,
871
+ "decisions": 2338,
872
+ "agree": 2332,
873
+ "agreement": 0.9974,
874
+ "driftMax": 0.01158,
875
+ "driftP99": 0.00692,
876
+ "driftP50": 0.001026,
877
+ "over005": 0,
878
+ "msByBucket": {
879
+ "128": {
880
+ "calls": 8,
881
+ "p50": 16.6,
882
+ "p95": 16.9
883
+ },
884
+ "160": {
885
+ "calls": 321,
886
+ "p50": 22.1,
887
+ "p95": 22.6
888
+ },
889
+ "512": {
890
+ "calls": 287,
891
+ "p50": 50.7,
892
+ "p95": 54.7
893
+ }
894
+ },
895
+ "loadSeconds": 1.74,
896
+ "fullyAccelerated": true,
897
+ "gate": "pass"
898
+ }
899
+ },
900
+ "logitDifferenceFromTorch": {
901
+ "cpu": {
902
+ "160": 0.000954,
903
+ "512": 0.0015
904
+ },
905
+ "gpu_fp32": {
906
+ "160": 0.000952,
907
+ "512": 0.00151
908
+ },
909
+ "gpu_fp16": {
910
+ "160": 0.0228,
911
+ "512": 0.0376
912
+ }
913
+ },
914
+ "memory": {
915
+ "cpuNoCache": {
916
+ "loadSeconds": 0.7,
917
+ "baseline": {
918
+ "rssMb": 194.3,
919
+ "footprintMb": 149.4
920
+ },
921
+ "afterLoad": {
922
+ "rssMb": 7479.4,
923
+ "footprintMb": 6453.6
924
+ },
925
+ "afterEachSignature": {
926
+ "s128": {
927
+ "rssMb": 7490.3,
928
+ "footprintMb": 6464.0
929
+ },
930
+ "s160": {
931
+ "rssMb": 7507.9,
932
+ "footprintMb": 6481.6
933
+ },
934
+ "s256": {
935
+ "rssMb": 7543.6,
936
+ "footprintMb": 6517.3
937
+ },
938
+ "s512": {
939
+ "rssMb": 7685.7,
940
+ "footprintMb": 6659.5
941
+ }
942
+ },
943
+ "peakRssMb": 7685.7
944
+ },
945
+ "cpuCacheFirst": {
946
+ "loadSeconds": 0.35,
947
+ "baseline": {
948
+ "rssMb": 194.5,
949
+ "footprintMb": 149.6
950
+ },
951
+ "afterLoad": {
952
+ "rssMb": 1805.6,
953
+ "footprintMb": 776.1
954
+ },
955
+ "afterEachSignature": {
956
+ "s128": {
957
+ "rssMb": 2968.6,
958
+ "footprintMb": 778.0
959
+ },
960
+ "s160": {
961
+ "rssMb": 2986.3,
962
+ "footprintMb": 795.6
963
+ },
964
+ "s256": {
965
+ "rssMb": 3022.0,
966
+ "footprintMb": 831.4
967
+ },
968
+ "s512": {
969
+ "rssMb": 3164.3,
970
+ "footprintMb": 973.8
971
+ }
972
+ },
973
+ "peakRssMb": 3164.3
974
+ },
975
+ "cpuCacheWarm": {
976
+ "loadSeconds": 0.23,
977
+ "baseline": {
978
+ "rssMb": 194.5,
979
+ "footprintMb": 149.5
980
+ },
981
+ "afterLoad": {
982
+ "rssMb": 1783.5,
983
+ "footprintMb": 754.0
984
+ },
985
+ "afterEachSignature": {
986
+ "s128": {
987
+ "rssMb": 2946.5,
988
+ "footprintMb": 755.9
989
+ },
990
+ "s160": {
991
+ "rssMb": 2964.1,
992
+ "footprintMb": 773.5
993
+ },
994
+ "s256": {
995
+ "rssMb": 2999.8,
996
+ "footprintMb": 809.2
997
+ },
998
+ "s512": {
999
+ "rssMb": 3142.1,
1000
+ "footprintMb": 951.5
1001
+ }
1002
+ },
1003
+ "peakRssMb": 3142.1
1004
+ }
1005
+ }
1006
+ },
1007
+ "int8": {
1008
+ "about": "dynamic-range int8 weights (ai-edge-quantizer dynamic_wi8_afp32: FULLY_CONNECTED and BATCH_MATMUL constants int8 per channel, activations quantized per call); CPU only",
1009
+ "file": "gliner25_decide_int8.tflite",
1010
+ "bytes": 422418624,
1011
+ "buildSeconds": 1.6,
1012
+ "tableSharing": null,
1013
+ "tablesFp16": null,
1014
+ "audit": {
1015
+ "bytes": 422418624,
1016
+ "signatures": [
1017
+ {
1018
+ "key": "s128",
1019
+ "inputs": [
1020
+ {
1021
+ "name": "attention_mask",
1022
+ "dtype": "float32",
1023
+ "shape": [
1024
+ 1,
1025
+ 128
1026
+ ]
1027
+ },
1028
+ {
1029
+ "name": "inputs_embeds",
1030
+ "dtype": "float32",
1031
+ "shape": [
1032
+ 1,
1033
+ 128,
1034
+ 1024
1035
+ ]
1036
+ }
1037
+ ],
1038
+ "outputs": [
1039
+ {
1040
+ "name": "logits",
1041
+ "dtype": "float32",
1042
+ "shape": [
1043
+ 1,
1044
+ 128
1045
+ ]
1046
+ }
1047
+ ]
1048
+ },
1049
+ {
1050
+ "key": "s160",
1051
+ "inputs": [
1052
+ {
1053
+ "name": "attention_mask",
1054
+ "dtype": "float32",
1055
+ "shape": [
1056
+ 1,
1057
+ 160
1058
+ ]
1059
+ },
1060
+ {
1061
+ "name": "inputs_embeds",
1062
+ "dtype": "float32",
1063
+ "shape": [
1064
+ 1,
1065
+ 160,
1066
+ 1024
1067
+ ]
1068
+ }
1069
+ ],
1070
+ "outputs": [
1071
+ {
1072
+ "name": "logits",
1073
+ "dtype": "float32",
1074
+ "shape": [
1075
+ 1,
1076
+ 160
1077
+ ]
1078
+ }
1079
+ ]
1080
+ },
1081
+ {
1082
+ "key": "s256",
1083
+ "inputs": [
1084
+ {
1085
+ "name": "attention_mask",
1086
+ "dtype": "float32",
1087
+ "shape": [
1088
+ 1,
1089
+ 256
1090
+ ]
1091
+ },
1092
+ {
1093
+ "name": "inputs_embeds",
1094
+ "dtype": "float32",
1095
+ "shape": [
1096
+ 1,
1097
+ 256,
1098
+ 1024
1099
+ ]
1100
+ }
1101
+ ],
1102
+ "outputs": [
1103
+ {
1104
+ "name": "logits",
1105
+ "dtype": "float32",
1106
+ "shape": [
1107
+ 1,
1108
+ 256
1109
+ ]
1110
+ }
1111
+ ]
1112
+ },
1113
+ {
1114
+ "key": "s512",
1115
+ "inputs": [
1116
+ {
1117
+ "name": "attention_mask",
1118
+ "dtype": "float32",
1119
+ "shape": [
1120
+ 1,
1121
+ 512
1122
+ ]
1123
+ },
1124
+ {
1125
+ "name": "inputs_embeds",
1126
+ "dtype": "float32",
1127
+ "shape": [
1128
+ 1,
1129
+ 512,
1130
+ 1024
1131
+ ]
1132
+ }
1133
+ ],
1134
+ "outputs": [
1135
+ {
1136
+ "name": "logits",
1137
+ "dtype": "float32",
1138
+ "shape": [
1139
+ 1,
1140
+ 512
1141
+ ]
1142
+ }
1143
+ ]
1144
+ }
1145
+ ],
1146
+ "operators": {
1147
+ "s128": 1603,
1148
+ "s160": 1603,
1149
+ "s256": 1603,
1150
+ "s512": 1603
1151
+ },
1152
+ "opHistogram": {
1153
+ "s128": {
1154
+ "ADD": 266,
1155
+ "BATCH_MATMUL": 96,
1156
+ "FULLY_CONNECTED": 146,
1157
+ "GELU": 24,
1158
+ "MEAN": 98,
1159
+ "MUL": 220,
1160
+ "RESHAPE": 341,
1161
+ "RSQRT": 49,
1162
+ "SLICE": 96,
1163
+ "SOFTMAX": 24,
1164
+ "SQUARED_DIFFERENCE": 49,
1165
+ "SUB": 50,
1166
+ "TRANSPOSE": 144
1167
+ },
1168
+ "s160": {
1169
+ "ADD": 266,
1170
+ "BATCH_MATMUL": 96,
1171
+ "FULLY_CONNECTED": 146,
1172
+ "GELU": 24,
1173
+ "MEAN": 98,
1174
+ "MUL": 220,
1175
+ "RESHAPE": 341,
1176
+ "RSQRT": 49,
1177
+ "SLICE": 96,
1178
+ "SOFTMAX": 24,
1179
+ "SQUARED_DIFFERENCE": 49,
1180
+ "SUB": 50,
1181
+ "TRANSPOSE": 144
1182
+ },
1183
+ "s256": {
1184
+ "ADD": 266,
1185
+ "BATCH_MATMUL": 96,
1186
+ "FULLY_CONNECTED": 146,
1187
+ "GELU": 24,
1188
+ "MEAN": 98,
1189
+ "MUL": 220,
1190
+ "RESHAPE": 341,
1191
+ "RSQRT": 49,
1192
+ "SLICE": 96,
1193
+ "SOFTMAX": 24,
1194
+ "SQUARED_DIFFERENCE": 49,
1195
+ "SUB": 50,
1196
+ "TRANSPOSE": 144
1197
+ },
1198
+ "s512": {
1199
+ "ADD": 266,
1200
+ "BATCH_MATMUL": 96,
1201
+ "FULLY_CONNECTED": 146,
1202
+ "GELU": 24,
1203
+ "MEAN": 98,
1204
+ "MUL": 220,
1205
+ "RESHAPE": 341,
1206
+ "RSQRT": 49,
1207
+ "SLICE": 96,
1208
+ "SOFTMAX": 24,
1209
+ "SQUARED_DIFFERENCE": 49,
1210
+ "SUB": 50,
1211
+ "TRANSPOSE": 144
1212
+ }
1213
+ },
1214
+ "tensorDtypes": {
1215
+ "FLOAT32": 7408,
1216
+ "INT8": 776,
1217
+ "INT32": 60
1218
+ },
1219
+ "int64Tensors": 0,
1220
+ "constantBytesBySignatures": {
1221
+ "s128+s160+s256+s512": 305375328,
1222
+ "s512": 50331772,
1223
+ "s256": 25165948,
1224
+ "s160": 15728764,
1225
+ "s128": 12583036
1226
+ },
1227
+ "activationsWithLeadingDimNot1": [
1228
+ {
1229
+ "signature": "s128",
1230
+ "shape": [
1231
+ 128,
1232
+ 1024
1233
+ ]
1234
+ },
1235
+ {
1236
+ "signature": "s128",
1237
+ "shape": [
1238
+ 128,
1239
+ 1024
1240
+ ]
1241
+ },
1242
+ {
1243
+ "signature": "s128",
1244
+ "shape": [
1245
+ 128,
1246
+ 1024
1247
+ ]
1248
+ },
1249
+ {
1250
+ "signature": "s128",
1251
+ "shape": [
1252
+ 128,
1253
+ 1024
1254
+ ]
1255
+ },
1256
+ {
1257
+ "signature": "s128",
1258
+ "shape": [
1259
+ 128,
1260
+ 1024
1261
+ ]
1262
+ },
1263
+ {
1264
+ "signature": "s128",
1265
+ "shape": [
1266
+ 128,
1267
+ 1024
1268
+ ]
1269
+ },
1270
+ {
1271
+ "signature": "s128",
1272
+ "shape": [
1273
+ 128,
1274
+ 1024
1275
+ ]
1276
+ },
1277
+ {
1278
+ "signature": "s128",
1279
+ "shape": [
1280
+ 128,
1281
+ 1024
1282
+ ]
1283
+ }
1284
+ ]
1285
+ },
1286
+ "parity": {
1287
+ "cpu": {
1288
+ "calls": 616,
1289
+ "decisions": 2338,
1290
+ "agree": 2306,
1291
+ "agreement": 0.9863,
1292
+ "driftMax": 0.05977,
1293
+ "driftP99": 0.02366,
1294
+ "driftP50": 0.003493,
1295
+ "over005": 1,
1296
+ "msByBucket": {
1297
+ "128": {
1298
+ "calls": 8,
1299
+ "p50": 46.7,
1300
+ "p95": 47.3
1301
+ },
1302
+ "160": {
1303
+ "calls": 321,
1304
+ "p50": 54.5,
1305
+ "p95": 55.5
1306
+ },
1307
+ "512": {
1308
+ "calls": 287,
1309
+ "p50": 219.5,
1310
+ "p95": 224.1
1311
+ }
1312
+ },
1313
+ "loadSeconds": 0.86,
1314
+ "fullyAccelerated": true,
1315
+ "gate": [
1316
+ "probability drift 0.05977"
1317
+ ]
1318
+ }
1319
+ },
1320
+ "logitDifferenceFromTorch": {
1321
+ "cpu": {
1322
+ "160": 0.083,
1323
+ "512": 0.107
1324
+ }
1325
+ },
1326
+ "memory": {
1327
+ "cpuNoCache": {
1328
+ "loadSeconds": 0.9,
1329
+ "baseline": {
1330
+ "rssMb": 194.3,
1331
+ "footprintMb": 149.4
1332
+ },
1333
+ "afterLoad": {
1334
+ "rssMb": 1942.5,
1335
+ "footprintMb": 1489.0
1336
+ },
1337
+ "afterEachSignature": {
1338
+ "s128": {
1339
+ "rssMb": 1954.3,
1340
+ "footprintMb": 1500.3
1341
+ },
1342
+ "s160": {
1343
+ "rssMb": 1971.6,
1344
+ "footprintMb": 1517.6
1345
+ },
1346
+ "s256": {
1347
+ "rssMb": 2008.6,
1348
+ "footprintMb": 1554.7
1349
+ },
1350
+ "s512": {
1351
+ "rssMb": 2152.8,
1352
+ "footprintMb": 1698.9
1353
+ }
1354
+ },
1355
+ "peakRssMb": 2152.8
1356
+ },
1357
+ "cpuCacheFirst": {
1358
+ "loadSeconds": 0.33,
1359
+ "baseline": {
1360
+ "rssMb": 194.2,
1361
+ "footprintMb": 149.3
1362
+ },
1363
+ "afterLoad": {
1364
+ "rssMb": 768.8,
1365
+ "footprintMb": 314.3
1366
+ },
1367
+ "afterEachSignature": {
1368
+ "s128": {
1369
+ "rssMb": 1073.3,
1370
+ "footprintMb": 325.8
1371
+ },
1372
+ "s160": {
1373
+ "rssMb": 1090.7,
1374
+ "footprintMb": 343.1
1375
+ },
1376
+ "s256": {
1377
+ "rssMb": 1128.3,
1378
+ "footprintMb": 380.8
1379
+ },
1380
+ "s512": {
1381
+ "rssMb": 1272.8,
1382
+ "footprintMb": 525.4
1383
+ }
1384
+ },
1385
+ "peakRssMb": 1272.8
1386
+ },
1387
+ "cpuCacheWarm": {
1388
+ "loadSeconds": 0.13,
1389
+ "baseline": {
1390
+ "rssMb": 194.2,
1391
+ "footprintMb": 149.3
1392
+ },
1393
+ "afterLoad": {
1394
+ "rssMb": 473.7,
1395
+ "footprintMb": 310.0
1396
+ },
1397
+ "afterEachSignature": {
1398
+ "s128": {
1399
+ "rssMb": 778.1,
1400
+ "footprintMb": 321.3
1401
+ },
1402
+ "s160": {
1403
+ "rssMb": 795.6,
1404
+ "footprintMb": 338.8
1405
+ },
1406
+ "s256": {
1407
+ "rssMb": 833.2,
1408
+ "footprintMb": 376.4
1409
+ },
1410
+ "s512": {
1411
+ "rssMb": 977.7,
1412
+ "footprintMb": 521.0
1413
+ }
1414
+ },
1415
+ "peakRssMb": 977.7
1416
+ }
1417
+ }
1418
+ }
1419
+ },
1420
+ "fp16hw": {
1421
+ "rule": "k per LayerNorm, the smallest with max |x - mean| * 2^-k <= 32.0 over the FP32 graph's inputs of all 616 recorded calls at their buckets (padding rows included)",
1422
+ "k": {
1423
+ "L00.ln1": 0,
1424
+ "L00.ln2": 3,
1425
+ "L01.ln1": 0,
1426
+ "L01.ln2": 4,
1427
+ "L02.ln1": 0,
1428
+ "L02.ln2": 4,
1429
+ "L03.ln1": 0,
1430
+ "L03.ln2": 3,
1431
+ "L04.ln1": 0,
1432
+ "L04.ln2": 3,
1433
+ "L05.ln1": 0,
1434
+ "L05.ln2": 5,
1435
+ "L06.ln1": 0,
1436
+ "L06.ln2": 6,
1437
+ "L07.ln1": 0,
1438
+ "L07.ln2": 6,
1439
+ "L08.ln1": 0,
1440
+ "L08.ln2": 6,
1441
+ "L09.ln1": 0,
1442
+ "L09.ln2": 6,
1443
+ "L10.ln1": 0,
1444
+ "L10.ln2": 5,
1445
+ "L11.ln1": 0,
1446
+ "L11.ln2": 4,
1447
+ "L12.ln1": 0,
1448
+ "L12.ln2": 5,
1449
+ "L13.ln1": 0,
1450
+ "L13.ln2": 4,
1451
+ "L14.ln1": 0,
1452
+ "L14.ln2": 4,
1453
+ "L15.ln1": 0,
1454
+ "L15.ln2": 3,
1455
+ "L16.ln1": 0,
1456
+ "L16.ln2": 3,
1457
+ "L17.ln1": 0,
1458
+ "L17.ln2": 3,
1459
+ "L18.ln1": 0,
1460
+ "L18.ln2": 4,
1461
+ "L19.ln1": 0,
1462
+ "L19.ln2": 4,
1463
+ "L20.ln1": 0,
1464
+ "L20.ln2": 2,
1465
+ "L21.ln1": 0,
1466
+ "L21.ln2": 2,
1467
+ "L22.ln1": 0,
1468
+ "L22.ln2": 1,
1469
+ "L23.ln1": 1,
1470
+ "L23.ln2": 1,
1471
+ "emb": 0
1472
+ },
1473
+ "maxAbsDeviation": {
1474
+ "L00.ln1": 13.89,
1475
+ "L00.ln2": 185.54,
1476
+ "L01.ln1": 10.56,
1477
+ "L01.ln2": 305.1,
1478
+ "L02.ln1": 13.09,
1479
+ "L02.ln2": 266.54,
1480
+ "L03.ln1": 10.38,
1481
+ "L03.ln2": 136.36,
1482
+ "L04.ln1": 12.7,
1483
+ "L04.ln2": 147.98,
1484
+ "L05.ln1": 30.32,
1485
+ "L05.ln2": 983.72,
1486
+ "L06.ln1": 24.73,
1487
+ "L06.ln2": 1231.3,
1488
+ "L07.ln1": 21.63,
1489
+ "L07.ln2": 1423.23,
1490
+ "L08.ln1": 25.53,
1491
+ "L08.ln2": 1403.17,
1492
+ "L09.ln1": 23.11,
1493
+ "L09.ln2": 1092.32,
1494
+ "L10.ln1": 20.08,
1495
+ "L10.ln2": 945.09,
1496
+ "L11.ln1": 12.93,
1497
+ "L11.ln2": 408.1,
1498
+ "L12.ln1": 13.14,
1499
+ "L12.ln2": 603.89,
1500
+ "L13.ln1": 16.62,
1501
+ "L13.ln2": 319.06,
1502
+ "L14.ln1": 20.06,
1503
+ "L14.ln2": 333.7,
1504
+ "L15.ln1": 23.33,
1505
+ "L15.ln2": 203.17,
1506
+ "L16.ln1": 24.75,
1507
+ "L16.ln2": 145.38,
1508
+ "L17.ln1": 22.85,
1509
+ "L17.ln2": 230.49,
1510
+ "L18.ln1": 21.41,
1511
+ "L18.ln2": 419.01,
1512
+ "L19.ln1": 23.27,
1513
+ "L19.ln2": 364.46,
1514
+ "L20.ln1": 23.82,
1515
+ "L20.ln2": 118.49,
1516
+ "L21.ln1": 23.09,
1517
+ "L21.ln2": 88.98,
1518
+ "L22.ln1": 21.86,
1519
+ "L22.ln2": 37.04,
1520
+ "L23.ln1": 37.22,
1521
+ "L23.ln2": 36.5,
1522
+ "emb": 1.18
1523
+ },
1524
+ "prescaled": 25,
1525
+ "norms": 49
1526
+ }
1527
+ }