modelaudit 0.2.41__tar.gz → 0.2.42__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.41 → modelaudit-0.2.42}/.github/workflows/docker-image-test.yml +6 -4
- {modelaudit-0.2.41 → modelaudit-0.2.42}/.github/workflows/release-please.yml +293 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/.release-please-manifest.json +1 -1
- {modelaudit-0.2.41 → modelaudit-0.2.42}/CHANGELOG.md +6 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/PKG-INFO +2 -2
- {modelaudit-0.2.41 → modelaudit-0.2.42}/pyproject.toml +2 -2
- {modelaudit-0.2.41 → modelaudit-0.2.42}/uv.lock +1 -1
- {modelaudit-0.2.41 → modelaudit-0.2.42}/.dockerignore +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/.editorconfig +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/.gitattributes +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/.github/CODEOWNERS +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/.github/markdown-link-check-config.json +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/.github/workflows/README.md +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/.github/workflows/codeql.yml +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/.github/workflows/docker-publish.yml +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/.github/workflows/docs-check.yml +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/.github/workflows/nightly.yml +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/.github/workflows/perf.yml +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/.github/workflows/test.yml +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/.github/workflows/validate-pr-title.yml +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/.gitignore +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/.mailmap +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/.modelaudit.toml.example +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/.prettierignore +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/AGENTS.md +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/CLAUDE.md +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/CODE_OF_CONDUCT.md +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/CONTRIBUTING.md +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/Dockerfile +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/Dockerfile.full +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/Dockerfile.tensorflow +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/LICENSE +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/MAINTAINERS.md +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/MANIFEST.in +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/README.md +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/RULES.md +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/SECURITY.md +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/SUPPORT.md +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/THIRD_PARTY_NOTICES.md +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/codecov.yml +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/docker-compose.yml +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/docker-entrypoint.sh +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/docs/agents/architecture.md +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/docs/agents/dependencies.md +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/docs/agents/new-scanner-quickstart.md +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/docs/agents/picklescan-package-split.md +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/docs/agents/release-process.md +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/docs/maintainers/cve-process.md +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/docs/maintainers/dependency-policy.md +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/docs/maintainers/scanner-cve-coverage.md +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/docs/maintainers/triage-playbook.md +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/docs/security/threat-model.md +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/docs/user/compatibility-matrix.md +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/docs/user/metadata-extraction.md +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/docs/user/offline-air-gapped.md +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/docs/user/scanner-selection.md +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/docs/user/security-model.md +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/__init__.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/__main__.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/analysis/__init__.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/analysis/anomaly_detector.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/analysis/enhanced_pattern_detector.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/analysis/entropy_analyzer.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/analysis/framework_patterns.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/analysis/integrated_analyzer.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/analysis/ml_context_analyzer.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/analysis/opcode_sequence_analyzer.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/analysis/semantic_analyzer.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/analysis/unified_context.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/auth/__init__.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/auth/client.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/auth/config.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/cache/__init__.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/cache/adaptive_cache_keys.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/cache/batch_operations.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/cache/cache_manager.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/cache/cache_policy.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/cache/optimized_config.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/cache/scan_results_cache.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/cache/trusted_config_store.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/cli.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/config/__init__.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/config/constants.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/config/data/spdx_licenses.json +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/config/explanations.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/config/generated_keras_layers.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/config/local_config.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/config/name_blacklist.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/config/rule_config.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/core.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/core_results.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/detectors/__init__.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/detectors/cve_patterns.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/detectors/jit_script.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/detectors/network_comm.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/detectors/secrets.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/detectors/suspicious_symbols.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/integrations/__init__.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/integrations/jfrog.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/integrations/license_checker.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/integrations/mlflow.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/integrations/sarif_formatter.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/integrations/sbom_generator.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/metadata_extractor.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/models.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/progress/__init__.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/progress/base.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/progress/console.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/progress/file.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/progress/hooks.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/progress/multi_phase.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/LICENSE +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/NOTICE +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/__init__.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/py.typed +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/__init__.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/__init__.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/framework/__init__.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/framework/allocation_description_pb2.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/framework/api_def_pb2.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/framework/attr_value_pb2.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/framework/cost_graph_pb2.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/framework/cpp_shape_inference_pb2.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/framework/dataset_metadata_pb2.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/framework/dataset_options_pb2.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/framework/dataset_pb2.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/framework/device_attributes_pb2.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/framework/full_type_pb2.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/framework/function_pb2.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/framework/graph_debug_info_pb2.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/framework/graph_pb2.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/framework/graph_transfer_info_pb2.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/framework/kernel_def_pb2.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/framework/log_memory_pb2.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/framework/model_pb2.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/framework/node_def_pb2.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/framework/op_def_pb2.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/framework/optimized_function_graph_pb2.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/framework/reader_base_pb2.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/framework/resource_handle_pb2.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/framework/step_stats_pb2.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/framework/tensor_description_pb2.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/framework/tensor_pb2.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/framework/tensor_shape_pb2.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/framework/tensor_slice_pb2.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/framework/types_pb2.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/framework/variable_pb2.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/framework/versions_pb2.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/protobuf/__init__.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/protobuf/cluster_pb2.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/protobuf/composite_tensor_variant_pb2.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/protobuf/control_flow_pb2.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/protobuf/core_platform_payloads_pb2.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/protobuf/critical_section_pb2.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/protobuf/data_service_pb2.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/protobuf/debug_event_pb2.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/protobuf/debug_pb2.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/protobuf/device_filters_pb2.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/protobuf/device_properties_pb2.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/protobuf/fingerprint_pb2.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/protobuf/meta_graph_pb2.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/protobuf/named_tensor_pb2.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/protobuf/remote_tensor_handle_pb2.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/protobuf/rewriter_config_pb2.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/protobuf/saved_model_pb2.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/protobuf/saved_object_graph_pb2.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/protobuf/saver_pb2.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/protobuf/service_config_pb2.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/protobuf/snapshot_pb2.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/protobuf/struct_pb2.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/protobuf/tensor_bundle_pb2.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/protobuf/trackable_object_graph_pb2.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/protobuf/transport_options_pb2.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/protos/tensorflow/core/protobuf/verifier_config_pb2.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/py.typed +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/rule_catalog.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/rules.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanner_registry_metadata.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanner_results.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanner_selection.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/__init__.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/_archive_config.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/_archive_locations.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/_archive_outcomes.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/_evidence_redaction.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/_string_extraction.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/archive_dispatch.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/archive_member_security.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/base.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/catboost_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/cntk_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/compressed_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/coreml_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/executorch_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/flax_msgpack_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/gguf_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/jax_checkpoint_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/jinja2_template_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/joblib_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/keras_h5_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/keras_utils.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/keras_zip_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/lightgbm_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/llamafile_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/manifest_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/metadata_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/mxnet_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/nemo_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/numpy_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/oci_layer_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/onnx_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/openvino_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/paddle_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/pickle_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/picklescan_adapter.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/pmml_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/pytorch_binary_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/pytorch_zip_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/pytorch_zip_support/__init__.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/pytorch_zip_support/archive_members.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/r_serialized_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/rar_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/rknn_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/rule_mapper.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/safetensors_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/sevenzip_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/skops_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/tar_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/tensorrt_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/text_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/tf_metagraph_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/tf_savedmodel_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/tflite_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/torch7_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/torchserve_mar_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/weight_distribution_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/xgboost_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/scanners/zip_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/telemetry.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/utils/__init__.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/utils/_path_hardening.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/utils/auto_defaults.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/utils/file/__init__.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/utils/file/_compression.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/utils/file/detection.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/utils/file/filtering.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/utils/file/handlers.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/utils/file/large_file_handler.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/utils/file/streaming.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/utils/helpers/__init__.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/utils/helpers/assets.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/utils/helpers/auto_defaults.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/utils/helpers/cache_decorator.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/utils/helpers/code_validation.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/utils/helpers/disk_space.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/utils/helpers/file_hash.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/utils/helpers/file_iterator.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/utils/helpers/interrupt_handler.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/utils/helpers/ml_context.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/utils/helpers/result_conversion.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/utils/helpers/retry.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/utils/helpers/secure_hasher.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/utils/helpers/types.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/utils/lfs.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/utils/model_extensions.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/utils/sources/__init__.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/utils/sources/_huggingface_cache.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/utils/sources/cloud_storage.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/utils/sources/dvc.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/utils/sources/huggingface.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/utils/sources/huggingface_paths.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/utils/sources/jfrog.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/utils/sources/pytorch_hub.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/utils/tensorflow_compat.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/version.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/whitelists/__init__.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/whitelists/huggingface_organizations.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/modelaudit/whitelists/huggingface_popular.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/package-lock.json +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/package.json +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/packages/modelaudit-picklescan/AGENTS.md +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/packages/modelaudit-picklescan/CHANGELOG.md +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/packages/modelaudit-picklescan/Cargo.lock +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/packages/modelaudit-picklescan/Cargo.toml +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/packages/modelaudit-picklescan/README.md +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/packages/modelaudit-picklescan/pyproject.toml +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/packages/modelaudit-picklescan/rust/README.md +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/packages/modelaudit-picklescan/rust/src/expansion.rs +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/packages/modelaudit-picklescan/rust/src/lib.rs +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/packages/modelaudit-picklescan/rust/src/nested.rs +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/packages/modelaudit-picklescan/rust/src/nested_surface.rs +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/packages/modelaudit-picklescan/rust/src/opcode.rs +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/packages/modelaudit-picklescan/rust/src/options.rs +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/packages/modelaudit-picklescan/rust/src/policy.rs +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/packages/modelaudit-picklescan/rust/src/post_budget.rs +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/packages/modelaudit-picklescan/rust/src/pybridge.rs +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/packages/modelaudit-picklescan/rust/src/report.rs +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/packages/modelaudit-picklescan/rust/src/stack.rs +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/packages/modelaudit-picklescan/rust/src/state.rs +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/packages/modelaudit-picklescan/rust/src/strings.rs +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/packages/modelaudit-picklescan/rust/src/strings_policy.rs +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/packages/modelaudit-picklescan/src/modelaudit_picklescan/__init__.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/packages/modelaudit-picklescan/src/modelaudit_picklescan/api.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/packages/modelaudit-picklescan/src/modelaudit_picklescan/call_graph.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/packages/modelaudit-picklescan/src/modelaudit_picklescan/options.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/packages/modelaudit-picklescan/src/modelaudit_picklescan/py.typed +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/packages/modelaudit-picklescan/src/modelaudit_picklescan/report.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/packages/modelaudit-picklescan/tests/conftest.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/packages/modelaudit-picklescan/tests/parity_corpus.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/packages/modelaudit-picklescan/tests/test_adversarial_pickle_oracle.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/packages/modelaudit-picklescan/tests/test_api.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/packages/modelaudit-picklescan/tests/test_call_graph_click.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/packages/modelaudit-picklescan/tests/test_call_graph_execnet.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/packages/modelaudit-picklescan/tests/test_call_graph_import_statements.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/packages/modelaudit-picklescan/tests/test_call_graph_instance_defaults.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/packages/modelaudit-picklescan/tests/test_call_graph_local_imports.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/packages/modelaudit-picklescan/tests/test_call_graph_six.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/packages/modelaudit-picklescan/tests/test_call_graph_tkinter.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/packages/modelaudit-picklescan/tests/test_import_boundary.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/packages/modelaudit-picklescan/tests/test_native_interface.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/packages/modelaudit-picklescan/tests/test_options.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/packages/modelaudit-picklescan/tests/test_report.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/packages/modelaudit-picklescan/tests/test_rust_engine.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/packages/modelaudit-picklescan/uv.lock +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/pyproject.toml.example +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/release-please-config.json +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/renovate.json +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/requirements-tensorflow.txt +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/scripts/README.md +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/scripts/benchmark_report.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/scripts/check_circular_imports.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/scripts/compile_tensorflow_protos.sh +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/scripts/fetch_hf_org_models.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/scripts/fetch_hf_top_models.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/scripts/generate_keras_layer_inventory.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/scripts/jax_flax_scanning_demo.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/scripts/large_pickle_corpus_qa.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/scripts/minimal_circular_check.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/scripts/profile_scan.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/__init__.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/analysis/test_analysis_modules.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/analysis/test_anomaly_detector.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/analysis/test_enhanced_pattern_detector.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/analysis/test_entropy_analyzer.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/analysis/test_framework_patterns.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/analysis/test_ml_context_analyzer.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/analysis/test_opcode_sequence_analyzer.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/analysis/test_unified_context.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/exploits/exploit1_basic_torch_bypass.pkl +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/exploits/exploit2_advanced_torch_bypass.pkl +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/exploits/exploit3_sophisticated_hybrid.pkl +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/exploits/exploit4_supply_chain_attack.pkl +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/exploits/exploit5_ultra_high_confidence.pkl +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/exploits/exploit6_ordereddict_bypass.pkl +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/exploits/exploit7_nested_collections.pkl +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/exploits/exploit9_manual_construction.pkl +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/exploits/exploit_ultimate_50pct.pkl +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/generators/generate_7z_test_assets.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/generators/generate_advanced_pickle_tests.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/generators/generate_evil_pickle.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/generators/generate_jinja2_test_assets.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/generators/generate_nested_pickle_assets.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/generators/generate_os_alias_tests.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/generators/generate_safe_nested_assets.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/generators/generate_safetensors_assets.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/generators/generate_security_assets.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/pickles/memo_attack.pkl +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/pickles/multiple_stream_attack.pkl +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/pickles/nt_alias_attack.pkl +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/pickles/posix_alias_attack.pkl +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/pickles/stack_global_attack.pkl +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/archives/path_traversal.zip +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/archives/safe_model.zip +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/jinja2/benign/chatml_format.json +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/jinja2/benign/complex_legitimate.json +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/jinja2/benign/conditional_system.json +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/jinja2/benign/huggingface_llama.json +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/jinja2/benign/simple_roles.json +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/jinja2/benign/special_tokens.json +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/jinja2/edge_cases/empty_template.json +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/jinja2/edge_cases/malformed_template.json +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/jinja2/edge_cases/multiple_templates.json +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/jinja2/edge_cases/no_template.json +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/jinja2/edge_cases/oversized_template.json +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/jinja2/malicious/attr_bypass.json +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/jinja2/malicious/combined_attack.json +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/jinja2/malicious/config_exploit.json +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/jinja2/malicious/cve_2024_34359_original.json +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/jinja2/malicious/direct_eval.json +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/jinja2/malicious/env_extraction.json +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/jinja2/malicious/file_access.json +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/jinja2/malicious/hex_bypass.json +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/jinja2/malicious/loop_discovery.json +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/jinja2/malicious/network_exfil.json +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/jinja2/malicious/request_exploit.json +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/jinja2/malicious/subprocess_injection.json +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/jinja2/obfuscated/base64_payload.json +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/jinja2/obfuscated/char_construction.json +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/jinja2/obfuscated/format_bypass.json +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/jinja2/obfuscated/getattr_bypass.json +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/jinja2/standalone/benign_chat.j2 +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/jinja2/standalone/malicious_standalone.jinja +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/jinja2/standalone/malicious_subprocess.template +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/jinja2/standalone/suspicious_benign.template +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/jinja2/yaml/malicious_config.yaml +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/jinja2/yaml/model_config.yaml +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/keras/custom_layer_attack.h5 +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/keras/loss_injection.h5 +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/keras/malicious_lambda.h5 +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/keras/metric_injection.h5 +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/keras/safe_model.h5 +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/manifests/safe_config.json +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/manifests/suspicious_config.json +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/pickles/decode_exec_chain.pkl +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/pickles/dill_func.pkl +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/pickles/malicious_model_realistic.pkl +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/pickles/malicious_system_call.pkl +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/pickles/nested_pickle_base64.pkl +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/pickles/nested_pickle_hex.pkl +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/pickles/nested_pickle_multistage.pkl +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/pickles/nested_pickle_raw.pkl +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/pickles/safe_data.pkl +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/pickles/safe_large_model.pkl +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/pickles/safe_model_with_binary.pkl +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/pickles/safe_model_with_encoding.pkl +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/pickles/safe_model_with_tokens.pkl +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/pickles/safe_nested_structure.pkl +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/pickles/simple_nested.pkl +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/pipeline.skops +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/pytorch/malicious_eval.pt +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/pytorch/safe_model.pt +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/safetensors/malicious_import.safetensors +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/safetensors/safe_model.safetensors +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/tensorflow/malicious_pyfunc/saved_model.pb +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/samples/tensorflow/safe_savedmodel/saved_model.pb +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/scenarios/license_scenarios/agpl_component/agpl_model.pkl +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/scenarios/license_scenarios/agpl_component/neural_network.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/scenarios/license_scenarios/mit_model/config.json +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/scenarios/license_scenarios/mit_model/model.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/scenarios/license_scenarios/mit_model/model_weights.pkl +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/scenarios/license_scenarios/mixed_licenses/LICENSE +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/scenarios/license_scenarios/mixed_licenses/apache_component.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/scenarios/license_scenarios/mixed_licenses/dataset_cc_nc.json +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/scenarios/license_scenarios/mixed_licenses/gpl_utility.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/scenarios/license_scenarios/mixed_licenses/mixed_model.pkl +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/scenarios/license_scenarios/unlicensed_dataset/embeddings.npy +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/scenarios/license_scenarios/unlicensed_dataset/features.csv +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/scenarios/license_scenarios/unlicensed_dataset/training_data.json +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/scenarios/security_scenarios/mixed_malicious_model/config.json +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/assets/scenarios/security_scenarios/mixed_malicious_model/model.pkl +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/benchmarks/test_picklescan_benchmarks.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/benchmarks/test_scan_benchmarks.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/cache/__init__.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/cache/test_cache_correctness.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/cache/test_optimized_config.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/cli_output.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/config/__init__.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/config/test_name_blacklist.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/conftest.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/demo_license_functionality.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/detectors/test_builtin_detection.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/detectors/test_compile_eval_variants.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/detectors/test_cve_detection.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/detectors/test_jit_script_detector.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/detectors/test_network_comm_detector.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/detectors/test_runpy_detection.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/detectors/test_secrets_detector.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/detectors/test_suspicious_symbols.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/helpers/__init__.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/helpers/file_creators.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/helpers/frameworks.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/integrations/test_jfrog.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/integrations/test_jfrog_integration.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/integrations/test_license_checker.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/integrations/test_license_integration.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/integrations/test_mlflow_integration.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/integrations/test_sarif_formatter.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/integrations/test_sbom_license_integration.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/integrations/test_sbom_url_fixes.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/progress/__init__.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/progress/test_base.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/scanners/test_base_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/scanners/test_catboost_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/scanners/test_cntk_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/scanners/test_compressed_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/scanners/test_coreml_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/scanners/test_executorch_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/scanners/test_flax_msgpack_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/scanners/test_gguf_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/scanners/test_jax_checkpoint_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/scanners/test_jinja2_template_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/scanners/test_joblib_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/scanners/test_joblib_scanner_codecs.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/scanners/test_keras_h5_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/scanners/test_keras_zip_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/scanners/test_lightgbm_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/scanners/test_llamafile_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/scanners/test_manifest_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/scanners/test_metadata_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/scanners/test_mxnet_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/scanners/test_nemo_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/scanners/test_numpy_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/scanners/test_oci_layer_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/scanners/test_onnx_dependency_handling.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/scanners/test_onnx_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/scanners/test_openvino_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/scanners/test_paddle_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/scanners/test_pickle_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/scanners/test_picklescan_adapter.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/scanners/test_pmml_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/scanners/test_pytorch_binary_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/scanners/test_pytorch_zip_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/scanners/test_r_serialized_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/scanners/test_rknn_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/scanners/test_rule_code_registry_consistency.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/scanners/test_rule_mapper.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/scanners/test_safetensors_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/scanners/test_scanner_registry.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/scanners/test_sevenzip_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/scanners/test_skops_content_analysis.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/scanners/test_skops_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/scanners/test_tar_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/scanners/test_tensorrt_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/scanners/test_tf_metagraph_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/scanners/test_tf_savedmodel_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/scanners/test_tflite_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/scanners/test_torch7_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/scanners/test_torchserve_mar_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/scanners/test_weight_distribution_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/scanners/test_xgboost_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/scanners/test_zip_scanner.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/scripts/test_large_pickle_corpus_qa.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_asset_inventory_integration.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_asset_list.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_auth_config.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_basic.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_benchmark_report.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_bug1_confidence_exploit.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_cache_cli.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_cache_optimizations.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_checks_recording.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_cli.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_cli_cache_dir.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_cli_default_command.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_cli_file_filtering.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_cli_license_integration.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_cli_logging_handlers.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_cli_output.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_cloud_url_detection.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_committed_fixture_hygiene.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_core.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_core_asset_extraction.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_cve_2025_10155_bin_pickle.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_debug_command.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_dill_joblib_enhanced.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_directory_file_filtering.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_double_interrupt.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_exit_codes.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_false_positive_fixes.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_file_hash.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_gguf_sbom_integration.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_graceful_degradation.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_header_discrepancy.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_huggingface_extensions.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_huggingface_symlinks.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_importlib_detection.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_integration.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_jax_flax_integration.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_jit_script_integration.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_lazy_loading.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_lazy_loading_integration.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_manifest_name_policy.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_metadata_extractor.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_models.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_nested_pickle_integration.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_network_comm_integration.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_os_alias_detection.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_os_subprocess_detection.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_path_traversal.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_performance_benchmarks.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_pickle_context_filtering.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_progress.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_pydantic_models.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_python_version_warning.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_pytorch_zip_detection.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_real_world_dill_joblib.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_regression_corpus.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_regular_scan_hash.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_release_workflow.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_rules.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_safetensors_optimization.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_scanner_selection.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_secure_hasher.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_security_asset_integration.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_security_enhancements.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_shebang_context.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_simple_jinja2.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_sklearn_joblib_false_positive.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_streaming_scan.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_telemetry.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_telemetry_decoupling.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_tensorflow_lambda_detection.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_timeout_configuration.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_utils.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_weak_hash_detection.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_webbrowser_detection.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_why_explanations.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/test_xdist_status.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/utils/__init__.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/utils/file/__init__.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/utils/file/test_advanced_file_handler.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/utils/file/test_advanced_size_limits.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/utils/file/test_file_filter.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/utils/file/test_file_type_validation_integration.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/utils/file/test_filetype.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/utils/file/test_integration_file_type_demo.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/utils/file/test_large_file_handler.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/utils/file/test_streaming_analysis.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/utils/file/test_streaming_preview.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/utils/helpers/test_asset_from_scan_result.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/utils/helpers/test_auto_defaults.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/utils/helpers/test_code_validation.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/utils/helpers/test_disk_space.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/utils/helpers/test_file_iterator.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/utils/helpers/test_interrupt_handling.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/utils/helpers/test_ml_context_false_positives.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/utils/helpers/test_py_compile_improvements.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/utils/helpers/test_secure_hasher.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/utils/sources/test_cloud_storage.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/utils/sources/test_dvc_integration.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/utils/sources/test_huggingface.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/utils/sources/test_pytorch_hub.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/utils/test_lfs.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/utils/test_result_conversion.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/whitelists/__init__.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/whitelists/test_combined.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/whitelists/test_huggingface_popular.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/whitelists/test_organizations.py +0 -0
- {modelaudit-0.2.41 → modelaudit-0.2.42}/tests/xdist_status.py +0 -0
|
@@ -168,7 +168,7 @@ jobs:
|
|
|
168
168
|
- name: Verify ML dependencies in full image
|
|
169
169
|
run: |
|
|
170
170
|
# Test that ML dependencies are available
|
|
171
|
-
docker run --rm modelaudit:full python -c "import tensorflow, torch, onnx; print('All ML dependencies available')"
|
|
171
|
+
docker run --rm modelaudit:full python -c "import tensorflow, torch, onnx; print('All ML dependencies available')"
|
|
172
172
|
|
|
173
173
|
- name: Test full container with ML model scan
|
|
174
174
|
run: |
|
|
@@ -179,19 +179,21 @@ jobs:
|
|
|
179
179
|
|
|
180
180
|
docker-ci-success:
|
|
181
181
|
name: Docker CI Success
|
|
182
|
-
needs: [build-test-lightweight]
|
|
183
|
-
# Don't require full image test to pass since it's conditional
|
|
182
|
+
needs: [build-test-lightweight, build-test-full]
|
|
184
183
|
if: always()
|
|
185
184
|
runs-on: ubuntu-latest
|
|
186
185
|
steps:
|
|
187
186
|
- name: Check if required jobs succeeded
|
|
188
187
|
run: |
|
|
189
188
|
LIGHTWEIGHT_RESULT="${{ needs.build-test-lightweight.result }}"
|
|
189
|
+
FULL_RESULT="${{ needs.build-test-full.result }}"
|
|
190
190
|
echo "Lightweight Docker build result: $LIGHTWEIGHT_RESULT"
|
|
191
|
+
echo "Full Docker build result: $FULL_RESULT"
|
|
191
192
|
|
|
192
193
|
# Success or skipped are both acceptable
|
|
193
194
|
# (skipped means the path filters determined the job wasn't needed)
|
|
194
|
-
if [[ "$LIGHTWEIGHT_RESULT" == "success" || "$LIGHTWEIGHT_RESULT" == "skipped"
|
|
195
|
+
if [[ ("$LIGHTWEIGHT_RESULT" == "success" || "$LIGHTWEIGHT_RESULT" == "skipped") && \
|
|
196
|
+
("$FULL_RESULT" == "success" || "$FULL_RESULT" == "skipped") ]]; then
|
|
195
197
|
echo "Docker CI checks passed (or were skipped due to path filters)!"
|
|
196
198
|
exit 0
|
|
197
199
|
else
|
|
@@ -734,6 +734,299 @@ jobs:
|
|
|
734
734
|
print-hash: true
|
|
735
735
|
attestations: true
|
|
736
736
|
|
|
737
|
+
verify-picklescan-pypi:
|
|
738
|
+
if: needs.release-please.outputs.picklescan_release_created == 'true'
|
|
739
|
+
needs: [publish-picklescan-pypi, release-please]
|
|
740
|
+
runs-on: ubuntu-latest
|
|
741
|
+
permissions:
|
|
742
|
+
contents: read
|
|
743
|
+
env:
|
|
744
|
+
EXPECTED_VERSION: ${{ needs.release-please.outputs.picklescan_version }}
|
|
745
|
+
steps:
|
|
746
|
+
- name: Wait for modelaudit-picklescan files on PyPI
|
|
747
|
+
run: |
|
|
748
|
+
python - <<'PY'
|
|
749
|
+
import json
|
|
750
|
+
import os
|
|
751
|
+
import time
|
|
752
|
+
import urllib.request
|
|
753
|
+
|
|
754
|
+
version = os.environ["EXPECTED_VERSION"]
|
|
755
|
+
expected_files = {
|
|
756
|
+
f"modelaudit_picklescan-{version}-cp310-abi3-macosx_10_12_x86_64.whl",
|
|
757
|
+
f"modelaudit_picklescan-{version}-cp310-abi3-macosx_11_0_arm64.whl",
|
|
758
|
+
f"modelaudit_picklescan-{version}-cp310-abi3-manylinux_2_28_aarch64.whl",
|
|
759
|
+
f"modelaudit_picklescan-{version}-cp310-abi3-manylinux_2_28_x86_64.whl",
|
|
760
|
+
f"modelaudit_picklescan-{version}-cp310-abi3-win_amd64.whl",
|
|
761
|
+
f"modelaudit_picklescan-{version}.tar.gz",
|
|
762
|
+
}
|
|
763
|
+
url = f"https://pypi.org/pypi/modelaudit-picklescan/{version}/json"
|
|
764
|
+
deadline = time.monotonic() + 600
|
|
765
|
+
last_status = "not checked"
|
|
766
|
+
|
|
767
|
+
while time.monotonic() < deadline:
|
|
768
|
+
try:
|
|
769
|
+
with urllib.request.urlopen(url, timeout=20) as response:
|
|
770
|
+
payload = json.load(response)
|
|
771
|
+
filenames = {entry["filename"] for entry in payload.get("urls", [])}
|
|
772
|
+
missing = sorted(expected_files - filenames)
|
|
773
|
+
info_version = payload.get("info", {}).get("version")
|
|
774
|
+
if info_version == version and not missing:
|
|
775
|
+
print(f"PyPI has modelaudit-picklescan {version}: {sorted(filenames)}")
|
|
776
|
+
break
|
|
777
|
+
last_status = f"version={info_version!r}, missing={missing}"
|
|
778
|
+
except Exception as exc:
|
|
779
|
+
last_status = repr(exc)
|
|
780
|
+
time.sleep(10)
|
|
781
|
+
else:
|
|
782
|
+
raise SystemExit(f"Timed out waiting for modelaudit-picklescan {version} on PyPI: {last_status}")
|
|
783
|
+
PY
|
|
784
|
+
|
|
785
|
+
- name: Install published modelaudit-picklescan and smoke test API
|
|
786
|
+
run: |
|
|
787
|
+
set -euo pipefail
|
|
788
|
+
python -m venv /tmp/modelaudit-picklescan-pypi-smoke
|
|
789
|
+
/tmp/modelaudit-picklescan-pypi-smoke/bin/python -m pip install --upgrade pip
|
|
790
|
+
/tmp/modelaudit-picklescan-pypi-smoke/bin/python -m pip install \
|
|
791
|
+
--no-cache-dir \
|
|
792
|
+
--retries 10 \
|
|
793
|
+
--timeout 60 \
|
|
794
|
+
"modelaudit-picklescan==${EXPECTED_VERSION}"
|
|
795
|
+
|
|
796
|
+
/tmp/modelaudit-picklescan-pypi-smoke/bin/python - <<'PY'
|
|
797
|
+
import importlib.metadata as md
|
|
798
|
+
import importlib.util
|
|
799
|
+
import os
|
|
800
|
+
import pickle
|
|
801
|
+
|
|
802
|
+
import modelaudit_picklescan
|
|
803
|
+
|
|
804
|
+
expected_version = os.environ["EXPECTED_VERSION"]
|
|
805
|
+
installed_version = md.version("modelaudit-picklescan")
|
|
806
|
+
if installed_version != expected_version:
|
|
807
|
+
raise SystemExit(f"Expected modelaudit-picklescan {expected_version}, got {installed_version}")
|
|
808
|
+
if importlib.util.find_spec("modelaudit_picklescan._rust") is None:
|
|
809
|
+
raise SystemExit("modelaudit_picklescan._rust extension was not installed")
|
|
810
|
+
|
|
811
|
+
clean_report = modelaudit_picklescan.scan_bytes(pickle.dumps({"weights": [1, 2, 3]}, protocol=4))
|
|
812
|
+
if clean_report.status.value != "complete" or clean_report.verdict.value != "clean":
|
|
813
|
+
raise SystemExit(f"Expected clean complete report, got {clean_report}")
|
|
814
|
+
|
|
815
|
+
class MaliciousPayload:
|
|
816
|
+
def __reduce__(self):
|
|
817
|
+
return (os.system, ("echo modelaudit-picklescan-smoke",))
|
|
818
|
+
|
|
819
|
+
malicious_report = modelaudit_picklescan.scan_bytes(
|
|
820
|
+
pickle.dumps(MaliciousPayload(), protocol=4),
|
|
821
|
+
source="malicious.pkl",
|
|
822
|
+
)
|
|
823
|
+
if malicious_report.status.value != "complete" or malicious_report.verdict.value != "malicious":
|
|
824
|
+
raise SystemExit(f"Expected malicious complete report, got {malicious_report}")
|
|
825
|
+
if not any(finding.rule_code == "DANGEROUS_CALL" for finding in malicious_report.findings):
|
|
826
|
+
raise SystemExit(f"Expected DANGEROUS_CALL finding, got {malicious_report.findings}")
|
|
827
|
+
|
|
828
|
+
print("Published modelaudit-picklescan API smoke test passed.")
|
|
829
|
+
PY
|
|
830
|
+
|
|
831
|
+
verify-pypi:
|
|
832
|
+
if: >-
|
|
833
|
+
${{
|
|
834
|
+
always() &&
|
|
835
|
+
needs.release-please.outputs.release_created == 'true' &&
|
|
836
|
+
needs.publish-pypi.result == 'success' &&
|
|
837
|
+
(
|
|
838
|
+
needs.release-please.outputs.picklescan_release_created != 'true' ||
|
|
839
|
+
needs.verify-picklescan-pypi.result == 'success'
|
|
840
|
+
)
|
|
841
|
+
}}
|
|
842
|
+
needs:
|
|
843
|
+
[
|
|
844
|
+
publish-pypi,
|
|
845
|
+
publish-picklescan-pypi,
|
|
846
|
+
release-please,
|
|
847
|
+
verify-picklescan-pypi,
|
|
848
|
+
]
|
|
849
|
+
runs-on: ubuntu-latest
|
|
850
|
+
permissions:
|
|
851
|
+
contents: read
|
|
852
|
+
env:
|
|
853
|
+
EXPECTED_VERSION: ${{ needs.release-please.outputs.version }}
|
|
854
|
+
EXPECTED_PICKLESCAN_VERSION: ${{ needs.release-please.outputs.picklescan_version }}
|
|
855
|
+
PICKLESCAN_RELEASE_CREATED: ${{ needs.release-please.outputs.picklescan_release_created }}
|
|
856
|
+
PROMPTFOO_DISABLE_TELEMETRY: "1"
|
|
857
|
+
steps:
|
|
858
|
+
- name: Wait for modelaudit files on PyPI
|
|
859
|
+
run: |
|
|
860
|
+
python - <<'PY'
|
|
861
|
+
import json
|
|
862
|
+
import os
|
|
863
|
+
import time
|
|
864
|
+
import urllib.request
|
|
865
|
+
|
|
866
|
+
version = os.environ["EXPECTED_VERSION"]
|
|
867
|
+
expected_files = {
|
|
868
|
+
f"modelaudit-{version}-py3-none-any.whl",
|
|
869
|
+
f"modelaudit-{version}.tar.gz",
|
|
870
|
+
}
|
|
871
|
+
url = f"https://pypi.org/pypi/modelaudit/{version}/json"
|
|
872
|
+
deadline = time.monotonic() + 600
|
|
873
|
+
last_status = "not checked"
|
|
874
|
+
|
|
875
|
+
while time.monotonic() < deadline:
|
|
876
|
+
try:
|
|
877
|
+
with urllib.request.urlopen(url, timeout=20) as response:
|
|
878
|
+
payload = json.load(response)
|
|
879
|
+
filenames = {entry["filename"] for entry in payload.get("urls", [])}
|
|
880
|
+
missing = sorted(expected_files - filenames)
|
|
881
|
+
info_version = payload.get("info", {}).get("version")
|
|
882
|
+
if info_version == version and not missing:
|
|
883
|
+
print(f"PyPI has modelaudit {version}: {sorted(filenames)}")
|
|
884
|
+
break
|
|
885
|
+
last_status = f"version={info_version!r}, missing={missing}"
|
|
886
|
+
except Exception as exc:
|
|
887
|
+
last_status = repr(exc)
|
|
888
|
+
time.sleep(10)
|
|
889
|
+
else:
|
|
890
|
+
raise SystemExit(f"Timed out waiting for modelaudit {version} on PyPI: {last_status}")
|
|
891
|
+
PY
|
|
892
|
+
|
|
893
|
+
- name: Install published modelaudit and run end-to-end smoke tests
|
|
894
|
+
run: |
|
|
895
|
+
set -euo pipefail
|
|
896
|
+
python -m venv /tmp/modelaudit-pypi-smoke
|
|
897
|
+
/tmp/modelaudit-pypi-smoke/bin/python -m pip install --upgrade pip
|
|
898
|
+
/tmp/modelaudit-pypi-smoke/bin/python -m pip install \
|
|
899
|
+
--no-cache-dir \
|
|
900
|
+
--retries 10 \
|
|
901
|
+
--timeout 60 \
|
|
902
|
+
"modelaudit[all]==${EXPECTED_VERSION}"
|
|
903
|
+
|
|
904
|
+
/tmp/modelaudit-pypi-smoke/bin/python - <<'PY'
|
|
905
|
+
import importlib.metadata as md
|
|
906
|
+
import json
|
|
907
|
+
import os
|
|
908
|
+
import pickle
|
|
909
|
+
import subprocess
|
|
910
|
+
import tempfile
|
|
911
|
+
import zipfile
|
|
912
|
+
from pathlib import Path
|
|
913
|
+
|
|
914
|
+
expected_version = os.environ["EXPECTED_VERSION"]
|
|
915
|
+
installed_version = md.version("modelaudit")
|
|
916
|
+
if installed_version != expected_version:
|
|
917
|
+
raise SystemExit(f"Expected modelaudit {expected_version}, got {installed_version}")
|
|
918
|
+
|
|
919
|
+
picklescan_version = md.version("modelaudit-picklescan")
|
|
920
|
+
expected_picklescan_version = os.environ.get("EXPECTED_PICKLESCAN_VERSION")
|
|
921
|
+
if os.environ.get("PICKLESCAN_RELEASE_CREATED") == "true" and expected_picklescan_version:
|
|
922
|
+
if picklescan_version != expected_picklescan_version:
|
|
923
|
+
raise SystemExit(
|
|
924
|
+
"Expected coordinated picklescan "
|
|
925
|
+
f"{expected_picklescan_version}, got {picklescan_version}"
|
|
926
|
+
)
|
|
927
|
+
print(f"Installed modelaudit {installed_version} with modelaudit-picklescan {picklescan_version}.")
|
|
928
|
+
|
|
929
|
+
modelaudit = Path("/tmp/modelaudit-pypi-smoke/bin/modelaudit")
|
|
930
|
+
env = os.environ.copy()
|
|
931
|
+
env["PROMPTFOO_DISABLE_TELEMETRY"] = "1"
|
|
932
|
+
|
|
933
|
+
def run(args: list[str | Path], expected_returncode: int) -> subprocess.CompletedProcess[str]:
|
|
934
|
+
command = [str(arg) for arg in args]
|
|
935
|
+
print("$", " ".join(command))
|
|
936
|
+
completed = subprocess.run(
|
|
937
|
+
command,
|
|
938
|
+
capture_output=True,
|
|
939
|
+
text=True,
|
|
940
|
+
env=env,
|
|
941
|
+
check=False,
|
|
942
|
+
)
|
|
943
|
+
if completed.stdout:
|
|
944
|
+
print(completed.stdout)
|
|
945
|
+
if completed.stderr:
|
|
946
|
+
print(completed.stderr)
|
|
947
|
+
if completed.returncode != expected_returncode:
|
|
948
|
+
raise SystemExit(
|
|
949
|
+
f"Expected exit {expected_returncode} from {' '.join(command)}, "
|
|
950
|
+
f"got {completed.returncode}"
|
|
951
|
+
)
|
|
952
|
+
return completed
|
|
953
|
+
|
|
954
|
+
run([modelaudit, "--version"], 0)
|
|
955
|
+
run([modelaudit, "doctor", "--show-failed"], 0)
|
|
956
|
+
|
|
957
|
+
with tempfile.TemporaryDirectory(prefix="modelaudit-pypi-smoke-") as tmpdir:
|
|
958
|
+
workdir = Path(tmpdir)
|
|
959
|
+
marker = workdir / "payload-executed"
|
|
960
|
+
benign = workdir / "benign.pkl"
|
|
961
|
+
malicious = workdir / "malicious.pkl"
|
|
962
|
+
malicious_zip = workdir / "malicious.zip"
|
|
963
|
+
|
|
964
|
+
with benign.open("wb") as handle:
|
|
965
|
+
pickle.dump({"weights": [1.0, 2.0, 3.0], "metadata": {"name": "release-smoke"}}, handle)
|
|
966
|
+
|
|
967
|
+
class MaliciousPayload:
|
|
968
|
+
def __reduce__(self):
|
|
969
|
+
return (os.system, (f"touch {marker}",))
|
|
970
|
+
|
|
971
|
+
with malicious.open("wb") as handle:
|
|
972
|
+
pickle.dump(MaliciousPayload(), handle, protocol=4)
|
|
973
|
+
with zipfile.ZipFile(malicious_zip, "w", compression=zipfile.ZIP_DEFLATED) as archive:
|
|
974
|
+
archive.write(malicious, arcname="malicious.pkl")
|
|
975
|
+
|
|
976
|
+
benign_json = workdir / "benign.json"
|
|
977
|
+
malicious_json = workdir / "malicious.json"
|
|
978
|
+
zip_json = workdir / "malicious-zip.json"
|
|
979
|
+
sarif_json = workdir / "malicious.sarif"
|
|
980
|
+
sbom_json = workdir / "sbom.json"
|
|
981
|
+
|
|
982
|
+
run([modelaudit, "scan", benign, "--format", "json", "--output", benign_json, "--no-cache"], 0)
|
|
983
|
+
run([modelaudit, "scan", malicious, "--format", "json", "--output", malicious_json, "--no-cache"], 1)
|
|
984
|
+
run([modelaudit, "scan", malicious_zip, "--format", "json", "--output", zip_json, "--no-cache"], 1)
|
|
985
|
+
run(
|
|
986
|
+
[
|
|
987
|
+
modelaudit,
|
|
988
|
+
"scan",
|
|
989
|
+
malicious,
|
|
990
|
+
"--format",
|
|
991
|
+
"sarif",
|
|
992
|
+
"--output",
|
|
993
|
+
sarif_json,
|
|
994
|
+
"--sbom",
|
|
995
|
+
sbom_json,
|
|
996
|
+
"--no-cache",
|
|
997
|
+
],
|
|
998
|
+
1,
|
|
999
|
+
)
|
|
1000
|
+
|
|
1001
|
+
if marker.exists():
|
|
1002
|
+
raise SystemExit("Malicious pickle payload executed during scan")
|
|
1003
|
+
|
|
1004
|
+
benign_report = json.loads(benign_json.read_text())
|
|
1005
|
+
if benign_report.get("issues") or benign_report.get("failed_checks") != 0:
|
|
1006
|
+
raise SystemExit(f"Expected benign pickle to be clean, got {benign_report}")
|
|
1007
|
+
|
|
1008
|
+
for report_path in (malicious_json, zip_json):
|
|
1009
|
+
report = json.loads(report_path.read_text())
|
|
1010
|
+
if not any(
|
|
1011
|
+
issue.get("rule_code") == "S201" and issue.get("severity") == "critical"
|
|
1012
|
+
for issue in report.get("issues", [])
|
|
1013
|
+
):
|
|
1014
|
+
raise SystemExit(f"Expected critical S201 in {report_path}, got {report}")
|
|
1015
|
+
|
|
1016
|
+
sarif_report = json.loads(sarif_json.read_text())
|
|
1017
|
+
sarif_results = sarif_report.get("runs", [{}])[0].get("results", [])
|
|
1018
|
+
if sarif_report.get("version") != "2.1.0" or not any(
|
|
1019
|
+
result.get("ruleId") == "S201" for result in sarif_results
|
|
1020
|
+
):
|
|
1021
|
+
raise SystemExit(f"Expected SARIF S201 result, got {sarif_report}")
|
|
1022
|
+
|
|
1023
|
+
sbom_report = json.loads(sbom_json.read_text())
|
|
1024
|
+
if sbom_report.get("bomFormat") != "CycloneDX" or not sbom_report.get("components"):
|
|
1025
|
+
raise SystemExit(f"Expected CycloneDX SBOM with components, got {sbom_report}")
|
|
1026
|
+
|
|
1027
|
+
print("Published modelaudit end-to-end smoke test passed.")
|
|
1028
|
+
PY
|
|
1029
|
+
|
|
737
1030
|
provenance:
|
|
738
1031
|
if: needs.release-please.outputs.release_created == 'true'
|
|
739
1032
|
needs: [build, publish-pypi, release-please]
|
|
@@ -5,6 +5,12 @@ 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.42](https://github.com/promptfoo/modelaudit/compare/v0.2.41...v0.2.42) (2026-04-27)
|
|
9
|
+
|
|
10
|
+
### Bug Fixes
|
|
11
|
+
|
|
12
|
+
- require latest picklescan release ([a0237a7](https://github.com/promptfoo/modelaudit/commit/a0237a7658c0885848eea8d51b792ccfad45cc1c))
|
|
13
|
+
|
|
8
14
|
## [0.2.41](https://github.com/promptfoo/modelaudit/compare/v0.2.40...v0.2.41) (2026-04-27)
|
|
9
15
|
|
|
10
16
|
### Bug Fixes
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: modelaudit
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.42
|
|
4
4
|
Summary: Static scanning library for detecting malicious code, potential backdoor indicators, and other security risks in ML model files
|
|
5
5
|
Project-URL: Repository, https://github.com/promptfoo/modelaudit
|
|
6
6
|
Project-URL: Homepage, https://github.com/promptfoo/modelaudit
|
|
@@ -27,7 +27,7 @@ Requires-Dist: defusedxml>=0.7.1
|
|
|
27
27
|
Requires-Dist: fsspec>=2025.5.1
|
|
28
28
|
Requires-Dist: gcsfs>=2025.5.1
|
|
29
29
|
Requires-Dist: huggingface-hub>=0.23.0
|
|
30
|
-
Requires-Dist: modelaudit-picklescan<0.2.0,>=0.1.
|
|
30
|
+
Requires-Dist: modelaudit-picklescan<0.2.0,>=0.1.3
|
|
31
31
|
Requires-Dist: msgpack<2.0,>=1.0.0
|
|
32
32
|
Requires-Dist: numpy<2.0,>=1.19.0; python_version == '3.10'
|
|
33
33
|
Requires-Dist: numpy<2.5,>=2.4.3; python_version >= '3.11'
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "modelaudit"
|
|
7
|
-
version = "0.2.
|
|
7
|
+
version = "0.2.42"
|
|
8
8
|
description = "Static scanning library for detecting malicious code, potential backdoor indicators, and other security risks in ML model files"
|
|
9
9
|
authors = [
|
|
10
10
|
{ name = "Ian Webster", email = "ian@promptfoo.dev" },
|
|
@@ -50,7 +50,7 @@ dependencies = [
|
|
|
50
50
|
"posthog>=7.0.0",
|
|
51
51
|
"protobuf>=5.29.0",
|
|
52
52
|
"msgpack>=1.0.0,<2.0",
|
|
53
|
-
"modelaudit-picklescan>=0.1.
|
|
53
|
+
"modelaudit-picklescan>=0.1.3,<0.2.0",
|
|
54
54
|
]
|
|
55
55
|
|
|
56
56
|
[project.optional-dependencies]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|