modelaudit 0.2.54__tar.gz → 0.2.55__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {modelaudit-0.2.54 → modelaudit-0.2.55}/.github/workflows/README.md +1 -1
- {modelaudit-0.2.54 → modelaudit-0.2.55}/.github/workflows/nightly.yml +2 -1
- {modelaudit-0.2.54 → modelaudit-0.2.55}/.github/workflows/release-please.yml +3 -3
- {modelaudit-0.2.54 → modelaudit-0.2.55}/.github/workflows/test.yml +145 -18
- modelaudit-0.2.55/.release-please-manifest.json +4 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/AGENTS.md +3 -3
- {modelaudit-0.2.54 → modelaudit-0.2.55}/CHANGELOG.md +86 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/CONTRIBUTING.md +2 -2
- {modelaudit-0.2.54 → modelaudit-0.2.55}/Dockerfile +2 -2
- {modelaudit-0.2.54 → modelaudit-0.2.55}/Dockerfile.full +2 -2
- {modelaudit-0.2.54 → modelaudit-0.2.55}/Dockerfile.tensorflow +2 -2
- {modelaudit-0.2.54 → modelaudit-0.2.55}/PKG-INFO +19 -12
- {modelaudit-0.2.54 → modelaudit-0.2.55}/README.md +7 -5
- {modelaudit-0.2.54 → modelaudit-0.2.55}/SUPPORT.md +7 -5
- {modelaudit-0.2.54 → modelaudit-0.2.55}/docs/agents/dependencies.md +7 -1
- {modelaudit-0.2.54 → modelaudit-0.2.55}/docs/agents/picklescan-package-split.md +2 -2
- {modelaudit-0.2.54 → modelaudit-0.2.55}/docs/agents/release-process.md +2 -2
- {modelaudit-0.2.54 → modelaudit-0.2.55}/docs/maintainers/dependency-policy.md +1 -1
- {modelaudit-0.2.54 → modelaudit-0.2.55}/docs/maintainers/triage-playbook.md +1 -1
- {modelaudit-0.2.54 → modelaudit-0.2.55}/docs/user/metadata-extraction.md +10 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/auth/config.py +12 -50
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/cache/cache_policy.py +1 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/cache/optimized_config.py +6 -17
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/cache/scan_results_cache.py +37 -60
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/cli.py +185 -374
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/config/explanations.py +22 -54
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/core.py +25 -82
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/core_results.py +11 -22
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/detectors/jit_script.py +52 -110
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/detectors/network_comm.py +1 -10
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/detectors/suspicious_symbols.py +4 -47
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/integrations/jfrog.py +9 -13
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/integrations/license_checker.py +13 -25
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/integrations/mlflow.py +40 -303
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/integrations/sbom_generator.py +8 -33
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/metadata_extractor.py +3 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/models.py +4 -12
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanner_registry_metadata.py +3 -46
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanner_results.py +8 -13
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanner_selection.py +0 -3
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/archive_member_security.py +0 -15
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/base.py +3 -12
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/compressed_scanner.py +34 -113
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/coreml_scanner.py +1 -24
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/flax_msgpack_scanner.py +0 -196
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/gguf_scanner.py +61 -3
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/jinja2_template_scanner.py +0 -22
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/keras_h5_scanner.py +1 -33
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/keras_utils.py +35 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/keras_zip_scanner.py +1 -34
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/manifest_scanner.py +2 -14
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/oci_layer_scanner.py +5 -13
- modelaudit-0.2.55/modelaudit/scanners/onnx_scanner.py +19957 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/pickle_scanner.py +9 -5
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/pytorch_binary_scanner.py +7 -40
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/pytorch_zip_scanner.py +62 -247
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/safetensors_scanner.py +2 -40
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/tar_scanner.py +22 -23
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/text_scanner.py +20 -52
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/torchserve_mar_scanner.py +9 -81
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/weight_distribution_scanner.py +30 -1
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/zip_scanner.py +10 -24
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/telemetry.py +2 -10
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/file/detection.py +81 -3
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/file/handlers.py +22 -77
- modelaudit-0.2.55/modelaudit/utils/helpers/json_limits.py +33 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/helpers/result_conversion.py +1 -4
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/lfs.py +8 -15
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/repository_context.py +6 -16
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/sources/_huggingface_cache.py +3 -27
- modelaudit-0.2.55/modelaudit/utils/sources/_routing.py +32 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/sources/cloud_storage.py +59 -172
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/sources/huggingface.py +147 -277
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/sources/huggingface_paths.py +6 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/sources/jfrog.py +25 -52
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/sources/pytorch_hub.py +4 -19
- {modelaudit-0.2.54 → modelaudit-0.2.55}/package-lock.json +3 -3
- {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/AGENTS.md +5 -5
- {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/CHANGELOG.md +39 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/Cargo.lock +17 -17
- {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/Cargo.toml +3 -3
- {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/README.md +4 -2
- {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/pyproject.toml +2 -1
- {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/rust/src/expansion.rs +1 -7
- {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/rust/src/nested.rs +129 -195
- {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/rust/src/nested_surface.rs +2 -5
- {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/rust/src/opcode.rs +287 -323
- {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/rust/src/policy.rs +225 -449
- {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/rust/src/post_budget.rs +34 -100
- {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/rust/src/report.rs +0 -4
- {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/rust/src/stack.rs +49 -90
- {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/rust/src/state.rs +1120 -304
- {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/rust/src/strings.rs +5 -57
- {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/src/modelaudit_picklescan/api.py +83 -226
- {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/src/modelaudit_picklescan/call_graph.py +1989 -185
- {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/src/modelaudit_picklescan/report.py +4 -8
- {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/tests/test_adversarial_pickle_oracle.py +116 -505
- {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/tests/test_api.py +784 -1623
- {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/tests/test_call_graph_assignment_alias_cycle.py +148 -293
- {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/tests/test_call_graph_import_statements.py +9284 -4711
- {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/tests/test_call_graph_instance_defaults.py +45 -12
- {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/tests/test_call_graph_safe_spec_resolution.py +1112 -313
- {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/tests/test_nested_budget_limits.py +16 -81
- {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/tests/test_protocol0_line_operands.py +59 -114
- {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/tests/test_rust_engine.py +4 -4
- {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/uv.lock +1 -1
- {modelaudit-0.2.54 → modelaudit-0.2.55}/pyproject.toml +14 -7
- {modelaudit-0.2.54 → modelaudit-0.2.55}/renovate.json +2 -2
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/analysis/test_anomaly_detector.py +47 -82
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/cache/test_cache_correctness.py +249 -590
- modelaudit-0.2.55/tests/cache/test_optimized_config.py +126 -0
- modelaudit-0.2.55/tests/cache_lifecycle.py +17 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/conftest.py +3 -162
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/detectors/test_jit_script_detector.py +388 -1403
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/detectors/test_network_comm_detector.py +88 -316
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/detectors/test_secrets_detector.py +11 -28
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/helpers/__init__.py +0 -24
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/helpers/file_creators.py +0 -42
- modelaudit-0.2.55/tests/helpers/frameworks.py +12 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/integrations/test_jfrog.py +793 -939
- modelaudit-0.2.55/tests/integrations/test_jfrog_integration.py +502 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/integrations/test_jfrog_redirect_security.py +22 -124
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/integrations/test_license_checker.py +14 -46
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/integrations/test_mlflow_integration.py +333 -520
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/integrations/test_sarif_formatter.py +50 -123
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/integrations/test_sbom_license_integration.py +40 -70
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/integrations/test_sbom_symlink_containment.py +46 -97
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/integrations/test_sbom_url_fixes.py +73 -70
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/progress/test_base.py +63 -117
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/progress/test_hooks_egress.py +56 -166
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_base_scanner.py +59 -287
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_cntk_scanner.py +5 -16
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_compressed_scanner.py +8 -28
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_executorch_scanner.py +8 -16
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_flax_msgpack_scanner.py +18 -8
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_gguf_scanner.py +309 -93
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_jax_checkpoint_scanner.py +19 -57
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_jinja2_template_scanner.py +20 -55
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_keras_h5_scanner.py +1022 -1558
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_keras_zip_scanner.py +963 -1500
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_llamafile_scanner.py +31 -176
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_manifest_scanner.py +6 -20
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_metadata_scanner.py +2 -4
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_nemo_scanner.py +215 -828
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_oci_layer_scanner.py +3 -8
- modelaudit-0.2.55/tests/scanners/test_onnx_scanner.py +52922 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_paddle_scanner.py +2 -2
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_pickle_scanner.py +662 -8
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_pytorch_zip_scanner.py +297 -624
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_r_serialized_scanner.py +39 -98
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_rknn_scanner.py +3 -8
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_safetensors_scanner.py +76 -251
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_scanner_registry.py +15 -26
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_skops_scanner.py +10 -36
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_tar_scanner.py +86 -199
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_text_scanner.py +4 -12
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_tf_metagraph_scanner.py +40 -88
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_tf_savedmodel_scanner.py +85 -129
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_tflite_scanner.py +3 -8
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_torch7_scanner.py +3 -8
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_torchserve_mar_scanner.py +65 -149
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_weight_distribution_scanner.py +166 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_xgboost_scanner.py +13 -30
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_zip_scanner.py +65 -32
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_asset_inventory_integration.py +3 -10
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_auth_config.py +109 -210
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_benchmark_report.py +17 -49
- modelaudit-0.2.55/tests/test_cache_optimizations.py +310 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_checks_recording.py +14 -32
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_cli.py +141 -350
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_cli_cache_dir.py +10 -34
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_cli_default_command.py +46 -60
- modelaudit-0.2.55/tests/test_cli_file_filtering.py +107 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_cli_license_integration.py +43 -97
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_core.py +351 -1081
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_core_asset_extraction.py +21 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_debug_command.py +61 -99
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_dependency_lock.py +80 -1
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_docker_workflow.py +2 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_exit_codes.py +43 -102
- modelaudit-0.2.55/tests/test_file_hash.py +156 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_graceful_degradation.py +0 -19
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_huggingface_inconclusive_coverage.py +7 -52
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_huggingface_symlinks.py +70 -92
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_metadata_extractor.py +274 -235
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_models.py +123 -156
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_perf_workflow.py +28 -1
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_progress.py +14 -28
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_pydantic_models.py +101 -112
- modelaudit-0.2.55/tests/test_python_compatibility.py +83 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_real_world_dill_joblib.py +22 -4
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_release_workflow.py +73 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_secure_hasher.py +39 -42
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_streaming_scan.py +94 -217
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_telemetry.py +89 -243
- modelaudit-0.2.55/tests/test_telemetry_decoupling.py +386 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_timeout_configuration.py +53 -66
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_xdist_status.py +2 -1
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/utils/file/test_advanced_file_handler.py +8 -28
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/utils/file/test_filetype.py +97 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/utils/file/test_large_file_handler.py +6 -20
- modelaudit-0.2.55/tests/utils/helpers/test_disk_space.py +72 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/utils/sources/test_cloud_storage.py +94 -232
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/utils/sources/test_dvc_integration.py +97 -207
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/utils/sources/test_huggingface.py +174 -771
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/utils/sources/test_pytorch_hub.py +135 -321
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/utils/test_lfs.py +35 -88
- modelaudit-0.2.55/tests/whitelists/test_combined.py +67 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/uv.lock +1813 -783
- modelaudit-0.2.54/.release-please-manifest.json +0 -4
- modelaudit-0.2.54/modelaudit/scanners/onnx_scanner.py +0 -6470
- modelaudit-0.2.54/tests/cache/test_optimized_config.py +0 -185
- modelaudit-0.2.54/tests/helpers/frameworks.py +0 -61
- modelaudit-0.2.54/tests/integrations/test_jfrog_integration.py +0 -568
- modelaudit-0.2.54/tests/scanners/test_onnx_scanner.py +0 -10384
- modelaudit-0.2.54/tests/test_cache_optimizations.py +0 -480
- modelaudit-0.2.54/tests/test_cli_file_filtering.py +0 -147
- modelaudit-0.2.54/tests/test_file_hash.py +0 -174
- modelaudit-0.2.54/tests/test_telemetry_decoupling.py +0 -498
- modelaudit-0.2.54/tests/utils/helpers/test_disk_space.py +0 -88
- modelaudit-0.2.54/tests/whitelists/test_combined.py +0 -52
- modelaudit-0.2.54/tests/whitelists/test_huggingface_popular.py +0 -71
- modelaudit-0.2.54/tests/whitelists/test_organizations.py +0 -76
- {modelaudit-0.2.54 → modelaudit-0.2.55}/.dockerignore +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/.editorconfig +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/.gitattributes +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/.github/CODEOWNERS +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/.github/markdown-link-check-config.json +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/.github/workflows/codeql.yml +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/.github/workflows/docker-image-test.yml +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/.github/workflows/docker-publish.yml +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/.github/workflows/docs-check.yml +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/.github/workflows/perf.yml +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/.github/workflows/validate-pr-title.yml +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/.gitignore +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/.mailmap +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/.modelaudit.toml.example +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/.prettierignore +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/CLAUDE.md +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/CODE_OF_CONDUCT.md +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/LICENSE +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/MAINTAINERS.md +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/MANIFEST.in +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/RULES.md +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/SECURITY.md +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/THIRD_PARTY_NOTICES.md +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/codecov.yml +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/docker-compose.yml +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/docker-entrypoint.sh +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/docker-install-rust.sh +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/docs/agents/architecture.md +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/docs/agents/new-scanner-quickstart.md +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/docs/agents/performance-audit.md +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/docs/maintainers/cve-process.md +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/docs/maintainers/scanner-cve-coverage.md +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/docs/security/threat-model.md +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/docs/user/compatibility-matrix.md +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/docs/user/offline-air-gapped.md +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/docs/user/scanner-selection.md +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/docs/user/security-model.md +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/__init__.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/__main__.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/_size_format.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/analysis/__init__.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/analysis/anomaly_detector.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/analysis/entropy_analyzer.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/analysis/framework_patterns.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/analysis/integrated_analyzer.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/analysis/ml_context_analyzer.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/analysis/opcode_sequence_analyzer.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/analysis/semantic_analyzer.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/analysis/unified_context.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/auth/__init__.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/auth/client.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/cache/__init__.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/cache/adaptive_cache_keys.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/cache/batch_operations.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/cache/cache_manager.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/cache/trusted_config_store.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/config/__init__.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/config/constants.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/config/data/public_suffix_list.dat +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/config/data/spdx_licenses.json +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/config/generated_keras_layers.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/config/local_config.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/config/name_blacklist.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/config/rule_config.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/detectors/__init__.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/detectors/_metadata.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/detectors/cve_patterns.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/detectors/secrets.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/finding_identity.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/integrations/__init__.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/integrations/_mlflow_identity.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/integrations/_sarif_identity.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/integrations/_sarif_identity_urls.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/integrations/sarif_formatter.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/integrations/source_serialization.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/progress/__init__.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/progress/base.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/progress/console.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/progress/file.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/progress/hooks.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/progress/multi_phase.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/LICENSE +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/NOTICE +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/__init__.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/py.typed +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/__init__.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/__init__.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/__init__.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/allocation_description_pb2.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/api_def_pb2.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/attr_value_pb2.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/cost_graph_pb2.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/cpp_shape_inference_pb2.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/dataset_metadata_pb2.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/dataset_options_pb2.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/dataset_pb2.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/device_attributes_pb2.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/full_type_pb2.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/function_pb2.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/graph_debug_info_pb2.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/graph_pb2.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/graph_transfer_info_pb2.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/kernel_def_pb2.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/log_memory_pb2.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/model_pb2.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/node_def_pb2.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/op_def_pb2.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/optimized_function_graph_pb2.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/reader_base_pb2.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/resource_handle_pb2.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/step_stats_pb2.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/tensor_description_pb2.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/tensor_pb2.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/tensor_shape_pb2.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/tensor_slice_pb2.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/types_pb2.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/variable_pb2.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/versions_pb2.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/protobuf/__init__.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/protobuf/cluster_pb2.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/protobuf/composite_tensor_variant_pb2.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/protobuf/control_flow_pb2.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/protobuf/core_platform_payloads_pb2.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/protobuf/critical_section_pb2.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/protobuf/data_service_pb2.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/protobuf/debug_event_pb2.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/protobuf/debug_pb2.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/protobuf/device_filters_pb2.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/protobuf/device_properties_pb2.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/protobuf/fingerprint_pb2.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/protobuf/meta_graph_pb2.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/protobuf/named_tensor_pb2.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/protobuf/remote_tensor_handle_pb2.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/protobuf/rewriter_config_pb2.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/protobuf/saved_model_pb2.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/protobuf/saved_object_graph_pb2.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/protobuf/saver_pb2.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/protobuf/service_config_pb2.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/protobuf/snapshot_pb2.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/protobuf/struct_pb2.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/protobuf/tensor_bundle_pb2.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/protobuf/trackable_object_graph_pb2.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/protobuf/transport_options_pb2.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/protobuf/verifier_config_pb2.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/py.typed +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/rule_catalog.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/rules.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/__init__.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/_archive_config.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/_archive_locations.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/_archive_outcomes.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/_evidence_redaction.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/_network_indicators.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/_pickle_memo.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/_string_extraction.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/archive_dispatch.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/catboost_scanner.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/cntk_scanner.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/executorch_scanner.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/jax_checkpoint_scanner.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/joblib_scanner.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/lightgbm_scanner.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/llamafile_scanner.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/metadata_scanner.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/mxnet_scanner.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/nemo_scanner.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/numpy_scanner.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/openvino_scanner.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/paddle_scanner.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/picklescan_adapter.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/pmml_scanner.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/protobuf_model_candidate_scanner.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/pytorch_zip_support/__init__.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/pytorch_zip_support/archive_members.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/r_serialized_scanner.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/rar_scanner.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/rknn_scanner.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/rule_mapper.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/sevenzip_scanner.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/skops_scanner.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/tensorrt_scanner.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/tf_metagraph_scanner.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/tf_savedmodel_scanner.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/tflite_scanner.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/torch7_scanner.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/xgboost_scanner.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/__init__.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/_path_hardening.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/auto_defaults.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/file/__init__.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/file/_compression.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/file/filtering.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/file/hdf5.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/file/large_file_handler.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/file/streaming.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/helpers/__init__.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/helpers/assets.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/helpers/auto_defaults.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/helpers/cache_decorator.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/helpers/code_validation.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/helpers/disk_space.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/helpers/evidence.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/helpers/file_hash.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/helpers/file_iterator.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/helpers/interrupt_handler.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/helpers/ml_context.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/helpers/retry.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/helpers/secure_hasher.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/helpers/types.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/model_extensions.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/sources/__init__.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/sources/_huggingface_download_worker.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/sources/dvc.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/tensorflow_compat.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/version.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/whitelists/__init__.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/whitelists/huggingface_organizations.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/whitelists/huggingface_popular.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/package.json +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/rust/README.md +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/rust/src/lib.rs +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/rust/src/options.rs +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/rust/src/pybridge.rs +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/rust/src/strings_policy.rs +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/src/modelaudit_picklescan/__init__.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/src/modelaudit_picklescan/options.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/src/modelaudit_picklescan/py.typed +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/tests/conftest.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/tests/framework_fixtures.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/tests/parity_corpus.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/tests/pickle_test_helpers.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/tests/test_call_graph_click.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/tests/test_call_graph_execnet.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/tests/test_call_graph_local_imports.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/tests/test_call_graph_six.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/tests/test_call_graph_tkinter.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/tests/test_import_boundary.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/tests/test_known_size_streams.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/tests/test_native_interface.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/tests/test_options.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/tests/test_report.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/pyproject.toml.example +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/release-please-config.json +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/requirements-tensorflow.txt +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/scripts/README.md +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/scripts/benchmark_report.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/scripts/check_circular_imports.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/scripts/compile_tensorflow_protos.sh +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/scripts/fetch_hf_org_models.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/scripts/fetch_hf_top_models.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/scripts/generate_keras_layer_inventory.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/scripts/jax_flax_scanning_demo.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/scripts/large_pickle_corpus_qa.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/scripts/minimal_circular_check.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/scripts/profile_scan.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/scripts/validate_docker_publish_tag.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/__init__.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/analysis/test_analysis_modules.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/analysis/test_entropy_analyzer.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/analysis/test_framework_patterns.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/analysis/test_ml_context_analyzer.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/analysis/test_opcode_sequence_analyzer.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/analysis/test_unified_context.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/exploits/exploit1_basic_torch_bypass.pkl +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/exploits/exploit2_advanced_torch_bypass.pkl +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/exploits/exploit3_sophisticated_hybrid.pkl +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/exploits/exploit4_supply_chain_attack.pkl +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/exploits/exploit5_ultra_high_confidence.pkl +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/exploits/exploit6_ordereddict_bypass.pkl +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/exploits/exploit7_nested_collections.pkl +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/exploits/exploit9_manual_construction.pkl +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/exploits/exploit_ultimate_50pct.pkl +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/generators/generate_7z_test_assets.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/generators/generate_advanced_pickle_tests.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/generators/generate_evil_pickle.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/generators/generate_jinja2_test_assets.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/generators/generate_nested_pickle_assets.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/generators/generate_os_alias_tests.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/generators/generate_safe_nested_assets.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/generators/generate_safetensors_assets.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/generators/generate_security_assets.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/huggingface_false_positive_manifest.json +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/huggingface_model_cards/timm_convnext_femto.d1_in1k_README.txt +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/huggingface_model_cards/timm_mobilenetv3_small_100.lamb_in1k_README.txt +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/huggingface_model_cards/timm_repvgg_a0.rvgg_in1k_README.txt +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/pickles/memo_attack.pkl +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/pickles/multiple_stream_attack.pkl +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/pickles/nt_alias_attack.pkl +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/pickles/posix_alias_attack.pkl +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/pickles/stack_global_attack.pkl +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/archives/path_traversal.zip +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/archives/safe_model.zip +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/benign/chatml_format.json +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/benign/complex_legitimate.json +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/benign/conditional_system.json +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/benign/huggingface_llama.json +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/benign/simple_roles.json +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/benign/special_tokens.json +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/edge_cases/empty_template.json +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/edge_cases/malformed_template.json +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/edge_cases/multiple_templates.json +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/edge_cases/no_template.json +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/edge_cases/oversized_template.json +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/malicious/attr_bypass.json +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/malicious/combined_attack.json +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/malicious/config_exploit.json +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/malicious/cve_2024_34359_original.json +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/malicious/direct_eval.json +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/malicious/env_extraction.json +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/malicious/file_access.json +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/malicious/hex_bypass.json +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/malicious/loop_discovery.json +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/malicious/network_exfil.json +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/malicious/request_exploit.json +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/malicious/subprocess_injection.json +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/obfuscated/base64_payload.json +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/obfuscated/char_construction.json +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/obfuscated/format_bypass.json +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/obfuscated/getattr_bypass.json +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/standalone/benign_chat.j2 +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/standalone/malicious_standalone.jinja +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/standalone/malicious_subprocess.template +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/standalone/suspicious_benign.template +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/yaml/malicious_config.yaml +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/yaml/model_config.yaml +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/keras/custom_layer_attack.h5 +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/keras/loss_injection.h5 +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/keras/malicious_lambda.h5 +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/keras/metric_injection.h5 +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/keras/safe_model.h5 +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/manifests/safe_config.json +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/manifests/suspicious_config.json +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/pickles/decode_exec_chain.pkl +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/pickles/dill_func.pkl +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/pickles/malicious_model_realistic.pkl +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/pickles/malicious_system_call.pkl +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/pickles/nested_pickle_base64.pkl +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/pickles/nested_pickle_hex.pkl +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/pickles/nested_pickle_multistage.pkl +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/pickles/nested_pickle_raw.pkl +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/pickles/safe_data.pkl +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/pickles/safe_large_model.pkl +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/pickles/safe_model_with_binary.pkl +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/pickles/safe_model_with_encoding.pkl +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/pickles/safe_model_with_tokens.pkl +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/pickles/safe_nested_structure.pkl +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/pickles/simple_nested.pkl +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/pipeline.skops +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/pytorch/malicious_eval.pt +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/pytorch/safe_model.pt +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/safetensors/malicious_import.safetensors +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/safetensors/safe_model.safetensors +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/sentencepiece/custom_unknown_disabled_specials.model +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/sentencepiece/custom_unknown_disabled_specials_byte_fallback.model +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/tensorflow/malicious_pyfunc/saved_model.pb +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/tensorflow/safe_savedmodel/saved_model.pb +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/scenarios/license_scenarios/agpl_component/agpl_model.pkl +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/scenarios/license_scenarios/agpl_component/neural_network.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/scenarios/license_scenarios/mit_model/config.json +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/scenarios/license_scenarios/mit_model/model.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/scenarios/license_scenarios/mit_model/model_weights.pkl +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/scenarios/license_scenarios/mixed_licenses/LICENSE +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/scenarios/license_scenarios/mixed_licenses/apache_component.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/scenarios/license_scenarios/mixed_licenses/dataset_cc_nc.json +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/scenarios/license_scenarios/mixed_licenses/gpl_utility.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/scenarios/license_scenarios/mixed_licenses/mixed_model.pkl +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/scenarios/license_scenarios/unlicensed_dataset/embeddings.npy +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/scenarios/license_scenarios/unlicensed_dataset/features.csv +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/scenarios/license_scenarios/unlicensed_dataset/training_data.json +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/scenarios/security_scenarios/mixed_malicious_model/config.json +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/scenarios/security_scenarios/mixed_malicious_model/model.pkl +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/benchmarks/test_picklescan_benchmarks.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/benchmarks/test_scan_benchmarks.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/cache/__init__.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/cli_output.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/config/__init__.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/config/test_name_blacklist.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/demo_license_functionality.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/detectors/test_builtin_detection.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/detectors/test_compile_eval_variants.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/detectors/test_cve_detection.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/detectors/test_cve_detection.py_cases/test_pickle_binunicode8_setitem.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/detectors/test_runpy_detection.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/detectors/test_suspicious_symbols.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/helpers/assertions.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/helpers/cache.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/helpers/http.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/helpers/pickle_framework.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/helpers/processes.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/helpers/scanners.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/helpers/tensorflow.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/helpers/text.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/helpers/workflows.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/integrations/test_license_integration.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/progress/__init__.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_catboost_scanner.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_coreml_scanner.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_evidence_redaction.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_evidence_redaction_authorization_continuation.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_joblib_scanner.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_joblib_scanner_codecs.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_keras_h5_lambda_helpers.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_keras_utils.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_lightgbm_scanner.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_mxnet_scanner.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_numpy_scanner.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_onnx_dependency_handling.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_openvino_scanner.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_picklescan_adapter.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_pmml_dependency_handling.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_pmml_scanner.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_pytorch_binary_scanner.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_rule_code_registry_consistency.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_rule_mapper.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_sevenzip_scanner.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_skops_content_analysis.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_tensorrt_scanner.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scripts/test_hf_whitelist_generators.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scripts/test_large_pickle_corpus_qa.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_asset_list.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_basic.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_bug1_confidence_exploit.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_cache_cli.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_cli_logging_handlers.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_cli_output.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_cloud_url_detection.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_committed_fixture_hygiene.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_cve_2025_10155_bin_pickle.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_dill_joblib_enhanced.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_directory_file_filtering.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_double_interrupt.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_false_positive_fixes.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_gguf_sbom_integration.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_header_discrepancy.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_huggingface_extensions.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_huggingface_fp_regression_harness.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_importlib_detection.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_integration.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_jax_flax_integration.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_jit_script_integration.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_lazy_loading.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_lazy_loading_integration.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_manifest_name_policy.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_nested_pickle_integration.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_network_comm_integration.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_nightly_asset_contracts.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_nightly_prerequisites.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_os_alias_detection.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_os_subprocess_detection.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_path_traversal.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_performance_benchmarks.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_pickle_context_filtering.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_python_version_warning.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_pytorch_zip_detection.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_regression_corpus.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_regular_scan_hash.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_rules.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_safetensors_optimization.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_scanner_selection.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_security_asset_integration.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_security_enhancements.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_shebang_context.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_simple_jinja2.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_sklearn_joblib_false_positive.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_tensorflow_lambda_detection.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_utils.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_weak_hash_detection.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_webbrowser_detection.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_why_explanations.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/utils/__init__.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/utils/file/__init__.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/utils/file/test_advanced_size_limits.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/utils/file/test_file_filter.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/utils/file/test_file_type_validation_integration.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/utils/file/test_integration_file_type_demo.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/utils/file/test_streaming_analysis.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/utils/file/test_streaming_preview.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/utils/helpers/test_asset_from_scan_result.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/utils/helpers/test_auto_defaults.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/utils/helpers/test_code_validation.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/utils/helpers/test_evidence.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/utils/helpers/test_file_iterator.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/utils/helpers/test_interrupt_handling.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/utils/helpers/test_ml_context_false_positives.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/utils/helpers/test_py_compile_improvements.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/utils/helpers/test_retry.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/utils/helpers/test_secure_hasher.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/utils/test_result_conversion.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/whitelists/__init__.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/workflows/__init__.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/workflows/test_docker_workflow.py +0 -0
- {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/xdist_status.py +0 -0
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
| **Release** | `release-please.yml` | Pushes to main and manual dispatch |
|
|
13
13
|
| **Docker Publish** | `docker-publish.yml` | Published releases and manual dispatch |
|
|
14
14
|
|
|
15
|
-
Python CI ignores documentation-only PRs, which are handled by the documentation check workflow. Code PRs use GitHub's default merge-ref checkout and run fail-fast root tests on Python 3.10, 3.12, and 3.
|
|
15
|
+
Python CI ignores documentation-only PRs, which are handled by the documentation check workflow. Code PRs use GitHub's default merge-ref checkout and run fail-fast root tests on Python 3.10, 3.12, 3.13, and 3.14, a single Windows shard on Python 3.11, the reduced NumPy compatibility lane, and the standalone pickle package matrix on Python 3.10-3.14. Python changes also run Python 3.14 native pickle/H5 smoke tests on macOS and Windows. Python 3.14 uses the broad root test profile. Workflow-changing PRs run exhaustive sharded root tests across Python 3.10-3.14. Dependency audit runs on dependency-relevant PR merge refs and again on `merge_group` candidate SHAs, while the optional `run-slow-tests` label remains PR-only because merge-group payloads do not carry pull request label context.
|
|
16
16
|
|
|
17
17
|
Pushes to `main` and `merge_group` runs validate the exact integration SHA with the full sharded fast-test matrices across Linux and Windows, the dedicated Python 3.12 slow/integration lane, 10-way coverage sharding, the full NumPy compatibility lane, and the build/package lanes. Merge-group runs intentionally fail closed: they are treated as integration events instead of depending on changed-path classification to decide whether required lanes should run, so `CI Success` cannot go green from skipped or setup-only jobs on the merge queue candidate SHA.
|
|
18
18
|
|
|
@@ -18,12 +18,13 @@ jobs:
|
|
|
18
18
|
fail-fast: false
|
|
19
19
|
matrix:
|
|
20
20
|
os: [ubuntu-latest, windows-latest]
|
|
21
|
-
python-version: ["3.10", "3.11", "3.12", "3.13"]
|
|
21
|
+
python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
|
|
22
22
|
shard: [0, 1, 2]
|
|
23
23
|
exclude:
|
|
24
24
|
- { os: windows-latest, python-version: "3.10" }
|
|
25
25
|
- { os: windows-latest, python-version: "3.12" }
|
|
26
26
|
- { os: windows-latest, python-version: "3.13" }
|
|
27
|
+
- { os: windows-latest, python-version: "3.14" }
|
|
27
28
|
steps:
|
|
28
29
|
- &checkout-repo
|
|
29
30
|
name: Checkout repo
|
|
@@ -605,7 +605,7 @@ jobs:
|
|
|
605
605
|
- os: ubuntu-latest
|
|
606
606
|
artifact-suffix: linux
|
|
607
607
|
build-sdist: "true"
|
|
608
|
-
- os: macos-
|
|
608
|
+
- os: macos-15
|
|
609
609
|
artifact-suffix: macos-arm64
|
|
610
610
|
build-sdist: "false"
|
|
611
611
|
- os: macos-15-intel
|
|
@@ -664,10 +664,10 @@ jobs:
|
|
|
664
664
|
cargo test --manifest-path Cargo.toml
|
|
665
665
|
|
|
666
666
|
- name: Lint standalone package with Ruff
|
|
667
|
-
run: uv run --with 'ruff==0.17.
|
|
667
|
+
run: uv run --with 'ruff==0.17.1' ruff check src tests
|
|
668
668
|
|
|
669
669
|
- name: Check standalone package formatting with Ruff
|
|
670
|
-
run: uv run --with 'ruff==0.17.
|
|
670
|
+
run: uv run --with 'ruff==0.17.1' ruff format --check src tests
|
|
671
671
|
|
|
672
672
|
- name: Type check standalone package with mypy
|
|
673
673
|
run: uv run --with 'mypy>=2.4.0,<2.5.0' --with pytest mypy src tests
|
|
@@ -398,7 +398,7 @@ jobs:
|
|
|
398
398
|
strategy:
|
|
399
399
|
fail-fast: false
|
|
400
400
|
matrix:
|
|
401
|
-
include: ${{ github.event_name == 'pull_request' && needs.changes.outputs.workflows != 'true' && fromJSON('[{"python-version":"3.10","shard-count":1,"shard-index":0,"shard-name":"1/1"},{"python-version":"3.12","shard-count":1,"shard-index":0,"shard-name":"1/1"},{"python-version":"3.13","shard-count":1,"shard-index":0,"shard-name":"1/1"}]') || fromJSON('[{"python-version":"3.10","shard-count":2,"shard-index":0,"shard-name":"1/2"},{"python-version":"3.10","shard-count":2,"shard-index":1,"shard-name":"2/2"},{"python-version":"3.11","shard-count":2,"shard-index":0,"shard-name":"1/2"},{"python-version":"3.11","shard-count":2,"shard-index":1,"shard-name":"2/2"},{"python-version":"3.12","shard-count":2,"shard-index":0,"shard-name":"1/2"},{"python-version":"3.12","shard-count":2,"shard-index":1,"shard-name":"2/2"},{"python-version":"3.13","shard-count":2,"shard-index":0,"shard-name":"1/2"},{"python-version":"3.13","shard-count":2,"shard-index":1,"shard-name":"2/2"}]') }}
|
|
401
|
+
include: ${{ github.event_name == 'pull_request' && needs.changes.outputs.workflows != 'true' && fromJSON('[{"python-version":"3.10","shard-count":1,"shard-index":0,"shard-name":"1/1"},{"python-version":"3.12","shard-count":1,"shard-index":0,"shard-name":"1/1"},{"python-version":"3.13","shard-count":1,"shard-index":0,"shard-name":"1/1"},{"python-version":"3.14","shard-count":1,"shard-index":0,"shard-name":"1/1"}]') || fromJSON('[{"python-version":"3.10","shard-count":2,"shard-index":0,"shard-name":"1/2"},{"python-version":"3.10","shard-count":2,"shard-index":1,"shard-name":"2/2"},{"python-version":"3.11","shard-count":2,"shard-index":0,"shard-name":"1/2"},{"python-version":"3.11","shard-count":2,"shard-index":1,"shard-name":"2/2"},{"python-version":"3.12","shard-count":2,"shard-index":0,"shard-name":"1/2"},{"python-version":"3.12","shard-count":2,"shard-index":1,"shard-name":"2/2"},{"python-version":"3.13","shard-count":2,"shard-index":0,"shard-name":"1/2"},{"python-version":"3.13","shard-count":2,"shard-index":1,"shard-name":"2/2"},{"python-version":"3.14","shard-count":2,"shard-index":0,"shard-name":"1/2"},{"python-version":"3.14","shard-count":2,"shard-index":1,"shard-name":"2/2"}]') }}
|
|
402
402
|
steps:
|
|
403
403
|
- *checkout-repo
|
|
404
404
|
|
|
@@ -440,6 +440,34 @@ jobs:
|
|
|
440
440
|
--modelaudit-shard-index ${{ matrix.shard-index }} \
|
|
441
441
|
--tb=short --durations=15
|
|
442
442
|
|
|
443
|
+
python314-platform-smoke:
|
|
444
|
+
name: Python 3.14 Smoke (${{ matrix.os }})
|
|
445
|
+
needs: changes
|
|
446
|
+
if: needs.changes.outputs.integration == 'true' || needs.changes.outputs.python == 'true' || needs.changes.outputs.workflows == 'true'
|
|
447
|
+
runs-on: ${{ matrix.os }}
|
|
448
|
+
timeout-minutes: 20
|
|
449
|
+
strategy:
|
|
450
|
+
fail-fast: false
|
|
451
|
+
matrix:
|
|
452
|
+
os: [macos-latest, windows-latest]
|
|
453
|
+
env:
|
|
454
|
+
PROMPTFOO_DISABLE_TELEMETRY: "1"
|
|
455
|
+
steps:
|
|
456
|
+
- *checkout-repo
|
|
457
|
+
|
|
458
|
+
- *install-uv
|
|
459
|
+
|
|
460
|
+
- *install-rust-toolchain
|
|
461
|
+
|
|
462
|
+
- name: Sync Python 3.14 smoke dependencies
|
|
463
|
+
run: uv sync --locked --python 3.14 --extra all-ci-windows --extra h5
|
|
464
|
+
|
|
465
|
+
- name: Verify Python 3.14 native and H5 imports
|
|
466
|
+
run: uv run --locked --python 3.14 python -c "import h5py, modelaudit_picklescan._rust; print(h5py.version.info)"
|
|
467
|
+
|
|
468
|
+
- name: Test Python 3.14 native pickle and H5 scanning
|
|
469
|
+
run: uv run --locked --python 3.14 pytest tests/test_python_compatibility.py -n 0 --tb=short
|
|
470
|
+
|
|
443
471
|
slow-tests:
|
|
444
472
|
name: Slow/Integration Tests (Python 3.12)
|
|
445
473
|
needs: changes
|
|
@@ -485,11 +513,22 @@ jobs:
|
|
|
485
513
|
|
|
486
514
|
- *install-uv
|
|
487
515
|
|
|
488
|
-
|
|
516
|
+
# Python 3.12 traces large functions slowly: python/cpython#127953.
|
|
517
|
+
# The fast-test matrix retains Python 3.12 without coverage.
|
|
518
|
+
- name: Pin Python version
|
|
519
|
+
run: |
|
|
520
|
+
uv python pin 3.11
|
|
489
521
|
|
|
490
522
|
- *install-rust-toolchain
|
|
491
523
|
|
|
492
|
-
-
|
|
524
|
+
- name: Cache Python dependencies
|
|
525
|
+
uses: actions/cache@caa296126883cff596d87d8935842f9db880ef25 # v5
|
|
526
|
+
with:
|
|
527
|
+
path: *python-cache-paths
|
|
528
|
+
key: ${{ runner.os }}-uv-py3.11-${{ hashFiles('**/uv.lock', '**/pyproject.toml') }}
|
|
529
|
+
restore-keys: |
|
|
530
|
+
${{ runner.os }}-uv-py3.11-
|
|
531
|
+
${{ runner.os }}-uv-
|
|
493
532
|
|
|
494
533
|
- *sync-all-ci-dependencies
|
|
495
534
|
|
|
@@ -852,20 +891,44 @@ jobs:
|
|
|
852
891
|
needs: changes
|
|
853
892
|
if: needs.changes.outputs.integration == 'true' || needs.changes.outputs.picklescan == 'true' || needs.changes.outputs.workflows == 'true'
|
|
854
893
|
runs-on: ${{ matrix.os }}
|
|
855
|
-
timeout-minutes: ${{ matrix.os == 'macos-15-intel' && 30 || 15 }}
|
|
894
|
+
timeout-minutes: ${{ matrix.timeout-minutes || ((matrix.os == 'macos-15-intel' || matrix.os == 'windows-latest') && 30 || 15) }}
|
|
856
895
|
strategy:
|
|
857
896
|
fail-fast: false
|
|
858
897
|
matrix:
|
|
859
898
|
os: [ubuntu-latest]
|
|
860
|
-
python-version: ["3.10", "3.11", "3.12", "3.13"]
|
|
899
|
+
python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
|
|
861
900
|
include:
|
|
901
|
+
- os: ubuntu-latest
|
|
902
|
+
python-version: "3.12"
|
|
903
|
+
timeout-minutes: 30
|
|
904
|
+
- os: ubuntu-latest
|
|
905
|
+
python-version: "3.13"
|
|
906
|
+
timeout-minutes: 30
|
|
907
|
+
- os: ubuntu-latest
|
|
908
|
+
python-version: "3.14"
|
|
909
|
+
timeout-minutes: 30
|
|
862
910
|
# Exercise the release platform where scalar-probe timing regressed.
|
|
863
911
|
- os: macos-15-intel
|
|
864
912
|
python-version: "3.11"
|
|
913
|
+
timeout-minutes: 45
|
|
865
914
|
- os: macos-15-intel
|
|
866
915
|
python-version: "3.12"
|
|
916
|
+
timeout-minutes: 45
|
|
917
|
+
- os: macos-15
|
|
918
|
+
python-version: "3.14"
|
|
919
|
+
timeout-minutes: 60
|
|
920
|
+
- os: macos-15-intel
|
|
921
|
+
python-version: "3.14"
|
|
922
|
+
timeout-minutes: 75
|
|
923
|
+
- os: ubuntu-24.04-arm
|
|
924
|
+
python-version: "3.14"
|
|
925
|
+
timeout-minutes: 30
|
|
926
|
+
- os: windows-latest
|
|
927
|
+
python-version: "3.14"
|
|
928
|
+
timeout-minutes: 90
|
|
867
929
|
defaults:
|
|
868
930
|
run:
|
|
931
|
+
shell: bash
|
|
869
932
|
working-directory: packages/modelaudit-picklescan
|
|
870
933
|
steps:
|
|
871
934
|
- *checkout-repo
|
|
@@ -876,7 +939,7 @@ jobs:
|
|
|
876
939
|
|
|
877
940
|
- name: Install Rust toolchain
|
|
878
941
|
run: |
|
|
879
|
-
rustup toolchain install 1.
|
|
942
|
+
rustup toolchain install 1.85.0 --profile minimal
|
|
880
943
|
rustup toolchain install stable --profile minimal --component rustfmt --component clippy
|
|
881
944
|
rustup default stable
|
|
882
945
|
|
|
@@ -904,7 +967,7 @@ jobs:
|
|
|
904
967
|
|
|
905
968
|
- name: Check Rust scanner MSRV
|
|
906
969
|
run: |
|
|
907
|
-
cargo +1.
|
|
970
|
+
cargo +1.85.0 check --manifest-path Cargo.toml --locked
|
|
908
971
|
|
|
909
972
|
- name: Lint Rust scanner crate
|
|
910
973
|
run: |
|
|
@@ -916,11 +979,11 @@ jobs:
|
|
|
916
979
|
|
|
917
980
|
- name: Lint standalone package with Ruff
|
|
918
981
|
run: |
|
|
919
|
-
uv run --with 'ruff==0.17.
|
|
982
|
+
uv run --with 'ruff==0.17.1' ruff check src tests
|
|
920
983
|
|
|
921
984
|
- name: Check standalone package formatting with Ruff
|
|
922
985
|
run: |
|
|
923
|
-
uv run --with 'ruff==0.17.
|
|
986
|
+
uv run --with 'ruff==0.17.1' ruff format --check src tests
|
|
924
987
|
|
|
925
988
|
- name: Type check standalone package with mypy
|
|
926
989
|
run: |
|
|
@@ -928,7 +991,16 @@ jobs:
|
|
|
928
991
|
|
|
929
992
|
- name: Run standalone package tests
|
|
930
993
|
run: |
|
|
931
|
-
uv run --with pytest --with pytest-xdist --with 'typing-extensions>=4.14' pytest -n auto tests --tb=short
|
|
994
|
+
uv run --with pytest --with pytest-xdist --with 'typing-extensions>=4.14' pytest -n auto tests --tb=short --junitxml="$RUNNER_TEMP/picklescan-test-results.xml"
|
|
995
|
+
|
|
996
|
+
- name: Preserve Windows standalone test evidence
|
|
997
|
+
if: always() && runner.os == 'Windows'
|
|
998
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
|
|
999
|
+
with:
|
|
1000
|
+
name: picklescan-tests-${{ matrix.os }}-${{ matrix.python-version }}
|
|
1001
|
+
path: ${{ runner.temp }}/picklescan-test-results.xml
|
|
1002
|
+
retention-days: 7
|
|
1003
|
+
if-no-files-found: warn
|
|
932
1004
|
|
|
933
1005
|
- name: Build standalone package
|
|
934
1006
|
run: |
|
|
@@ -942,6 +1014,11 @@ jobs:
|
|
|
942
1014
|
run: |
|
|
943
1015
|
set -euo pipefail
|
|
944
1016
|
uv venv /tmp/modelaudit-picklescan-wheel-smoke
|
|
1017
|
+
if [[ -x /tmp/modelaudit-picklescan-wheel-smoke/bin/python ]]; then
|
|
1018
|
+
SMOKE_PYTHON=/tmp/modelaudit-picklescan-wheel-smoke/bin/python
|
|
1019
|
+
else
|
|
1020
|
+
SMOKE_PYTHON=/tmp/modelaudit-picklescan-wheel-smoke/Scripts/python.exe
|
|
1021
|
+
fi
|
|
945
1022
|
|
|
946
1023
|
shopt -s nullglob
|
|
947
1024
|
picklescan_wheels=(/tmp/modelaudit-picklescan-dist/modelaudit_picklescan-*.whl)
|
|
@@ -951,23 +1028,69 @@ jobs:
|
|
|
951
1028
|
exit 1
|
|
952
1029
|
fi
|
|
953
1030
|
|
|
954
|
-
uv pip install --python
|
|
1031
|
+
uv pip install --python "$SMOKE_PYTHON" "${picklescan_wheels[0]}"
|
|
955
1032
|
|
|
956
1033
|
smoke_dir="$(mktemp -d)"
|
|
957
1034
|
(
|
|
958
1035
|
cd "$smoke_dir"
|
|
959
|
-
PYTHONPATH=''
|
|
1036
|
+
PYTHONPATH='' "$SMOKE_PYTHON" -I - <<'PY'
|
|
1037
|
+
import importlib.metadata
|
|
960
1038
|
import importlib.util
|
|
1039
|
+
import io
|
|
1040
|
+
import pickle
|
|
1041
|
+
import sys
|
|
1042
|
+
from pathlib import Path
|
|
961
1043
|
|
|
962
1044
|
import modelaudit_picklescan
|
|
1045
|
+
import modelaudit_picklescan._rust as native
|
|
963
1046
|
|
|
964
1047
|
assert importlib.util.find_spec("modelaudit") is None
|
|
965
|
-
assert importlib.
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
1048
|
+
assert not importlib.metadata.requires("modelaudit-picklescan")
|
|
1049
|
+
for module in (modelaudit_picklescan, native):
|
|
1050
|
+
origin = Path(module.__file__).resolve()
|
|
1051
|
+
assert origin.is_relative_to(Path(sys.prefix).resolve()), origin
|
|
1052
|
+
print(f"{module.__name__}: {origin}")
|
|
1053
|
+
assert (Path(modelaudit_picklescan.__file__).parent / "py.typed").is_file()
|
|
1054
|
+
|
|
1055
|
+
for protocol in range(pickle.HIGHEST_PROTOCOL + 1):
|
|
1056
|
+
payload = pickle.dumps({"weights": [1, 2, 3]}, protocol=protocol)
|
|
1057
|
+
path = Path(f"protocol-{protocol}.pkl")
|
|
1058
|
+
path.write_bytes(payload)
|
|
1059
|
+
for report in (
|
|
1060
|
+
modelaudit_picklescan.scan_bytes(payload),
|
|
1061
|
+
modelaudit_picklescan.scan_stream(io.BytesIO(payload)),
|
|
1062
|
+
modelaudit_picklescan.scan_file(path),
|
|
1063
|
+
):
|
|
1064
|
+
assert report.status.value == "complete", report
|
|
1065
|
+
assert report.verdict.value == "clean", report
|
|
1066
|
+
assert not any(notice.code == "engine_fallback" for notice in report.notices)
|
|
1067
|
+
|
|
1068
|
+
malicious = modelaudit_picklescan.scan_bytes(b"cos\nsystem\n(S'echo unexpected'\ntR.")
|
|
1069
|
+
assert malicious.verdict.value == "malicious", malicious
|
|
1070
|
+
assert any(finding.rule_code == "DANGEROUS_CALL" for finding in malicious.findings), malicious
|
|
1071
|
+
truncated = modelaudit_picklescan.scan_bytes(b"\x80\x04")
|
|
1072
|
+
assert truncated.status.value != "complete", truncated
|
|
1073
|
+
assert truncated.verdict.value != "clean", truncated
|
|
1074
|
+
import string
|
|
1075
|
+
|
|
1076
|
+
# Qualify normal lazy-pattern initialization after importing the scanner.
|
|
1077
|
+
string.Template("warm").substitute({})
|
|
1078
|
+
template = modelaudit_picklescan.scan_bytes(
|
|
1079
|
+
b"\x80\x04cstring\nTemplate.substitute\ncstring\nTemplate\n\x8c\x05plain\x85R}\x86R."
|
|
1080
|
+
)
|
|
1081
|
+
assert template.status.value == "complete", template
|
|
1082
|
+
assert template.verdict.value == "clean", template
|
|
1083
|
+
assert any(
|
|
1084
|
+
invocation.get("template_receiver_state_unmodified") is True
|
|
1085
|
+
for invocation in template.metadata.get("callable_invocations", ())
|
|
1086
|
+
), template
|
|
1087
|
+
if sys.version_info >= (3, 14):
|
|
1088
|
+
for method in ("Template.is_valid", "Template.get_identifiers"):
|
|
1089
|
+
payload = b"\x80\x04cstring\n" + method.encode() + b"\ncstring\nTemplate\n\x8c\x05plain\x85R\x85R."
|
|
1090
|
+
helper = modelaudit_picklescan.scan_bytes(payload)
|
|
1091
|
+
assert helper.status.value == "complete", helper
|
|
1092
|
+
assert helper.verdict.value == "clean", helper
|
|
1093
|
+
print(f"standalone wheel API passed on {sys.version}")
|
|
971
1094
|
PY
|
|
972
1095
|
)
|
|
973
1096
|
|
|
@@ -983,6 +1106,7 @@ jobs:
|
|
|
983
1106
|
uv-lock-check,
|
|
984
1107
|
type-check,
|
|
985
1108
|
windows-tests,
|
|
1109
|
+
python314-platform-smoke,
|
|
986
1110
|
test,
|
|
987
1111
|
slow-tests,
|
|
988
1112
|
coverage,
|
|
@@ -1015,6 +1139,7 @@ jobs:
|
|
|
1015
1139
|
LICENSE_RESULT="${{ needs.license-check.result }}"
|
|
1016
1140
|
UV_LOCK_RESULT="${{ needs.uv-lock-check.result }}"
|
|
1017
1141
|
TYPE_CHECK_RESULT="${{ needs.type-check.result }}"
|
|
1142
|
+
PYTHON314_SMOKE_RESULT="${{ needs.python314-platform-smoke.result }}"
|
|
1018
1143
|
WINDOWS_RESULT="${{ needs.windows-tests.result }}"
|
|
1019
1144
|
TEST_RESULT="${{ needs.test.result }}"
|
|
1020
1145
|
SLOW_RESULT="${{ needs.slow-tests.result }}"
|
|
@@ -1045,6 +1170,7 @@ jobs:
|
|
|
1045
1170
|
echo " license-check: $LICENSE_RESULT"
|
|
1046
1171
|
echo " uv-lock-check: $UV_LOCK_RESULT"
|
|
1047
1172
|
echo " type-check: $TYPE_CHECK_RESULT"
|
|
1173
|
+
echo " python314-platform-smoke: $PYTHON314_SMOKE_RESULT"
|
|
1048
1174
|
echo " windows-tests: $WINDOWS_RESULT"
|
|
1049
1175
|
echo " test: $TEST_RESULT"
|
|
1050
1176
|
echo " slow-tests: $SLOW_RESULT"
|
|
@@ -1078,6 +1204,7 @@ jobs:
|
|
|
1078
1204
|
require_success "$EXPECT_DEPENDENCY_SURFACE" "$UV_LOCK_RESULT" "uv-lock-check"
|
|
1079
1205
|
require_success "$EXPECT_CORE_FAST" "$TYPE_CHECK_RESULT" "type-check"
|
|
1080
1206
|
require_success "$EXPECT_CORE_FAST" "$WINDOWS_RESULT" "windows-tests"
|
|
1207
|
+
require_success "$EXPECT_CORE_FAST" "$PYTHON314_SMOKE_RESULT" "python314-platform-smoke"
|
|
1081
1208
|
require_success "$EXPECT_TEST" "$TEST_RESULT" "test"
|
|
1082
1209
|
require_success "$EXPECT_SLOW" "$SLOW_RESULT" "slow-tests"
|
|
1083
1210
|
require_success "$EXPECT_COVERAGE" "$COVERAGE_RESULT" "coverage"
|
|
@@ -18,7 +18,7 @@ This repo publishes **two PyPI packages with independent versions**:
|
|
|
18
18
|
| `modelaudit` | `./` (root) | `pyproject.toml` + `uv.lock` | `CHANGELOG.md` |
|
|
19
19
|
| `modelaudit-picklescan` | `packages/modelaudit-picklescan/` | `pyproject.toml` + `Cargo.toml` | `packages/modelaudit-picklescan/CHANGELOG.md` |
|
|
20
20
|
|
|
21
|
-
Root `modelaudit` hard-requires `modelaudit-picklescan>=0.1.
|
|
21
|
+
Root `modelaudit` hard-requires `modelaudit-picklescan>=0.1.13,<0.2.0` — when the sibling crosses `0.2.0`, bump the constraint in the same PR or the next `modelaudit` release is uninstallable. Both packages are driven by a single `release-please` workflow (`.github/workflows/release-please.yml`) with components defined in `release-please-config.json` and current versions in `.release-please-manifest.json`. Full publishing details — trusted publishing, manual `workflow_dispatch` recovery (`root_version` / `picklescan_version`), and yank procedure — are in [`docs/agents/release-process.md`](docs/agents/release-process.md). For work inside the picklescan package, start from [`packages/modelaudit-picklescan/AGENTS.md`](packages/modelaudit-picklescan/AGENTS.md).
|
|
22
22
|
|
|
23
23
|
## Mission & Principles
|
|
24
24
|
|
|
@@ -106,7 +106,7 @@ PROMPTFOO_DISABLE_TELEMETRY=1 uv run pytest -n auto -m "not slow and not integra
|
|
|
106
106
|
|
|
107
107
|
## Coding & Style Guardrails
|
|
108
108
|
|
|
109
|
-
- **Python:** 3.10–3.
|
|
109
|
+
- **Python:** 3.10–3.14 supported. Classes PascalCase, functions/vars snake_case, constants UPPER_SNAKE_CASE, always type hints.
|
|
110
110
|
- **Comments:** Use sparingly to explain intent, not mechanics.
|
|
111
111
|
- **Docs/Markdown:** Keep concise; when formatting markdown/json/yaml, use `npm ci --ignore-scripts && npx prettier --write "**/*.{md,yaml,yml,json}"` if instructed or if formatting drifts.
|
|
112
112
|
- **Dependencies:** Do not add new packages without explicit approval and updating `pyproject.toml`/locks.
|
|
@@ -117,7 +117,7 @@ PROMPTFOO_DISABLE_TELEMETRY=1 uv run pytest -n auto -m "not slow and not integra
|
|
|
117
117
|
- Preserve or strengthen detections; test both benign and malicious samples.
|
|
118
118
|
- Follow existing scanner patterns and update registries, CLI wiring, and docs as needed.
|
|
119
119
|
- Add comprehensive tests, including edge cases and regression coverage.
|
|
120
|
-
- Ensure compatibility across Python 3.10–3.
|
|
120
|
+
- Ensure compatibility across Python 3.10–3.14 and handle missing optional deps gracefully.
|
|
121
121
|
|
|
122
122
|
## Testing & Routing Guardrails
|
|
123
123
|
|
|
@@ -5,8 +5,94 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.2.55](https://github.com/promptfoo/modelaudit/compare/v0.2.54...v0.2.55) (2026-11-06)
|
|
9
|
+
|
|
10
|
+
### Features
|
|
11
|
+
|
|
12
|
+
- **metadata:** make directory table display limits configurable ([#1896](https://github.com/promptfoo/modelaudit/issues/1896)) ([df49ca9](https://github.com/promptfoo/modelaudit/commit/df49ca90c5a10095ea405e4d769f0a18eb09210a))
|
|
13
|
+
- **python:** support standard CPython 3.14 in ModelAudit ([#1908](https://github.com/promptfoo/modelaudit/issues/1908)) ([58a6784](https://github.com/promptfoo/modelaudit/commit/58a67841beb8eab124dcfad457bb281597d50e75))
|
|
14
|
+
|
|
15
|
+
### Bug Fixes
|
|
16
|
+
|
|
17
|
+
- **ci:** restore Click 8.5 scanning and Windows fixtures ([#1906](https://github.com/promptfoo/modelaudit/issues/1906)) ([f996f12](https://github.com/promptfoo/modelaudit/commit/f996f12c7f3b3f338844a4380639cadc095a9c1f))
|
|
18
|
+
- **ci:** run branch coverage on Python 3.11 ([#1921](https://github.com/promptfoo/modelaudit/issues/1921)) ([8220211](https://github.com/promptfoo/modelaudit/commit/8220211638eca66875f73eb80d7eaa07c976a7eb))
|
|
19
|
+
- **deps:** update rust crate pyo3 to 0.30.0 ([#1914](https://github.com/promptfoo/modelaudit/issues/1914)) ([415819f](https://github.com/promptfoo/modelaudit/commit/415819fa0b58d097dd201c0fa3f41eba33431c78))
|
|
20
|
+
- **gguf:** recognize the remaining ggml tensor types ([#1909](https://github.com/promptfoo/modelaudit/issues/1909)) ([a5cbeca](https://github.com/promptfoo/modelaudit/commit/a5cbeca11d6ad3e2c9a93dd7501eddf339a36dbf))
|
|
21
|
+
- **gguf:** validate interleaved row groups per matrix ([#1920](https://github.com/promptfoo/modelaudit/issues/1920)) ([6a6bdba](https://github.com/promptfoo/modelaudit/commit/6a6bdba5c13def3b3368a1198bbbfde0d6d4b666))
|
|
22
|
+
- improve scanner coverage and preserve per-member diagnostics ([#1942](https://github.com/promptfoo/modelaudit/issues/1942)) ([71aa359](https://github.com/promptfoo/modelaudit/commit/71aa359096c83f84b8fc3831171f63ccb6a60d47))
|
|
23
|
+
- **metadata:** keep YAML fallback warnings out of JSON stdout ([#1895](https://github.com/promptfoo/modelaudit/issues/1895)) ([c25b6ee](https://github.com/promptfoo/modelaudit/commit/c25b6ee3b3640f7707469e930a2b319ee0f61e76))
|
|
24
|
+
- **metadata:** preserve extraction errors in filtered and directory output ([#1888](https://github.com/promptfoo/modelaudit/issues/1888)) ([3873627](https://github.com/promptfoo/modelaudit/commit/3873627dc8644797eb39127e3a859e5f23d6d2e7))
|
|
25
|
+
- **onnx:** preserve bounded control-flow weight coverage ([#1848](https://github.com/promptfoo/modelaudit/issues/1848)) ([3cdd9e0](https://github.com/promptfoo/modelaudit/commit/3cdd9e05c07593c6c68f86f214b192354877d943))
|
|
26
|
+
- **picklescan:** restore Click 8.5 detection and Windows test portability ([#1864](https://github.com/promptfoo/modelaudit/issues/1864)) ([2838c99](https://github.com/promptfoo/modelaudit/commit/2838c9978c2254ae699c63712b311b2491d047a7))
|
|
27
|
+
- **picklescan:** support standard CPython 3.14 ([#1907](https://github.com/promptfoo/modelaudit/issues/1907)) ([5cda52b](https://github.com/promptfoo/modelaudit/commit/5cda52b0698109e479d10394579cf2128bf3d577))
|
|
28
|
+
- **results:** report completed scans with security findings as successful ([#1941](https://github.com/promptfoo/modelaudit/issues/1941)) ([d37d506](https://github.com/promptfoo/modelaudit/commit/d37d506844d3a2107dd4c4a1a4d120a375f2821e))
|
|
29
|
+
- **routing:** avoid pickle false positives on license text ([#1911](https://github.com/promptfoo/modelaudit/issues/1911)) ([6128247](https://github.com/promptfoo/modelaudit/commit/6128247b084f3bb64724706ab037c7de8ab242f5))
|
|
30
|
+
|
|
8
31
|
## [Unreleased]
|
|
9
32
|
|
|
33
|
+
### Added
|
|
34
|
+
|
|
35
|
+
- Support standard CPython 3.14 with native pickle and H5 scanner validation across Linux, macOS, and Windows.
|
|
36
|
+
- Add `metadata --table-limit` to control the number of file entries displayed in directory tables.
|
|
37
|
+
|
|
38
|
+
### Changed
|
|
39
|
+
|
|
40
|
+
- Require Rust 1.85 or newer for source builds of the native pickle scanner and use Rust 1.85 in Docker builds for PyO3 0.30 compatibility.
|
|
41
|
+
|
|
42
|
+
### Fixed
|
|
43
|
+
|
|
44
|
+
- Report completed scans as successful in the Python API even when a security check raises a warning.
|
|
45
|
+
- Upgrade APT packages in all Docker runtime images to include Debian security fixes.
|
|
46
|
+
- Distinguish reshape dimensions from activation data when tracing both inputs of an ONNX attention contraction. Dynamically transformed weights retain their coverage gaps.
|
|
47
|
+
|
|
48
|
+
- Preserve individual pickle coverage notices and member locations in consolidated scan results.
|
|
49
|
+
- Validate PyTorch storage references alongside wide RNG state tuples and track up to 2,048 dictionary entries in pickle state analysis.
|
|
50
|
+
- Recognize standalone Tekken vocabulary JSON without routing token spellings to model checkpoint parsers. Filtered domain-shaped code tokens in model cards no longer consume the network evidence classification budget.
|
|
51
|
+
|
|
52
|
+
- Exclude weight consumers in proven-unreachable Loop and Scan bodies while retaining operator security checks and coverage for uncertain execution.
|
|
53
|
+
- Resolve bound function attributes during finite ONNX replay and ignore unrelated dead transforms without dropping live weight consumers.
|
|
54
|
+
- Bound duplicate singular fields during ONNX control preflight and preserve findings and explicit incomplete coverage when admission stops.
|
|
55
|
+
- Preserve finite-loop vector proofs when ONNX Concat combines carried state with known constant operands, while retaining incomplete coverage for unknown operands.
|
|
56
|
+
|
|
57
|
+
- Separate physical ONNX weight-storage checks from logical expanded-view admission, preserving per-view and cumulative limits without repeatedly copying source payloads.
|
|
58
|
+
- Preserve immutable constants captured by effective ONNX function graph bindings during recurrent weight proofs, including defaults, overrides and forwarded graphs.
|
|
59
|
+
- Reuse successful and rejected ONNX vector-control proofs across Expand, axes and Reshape analysis, including recurrent state proofs, so each immutable tensor payload is read once.
|
|
60
|
+
- Bound primary Einsum weight orientation with the shared literal-equation cache before decoding, including resolved Expand and repeated function consumers.
|
|
61
|
+
- Require immutable or proven Scan-8 batch extents and admit typed, budgeted body-local constants before finite weight replay.
|
|
62
|
+
- Preserve trusted runtime-input types through ONNX loop replay and function scopes without trusting shadowed names or unknown operands.
|
|
63
|
+
- Bound and reuse parsed ONNX Einsum equations during repeated shape inference, and reuse capture proofs for equivalent scalar bindings without weakening type checks.
|
|
64
|
+
- Exclude unused function graph arguments from finite ONNX replay while retaining unknown results for unresolved used bindings and scopes.
|
|
65
|
+
- Keep unknown Cast targets and unproven pooling samples from suppressing ONNX weight-coverage gaps.
|
|
66
|
+
- Bound retained ONNX function opset maps before construction and preserve incomplete coverage when a scope exceeds the aggregate budget.
|
|
67
|
+
- Reject unresolved ONNX function overrides and invalid Squeeze rank proofs without consuming capture budgets for unused graph arguments across reentry, dependency, and reachability traversal.
|
|
68
|
+
- Keep local-function graph captures reachable during ONNX weight analysis, and prevent invalid transform bindings from establishing weight-coverage exclusions.
|
|
69
|
+
- Bound and reuse ONNX repeated Constant attribute copies and opset environments, and resolve caller-bound weight-transform attributes while preserving findings and incomplete-coverage outcomes.
|
|
70
|
+
- Reuse ONNX local-function default maps and bound copying them into call environments.
|
|
71
|
+
- Avoid false ONNX weight-coverage gaps for empty Scan-8 batches while retaining downstream coverage for returned states and output dimensions.
|
|
72
|
+
- Charge each distinct ONNX weight-analysis view against the cumulative byte budget while preserving accepted findings and reporting incomplete coverage for skipped views.
|
|
73
|
+
- Preserve ONNX training-normalization and loop-exit weight coverage when entry shapes are unproven or state ranks later increase.
|
|
74
|
+
- Apply ONNX output rank and type semantics to deferred numeric provenance, and retain coverage when pooling or convolution turns dimensions into numeric coefficients.
|
|
75
|
+
- Retain nested ONNX Loop control dependencies despite unused captures, promote deferred BatchNormalization parameter coverage to matrix outputs, and require proven entry ranks before suppressing recurrent weight gaps.
|
|
76
|
+
- Preserve ONNX weight coverage across unknown broadcast ranks, including runtime values with only shape-control provenance, unproven branch and Reshape dimensions, captured runtime inputs, and repeated loop state changes, including initializer-backed states, cumulative scalar rank growth, repeated body consumers, and final transformed weights without stale first-iteration shapes or fabricated products of symbolic dimensions; distinguish builtin operators from exact local-function overloads in weight roles, transforms, and shape proofs while retaining unmatched builtin overloads; avoid false coverage gaps for unchanged shape-control values and provenance, separately captured constants, and fixed-shape single-step Scans including shared sequence extents beside symbolic inputs and feature widths, no-op shape-restoring loops, unchanged Scan-8 batch views, and padded Scan-8 outputs with omitted sequence lengths only for builtin Scan producers.
|
|
77
|
+
- Preserve ONNX coverage through successive, replacement, and sibling loop-state transfers without feeding stacked Scan outputs back into independent sequence slices, including independent Constant and initializer replacements, deferred gaps and retained matrix lineages, activation recurrences with independently analyzed opposite weight views through nested graph and function calls, including constant-initialized activations and invariant carried weights, without suppressing later weight uses or sibling transfers, and nested branch, skipped-loop, and caller-bound shape and graph attributes; preserve optional control-flow output positions, distinguish immutable caller bindings, use initial state for provably skipped Loops and zero-extent modern Scans, preserve invariant modern Scan shape values and the invariant entry condition, and honor independent immutable Loop bounds, sliced Shape attributes, and prove single-iteration termination with caller-bound attributes only for builtin operators, excluding local Constant call attributes from immutable control proofs, and materialize bounded Scan input slices and stacked Loop and Scan weight views with their actual axes only when their values remain invariant; preserve proven axes of partially known Loop stacks without widening iteration replay or concrete-shape metadata; use proven per-iteration input shapes for nested Scan bounds, recurrence, and GatherND indices without trusting intermediate shape declarations or unresolved source-lineage shapes, preserve separately proven recurrent hidden/cell state shapes, and keep Scan-8 sequence lengths and batch axes separate from body transforms, preserve initial states for immutable zero lengths, and fail closed for unmaterialized final-state, sequence-input, and stacked views without analyzing unused Scan-8 padding as a weight.
|
|
78
|
+
- Exclude empty weight views before statistical reductions, enforce per-tensor and cumulative ONNX budgets on expanded weight views in both scanner routes, and bound and reuse successful or failed scalar-control decoding before dimension allocation, shared condition-producer indexes, invocation-local Scan axis decoding and bounded lineage-name views, repeated graph and sibling-state traversal while excluding unreferenced function graph arguments, constant-context copying and aggregate cache-key construction after excluding shadowed and nonconstant bindings and reusing only relevant immutable attribute environments, dependency-closure work, inferred ranks, rank-only permutations, aggregate shape dimensions, and analysis-cache retention; keep inferred dimension arithmetic within signed 64-bit bounds; retain traversal-exhaustion evidence independently of model value names and invalidate Scan slices that exceed the transform budget; reuse Scan repetition proofs across sibling states, reject copying reshapes, and preserve independent weight findings and budget capacity when another view cannot be prepared.
|
|
79
|
+
- Avoid incomplete ONNX weight analysis when mixed shape and activation bookkeeping fanout does not feed generated weights.
|
|
80
|
+
- Preserve ONNX lineage coverage when zero-length Scan paths, overridable shape defaults, or capped rank-promotable values can hide generated weights.
|
|
81
|
+
- Bound ONNX repeated-state reentry work while preserving local-function, shape, and lineage coverage.
|
|
82
|
+
- Preserve caller-bound ONNX Loop conditions over body initializer defaults and reuse local-function analysis across unused attribute values.
|
|
83
|
+
- Preserve early TAR findings after sparse-file probing and enforce SafeTensors JSON nesting limits consistently across Python versions.
|
|
84
|
+
- Keep complete streamed pickle analysis available for oversized remote source URLs across Python versions, preserving SBOM findings and source associations.
|
|
85
|
+
- Validate retired interleaved GGUF row groups within each matrix, so incomplete groups cannot pass by combining rows across higher dimensions.
|
|
86
|
+
- Send metadata YAML fallback warnings to stderr so they do not contaminate JSON output.
|
|
87
|
+
- Preserve metadata extraction errors with `--security-only` and display them in directory table output.
|
|
88
|
+
- Avoid treating ordinary license text such as `Microsoft.` as a pickle stream when its apparent opcodes have an invalid stack. Preserve valid streams with residual stack values or overwritten memo entries, nested payload detection, and completed executable prefixes with malformed trailing data.
|
|
89
|
+
- Recognize the remaining GGUF tensor types that ggml defines (IQ1_S, IQ1_M, IQ2_XXS, IQ2_XS, IQ2_S, IQ3_XXS, IQ4_NL, I8, I16, I32, I64, F64, TQ1_0, TQ2_0, MXFP4, NVFP4, Q1_0, and Q2_0) and the retired Q4_0_4_4, Q4_0_4_8, and Q4_0_8_8 layouts that published files still use, so GGUF files that use them get tensor bounds validation instead of an inconclusive scan. Other retired and unknown type IDs remain inconclusive.
|
|
90
|
+
- Check GGUF block alignment per tensor row, as ggml does, so a block-quantized tensor whose first dimension is not a multiple of its block size is flagged even when its total element count is. The retired Q4_0 layouts must also hold whole groups of rows.
|
|
91
|
+
- Detect invoked class constructors returned by source-backed module compatibility hooks, including Click 8.5's legacy LazyFile export.
|
|
92
|
+
- Preserve annotated and conditional compatibility aliases and use consistent, depth-bounded constant-branch analysis. Check metaclasses during returned-class member lookup with a bounded traversal that reuses shared ancestors, and retain dangerous paths across incomplete alternatives and separate pickle invocations. Report incomplete analysis for export deletion, class-method compatibility hooks, returned functions or function-local classes, unresolved member paths, loop or context-manager bindings, and unproven metaclasses. Skip provably unreachable deletions and retain existing possible paths for uncertain export bindings. Preserve resolved hooks and independent findings when source or metaclass analysis reaches a limit. Continue supplemental stream checks after call-graph coverage gaps, and keep operational failures unsuccessful even with trusted padding.
|
|
93
|
+
- Preserve detection of startup-hook writes through Click 8.5’s legacy `LazyFile` export.
|
|
94
|
+
- Make the nested archive test fixture portable to Windows.
|
|
95
|
+
|
|
10
96
|
## [0.2.54](https://github.com/promptfoo/modelaudit/compare/v0.2.53...v0.2.54) (2026-10-06)
|
|
11
97
|
|
|
12
98
|
### Security
|
|
@@ -6,10 +6,10 @@ Thank you for your interest in contributing to ModelAudit! This guide will help
|
|
|
6
6
|
|
|
7
7
|
### Prerequisites
|
|
8
8
|
|
|
9
|
-
- Python 3.10-3.
|
|
9
|
+
- Python 3.10-3.14
|
|
10
10
|
- uv (recommended) or pip
|
|
11
11
|
- Git
|
|
12
|
-
- Rust 1.
|
|
12
|
+
- Rust 1.85+ toolchain with `cargo`, `rustfmt`, and `clippy`; editable installs build the native pickle scanner extension
|
|
13
13
|
|
|
14
14
|
### Setup
|
|
15
15
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
ARG PYTHON_IMAGE=python:3.13-slim@sha256:c33f0bc4364a6881bed1ec0cc2665e6c53c87a43e774aaeab88e6f17af105e4f
|
|
2
2
|
# Keep the major/minor version in sync with packages/modelaudit-picklescan/Cargo.toml rust-version.
|
|
3
|
-
ARG PICKLESCAN_RUST_TOOLCHAIN=1.
|
|
3
|
+
ARG PICKLESCAN_RUST_TOOLCHAIN=1.85.0
|
|
4
4
|
ARG RUSTUP_VERSION=1.29.0
|
|
5
5
|
ARG RUSTUP_INIT_X86_64_UNKNOWN_LINUX_GNU_SHA256=4acc9acc76d5079515b46346a485974457b5a79893cfb01112423c89aeb5aa10
|
|
6
6
|
ARG RUSTUP_INIT_AARCH64_UNKNOWN_LINUX_GNU_SHA256=9732d6c5e2a098d3521fca8145d826ae0aaa067ef2385ead08e6feac88fa5792
|
|
@@ -34,7 +34,7 @@ WORKDIR /app
|
|
|
34
34
|
|
|
35
35
|
RUN apt-get update \
|
|
36
36
|
&& apt-get install --yes --no-install-recommends --only-upgrade \
|
|
37
|
-
bsdutils gzip libc-bin libc6 libblkid1 libcap2 liblastlog2-2 libmount1 libpcre2-8-0 libsmartcols1 libsqlite3-0 \
|
|
37
|
+
apt bsdutils gzip libapt-pkg7.0 libc-bin libc6 libblkid1 libcap2 liblastlog2-2 libmount1 libpcre2-8-0 libsmartcols1 libsqlite3-0 \
|
|
38
38
|
libssl3t64 libsystemd0 libudev1 libuuid1 login mount perl-base util-linux \
|
|
39
39
|
&& apt-get install --yes --no-install-recommends ca-certificates \
|
|
40
40
|
&& rm -rf /var/lib/apt/lists/*
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
ARG PYTHON_IMAGE=python:3.13-slim@sha256:c33f0bc4364a6881bed1ec0cc2665e6c53c87a43e774aaeab88e6f17af105e4f
|
|
2
2
|
# Keep the major/minor version in sync with packages/modelaudit-picklescan/Cargo.toml rust-version.
|
|
3
|
-
ARG PICKLESCAN_RUST_TOOLCHAIN=1.
|
|
3
|
+
ARG PICKLESCAN_RUST_TOOLCHAIN=1.85.0
|
|
4
4
|
ARG RUSTUP_VERSION=1.29.0
|
|
5
5
|
ARG RUSTUP_INIT_X86_64_UNKNOWN_LINUX_GNU_SHA256=4acc9acc76d5079515b46346a485974457b5a79893cfb01112423c89aeb5aa10
|
|
6
6
|
ARG RUSTUP_INIT_AARCH64_UNKNOWN_LINUX_GNU_SHA256=9732d6c5e2a098d3521fca8145d826ae0aaa067ef2385ead08e6feac88fa5792
|
|
@@ -31,7 +31,7 @@ WORKDIR /app
|
|
|
31
31
|
|
|
32
32
|
RUN apt-get update \
|
|
33
33
|
&& apt-get install --yes --no-install-recommends --only-upgrade \
|
|
34
|
-
bsdutils gzip libc-bin libc6 libblkid1 libcap2 liblastlog2-2 libmount1 libpcre2-8-0 libsmartcols1 libsqlite3-0 \
|
|
34
|
+
apt bsdutils gzip libapt-pkg7.0 libc-bin libc6 libblkid1 libcap2 liblastlog2-2 libmount1 libpcre2-8-0 libsmartcols1 libsqlite3-0 \
|
|
35
35
|
libssl3t64 libsystemd0 libudev1 libuuid1 login mount perl-base util-linux \
|
|
36
36
|
&& apt-get install --yes --no-install-recommends ca-certificates \
|
|
37
37
|
&& rm -rf /var/lib/apt/lists/*
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
ARG PYTHON_IMAGE=python:3.12-slim@sha256:a6e34c598f2467ed0e9a8d349809fcd8b5c603269512df273a0bb1784edc11b1
|
|
2
2
|
# Keep the major/minor version in sync with packages/modelaudit-picklescan/Cargo.toml rust-version.
|
|
3
|
-
ARG PICKLESCAN_RUST_TOOLCHAIN=1.
|
|
3
|
+
ARG PICKLESCAN_RUST_TOOLCHAIN=1.85.0
|
|
4
4
|
ARG RUSTUP_VERSION=1.29.0
|
|
5
5
|
ARG RUSTUP_INIT_X86_64_UNKNOWN_LINUX_GNU_SHA256=4acc9acc76d5079515b46346a485974457b5a79893cfb01112423c89aeb5aa10
|
|
6
6
|
ARG RUSTUP_INIT_AARCH64_UNKNOWN_LINUX_GNU_SHA256=9732d6c5e2a098d3521fca8145d826ae0aaa067ef2385ead08e6feac88fa5792
|
|
@@ -36,7 +36,7 @@ WORKDIR /app
|
|
|
36
36
|
# Pull in current Debian security fixes from the configured apt sources.
|
|
37
37
|
RUN apt-get update \
|
|
38
38
|
&& apt-get install --yes --no-install-recommends --only-upgrade \
|
|
39
|
-
bsdutils gzip libc-bin libc6 libblkid1 liblastlog2-2 libmount1 libpcre2-8-0 libsmartcols1 libsqlite3-0 libssl3t64 \
|
|
39
|
+
apt bsdutils gzip libapt-pkg7.0 libc-bin libc6 libblkid1 liblastlog2-2 libmount1 libpcre2-8-0 libsmartcols1 libsqlite3-0 libssl3t64 \
|
|
40
40
|
libuuid1 login mount perl-base util-linux \
|
|
41
41
|
&& apt-get clean \
|
|
42
42
|
&& rm -rf /var/lib/apt/lists/*
|