nemo128.onnx
Format: LLM-SCAN  ·  Size: 0.1 MB  ·  Scanned: 2026-08-05  ·  19 ms
SHA256: a9fde1486ebfcc08f328d75ad4610c67835fea58…

Security grade

B
Score: 88/100
4 LOW 4 INFO
Artifact Security
B / 88
Repository Trust
N/A
local upload
Deployment Confidence
Medium
Artifact Security grades the file. Repository Trust is unavailable for local uploads — no external provenance to verify. Deployment Confidence reflects artifact grade only.
Score breakdown
Base score 100
LOW High output/input element ratio: 64.5× -3
LOW No license field in ONNX model metadata -3
LOW No provenance metadata in ONNX model -3
LOW Fully dynamic input shapes (2 input(s)) -3
Penalty subtotal 88/100
Final B / 88
ONNX audio-speech model | opset 17 | 34 nodes | 33,426 params | 4 warnings / 4 informational

Runtime compatibility

Runtime Status Quant Architecture Context
ONNX Runtime
Direct
? opset 17 (requires ORT ≥ 1.14)
TensorRT
Verify arch support
Via conversion
verify required
? ?
verify
opset 17; dynamic batch: needs profiles
OpenVINO
Verify arch support
Via conversion
verify required
? ?
verify
opset 17; conversion required
CoreML (Apple)
Verify arch support
Not possible
? ?
verify
opset 17; conversion via coremltools; opset out of range
llama.cpp / Ollama N/A ONNX not supported — requires GGUF format

Model info

Parameters ~
Estimated total number of weight values; determines VRAM needed at inference
33,426
Tensors
Total number of weight tensors stored in the file
16
File size
Size on disk in megabytes
0.13 MB
Graph nodes
Total number of computational nodes in the ONNX graph
34
Opsets
ONNX operator set versions declared by the model
{"ai.onnx": 17}
Producer
Tool or framework that exported this ONNX model
OnnxScript

Security findings (8)

LOW Shape Risk
High output/input element ratio: 64.5×
Estimated output elements (129) are 64.5× larger than input elements (2). Large amplification ratios can indicate detection heads with many anchors, segmentation masks, or other outputs that scale poorly with batch size — relevant for memory planning in production.
→ Profile inference memory at maximum expected batch size before production deployment.
LOW Supply Chain
No license field in ONNX model metadata
Models without license information cannot be safely redistributed or deployed commercially. ONNX metadata supports a license property in model.metadata_props.
→ Add a license field during export (e.g. apache-2.0, mit, cc-by-4.0)
LOW Supply Chain
No provenance metadata in ONNX model
Neither author nor domain (producer namespace) are set. Without origin information the model cannot be traced to a trusted source.
→ Set author and domain fields during model export
LOW Runtime Safety
Fully dynamic input shapes (2 input(s))
Inputs with all-dynamic dimensions: [('waveforms', "['batch_size', 'N']"), ('waveforms_lens', "['batch_size']")]. Without static bounds, a malicious caller can supply arbitrarily large tensors causing OOM. The model itself is not malicious, but deployments must enforce input size limits.
→ Enforce maximum input shape at the serving layer (e.g. ORT session options, preprocessing validation). Document accepted input bounds in model card.
INFO Shape Risk
Dynamic tensor dimensions detected
Inputs with dynamic dims: ['waveforms', 'waveforms_lens']. Outputs: ['features', 'features_lens'] (symbolic: N, T, batch_size). Dynamic dims allow flexible batch sizes and sequence lengths, but without enforced bounds a caller can supply arbitrarily large tensors causing OOM. This is expected for most inference models.
→ Enforce maximum input shape at the serving layer (e.g. ORT SessionOptions.add_session_config_entry, preprocessing validation). Document accepted input bounds in model card or deployment README.
INFO Provenance
Model producer: OnnxScript 0.3.2
Producer metadata helps identify the tool that exported this model
→ Verify producer matches expected export pipeline
INFO Classification
Inferred model type: audio-speech
Based on op inventory (34 total nodes, 20 unique types)
→ Verify this matches the model's intended use case
INFO Runtime
Default opset: 17
Opset governs which ops and behaviors are available at runtime
→ Use ONNX Runtime (CPU/CUDA/DirectML/OpenVINO backends); requires ORT ≥ 1.14

Integrity & Structure

SHA-256a9fde1486ebfcc08f328d75ad4610c67835fea58c73ba57e3209a6f6cf019e9f
SHA-512cde05a330bf70e5fa87e8487ea7a83c55d6de8c3973ec8d2d03abece461510174f04de6f9b61bcc0…
File size139,764 bytes (0.13 MB)
Declared weight bytes135,804 (0.13 MB)
Non-weight overhead0.0 MB
Initializers (weights)16
Graph nodes34

Custom Operators & Domains

Standard ops only
All operators use the standard ai.onnx or ai.onnx.ml domain. No custom kernels, no vendor-specific ops.
DomainTypeOpsRuntime requirement
ai.onnx Standard None — supported by all ONNX runtimes

Initializer Integrity

✓ All initializer integrity checks passed.
CheckCountStatus
Inline tensor byte-size mismatches
raw_data length vs declared shape × dtype_bytes
0 PASS
Empty initializers
Non-zero shape declared but no inline or external data
0 PASS
Duplicate initializer names
ONNX spec requires unique names; duplicates cause non-deterministic behaviour
0 PASS
Initializers not used by graph
Present in graph.initializer but not referenced by any node input
0 PASS
Graph inputs shadowing initializers
Per ONNX spec these become optional overridable weights; runtime behaviour varies
0 PASS
NaN / Inf numeric scan
Full scan — 33,413 values across 7 / 7 float tensor(s)
0 PASS

Operator Risk Profile

✓ All operators are standard ONNX — predictable behaviour across runtimes.
Risk categoryOperators in this model
▪ Control-flow ops
Loop, If, Scan — conditional/recursive execution
none
▪ Memory amplification
ConstantOfShape, Expand, Tile — size from runtime shapes
none
▪ Provider compat
NMS, RoiAlign, GridSample — not in all runtimes
none
▪ Runtime-sensitive ops
Scatter, Gather, Resize — edge-case differences
none
▪ Quantized ops
QuantizeLinear, QLinearConv — quantized path required
none
▪ Non-deterministic ops
Random*, Multinomial — output varies between runs
none
▪ String processing ops
Tokenizer, TfIdfVectorizer — unusual in weight models
none
▪ Custom ops / domains
Non-standard op domains — may execute arbitrary native code
none
All operators (20 unique types)
OpCountRisk
Div 4
Slice 3
Sub 3
Cast 3
Add 3
Where 3
ReduceSumSquare 2
Mul 1
Concat 1
Pad 1
STFT 1
MatMul 1
Log 1
Transpose 1
Unsqueeze 1
Shape 1
Range 1
Less 1
ReduceSum 1
Sqrt 1

Shape Risk Analysis

⚠ Shape anomalies detected — see findings above for details.
Inputs
NameDtypeShapeEst. elements
waveforms FLOAT [batch_size, N] 1
waveforms_lens INT64 [batch_size] 1
Outputs
NameDtypeShapeEst. elements
features FLOAT [batch_size, 128, T] 128
features_lens INT64 [batch_size] 1
Dynamic dims
Yes
N, T, batch_size
Output/Input ratio
64.5×
(dynamic dims assumed = 1)
Shape anomalies
None

External Data Security Checks

No external data — all weight tensors are stored inline in the .onnx file. Checks below are N/A.
CheckResult
External data present
Whether any weight tensors are stored outside the .onnx file
PASS
Absolute paths
Paths starting with / or C:\ escape the model directory
N/A
Path traversal (../)
.. sequences that could read files outside the model directory
N/A
Windows drive paths (C:\)
Drive-letter paths are always absolute and OS-specific
N/A
Remote / URL paths
http://, ftp:// etc. would trigger network requests at load time
N/A
Null bytes in paths
Null-byte injection truncates paths in C/C++ runtimes
N/A
Duplicate file references
Same external file referenced by multiple tensors
N/A
Missing external files
Referenced files not present on disk at scan time
N/A
Out-of-bounds reads
offset + length exceeds the external file size
N/A
Offset/length range validated
Verified that each tensor's offset+length fits within the external file
N/A

DType Mix

DTypeCountTotal bytesTotal MBAvg bits/elem
DOUBLE 1 4,096 0.0 64.0
FLOAT 6 131,604 0.13 32.0
INT64 9 104 0.0 64.0

Op Distribution (top 20)

Initializer Preview (first 16)

#NameShapeDTypeBytesbits/elem
0 tmp [257, 128] FLOAT 131,584 32.0
1 int64_1_1d [1] INT64 8 64.0
2 int64_0_1d [1] INT64 8 64.0
3 int64_9223372036854775807_1d [1] INT64 8 64.0
4 int64_m1_1d [1] INT64 8 64.0
5 preemph_2_cast [] FLOAT 4 32.0
6 tmp_11 [4] INT64 32 64.0
7 hann_window [512] DOUBLE 4,096 64.0
8 hop_length [] INT64 8 64.0
9 log_zero_guard_value_cast [] FLOAT 4 32.0
10 int64_1_cast [] INT64 8 64.0
11 const_2 [2] INT64 16 64.0
12 int64_0_cast [] INT64 8 64.0
13 int64_0_2_cast [] FLOAT 4 32.0
14 int64_1_9_cast [] FLOAT 4 32.0
15 const_13_cast [] FLOAT 4 32.0

Scan coverage

Checks performed
  • ONNX protobuf parse
  • Opset version check
  • Node count & op histogram
  • Custom domain detection
  • External data reference check
  • Structural validation (ONNX checker)
  • Metadata key scan
  • Weight size estimate vs file size
  • Embedded supply-chain metadata (license, author, provenance fields)
  • Runtime compatibility heuristics
  • External model card / repository context: not available for local upload
  • Upstream repository: not checked — not available for direct file upload
Not covered
  • Runtime execution or dynamic analysis
  • Behavioral backdoor detection
  • Weight-level semantic backdoor detection
  • Full upstream repository verification
  • License validation beyond embedded metadata
  • Malware scanning of surrounding repo files
  • Adversarial robustness or alignment audit
  • Training data provenance
ⓘ Static scanning can detect structural anomalies and known malicious patterns. It cannot guarantee absence of risk. Treat results as a security signal, not a formal audit.
Raw scan data (.llmscan JSON)
{
  "compatibility": [
    {
      "arch": true,
      "context": "opset 17 (requires ORT \u2265 1.14)",
      "conversion_possible": true,
      "direct_supported": true,
      "notes": "ONNX Runtime (CPU/CUDA/DirectML/OpenVINO backends); requires ORT \u2265 1.14",
      "quant": null,
      "runtime": "ONNX Runtime",
      "verification_required": false
    },
    {
      "arch": null,
      "context": "opset 17; dynamic batch: needs profiles",
      "conversion_possible": true,
      "direct_supported": false,
      "notes": "Engine build required (trtexec / TRT Python API) | dynamic batch requires explicit optimization profiles (min/opt/max shapes)",
      "quant": null,
      "runtime": "TensorRT",
      "verification_required": true
    },
    {
      "arch": null,
      "context": "opset 17; conversion required",
      "conversion_possible": true,
      "direct_supported": false,
      "notes": "Conversion via Model Optimizer (mo) or OpenVINO OVC (openvino.convert_model) required | Op coverage varies; validate with mo --input_model before deployment | dynamic shapes supported but may require --input re-specification",
      "quant": null,
      "runtime": "OpenVINO",
      "verification_required": true
    },
    {
      "arch": null,
      "context": "opset 17; conversion via coremltools; opset out of range",
      "conversion_possible": false,
      "direct_supported": false,
      "notes": "Conversion path via coremltools.converters.onnx.convert() \u2014 CoreML is not a direct ONNX runtime; the model must be converted to .mlpackage first. opset 17 exceeds CoreML converter limit (\u2264 16). ",
      "quant": null,
      "runtime": "CoreML (Apple)",
      "verification_required": true
    },
    {
      "arch": null,
      "context": null,
      "conversion_possible": false,
      "direct_supported": false,
      "not_supported_msg": "ONNX not supported \u2014 requires GGUF format",
      "notes": "GGUF format only; convert with llama.cpp convert scripts",
      "quant": false,
      "runtime": "llama.cpp / Ollama",
      "verification_required": false
    }
  ],
  "format": "LLM-SCAN",
  "format_version": "1.0",
  "generator": {
    "name": "llmscan-engine",
    "version": "2.0.0"
  },
  "model": {
    "arch": null,
    "custom_domains": [],
    "declared_weight_bytes": 135804,
    "declared_weight_mb": 0.13,
    "domain": "",
    "dtype_hist": {
      "DOUBLE": 512,
      "FLOAT": 32901,
      "INT64": 13
    },
    "dtype_stats": {
      "DOUBLE": {
        "avg_bits_per_elem": 64.0,
        "bytes": 4096,
        "count": 1,
        "mb": 0.0
      },
      "FLOAT": {
        "avg_bits_per_elem": 32.0,
        "bytes": 131604,
        "count": 6,
        "mb": 0.13
      },
      "INT64": {
        "avg_bits_per_elem": 64.0,
        "bytes": 104,
        "count": 9,
        "mb": 0.0
      }
    },
    "external_refs": [],
    "file_size_bytes": 139764,
    "file_size_mb": 0.13,
    "format": "onnx",
    "has_external_data": false,
    "initialized_tensors": 16,
    "inputs": [
      {
        "dtype": "FLOAT",
        "name": "waveforms",
        "shape": [
          "batch_size",
          "N"
        ]
      },
      {
        "dtype": "INT64",
        "name": "waveforms_lens",
        "shape": [
          "batch_size"
        ]
      }
    ],
    "ir_version": 8,
    "kv_meta": {},
    "model_type": "audio-speech",
    "nodes": 34,
    "op_hist_top": {
      "Add": 3,
      "Cast": 3,
      "Concat": 1,
      "Div": 4,
      "Less": 1,
      "Log": 1,
      "MatMul": 1,
      "Mul": 1,
      "Pad": 1,
      "Range": 1,
      "ReduceSum": 1,
      "ReduceSumSquare": 2,
      "STFT": 1,
      "Shape": 1,
      "Slice": 3,
      "Sqrt": 1,
      "Sub": 3,
      "Transpose": 1,
      "Unsqueeze": 1,
      "Where": 3
    },
    "opsets": {
      "ai.onnx": 17
    },
    "outputs": [
      {
        "dtype": "FLOAT",
        "name": "features",
        "shape": [
          "batch_size",
          128,
          "T"
        ]
      },
      {
        "dtype": "INT64",
        "name": "features_lens",
        "shape": [
          "batch_size"
        ]
      }
    ],
    "params_estimate": 33426,
    "producer": "OnnxScript",
    "quantization": null,
    "quantized": false,
    "scanner_model_info": {
      "custom_domain_detail": {},
      "custom_domains": [],
      "custom_ops_report": {
        "domains": [],
        "has_non_standard": false,
        "standard_only": true
      },
      "declared_weight_bytes": 135804,
      "declared_weight_mb": 0.13,
      "doc_string": "LogMelSpectrogram feature extractor for Nemo models",
      "domain": "",
      "dtype_histogram": {
        "DOUBLE": 512,
        "FLOAT": 32901,
        "INT64": 13
      },
      "dtype_stats": {
        "DOUBLE": {
          "avg_bits_per_elem": 64.0,
          "bytes": 4096,
          "count": 1,
          "mb": 0.0
        },
        "FLOAT": {
          "avg_bits_per_elem": 32.0,
          "bytes": 131604,
          "count": 6,
          "mb": 0.13
        },
        "INT64": {
          "avg_bits_per_elem": 64.0,
          "bytes": 104,
          "count": 9,
          "mb": 0.0
        }
      },
      "external_data_checks": {
        "absolute_paths": [],
        "duplicate_files": [],
        "missing_files": [],
        "null_byte_paths": [],
        "oob_reads": [],
        "present": false,
        "remote_url_paths": [],
        "size_validated_count": 0,
        "size_validation_total": 0,
        "tensor_count": 0,
        "traversal_detected": [],
        "windows_drive_paths": []
      },
      "external_refs": [],
      "extreme_dim_tensors": 0,
      "file_size_bytes": 139764,
      "file_size_mb": 0.13,
      "has_external_data": false,
      "initializer_integrity": {
        "count": 16,
        "duplicate_name_list": [],
        "duplicate_names": 0,
        "empty_initializers": 0,
        "inline_tensor_mismatches": 0,
        "nan_inf_scan": {
          "affected_tensors": [],
          "inf_count": 0,
          "method": "full",
          "nan_count": 0,
          "performed": true,
          "tensors_scanned": 7,
          "total_float_tensors": 7,
          "values_scanned": 33413
        },
        "shadowing_graph_inputs": 0,
        "shadowing_names": [],
        "unused_by_graph": 0,
        "unused_names": []
      },
      "inline_tensor_mismatches": 0,
      "inputs": [
        {
          "dtype": "FLOAT",
          "name": "waveforms",
          "shape": [
            "batch_size",
            "N"
          ]
        },
        {
          "dtype": "INT64",
          "name": "waveforms_lens",
          "shape": [
            "batch_size"
          ]
        }
      ],
      "ir_version": 8,
      "metadata_props": {
        "model_author": "Ilya Stupakov",
        "model_license": "MIT License"
      },
      "model_type": "audio-speech",
      "model_version": 0,
      "node_count": 34,
      "op_histogram": {
        "Add": 3,
        "Cast": 3,
        "Concat": 1,
        "Div": 4,
        "Less": 1,
        "Log": 1,
        "MatMul": 1,
        "Mul": 1,
        "Pad": 1,
        "Range": 1,
        "ReduceSum": 1,
        "ReduceSumSquare": 2,
        "STFT": 1,
        "Shape": 1,
        "Slice": 3,
        "Sqrt": 1,
        "Sub": 3,
        "Transpose": 1,
        "Unsqueeze": 1,
        "Where": 3
      },
      "op_histogram_full": {
        "Add": 3,
        "Cast": 3,
        "Concat": 1,
        "Div": 4,
        "Less": 1,
        "Log": 1,
        "MatMul": 1,
        "Mul": 1,
        "Pad": 1,
        "Range": 1,
        "ReduceSum": 1,
        "ReduceSumSquare": 2,
        "STFT": 1,
        "Shape": 1,
        "Slice": 3,
        "Sqrt": 1,
        "Sub": 3,
        "Transpose": 1,
        "Unsqueeze": 1,
        "Where": 3
      },
      "op_risk_report": {
        "elevated_categories": [],
        "has_control_flow": false,
        "has_memory_amp": false,
        "has_nondeterministic": false,
        "has_provider_compat": false,
        "has_quantized": false,
        "has_runtime_sensitive": false,
        "has_string_ops": false,
        "rows": [
          {
            "count": 4,
            "note": "Standard ONNX op",
            "op": "Div",
            "risk": "normal"
          },
          {
            "count": 3,
            "note": "Standard ONNX op",
            "op": "Slice",
            "risk": "normal"
          },
          {
            "count": 3,
            "note": "Standard ONNX op",
            "op": "Sub",
            "risk": "normal"
          },
          {
            "count": 3,
            "note": "Standard ONNX op",
            "op": "Cast",
            "risk": "normal"
          },
          {
            "count": 3,
            "note": "Standard ONNX op",
            "op": "Add",
            "risk": "normal"
          },
          {
            "count": 3,
            "note": "Standard ONNX op",
            "op": "Where",
            "risk": "normal"
          },
          {
            "count": 2,
            "note": "Standard ONNX op",
            "op": "ReduceSumSquare",
            "risk": "normal"
          },
          {
            "count": 1,
            "note": "Standard ONNX op",
            "op": "Mul",
            "risk": "normal"
          },
          {
            "count": 1,
            "note": "Standard ONNX op",
            "op": "Concat",
            "risk": "normal"
          },
          {
            "count": 1,
            "note": "Standard ONNX op",
            "op": "Pad",
            "risk": "normal"
          },
          {
            "count": 1,
            "note": "Standard ONNX op",
            "op": "STFT",
            "risk": "normal"
          },
          {
            "count": 1,
            "note": "Standard ONNX op",
            "op": "MatMul",
            "risk": "normal"
          },
          {
            "count": 1,
            "note": "Standard ONNX op",
            "op": "Log",
            "risk": "normal"
          },
          {
            "count": 1,
            "note": "Standard ONNX op",
            "op": "Transpose",
            "risk": "normal"
          },
          {
            "count": 1,
            "note": "Standard ONNX op",
            "op": "Unsqueeze",
            "risk": "normal"
          },
          {
            "count": 1,
            "note": "Standard ONNX op",
            "op": "Shape",
            "risk": "normal"
          },
          {
            "count": 1,
            "note": "Standard ONNX op",
            "op": "Range",
            "risk": "normal"
          },
          {
            "count": 1,
            "note": "Standard ONNX op",
            "op": "Less",
            "risk": "normal"
          },
          {
            "count": 1,
            "note": "Standard ONNX op",
            "op": "ReduceSum",
            "risk": "normal"
          },
          {
            "count": 1,
            "note": "Standard ONNX op",
            "op": "Sqrt",
            "risk": "normal"
          }
        ]
      },
      "opsets": {
        "ai.onnx": 17
      },
      "outputs": [
        {
          "dtype": "FLOAT",
          "name": "features",
          "shape": [
            "batch_size",
            128,
            "T"
          ]
        },
        {
          "dtype": "INT64",
          "name": "features_lens",
          "shape": [
            "batch_size"
          ]
        }
      ],
      "param_estimate": 33426,
      "producer_name": "OnnxScript",
      "producer_version": "0.3.2",
      "quantized": false,
      "sha256": "a9fde1486ebfcc08f328d75ad4610c67835fea58c73ba57e3209a6f6cf019e9f",
      "sha512": "cde05a330bf70e5fa87e8487ea7a83c55d6de8c3973ec8d2d03abece461510174f04de6f9b61bcc0109c0a5e6b506c7cd18020f0d317e6eb50971892534a8dd9",
      "shape_risk_report": {
        "amplification_ratio": 64.5,
        "any_dynamic_dims": true,
        "dynamic_dim_names": [
          "N",
          "T",
          "batch_size"
        ],
        "extreme_dims_detected": false,
        "input_elements_est": 2,
        "inputs": [
          {
            "dtype": "FLOAT",
            "est_elements": 1,
            "has_dynamic": true,
            "has_negative": false,
            "name": "waveforms",
            "shape": [
              "batch_size",
              "N"
            ]
          },
          {
            "dtype": "INT64",
            "est_elements": 1,
            "has_dynamic": true,
            "has_negative": false,
            "name": "waveforms_lens",
            "shape": [
              "batch_size"
            ]
          }
        ],
        "negative_dims_detected": false,
        "output_elements_est": 129,
        "outputs": [
          {
            "dtype": "FLOAT",
            "est_elements": 128,
            "has_dynamic": true,
            "has_negative": false,
            "name": "features",
            "shape": [
              "batch_size",
              128,
              "T"
            ]
          },
          {
            "dtype": "INT64",
            "est_elements": 1,
            "has_dynamic": true,
            "has_negative": false,
            "name": "features_lens",
            "shape": [
              "batch_size"
            ]
          }
        ]
      },
      "tensor_count": 16,
      "tensor_preview": [
        {
          "bits_per_elem": 32.0,
          "byte_len": 131584,
          "dims": [
            257,
            128
          ],
          "dtype_name": "FLOAT",
          "index": 0,
          "name": "tmp"
        },
        {
          "bits_per_elem": 64.0,
          "byte_len": 8,
          "dims": [
            1
          ],
          "dtype_name": "INT64",
          "index": 1,
          "name": "int64_1_1d"
        },
        {
          "bits_per_elem": 64.0,
          "byte_len": 8,
          "dims": [
            1
          ],
          "dtype_name": "INT64",
          "index": 2,
          "name": "int64_0_1d"
        },
        {
          "bits_per_elem": 64.0,
          "byte_len": 8,
          "dims": [
            1
          ],
          "dtype_name": "INT64",
          "index": 3,
          "name": "int64_9223372036854775807_1d"
        },
        {
          "bits_per_elem": 64.0,
          "byte_len": 8,
          "dims": [
            1
          ],
          "dtype_name": "INT64",
          "index": 4,
          "name": "int64_m1_1d"
        },
        {
          "bits_per_elem": 32.0,
          "byte_len": 4,
          "dims": [],
          "dtype_name": "FLOAT",
          "index": 5,
          "name": "preemph_2_cast"
        },
        {
          "bits_per_elem": 64.0,
          "byte_len": 32,
          "dims": [
            4
          ],
          "dtype_name": "INT64",
          "index": 6,
          "name": "tmp_11"
        },
        {
          "bits_per_elem": 64.0,
          "byte_len": 4096,
          "dims": [
            512
          ],
          "dtype_name": "DOUBLE",
          "index": 7,
          "name": "hann_window"
        },
        {
          "bits_per_elem": 64.0,
          "byte_len": 8,
          "dims": [],
          "dtype_name": "INT64",
          "index": 8,
          "name": "hop_length"
        },
        {
          "bits_per_elem": 32.0,
          "byte_len": 4,
          "dims": [],
          "dtype_name": "FLOAT",
          "index": 9,
          "name": "log_zero_guard_value_cast"
        },
        {
          "bits_per_elem": 64.0,
          "byte_len": 8,
          "dims": [],
          "dtype_name": "INT64",
          "index": 10,
          "name": "int64_1_cast"
        },
        {
          "bits_per_elem": 64.0,
          "byte_len": 16,
          "dims": [
            2
          ],
          "dtype_name": "INT64",
          "index": 11,
          "name": "const_2"
        },
        {
          "bits_per_elem": 64.0,
          "byte_len": 8,
          "dims": [],
          "dtype_name": "INT64",
          "index": 12,
          "name": "int64_0_cast"
        },
        {
          "bits_per_elem": 32.0,
          "byte_len": 4,
          "dims": [],
          "dtype_name": "FLOAT",
          "index": 13,
          "name": "int64_0_2_cast"
        },
        {
          "bits_per_elem": 32.0,
          "byte_len": 4,
          "dims": [],
          "dtype_name": "FLOAT",
          "index": 14,
          "name": "int64_1_9_cast"
        },
        {
          "bits_per_elem": 32.0,
          "byte_len": 4,
          "dims": [],
          "dtype_name": "FLOAT",
          "index": 15,
          "name": "const_13_cast"
        }
      ],
      "unique_op_types": 20,
      "weight_delta_bytes": 3960,
      "weight_delta_mb": 0.0,
      "weights_size_bytes": 135804,
      "weights_size_mb": 0.13,
      "zero_dim_initializers": 0
    },
    "sha256": "a9fde1486ebfcc08f328d75ad4610c67835fea58c73ba57e3209a6f6cf019e9f",
    "sha512": "cde05a330bf70e5fa87e8487ea7a83c55d6de8c3973ec8d2d03abece461510174f04de6f9b61bcc0109c0a5e6b506c7cd18020f0d317e6eb50971892534a8dd9",
    "tensor_preview": [
      {
        "bits_per_elem": 32.0,
        "byte_len": 131584,
        "dims": [
          257,
          128
        ],
        "dtype_name": "FLOAT",
        "index": 0,
        "name": "tmp"
      },
      {
        "bits_per_elem": 64.0,
        "byte_len": 8,
        "dims": [
          1
        ],
        "dtype_name": "INT64",
        "index": 1,
        "name": "int64_1_1d"
      },
      {
        "bits_per_elem": 64.0,
        "byte_len": 8,
        "dims": [
          1
        ],
        "dtype_name": "INT64",
        "index": 2,
        "name": "int64_0_1d"
      },
      {
        "bits_per_elem": 64.0,
        "byte_len": 8,
        "dims": [
          1
        ],
        "dtype_name": "INT64",
        "index": 3,
        "name": "int64_9223372036854775807_1d"
      },
      {
        "bits_per_elem": 64.0,
        "byte_len": 8,
        "dims": [
          1
        ],
        "dtype_name": "INT64",
        "index": 4,
        "name": "int64_m1_1d"
      },
      {
        "bits_per_elem": 32.0,
        "byte_len": 4,
        "dims": [],
        "dtype_name": "FLOAT",
        "index": 5,
        "name": "preemph_2_cast"
      },
      {
        "bits_per_elem": 64.0,
        "byte_len": 32,
        "dims": [
          4
        ],
        "dtype_name": "INT64",
        "index": 6,
        "name": "tmp_11"
      },
      {
        "bits_per_elem": 64.0,
        "byte_len": 4096,
        "dims": [
          512
        ],
        "dtype_name": "DOUBLE",
        "index": 7,
        "name": "hann_window"
      },
      {
        "bits_per_elem": 64.0,
        "byte_len": 8,
        "dims": [],
        "dtype_name": "INT64",
        "index": 8,
        "name": "hop_length"
      },
      {
        "bits_per_elem": 32.0,
        "byte_len": 4,
        "dims": [],
        "dtype_name": "FLOAT",
        "index": 9,
        "name": "log_zero_guard_value_cast"
      },
      {
        "bits_per_elem": 64.0,
        "byte_len": 8,
        "dims": [],
        "dtype_name": "INT64",
        "index": 10,
        "name": "int64_1_cast"
      },
      {
        "bits_per_elem": 64.0,
        "byte_len": 16,
        "dims": [
          2
        ],
        "dtype_name": "INT64",
        "index": 11,
        "name": "const_2"
      },
      {
        "bits_per_elem": 64.0,
        "byte_len": 8,
        "dims": [],
        "dtype_name": "INT64",
        "index": 12,
        "name": "int64_0_cast"
      },
      {
        "bits_per_elem": 32.0,
        "byte_len": 4,
        "dims": [],
        "dtype_name": "FLOAT",
        "index": 13,
        "name": "int64_0_2_cast"
      },
      {
        "bits_per_elem": 32.0,
        "byte_len": 4,
        "dims": [],
        "dtype_name": "FLOAT",
        "index": 14,
        "name": "int64_1_9_cast"
      },
      {
        "bits_per_elem": 32.0,
        "byte_len": 4,
        "dims": [],
        "dtype_name": "FLOAT",
        "index": 15,
        "name": "const_13_cast"
      }
    ],
    "weight_delta_mb": 0.0,
    "weights_size_est_bytes": 135804
  },
  "report": {
    "bullets": [
      "ONNX audio-speech model | opset 17 | 34 nodes | 33,426 params | 4 warnings / 4 informational",
      "Size: 0.13 MB",
      "SHA256: a9fde1486ebfcc08..."
    ],
    "recommendations": [
      "Profile inference memory at maximum expected batch size before production deployment.",
      "Add a license field during export (e.g. apache-2.0, mit, cc-by-4.0)",
      "Set author and domain fields during model export",
      "Enforce maximum input shape at the serving layer (e.g. ORT session options, preprocessing validation). Document accepted input bounds in model card."
    ],
    "summary": "ONNX audio-speech model | opset 17 | 34 nodes | 33,426 params | 4 warnings / 4 informational"
  },
  "scan_context": {
    "duration_ms": 19,
    "ended_at": "2026-08-05T12:13:57+00:00Z",
    "limits": {
      "sandbox": true,
      "timeout_ms": 60000
    },
    "mode": "static-deep",
    "started_at": "2026-08-05T12:13:57+00:00Z"
  },
  "security": {
    "findings": [
      {
        "category": "Shape Risk",
        "detail": "Inputs with dynamic dims: [\u0027waveforms\u0027, \u0027waveforms_lens\u0027]. Outputs: [\u0027features\u0027, \u0027features_lens\u0027] (symbolic: N, T, batch_size). Dynamic dims allow flexible batch sizes and sequence lengths, but without enforced bounds a caller can supply arbitrarily large tensors causing OOM. This is expected for most inference models.",
        "recommendation": "Enforce maximum input shape at the serving layer (e.g. ORT SessionOptions.add_session_config_entry, preprocessing validation). Document accepted input bounds in model card or deployment README.",
        "severity": "INFO",
        "title": "Dynamic tensor dimensions detected"
      },
      {
        "category": "Shape Risk",
        "detail": "Estimated output elements (129) are 64.5\u00d7 larger than input elements (2). Large amplification ratios can indicate detection heads with many anchors, segmentation masks, or other outputs that scale poorly with batch size \u2014 relevant for memory planning in production.",
        "recommendation": "Profile inference memory at maximum expected batch size before production deployment.",
        "severity": "LOW",
        "title": "High output/input element ratio: 64.5\u00d7"
      },
      {
        "category": "Supply Chain",
        "detail": "Models without license information cannot be safely redistributed or deployed commercially. ONNX metadata supports a license property in model.metadata_props.",
        "recommendation": "Add a license field during export (e.g. apache-2.0, mit, cc-by-4.0)",
        "severity": "LOW",
        "title": "No license field in ONNX model metadata"
      },
      {
        "category": "Supply Chain",
        "detail": "Neither author nor domain (producer namespace) are set. Without origin information the model cannot be traced to a trusted source.",
        "recommendation": "Set author and domain fields during model export",
        "severity": "LOW",
        "title": "No provenance metadata in ONNX model"
      },
      {
        "category": "Provenance",
        "detail": "Producer metadata helps identify the tool that exported this model",
        "recommendation": "Verify producer matches expected export pipeline",
        "severity": "INFO",
        "title": "Model producer: OnnxScript 0.3.2"
      },
      {
        "category": "Classification",
        "detail": "Based on op inventory (34 total nodes, 20 unique types)",
        "recommendation": "Verify this matches the model\u0027s intended use case",
        "severity": "INFO",
        "title": "Inferred model type: audio-speech"
      },
      {
        "category": "Runtime",
        "detail": "Opset governs which ops and behaviors are available at runtime",
        "recommendation": "Use ONNX Runtime (CPU/CUDA/DirectML/OpenVINO backends); requires ORT \u2265 1.14",
        "severity": "INFO",
        "title": "Default opset: 17"
      },
      {
        "category": "Runtime Safety",
        "detail": "Inputs with all-dynamic dimensions: [(\u0027waveforms\u0027, \"[\u0027batch_size\u0027, \u0027N\u0027]\"), (\u0027waveforms_lens\u0027, \"[\u0027batch_size\u0027]\")]. Without static bounds, a malicious caller can supply arbitrarily large tensors causing OOM. The model itself is not malicious, but deployments must enforce input size limits.",
        "recommendation": "Enforce maximum input shape at the serving layer (e.g. ORT session options, preprocessing validation). Document accepted input bounds in model card.",
        "severity": "LOW",
        "title": "Fully dynamic input shapes (2 input(s))"
      }
    ],
    "grade": "B",
    "score": 88
  },
  "source": {
    "filename": "nemo128.onnx",
    "hashes": {
      "sha256": "a9fde1486ebfcc08f328d75ad4610c67835fea58c73ba57e3209a6f6cf019e9f"
    },
    "input_type": "file",
    "size_bytes": 139764
  },
  "tensors": {
    "count": 16,
    "dtype_histogram": {
      "DOUBLE": 512,
      "FLOAT": 32901,
      "INT64": 13
    },
    "dtype_stats": {
      "DOUBLE": {
        "avg_bits_per_elem": 64.0,
        "bytes": 4096,
        "count": 1,
        "mb": 0.0
      },
      "FLOAT": {
        "avg_bits_per_elem": 32.0,
        "bytes": 131604,
        "count": 6,
        "mb": 0.13
      },
      "INT64": {
        "avg_bits_per_elem": 64.0,
        "bytes": 104,
        "count": 9,
        "mb": 0.0
      }
    },
    "integrity": {
      "declared_weight_bytes": 135804,
      "external_refs": [],
      "has_external_data": false,
      "weight_delta_mb": 0.0,
      "weights_size_est_bytes": 135804
    },
    "preview": [
      {
        "bits_per_elem": 32.0,
        "byte_len": 131584,
        "dims": [
          257,
          128
        ],
        "dtype_name": "FLOAT",
        "index": 0,
        "name": "tmp"
      },
      {
        "bits_per_elem": 64.0,
        "byte_len": 8,
        "dims": [
          1
        ],
        "dtype_name": "INT64",
        "index": 1,
        "name": "int64_1_1d"
      },
      {
        "bits_per_elem": 64.0,
        "byte_len": 8,
        "dims": [
          1
        ],
        "dtype_name": "INT64",
        "index": 2,
        "name": "int64_0_1d"
      },
      {
        "bits_per_elem": 64.0,
        "byte_len": 8,
        "dims": [
          1
        ],
        "dtype_name": "INT64",
        "index": 3,
        "name": "int64_9223372036854775807_1d"
      },
      {
        "bits_per_elem": 64.0,
        "byte_len": 8,
        "dims": [
          1
        ],
        "dtype_name": "INT64",
        "index": 4,
        "name": "int64_m1_1d"
      },
      {
        "bits_per_elem": 32.0,
        "byte_len": 4,
        "dims": [],
        "dtype_name": "FLOAT",
        "index": 5,
        "name": "preemph_2_cast"
      },
      {
        "bits_per_elem": 64.0,
        "byte_len": 32,
        "dims": [
          4
        ],
        "dtype_name": "INT64",
        "index": 6,
        "name": "tmp_11"
      },
      {
        "bits_per_elem": 64.0,
        "byte_len": 4096,
        "dims": [
          512
        ],
        "dtype_name": "DOUBLE",
        "index": 7,
        "name": "hann_window"
      },
      {
        "bits_per_elem": 64.0,
        "byte_len": 8,
        "dims": [],
        "dtype_name": "INT64",
        "index": 8,
        "name": "hop_length"
      },
      {
        "bits_per_elem": 32.0,
        "byte_len": 4,
        "dims": [],
        "dtype_name": "FLOAT",
        "index": 9,
        "name": "log_zero_guard_value_cast"
      },
      {
        "bits_per_elem": 64.0,
        "byte_len": 8,
        "dims": [],
        "dtype_name": "INT64",
        "index": 10,
        "name": "int64_1_cast"
      },
      {
        "bits_per_elem": 64.0,
        "byte_len": 16,
        "dims": [
          2
        ],
        "dtype_name": "INT64",
        "index": 11,
        "name": "const_2"
      },
      {
        "bits_per_elem": 64.0,
        "byte_len": 8,
        "dims": [],
        "dtype_name": "INT64",
        "index": 12,
        "name": "int64_0_cast"
      },
      {
        "bits_per_elem": 32.0,
        "byte_len": 4,
        "dims": [],
        "dtype_name": "FLOAT",
        "index": 13,
        "name": "int64_0_2_cast"
      },
      {
        "bits_per_elem": 32.0,
        "byte_len": 4,
        "dims": [],
        "dtype_name": "FLOAT",
        "index": 14,
        "name": "int64_1_9_cast"
      },
      {
        "bits_per_elem": 32.0,
        "byte_len": 4,
        "dims": [],
        "dtype_name": "FLOAT",
        "index": 15,
        "name": "const_13_cast"
      }
    ]
  },
  "tokenizer": {}
}