{
  "format": "LLM-SCAN",
  "format_version": "1.0",
  "generator": {
    "name": "llmscan-engine",
    "version": "2.0.0"
  },
  "scan_context": {
    "started_at": "2026-08-05T12:13:57+00:00Z",
    "ended_at": "2026-08-05T12:13:57+00:00Z",
    "duration_ms": 19,
    "limits": {
      "timeout_ms": 60000,
      "sandbox": true
    },
    "mode": "static-deep"
  },
  "source": {
    "input_type": "file",
    "filename": "nemo128.onnx",
    "size_bytes": 139764,
    "hashes": {
      "sha256": "a9fde1486ebfcc08f328d75ad4610c67835fea58c73ba57e3209a6f6cf019e9f"
    }
  },
  "model": {
    "format": "onnx",
    "arch": null,
    "quantization": null,
    "params_estimate": 33426,
    "file_size_bytes": 139764,
    "sha256": "a9fde1486ebfcc08f328d75ad4610c67835fea58c73ba57e3209a6f6cf019e9f",
    "sha512": "cde05a330bf70e5fa87e8487ea7a83c55d6de8c3973ec8d2d03abece461510174f04de6f9b61bcc0109c0a5e6b506c7cd18020f0d317e6eb50971892534a8dd9",
    "kv_meta": {},
    "scanner_model_info": {
      "producer_name": "OnnxScript",
      "producer_version": "0.3.2",
      "domain": "",
      "model_version": 0,
      "doc_string": "LogMelSpectrogram feature extractor for Nemo models",
      "ir_version": 8,
      "opsets": {
        "ai.onnx": 17
      },
      "node_count": 34,
      "unique_op_types": 20,
      "op_histogram": {
        "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
      },
      "op_risk_report": {
        "rows": [
          {
            "op": "Div",
            "count": 4,
            "risk": "normal",
            "note": "Standard ONNX op"
          },
          {
            "op": "Slice",
            "count": 3,
            "risk": "normal",
            "note": "Standard ONNX op"
          },
          {
            "op": "Sub",
            "count": 3,
            "risk": "normal",
            "note": "Standard ONNX op"
          },
          {
            "op": "Cast",
            "count": 3,
            "risk": "normal",
            "note": "Standard ONNX op"
          },
          {
            "op": "Add",
            "count": 3,
            "risk": "normal",
            "note": "Standard ONNX op"
          },
          {
            "op": "Where",
            "count": 3,
            "risk": "normal",
            "note": "Standard ONNX op"
          },
          {
            "op": "ReduceSumSquare",
            "count": 2,
            "risk": "normal",
            "note": "Standard ONNX op"
          },
          {
            "op": "Mul",
            "count": 1,
            "risk": "normal",
            "note": "Standard ONNX op"
          },
          {
            "op": "Concat",
            "count": 1,
            "risk": "normal",
            "note": "Standard ONNX op"
          },
          {
            "op": "Pad",
            "count": 1,
            "risk": "normal",
            "note": "Standard ONNX op"
          },
          {
            "op": "STFT",
            "count": 1,
            "risk": "normal",
            "note": "Standard ONNX op"
          },
          {
            "op": "MatMul",
            "count": 1,
            "risk": "normal",
            "note": "Standard ONNX op"
          },
          {
            "op": "Log",
            "count": 1,
            "risk": "normal",
            "note": "Standard ONNX op"
          },
          {
            "op": "Transpose",
            "count": 1,
            "risk": "normal",
            "note": "Standard ONNX op"
          },
          {
            "op": "Unsqueeze",
            "count": 1,
            "risk": "normal",
            "note": "Standard ONNX op"
          },
          {
            "op": "Shape",
            "count": 1,
            "risk": "normal",
            "note": "Standard ONNX op"
          },
          {
            "op": "Range",
            "count": 1,
            "risk": "normal",
            "note": "Standard ONNX op"
          },
          {
            "op": "Less",
            "count": 1,
            "risk": "normal",
            "note": "Standard ONNX op"
          },
          {
            "op": "ReduceSum",
            "count": 1,
            "risk": "normal",
            "note": "Standard ONNX op"
          },
          {
            "op": "Sqrt",
            "count": 1,
            "risk": "normal",
            "note": "Standard ONNX op"
          }
        ],
        "elevated_categories": [],
        "has_control_flow": false,
        "has_memory_amp": false,
        "has_provider_compat": false,
        "has_runtime_sensitive": false,
        "has_quantized": false,
        "has_nondeterministic": false,
        "has_string_ops": false
      },
      "inputs": [
        {
          "name": "waveforms",
          "dtype": "FLOAT",
          "shape": [
            "batch_size",
            "N"
          ]
        },
        {
          "name": "waveforms_lens",
          "dtype": "INT64",
          "shape": [
            "batch_size"
          ]
        }
      ],
      "outputs": [
        {
          "name": "features",
          "dtype": "FLOAT",
          "shape": [
            "batch_size",
            128,
            "T"
          ]
        },
        {
          "name": "features_lens",
          "dtype": "INT64",
          "shape": [
            "batch_size"
          ]
        }
      ],
      "shape_risk_report": {
        "inputs": [
          {
            "name": "waveforms",
            "dtype": "FLOAT",
            "shape": [
              "batch_size",
              "N"
            ],
            "has_dynamic": true,
            "has_negative": false,
            "est_elements": 1
          },
          {
            "name": "waveforms_lens",
            "dtype": "INT64",
            "shape": [
              "batch_size"
            ],
            "has_dynamic": true,
            "has_negative": false,
            "est_elements": 1
          }
        ],
        "outputs": [
          {
            "name": "features",
            "dtype": "FLOAT",
            "shape": [
              "batch_size",
              128,
              "T"
            ],
            "has_dynamic": true,
            "has_negative": false,
            "est_elements": 128
          },
          {
            "name": "features_lens",
            "dtype": "INT64",
            "shape": [
              "batch_size"
            ],
            "has_dynamic": true,
            "has_negative": false,
            "est_elements": 1
          }
        ],
        "any_dynamic_dims": true,
        "dynamic_dim_names": [
          "N",
          "T",
          "batch_size"
        ],
        "negative_dims_detected": false,
        "extreme_dims_detected": false,
        "input_elements_est": 2,
        "output_elements_est": 129,
        "amplification_ratio": 64.5
      },
      "tensor_count": 16,
      "param_estimate": 33426,
      "weights_size_bytes": 135804,
      "weights_size_mb": 0.13,
      "dtype_histogram": {
        "FLOAT": 32901,
        "INT64": 13,
        "DOUBLE": 512
      },
      "custom_domains": [],
      "custom_domain_detail": {},
      "custom_ops_report": {
        "has_non_standard": false,
        "standard_only": true,
        "domains": []
      },
      "has_external_data": false,
      "external_refs": [],
      "external_data_checks": {
        "present": false,
        "tensor_count": 0,
        "absolute_paths": [],
        "traversal_detected": [],
        "windows_drive_paths": [],
        "remote_url_paths": [],
        "null_byte_paths": [],
        "duplicate_files": [],
        "missing_files": [],
        "oob_reads": [],
        "size_validated_count": 0,
        "size_validation_total": 0
      },
      "quantized": false,
      "model_type": "audio-speech",
      "metadata_props": {
        "model_author": "Ilya Stupakov",
        "model_license": "MIT License"
      },
      "inline_tensor_mismatches": 0,
      "zero_dim_initializers": 0,
      "extreme_dim_tensors": 0,
      "initializer_integrity": {
        "count": 16,
        "inline_tensor_mismatches": 0,
        "empty_initializers": 0,
        "duplicate_names": 0,
        "duplicate_name_list": [],
        "unused_by_graph": 0,
        "unused_names": [],
        "shadowing_graph_inputs": 0,
        "shadowing_names": [],
        "nan_inf_scan": {
          "performed": true,
          "method": "full",
          "tensors_scanned": 7,
          "total_float_tensors": 7,
          "values_scanned": 33413,
          "nan_count": 0,
          "inf_count": 0,
          "affected_tensors": []
        }
      },
      "declared_weight_bytes": 135804,
      "declared_weight_mb": 0.13,
      "weight_delta_bytes": 3960,
      "weight_delta_mb": 0.0,
      "file_size_bytes": 139764,
      "file_size_mb": 0.13,
      "sha256": "a9fde1486ebfcc08f328d75ad4610c67835fea58c73ba57e3209a6f6cf019e9f",
      "sha512": "cde05a330bf70e5fa87e8487ea7a83c55d6de8c3973ec8d2d03abece461510174f04de6f9b61bcc0109c0a5e6b506c7cd18020f0d317e6eb50971892534a8dd9",
      "dtype_stats": {
        "FLOAT": {
          "count": 6,
          "bytes": 131604,
          "mb": 0.13,
          "avg_bits_per_elem": 32.0
        },
        "INT64": {
          "count": 9,
          "bytes": 104,
          "mb": 0.0,
          "avg_bits_per_elem": 64.0
        },
        "DOUBLE": {
          "count": 1,
          "bytes": 4096,
          "mb": 0.0,
          "avg_bits_per_elem": 64.0
        }
      },
      "tensor_preview": [
        {
          "index": 0,
          "name": "tmp",
          "dims": [
            257,
            128
          ],
          "dtype_name": "FLOAT",
          "byte_len": 131584,
          "bits_per_elem": 32.0
        },
        {
          "index": 1,
          "name": "int64_1_1d",
          "dims": [
            1
          ],
          "dtype_name": "INT64",
          "byte_len": 8,
          "bits_per_elem": 64.0
        },
        {
          "index": 2,
          "name": "int64_0_1d",
          "dims": [
            1
          ],
          "dtype_name": "INT64",
          "byte_len": 8,
          "bits_per_elem": 64.0
        },
        {
          "index": 3,
          "name": "int64_9223372036854775807_1d",
          "dims": [
            1
          ],
          "dtype_name": "INT64",
          "byte_len": 8,
          "bits_per_elem": 64.0
        },
        {
          "index": 4,
          "name": "int64_m1_1d",
          "dims": [
            1
          ],
          "dtype_name": "INT64",
          "byte_len": 8,
          "bits_per_elem": 64.0
        },
        {
          "index": 5,
          "name": "preemph_2_cast",
          "dims": [],
          "dtype_name": "FLOAT",
          "byte_len": 4,
          "bits_per_elem": 32.0
        },
        {
          "index": 6,
          "name": "tmp_11",
          "dims": [
            4
          ],
          "dtype_name": "INT64",
          "byte_len": 32,
          "bits_per_elem": 64.0
        },
        {
          "index": 7,
          "name": "hann_window",
          "dims": [
            512
          ],
          "dtype_name": "DOUBLE",
          "byte_len": 4096,
          "bits_per_elem": 64.0
        },
        {
          "index": 8,
          "name": "hop_length",
          "dims": [],
          "dtype_name": "INT64",
          "byte_len": 8,
          "bits_per_elem": 64.0
        },
        {
          "index": 9,
          "name": "log_zero_guard_value_cast",
          "dims": [],
          "dtype_name": "FLOAT",
          "byte_len": 4,
          "bits_per_elem": 32.0
        },
        {
          "index": 10,
          "name": "int64_1_cast",
          "dims": [],
          "dtype_name": "INT64",
          "byte_len": 8,
          "bits_per_elem": 64.0
        },
        {
          "index": 11,
          "name": "const_2",
          "dims": [
            2
          ],
          "dtype_name": "INT64",
          "byte_len": 16,
          "bits_per_elem": 64.0
        },
        {
          "index": 12,
          "name": "int64_0_cast",
          "dims": [],
          "dtype_name": "INT64",
          "byte_len": 8,
          "bits_per_elem": 64.0
        },
        {
          "index": 13,
          "name": "int64_0_2_cast",
          "dims": [],
          "dtype_name": "FLOAT",
          "byte_len": 4,
          "bits_per_elem": 32.0
        },
        {
          "index": 14,
          "name": "int64_1_9_cast",
          "dims": [],
          "dtype_name": "FLOAT",
          "byte_len": 4,
          "bits_per_elem": 32.0
        },
        {
          "index": 15,
          "name": "const_13_cast",
          "dims": [],
          "dtype_name": "FLOAT",
          "byte_len": 4,
          "bits_per_elem": 32.0
        }
      ],
      "op_histogram_full": {
        "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
      }
    },
    "opsets": {
      "ai.onnx": 17
    },
    "producer": "OnnxScript",
    "domain": "",
    "ir_version": 8,
    "nodes": 34,
    "initialized_tensors": 16,
    "weights_size_est_bytes": 135804,
    "inputs": [
      {
        "name": "waveforms",
        "dtype": "FLOAT",
        "shape": [
          "batch_size",
          "N"
        ]
      },
      {
        "name": "waveforms_lens",
        "dtype": "INT64",
        "shape": [
          "batch_size"
        ]
      }
    ],
    "outputs": [
      {
        "name": "features",
        "dtype": "FLOAT",
        "shape": [
          "batch_size",
          128,
          "T"
        ]
      },
      {
        "name": "features_lens",
        "dtype": "INT64",
        "shape": [
          "batch_size"
        ]
      }
    ],
    "op_hist_top": {
      "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
    },
    "dtype_hist": {
      "FLOAT": 32901,
      "INT64": 13,
      "DOUBLE": 512
    },
    "custom_domains": [],
    "has_external_data": false,
    "external_refs": [],
    "quantized": false,
    "model_type": "audio-speech",
    "file_size_mb": 0.13,
    "declared_weight_bytes": 135804,
    "declared_weight_mb": 0.13,
    "weight_delta_mb": 0.0,
    "dtype_stats": {
      "FLOAT": {
        "count": 6,
        "bytes": 131604,
        "mb": 0.13,
        "avg_bits_per_elem": 32.0
      },
      "INT64": {
        "count": 9,
        "bytes": 104,
        "mb": 0.0,
        "avg_bits_per_elem": 64.0
      },
      "DOUBLE": {
        "count": 1,
        "bytes": 4096,
        "mb": 0.0,
        "avg_bits_per_elem": 64.0
      }
    },
    "tensor_preview": [
      {
        "index": 0,
        "name": "tmp",
        "dims": [
          257,
          128
        ],
        "dtype_name": "FLOAT",
        "byte_len": 131584,
        "bits_per_elem": 32.0
      },
      {
        "index": 1,
        "name": "int64_1_1d",
        "dims": [
          1
        ],
        "dtype_name": "INT64",
        "byte_len": 8,
        "bits_per_elem": 64.0
      },
      {
        "index": 2,
        "name": "int64_0_1d",
        "dims": [
          1
        ],
        "dtype_name": "INT64",
        "byte_len": 8,
        "bits_per_elem": 64.0
      },
      {
        "index": 3,
        "name": "int64_9223372036854775807_1d",
        "dims": [
          1
        ],
        "dtype_name": "INT64",
        "byte_len": 8,
        "bits_per_elem": 64.0
      },
      {
        "index": 4,
        "name": "int64_m1_1d",
        "dims": [
          1
        ],
        "dtype_name": "INT64",
        "byte_len": 8,
        "bits_per_elem": 64.0
      },
      {
        "index": 5,
        "name": "preemph_2_cast",
        "dims": [],
        "dtype_name": "FLOAT",
        "byte_len": 4,
        "bits_per_elem": 32.0
      },
      {
        "index": 6,
        "name": "tmp_11",
        "dims": [
          4
        ],
        "dtype_name": "INT64",
        "byte_len": 32,
        "bits_per_elem": 64.0
      },
      {
        "index": 7,
        "name": "hann_window",
        "dims": [
          512
        ],
        "dtype_name": "DOUBLE",
        "byte_len": 4096,
        "bits_per_elem": 64.0
      },
      {
        "index": 8,
        "name": "hop_length",
        "dims": [],
        "dtype_name": "INT64",
        "byte_len": 8,
        "bits_per_elem": 64.0
      },
      {
        "index": 9,
        "name": "log_zero_guard_value_cast",
        "dims": [],
        "dtype_name": "FLOAT",
        "byte_len": 4,
        "bits_per_elem": 32.0
      },
      {
        "index": 10,
        "name": "int64_1_cast",
        "dims": [],
        "dtype_name": "INT64",
        "byte_len": 8,
        "bits_per_elem": 64.0
      },
      {
        "index": 11,
        "name": "const_2",
        "dims": [
          2
        ],
        "dtype_name": "INT64",
        "byte_len": 16,
        "bits_per_elem": 64.0
      },
      {
        "index": 12,
        "name": "int64_0_cast",
        "dims": [],
        "dtype_name": "INT64",
        "byte_len": 8,
        "bits_per_elem": 64.0
      },
      {
        "index": 13,
        "name": "int64_0_2_cast",
        "dims": [],
        "dtype_name": "FLOAT",
        "byte_len": 4,
        "bits_per_elem": 32.0
      },
      {
        "index": 14,
        "name": "int64_1_9_cast",
        "dims": [],
        "dtype_name": "FLOAT",
        "byte_len": 4,
        "bits_per_elem": 32.0
      },
      {
        "index": 15,
        "name": "const_13_cast",
        "dims": [],
        "dtype_name": "FLOAT",
        "byte_len": 4,
        "bits_per_elem": 32.0
      }
    ]
  },
  "tokenizer": {},
  "tensors": {
    "count": 16,
    "preview": [
      {
        "index": 0,
        "name": "tmp",
        "dims": [
          257,
          128
        ],
        "dtype_name": "FLOAT",
        "byte_len": 131584,
        "bits_per_elem": 32.0
      },
      {
        "index": 1,
        "name": "int64_1_1d",
        "dims": [
          1
        ],
        "dtype_name": "INT64",
        "byte_len": 8,
        "bits_per_elem": 64.0
      },
      {
        "index": 2,
        "name": "int64_0_1d",
        "dims": [
          1
        ],
        "dtype_name": "INT64",
        "byte_len": 8,
        "bits_per_elem": 64.0
      },
      {
        "index": 3,
        "name": "int64_9223372036854775807_1d",
        "dims": [
          1
        ],
        "dtype_name": "INT64",
        "byte_len": 8,
        "bits_per_elem": 64.0
      },
      {
        "index": 4,
        "name": "int64_m1_1d",
        "dims": [
          1
        ],
        "dtype_name": "INT64",
        "byte_len": 8,
        "bits_per_elem": 64.0
      },
      {
        "index": 5,
        "name": "preemph_2_cast",
        "dims": [],
        "dtype_name": "FLOAT",
        "byte_len": 4,
        "bits_per_elem": 32.0
      },
      {
        "index": 6,
        "name": "tmp_11",
        "dims": [
          4
        ],
        "dtype_name": "INT64",
        "byte_len": 32,
        "bits_per_elem": 64.0
      },
      {
        "index": 7,
        "name": "hann_window",
        "dims": [
          512
        ],
        "dtype_name": "DOUBLE",
        "byte_len": 4096,
        "bits_per_elem": 64.0
      },
      {
        "index": 8,
        "name": "hop_length",
        "dims": [],
        "dtype_name": "INT64",
        "byte_len": 8,
        "bits_per_elem": 64.0
      },
      {
        "index": 9,
        "name": "log_zero_guard_value_cast",
        "dims": [],
        "dtype_name": "FLOAT",
        "byte_len": 4,
        "bits_per_elem": 32.0
      },
      {
        "index": 10,
        "name": "int64_1_cast",
        "dims": [],
        "dtype_name": "INT64",
        "byte_len": 8,
        "bits_per_elem": 64.0
      },
      {
        "index": 11,
        "name": "const_2",
        "dims": [
          2
        ],
        "dtype_name": "INT64",
        "byte_len": 16,
        "bits_per_elem": 64.0
      },
      {
        "index": 12,
        "name": "int64_0_cast",
        "dims": [],
        "dtype_name": "INT64",
        "byte_len": 8,
        "bits_per_elem": 64.0
      },
      {
        "index": 13,
        "name": "int64_0_2_cast",
        "dims": [],
        "dtype_name": "FLOAT",
        "byte_len": 4,
        "bits_per_elem": 32.0
      },
      {
        "index": 14,
        "name": "int64_1_9_cast",
        "dims": [],
        "dtype_name": "FLOAT",
        "byte_len": 4,
        "bits_per_elem": 32.0
      },
      {
        "index": 15,
        "name": "const_13_cast",
        "dims": [],
        "dtype_name": "FLOAT",
        "byte_len": 4,
        "bits_per_elem": 32.0
      }
    ],
    "dtype_histogram": {
      "FLOAT": 32901,
      "INT64": 13,
      "DOUBLE": 512
    },
    "dtype_stats": {
      "FLOAT": {
        "count": 6,
        "bytes": 131604,
        "mb": 0.13,
        "avg_bits_per_elem": 32.0
      },
      "INT64": {
        "count": 9,
        "bytes": 104,
        "mb": 0.0,
        "avg_bits_per_elem": 64.0
      },
      "DOUBLE": {
        "count": 1,
        "bytes": 4096,
        "mb": 0.0,
        "avg_bits_per_elem": 64.0
      }
    },
    "integrity": {
      "declared_weight_bytes": 135804,
      "weights_size_est_bytes": 135804,
      "weight_delta_mb": 0.0,
      "has_external_data": false,
      "external_refs": []
    }
  },
  "security": {
    "grade": "B",
    "score": 88,
    "findings": [
      {
        "severity": "INFO",
        "category": "Shape Risk",
        "title": "Dynamic tensor dimensions detected",
        "detail": "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.",
        "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": "LOW",
        "category": "Shape Risk",
        "title": "High output/input element ratio: 64.5×",
        "detail": "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.",
        "recommendation": "Profile inference memory at maximum expected batch size before production deployment."
      },
      {
        "severity": "LOW",
        "category": "Supply Chain",
        "title": "No license field in ONNX model metadata",
        "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",
        "category": "Supply Chain",
        "title": "No provenance metadata in ONNX model",
        "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": "INFO",
        "category": "Provenance",
        "title": "Model producer: OnnxScript 0.3.2",
        "detail": "Producer metadata helps identify the tool that exported this model",
        "recommendation": "Verify producer matches expected export pipeline"
      },
      {
        "severity": "INFO",
        "category": "Classification",
        "title": "Inferred model type: audio-speech",
        "detail": "Based on op inventory (34 total nodes, 20 unique types)",
        "recommendation": "Verify this matches the model's intended use case"
      },
      {
        "severity": "INFO",
        "category": "Runtime",
        "title": "Default opset: 17",
        "detail": "Opset governs which ops and behaviors are available at runtime",
        "recommendation": "Use ONNX Runtime (CPU/CUDA/DirectML/OpenVINO backends); requires ORT ≥ 1.14"
      },
      {
        "severity": "LOW",
        "category": "Runtime Safety",
        "title": "Fully dynamic input shapes (2 input(s))",
        "detail": "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.",
        "recommendation": "Enforce maximum input shape at the serving layer (e.g. ORT session options, preprocessing validation). Document accepted input bounds in model card."
      }
    ]
  },
  "compatibility": [
    {
      "runtime": "ONNX Runtime",
      "direct_supported": true,
      "conversion_possible": true,
      "verification_required": false,
      "quant": null,
      "arch": true,
      "context": "opset 17 (requires ORT ≥ 1.14)",
      "notes": "ONNX Runtime (CPU/CUDA/DirectML/OpenVINO backends); requires ORT ≥ 1.14"
    },
    {
      "runtime": "TensorRT",
      "direct_supported": false,
      "conversion_possible": true,
      "verification_required": true,
      "quant": null,
      "arch": null,
      "context": "opset 17; dynamic batch: needs profiles",
      "notes": "Engine build required (trtexec / TRT Python API) | dynamic batch requires explicit optimization profiles (min/opt/max shapes)"
    },
    {
      "runtime": "OpenVINO",
      "direct_supported": false,
      "conversion_possible": true,
      "verification_required": true,
      "quant": null,
      "arch": null,
      "context": "opset 17; conversion required",
      "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"
    },
    {
      "runtime": "CoreML (Apple)",
      "direct_supported": false,
      "conversion_possible": false,
      "verification_required": true,
      "quant": null,
      "arch": null,
      "context": "opset 17; conversion via coremltools; opset out of range",
      "notes": "Conversion path via coremltools.converters.onnx.convert() — CoreML is not a direct ONNX runtime; the model must be converted to .mlpackage first. opset 17 exceeds CoreML converter limit (≤ 16). "
    },
    {
      "runtime": "llama.cpp / Ollama",
      "direct_supported": false,
      "conversion_possible": false,
      "verification_required": false,
      "quant": false,
      "arch": null,
      "context": null,
      "not_supported_msg": "ONNX not supported — requires GGUF format",
      "notes": "GGUF format only; convert with llama.cpp convert scripts"
    }
  ],
  "report": {
    "summary": "ONNX audio-speech model | opset 17 | 34 nodes | 33,426 params | 4 warnings / 4 informational",
    "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."
    ]
  }
}