raxe 0.4.6__py3-none-any.whl
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.
- raxe/__init__.py +101 -0
- raxe/application/__init__.py +48 -0
- raxe/application/ab_testing.py +170 -0
- raxe/application/analytics/__init__.py +30 -0
- raxe/application/analytics/achievement_service.py +444 -0
- raxe/application/analytics/repositories.py +172 -0
- raxe/application/analytics/retention_service.py +267 -0
- raxe/application/analytics/statistics_service.py +419 -0
- raxe/application/analytics/streak_service.py +283 -0
- raxe/application/apply_policy.py +291 -0
- raxe/application/eager_l2.py +503 -0
- raxe/application/preloader.py +353 -0
- raxe/application/scan_merger.py +321 -0
- raxe/application/scan_pipeline.py +1059 -0
- raxe/application/scan_pipeline_async.py +403 -0
- raxe/application/session_tracker.py +458 -0
- raxe/application/telemetry_manager.py +357 -0
- raxe/application/telemetry_orchestrator.py +1210 -0
- raxe/async_sdk/__init__.py +34 -0
- raxe/async_sdk/cache.py +286 -0
- raxe/async_sdk/client.py +556 -0
- raxe/async_sdk/wrappers/__init__.py +23 -0
- raxe/async_sdk/wrappers/openai.py +238 -0
- raxe/cli/__init__.py +21 -0
- raxe/cli/auth.py +1047 -0
- raxe/cli/branding.py +235 -0
- raxe/cli/config.py +334 -0
- raxe/cli/custom_rules.py +458 -0
- raxe/cli/doctor.py +686 -0
- raxe/cli/error_handler.py +665 -0
- raxe/cli/event.py +648 -0
- raxe/cli/exit_codes.py +57 -0
- raxe/cli/expiry_warning.py +302 -0
- raxe/cli/export.py +183 -0
- raxe/cli/history.py +247 -0
- raxe/cli/l2_formatter.py +872 -0
- raxe/cli/main.py +1137 -0
- raxe/cli/models.py +590 -0
- raxe/cli/output.py +403 -0
- raxe/cli/privacy.py +84 -0
- raxe/cli/profiler.py +262 -0
- raxe/cli/progress.py +379 -0
- raxe/cli/progress_context.py +101 -0
- raxe/cli/repl.py +394 -0
- raxe/cli/rules.py +542 -0
- raxe/cli/setup_wizard.py +721 -0
- raxe/cli/stats.py +292 -0
- raxe/cli/suppress.py +501 -0
- raxe/cli/telemetry.py +1384 -0
- raxe/cli/test.py +130 -0
- raxe/cli/tune.py +315 -0
- raxe/cli/validate.py +218 -0
- raxe/domain/__init__.py +30 -0
- raxe/domain/analytics/__init__.py +97 -0
- raxe/domain/analytics/achievements.py +306 -0
- raxe/domain/analytics/models.py +120 -0
- raxe/domain/analytics/retention.py +168 -0
- raxe/domain/analytics/statistics.py +207 -0
- raxe/domain/analytics/streaks.py +173 -0
- raxe/domain/engine/__init__.py +15 -0
- raxe/domain/engine/executor.py +396 -0
- raxe/domain/engine/matcher.py +212 -0
- raxe/domain/inline_suppression.py +176 -0
- raxe/domain/ml/__init__.py +133 -0
- raxe/domain/ml/embedding_cache.py +309 -0
- raxe/domain/ml/gemma_detector.py +921 -0
- raxe/domain/ml/gemma_models.py +346 -0
- raxe/domain/ml/l2_config.py +428 -0
- raxe/domain/ml/l2_output_schema.py +443 -0
- raxe/domain/ml/manifest_loader.py +309 -0
- raxe/domain/ml/manifest_schema.py +345 -0
- raxe/domain/ml/model_metadata.py +263 -0
- raxe/domain/ml/model_registry.py +786 -0
- raxe/domain/ml/protocol.py +282 -0
- raxe/domain/ml/scoring_models.py +419 -0
- raxe/domain/ml/stub_detector.py +397 -0
- raxe/domain/ml/threat_scorer.py +757 -0
- raxe/domain/ml/tokenizer_registry.py +372 -0
- raxe/domain/ml/voting/__init__.py +89 -0
- raxe/domain/ml/voting/config.py +595 -0
- raxe/domain/ml/voting/engine.py +465 -0
- raxe/domain/ml/voting/head_voters.py +378 -0
- raxe/domain/ml/voting/models.py +222 -0
- raxe/domain/models.py +82 -0
- raxe/domain/packs/__init__.py +17 -0
- raxe/domain/packs/models.py +304 -0
- raxe/domain/policies/__init__.py +20 -0
- raxe/domain/policies/evaluator.py +212 -0
- raxe/domain/policies/models.py +223 -0
- raxe/domain/rules/__init__.py +32 -0
- raxe/domain/rules/custom.py +286 -0
- raxe/domain/rules/models.py +273 -0
- raxe/domain/rules/schema.py +166 -0
- raxe/domain/rules/validator.py +556 -0
- raxe/domain/suppression.py +801 -0
- raxe/domain/suppression_factory.py +174 -0
- raxe/domain/telemetry/__init__.py +116 -0
- raxe/domain/telemetry/backpressure.py +424 -0
- raxe/domain/telemetry/event_creator.py +362 -0
- raxe/domain/telemetry/events.py +1282 -0
- raxe/domain/telemetry/priority.py +263 -0
- raxe/domain/telemetry/scan_telemetry_builder.py +670 -0
- raxe/infrastructure/__init__.py +25 -0
- raxe/infrastructure/analytics/__init__.py +18 -0
- raxe/infrastructure/analytics/aggregator.py +484 -0
- raxe/infrastructure/analytics/aggregator_optimized.py +184 -0
- raxe/infrastructure/analytics/engine.py +748 -0
- raxe/infrastructure/analytics/repository.py +409 -0
- raxe/infrastructure/analytics/streaks.py +467 -0
- raxe/infrastructure/analytics/views.py +178 -0
- raxe/infrastructure/cloud/__init__.py +9 -0
- raxe/infrastructure/config/__init__.py +56 -0
- raxe/infrastructure/config/endpoints.py +641 -0
- raxe/infrastructure/config/scan_config.py +352 -0
- raxe/infrastructure/config/yaml_config.py +459 -0
- raxe/infrastructure/database/__init__.py +10 -0
- raxe/infrastructure/database/connection.py +200 -0
- raxe/infrastructure/database/models.py +325 -0
- raxe/infrastructure/database/scan_history.py +764 -0
- raxe/infrastructure/ml/__init__.py +0 -0
- raxe/infrastructure/ml/download_progress.py +438 -0
- raxe/infrastructure/ml/model_downloader.py +457 -0
- raxe/infrastructure/models/__init__.py +16 -0
- raxe/infrastructure/models/discovery.py +461 -0
- raxe/infrastructure/packs/__init__.py +13 -0
- raxe/infrastructure/packs/loader.py +407 -0
- raxe/infrastructure/packs/registry.py +381 -0
- raxe/infrastructure/policies/__init__.py +16 -0
- raxe/infrastructure/policies/api_client.py +256 -0
- raxe/infrastructure/policies/validator.py +227 -0
- raxe/infrastructure/policies/yaml_loader.py +250 -0
- raxe/infrastructure/rules/__init__.py +18 -0
- raxe/infrastructure/rules/custom_loader.py +224 -0
- raxe/infrastructure/rules/versioning.py +222 -0
- raxe/infrastructure/rules/yaml_loader.py +286 -0
- raxe/infrastructure/security/__init__.py +31 -0
- raxe/infrastructure/security/auth.py +145 -0
- raxe/infrastructure/security/policy_validator.py +124 -0
- raxe/infrastructure/security/signatures.py +171 -0
- raxe/infrastructure/suppression/__init__.py +36 -0
- raxe/infrastructure/suppression/composite_repository.py +154 -0
- raxe/infrastructure/suppression/sqlite_repository.py +231 -0
- raxe/infrastructure/suppression/yaml_composite_repository.py +156 -0
- raxe/infrastructure/suppression/yaml_repository.py +510 -0
- raxe/infrastructure/telemetry/__init__.py +79 -0
- raxe/infrastructure/telemetry/acquisition.py +179 -0
- raxe/infrastructure/telemetry/config.py +254 -0
- raxe/infrastructure/telemetry/credential_store.py +947 -0
- raxe/infrastructure/telemetry/dual_queue.py +1123 -0
- raxe/infrastructure/telemetry/flush_helper.py +343 -0
- raxe/infrastructure/telemetry/flush_scheduler.py +776 -0
- raxe/infrastructure/telemetry/health_client.py +394 -0
- raxe/infrastructure/telemetry/hook.py +347 -0
- raxe/infrastructure/telemetry/queue.py +520 -0
- raxe/infrastructure/telemetry/sender.py +476 -0
- raxe/infrastructure/tracking/__init__.py +13 -0
- raxe/infrastructure/tracking/usage.py +389 -0
- raxe/integrations/__init__.py +55 -0
- raxe/integrations/availability.py +143 -0
- raxe/integrations/registry.py +122 -0
- raxe/integrations/utils.py +135 -0
- raxe/mcp/__init__.py +62 -0
- raxe/mcp/cli.py +97 -0
- raxe/mcp/server.py +409 -0
- raxe/monitoring/__init__.py +51 -0
- raxe/monitoring/metrics.py +372 -0
- raxe/monitoring/profiler.py +388 -0
- raxe/monitoring/server.py +136 -0
- raxe/packs/core/v1.0.0/pack.yaml +1394 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-001@1.0.0.yaml +49 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-006@1.0.0.yaml +48 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-014@1.0.0.yaml +54 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-017@1.0.0.yaml +52 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-022@1.0.0.yaml +67 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-023@1.0.0.yaml +91 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-024@1.0.0.yaml +80 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-025@1.0.0.yaml +81 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-026@1.0.0.yaml +50 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-027@1.0.0.yaml +77 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-028@1.0.0.yaml +52 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-029@1.0.0.yaml +51 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-030@1.0.0.yaml +55 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-033@1.0.0.yaml +50 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-034@1.0.0.yaml +50 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-035@1.0.0.yaml +50 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-046@1.0.0.yaml +50 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-047@1.0.0.yaml +50 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-048@1.0.0.yaml +50 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-049@1.0.0.yaml +50 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-050@1.0.0.yaml +50 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-068@1.0.0.yaml +50 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-078@1.0.0.yaml +50 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-2001@1.0.0.yaml +35 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-2004@1.0.0.yaml +39 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-201@1.0.0.yaml +43 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-202@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-203@1.0.0.yaml +46 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-3007@1.0.0.yaml +44 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-3016@1.0.0.yaml +44 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-3026@1.0.0.yaml +39 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-3027@1.0.0.yaml +64 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-3028@1.0.0.yaml +51 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-3029@1.0.0.yaml +53 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-3030@1.0.0.yaml +50 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-3031@1.0.0.yaml +50 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-3032@1.0.0.yaml +50 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-3033@1.0.0.yaml +56 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-3034@1.0.0.yaml +50 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-79@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-80@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-81@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-82@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-83@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-84@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-85@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-86@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-87@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-88@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-89@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-90@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-91@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-92@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-93@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-94@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-95@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-96@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-97@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-98@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-001@1.0.0.yaml +48 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-007@1.0.0.yaml +48 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-015@1.0.0.yaml +56 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-016@1.0.0.yaml +46 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-017@1.0.0.yaml +57 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-021@1.0.0.yaml +46 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-022@1.0.0.yaml +46 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-023@1.0.0.yaml +78 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-024@1.0.0.yaml +46 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-025@1.0.0.yaml +93 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-026@1.0.0.yaml +81 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-027@1.0.0.yaml +82 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-028@1.0.0.yaml +46 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-033@1.0.0.yaml +48 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-036@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-037@1.0.0.yaml +44 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-052@1.0.0.yaml +43 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-054@1.0.0.yaml +44 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-056@1.0.0.yaml +43 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-065@1.0.0.yaml +46 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-075@1.0.0.yaml +45 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-079@1.0.0.yaml +44 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-1080@1.0.0.yaml +41 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-1090@1.0.0.yaml +41 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-1104@1.0.0.yaml +44 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-1105@1.0.0.yaml +41 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-1112@1.0.0.yaml +44 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-201@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-202@1.0.0.yaml +42 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-203@1.0.0.yaml +43 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-204@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-205@1.0.0.yaml +44 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-206@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-207@1.0.0.yaml +46 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-208@1.0.0.yaml +42 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-209@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-210@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-211@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-212@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-213@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-214@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-215@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-216@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-217@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-218@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-219@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-220@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-221@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-222@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-223@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-224@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-225@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-226@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-227@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-228@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-229@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-230@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-231@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-232@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-233@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-234@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-235@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-236@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-237@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-238@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-001@1.0.0.yaml +48 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-013@1.0.0.yaml +46 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-019@1.0.0.yaml +43 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-020@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-024@1.0.0.yaml +46 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-029@1.0.0.yaml +44 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-038@1.0.0.yaml +44 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-044@1.0.0.yaml +46 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-067@1.0.0.yaml +42 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-069@1.0.0.yaml +42 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-100@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-101@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-102@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-103@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-104@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-105@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-106@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-107@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-108@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-109@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-110@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-111@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-112@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-113@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-114@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-115@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-116@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-117@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-118@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-119@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-120@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-201@1.0.0.yaml +37 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-202@1.0.0.yaml +41 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-203@1.0.0.yaml +41 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-3004@1.0.0.yaml +40 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-3006@1.0.0.yaml +40 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-3011@1.0.0.yaml +40 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-5016@1.0.0.yaml +46 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-6001@1.0.0.yaml +53 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-6002@1.0.0.yaml +41 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-70@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-71@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-72@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-73@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-74@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-75@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-76@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-77@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-78@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-79@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-80@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-81@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-82@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-83@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-84@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-85@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-86@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-87@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-88@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-89@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-90@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-91@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-92@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-93@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-94@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-95@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-96@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-97@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-98@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-99@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-001@1.0.0.yaml +73 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-002@1.0.0.yaml +71 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-003@1.0.0.yaml +65 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-004@1.0.0.yaml +73 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-101@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-102@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-103@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-104@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-105@1.0.0.yaml +48 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-106@1.0.0.yaml +40 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-107@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-108@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-109@1.0.0.yaml +50 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-110@1.0.0.yaml +56 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-111@1.0.0.yaml +49 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-112@1.0.0.yaml +53 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-113@1.0.0.yaml +52 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-114@1.0.0.yaml +52 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-115@1.0.0.yaml +52 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-116@1.0.0.yaml +53 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-117@1.0.0.yaml +54 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-118@1.0.0.yaml +52 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-119@1.0.0.yaml +51 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-120@1.0.0.yaml +52 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-121@1.0.0.yaml +51 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-122@1.0.0.yaml +51 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-123@1.0.0.yaml +52 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-124@1.0.0.yaml +53 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-125@1.0.0.yaml +53 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-126@1.0.0.yaml +53 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-127@1.0.0.yaml +53 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-128@1.0.0.yaml +53 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-129@1.0.0.yaml +51 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-130@1.0.0.yaml +51 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-131@1.0.0.yaml +51 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-132@1.0.0.yaml +51 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-133@1.0.0.yaml +53 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-134@1.0.0.yaml +51 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-135@1.0.0.yaml +51 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-136@1.0.0.yaml +51 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-137@1.0.0.yaml +51 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-138@1.0.0.yaml +51 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-139@1.0.0.yaml +51 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-140@1.0.0.yaml +51 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-141@1.0.0.yaml +41 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-142@1.0.0.yaml +37 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-143@1.0.0.yaml +37 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-144@1.0.0.yaml +37 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-145@1.0.0.yaml +37 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-146@1.0.0.yaml +37 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-147@1.0.0.yaml +37 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-148@1.0.0.yaml +37 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-149@1.0.0.yaml +37 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-150@1.0.0.yaml +37 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-151@1.0.0.yaml +37 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-152@1.0.0.yaml +37 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-153@1.0.0.yaml +37 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-154@1.0.0.yaml +37 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-155@1.0.0.yaml +37 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-156@1.0.0.yaml +37 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-157@1.0.0.yaml +37 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-158@1.0.0.yaml +37 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-159@1.0.0.yaml +37 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-160@1.0.0.yaml +37 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-161@1.0.0.yaml +37 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-001@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-009@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-020@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-021@1.0.0.yaml +46 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-022@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-028@1.0.0.yaml +43 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-033@1.0.0.yaml +46 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-034@1.0.0.yaml +46 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-036@1.0.0.yaml +41 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-039@1.0.0.yaml +41 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-056@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-066@1.0.0.yaml +37 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-076@1.0.0.yaml +37 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-098@1.0.0.yaml +46 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-103@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-104@1.0.0.yaml +52 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-105@1.0.0.yaml +56 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-110@1.0.0.yaml +56 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-111@1.0.0.yaml +57 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-112@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-113@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-114@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-115@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-116@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-117@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-118@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-119@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-120@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-121@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-122@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-123@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-124@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-125@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-126@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-127@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-128@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-129@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-130@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-131@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-132@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-133@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-134@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-135@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-136@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-137@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-138@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-139@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-140@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-141@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-142@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-143@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-144@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-145@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-146@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-147@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-148@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-149@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-150@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-151@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-152@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-153@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-154@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-155@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-156@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-157@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-158@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-159@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-160@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-161@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-162@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-201@1.0.0.yaml +40 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-202@1.0.0.yaml +41 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-203@1.0.0.yaml +51 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-204@1.0.0.yaml +50 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-205@1.0.0.yaml +50 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-206@1.0.0.yaml +50 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-207@1.0.0.yaml +49 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-001@1.0.0.yaml +48 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-009@1.0.0.yaml +48 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-012@1.0.0.yaml +48 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-017@1.0.0.yaml +48 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-022@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-025@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-027@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-028@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-034@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-037@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-040@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-041@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-044@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-050@1.0.0.yaml +57 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-051@1.0.0.yaml +53 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-052@1.0.0.yaml +52 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-053@1.0.0.yaml +56 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-054@1.0.0.yaml +53 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-055@1.0.0.yaml +51 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-056@1.0.0.yaml +51 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-058@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-2015@1.0.0.yaml +41 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-2025@1.0.0.yaml +35 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-2026@1.0.0.yaml +39 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-2035@1.0.0.yaml +39 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-2037@1.0.0.yaml +39 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-2042@1.0.0.yaml +39 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3001@1.0.0.yaml +39 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3002@1.0.0.yaml +41 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3003@1.0.0.yaml +36 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3004@1.0.0.yaml +41 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3005@1.0.0.yaml +39 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3006@1.0.0.yaml +35 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3007@1.0.0.yaml +37 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3008@1.0.0.yaml +35 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3009@1.0.0.yaml +42 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3010@1.0.0.yaml +39 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3011@1.0.0.yaml +35 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3012@1.0.0.yaml +35 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3013@1.0.0.yaml +36 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3014@1.0.0.yaml +36 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3015@1.0.0.yaml +42 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3016@1.0.0.yaml +42 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3017@1.0.0.yaml +40 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3018@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3019@1.0.0.yaml +40 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3020@1.0.0.yaml +40 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3021@1.0.0.yaml +39 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3022@1.0.0.yaml +36 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3023@1.0.0.yaml +41 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3024@1.0.0.yaml +37 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3025@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3026@1.0.0.yaml +42 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3027@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3028@1.0.0.yaml +42 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3029@1.0.0.yaml +36 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3030@1.0.0.yaml +42 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3031@1.0.0.yaml +37 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3032@1.0.0.yaml +42 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3033@1.0.0.yaml +39 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3034@1.0.0.yaml +40 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3035@1.0.0.yaml +43 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3036@1.0.0.yaml +41 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3037@1.0.0.yaml +35 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3038@1.0.0.yaml +35 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3039@1.0.0.yaml +35 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3040@1.0.0.yaml +41 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3041@1.0.0.yaml +39 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3042@1.0.0.yaml +36 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3043@1.0.0.yaml +35 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3044@1.0.0.yaml +43 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3045@1.0.0.yaml +36 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3046@1.0.0.yaml +37 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3047@1.0.0.yaml +36 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3048@1.0.0.yaml +36 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3049@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3050@1.0.0.yaml +44 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3051@1.0.0.yaml +35 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3052@1.0.0.yaml +36 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3053@1.0.0.yaml +35 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3054@1.0.0.yaml +35 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3055@1.0.0.yaml +40 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3056@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3057@1.0.0.yaml +40 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3058@1.0.0.yaml +43 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3059@1.0.0.yaml +42 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3060@1.0.0.yaml +42 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3061@1.0.0.yaml +50 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3062@1.0.0.yaml +50 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3063@1.0.0.yaml +54 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3064@1.0.0.yaml +78 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3065@1.0.0.yaml +84 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3066@1.0.0.yaml +84 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3067@1.0.0.yaml +88 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3068@1.0.0.yaml +94 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3069@1.0.0.yaml +90 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3070@1.0.0.yaml +99 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3071@1.0.0.yaml +91 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3072@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3073@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3074@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3075@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3076@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3077@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3078@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3079@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3080@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3081@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3082@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3083@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3084@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3085@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/rag/rag-016@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/rag/rag-028@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/rag/rag-042@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/rag/rag-044@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/rag/rag-045@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/rag/rag-050@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/rag/rag-201@1.0.0.yaml +41 -0
- raxe/packs/core/v1.0.0/rules/rag/rag-202@1.0.0.yaml +41 -0
- raxe/packs/core/v1.0.0/rules/rag/rag-3001@1.0.0.yaml +41 -0
- raxe/packs/core/v1.0.0/rules/rag/rag-3006@1.0.0.yaml +41 -0
- raxe/packs/core/v1.0.0/rules/rag/rag-3009@1.0.0.yaml +41 -0
- raxe/packs/core/v1.0.0/rules/rag/rag-3012@1.0.0.yaml +41 -0
- raxe/plugins/__init__.py +98 -0
- raxe/plugins/custom_rules.py +380 -0
- raxe/plugins/loader.py +389 -0
- raxe/plugins/manager.py +538 -0
- raxe/plugins/protocol.py +428 -0
- raxe/py.typed +0 -0
- raxe/sdk/__init__.py +77 -0
- raxe/sdk/agent_scanner.py +1918 -0
- raxe/sdk/client.py +1603 -0
- raxe/sdk/decorator.py +175 -0
- raxe/sdk/exceptions.py +859 -0
- raxe/sdk/integrations/__init__.py +277 -0
- raxe/sdk/integrations/agent_scanner.py +71 -0
- raxe/sdk/integrations/autogen.py +872 -0
- raxe/sdk/integrations/crewai.py +1368 -0
- raxe/sdk/integrations/dspy.py +845 -0
- raxe/sdk/integrations/extractors.py +363 -0
- raxe/sdk/integrations/huggingface.py +395 -0
- raxe/sdk/integrations/langchain.py +948 -0
- raxe/sdk/integrations/litellm.py +484 -0
- raxe/sdk/integrations/llamaindex.py +1049 -0
- raxe/sdk/integrations/portkey.py +831 -0
- raxe/sdk/suppression_context.py +215 -0
- raxe/sdk/wrappers/__init__.py +163 -0
- raxe/sdk/wrappers/anthropic.py +310 -0
- raxe/sdk/wrappers/openai.py +221 -0
- raxe/sdk/wrappers/vertexai.py +484 -0
- raxe/utils/__init__.py +12 -0
- raxe/utils/error_sanitizer.py +135 -0
- raxe/utils/logging.py +241 -0
- raxe/utils/performance.py +414 -0
- raxe/utils/profiler.py +339 -0
- raxe/utils/validators.py +170 -0
- raxe-0.4.6.dist-info/METADATA +471 -0
- raxe-0.4.6.dist-info/RECORD +668 -0
- raxe-0.4.6.dist-info/WHEEL +5 -0
- raxe-0.4.6.dist-info/entry_points.txt +2 -0
- raxe-0.4.6.dist-info/licenses/LICENSE +56 -0
- raxe-0.4.6.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
"""Manifest loader for model packages.
|
|
2
|
+
|
|
3
|
+
Loads and validates YAML manifest files for folder-based model packages.
|
|
4
|
+
Provides clear error messages for invalid manifests with fix suggestions.
|
|
5
|
+
"""
|
|
6
|
+
from __future__ import annotations
|
|
7
|
+
|
|
8
|
+
import logging
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
from typing import Any
|
|
11
|
+
|
|
12
|
+
from raxe.domain.ml.manifest_schema import ManifestSchema, validate_manifest
|
|
13
|
+
|
|
14
|
+
logger = logging.getLogger(__name__)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class ManifestError(Exception):
|
|
18
|
+
"""Base exception for manifest loading errors."""
|
|
19
|
+
pass
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class ManifestLoadError(ManifestError):
|
|
23
|
+
"""Error loading manifest file."""
|
|
24
|
+
pass
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class ManifestValidationError(ManifestError):
|
|
28
|
+
"""Error validating manifest data."""
|
|
29
|
+
pass
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class ManifestLoader:
|
|
33
|
+
"""Loader for model manifest YAML files.
|
|
34
|
+
|
|
35
|
+
Handles loading, parsing, and validation of manifest files.
|
|
36
|
+
Provides clear error messages and fix suggestions for common issues.
|
|
37
|
+
|
|
38
|
+
Example:
|
|
39
|
+
loader = ManifestLoader()
|
|
40
|
+
|
|
41
|
+
# Load and validate manifest
|
|
42
|
+
manifest = loader.load_manifest(
|
|
43
|
+
Path("models/model-v1/manifest.yaml")
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
print(f"Model: {manifest.name}")
|
|
47
|
+
print(f"Version: {manifest.version}")
|
|
48
|
+
if manifest.tokenizer:
|
|
49
|
+
print(f"Tokenizer: {manifest.tokenizer.name}")
|
|
50
|
+
"""
|
|
51
|
+
|
|
52
|
+
def __init__(self, strict: bool = True):
|
|
53
|
+
"""Initialize manifest loader.
|
|
54
|
+
|
|
55
|
+
Args:
|
|
56
|
+
strict: If True, raise exceptions on validation errors.
|
|
57
|
+
If False, log warnings and return partial data.
|
|
58
|
+
"""
|
|
59
|
+
self.strict = strict
|
|
60
|
+
|
|
61
|
+
def load_manifest(self, path: Path) -> dict[str, Any]:
|
|
62
|
+
"""Load and validate manifest from YAML file.
|
|
63
|
+
|
|
64
|
+
Args:
|
|
65
|
+
path: Path to manifest.yaml file
|
|
66
|
+
|
|
67
|
+
Returns:
|
|
68
|
+
Validated manifest data as dictionary
|
|
69
|
+
|
|
70
|
+
Raises:
|
|
71
|
+
ManifestLoadError: If file cannot be read or parsed
|
|
72
|
+
ManifestValidationError: If manifest validation fails (strict mode)
|
|
73
|
+
|
|
74
|
+
Example:
|
|
75
|
+
>>> loader = ManifestLoader()
|
|
76
|
+
>>> data = loader.load_manifest(Path("model/manifest.yaml"))
|
|
77
|
+
>>> print(data["name"])
|
|
78
|
+
"RAXE L2 v1.0"
|
|
79
|
+
"""
|
|
80
|
+
# Check file exists
|
|
81
|
+
if not path.exists():
|
|
82
|
+
raise ManifestLoadError(
|
|
83
|
+
f"Manifest file not found: {path}\n"
|
|
84
|
+
f"Expected location: {path.absolute()}\n"
|
|
85
|
+
f"Fix: Create a manifest.yaml file in the model directory"
|
|
86
|
+
)
|
|
87
|
+
|
|
88
|
+
# Load YAML
|
|
89
|
+
try:
|
|
90
|
+
data = self._load_yaml(path)
|
|
91
|
+
except Exception as e:
|
|
92
|
+
raise ManifestLoadError(
|
|
93
|
+
f"Failed to parse YAML from {path}: {e}\n"
|
|
94
|
+
f"Fix: Check YAML syntax using 'python -m yaml {path}' or a YAML validator"
|
|
95
|
+
) from e
|
|
96
|
+
|
|
97
|
+
# Validate schema
|
|
98
|
+
is_valid, errors = validate_manifest(data)
|
|
99
|
+
|
|
100
|
+
if not is_valid:
|
|
101
|
+
error_msg = self._format_validation_errors(path, errors)
|
|
102
|
+
if self.strict:
|
|
103
|
+
raise ManifestValidationError(error_msg)
|
|
104
|
+
else:
|
|
105
|
+
logger.warning(f"Manifest validation warnings for {path}:\n{error_msg}")
|
|
106
|
+
|
|
107
|
+
return data
|
|
108
|
+
|
|
109
|
+
def load_manifest_schema(self, path: Path) -> ManifestSchema:
|
|
110
|
+
"""Load manifest and return as schema object.
|
|
111
|
+
|
|
112
|
+
Args:
|
|
113
|
+
path: Path to manifest.yaml file
|
|
114
|
+
|
|
115
|
+
Returns:
|
|
116
|
+
ManifestSchema instance
|
|
117
|
+
|
|
118
|
+
Raises:
|
|
119
|
+
ManifestLoadError: If file cannot be read
|
|
120
|
+
ManifestValidationError: If validation fails
|
|
121
|
+
"""
|
|
122
|
+
data = self.load_manifest(path)
|
|
123
|
+
|
|
124
|
+
try:
|
|
125
|
+
return ManifestSchema.from_dict(data)
|
|
126
|
+
except Exception as e:
|
|
127
|
+
raise ManifestValidationError(
|
|
128
|
+
f"Failed to create manifest schema from {path}: {e}\n"
|
|
129
|
+
f"This is likely a bug in the manifest loader."
|
|
130
|
+
) from e
|
|
131
|
+
|
|
132
|
+
def _load_yaml(self, path: Path) -> dict[str, Any]:
|
|
133
|
+
"""Load YAML file with error handling.
|
|
134
|
+
|
|
135
|
+
Args:
|
|
136
|
+
path: Path to YAML file
|
|
137
|
+
|
|
138
|
+
Returns:
|
|
139
|
+
Parsed YAML data as dictionary
|
|
140
|
+
|
|
141
|
+
Raises:
|
|
142
|
+
ImportError: If PyYAML not installed
|
|
143
|
+
Exception: If YAML parsing fails
|
|
144
|
+
"""
|
|
145
|
+
try:
|
|
146
|
+
import yaml
|
|
147
|
+
except ImportError as e:
|
|
148
|
+
raise ImportError(
|
|
149
|
+
"Manifest loader requires PyYAML. "
|
|
150
|
+
"Install with: pip install pyyaml"
|
|
151
|
+
) from e
|
|
152
|
+
|
|
153
|
+
with open(path, encoding="utf-8") as f:
|
|
154
|
+
try:
|
|
155
|
+
data = yaml.safe_load(f)
|
|
156
|
+
except yaml.YAMLError as e:
|
|
157
|
+
# Provide helpful error message with line number
|
|
158
|
+
raise Exception(
|
|
159
|
+
f"YAML parsing error: {e}\n"
|
|
160
|
+
f"File: {path}\n"
|
|
161
|
+
f"Check for:\n"
|
|
162
|
+
f" - Indentation errors (use spaces, not tabs)\n"
|
|
163
|
+
f" - Missing colons after keys\n"
|
|
164
|
+
f" - Unquoted special characters\n"
|
|
165
|
+
f" - Unclosed quotes or brackets"
|
|
166
|
+
) from e
|
|
167
|
+
|
|
168
|
+
if data is None:
|
|
169
|
+
raise Exception(f"Empty YAML file: {path}")
|
|
170
|
+
|
|
171
|
+
if not isinstance(data, dict):
|
|
172
|
+
raise Exception(
|
|
173
|
+
f"Invalid YAML structure in {path}: "
|
|
174
|
+
f"Expected dictionary at root level, got {type(data).__name__}"
|
|
175
|
+
)
|
|
176
|
+
|
|
177
|
+
return data
|
|
178
|
+
|
|
179
|
+
def _format_validation_errors(
|
|
180
|
+
self,
|
|
181
|
+
path: Path,
|
|
182
|
+
errors: list[str]
|
|
183
|
+
) -> str:
|
|
184
|
+
"""Format validation errors with fix suggestions.
|
|
185
|
+
|
|
186
|
+
Args:
|
|
187
|
+
path: Path to manifest file
|
|
188
|
+
errors: List of validation error messages
|
|
189
|
+
|
|
190
|
+
Returns:
|
|
191
|
+
Formatted error message with suggestions
|
|
192
|
+
"""
|
|
193
|
+
lines = [
|
|
194
|
+
f"Manifest validation failed: {path}",
|
|
195
|
+
f"Found {len(errors)} error(s):",
|
|
196
|
+
""
|
|
197
|
+
]
|
|
198
|
+
|
|
199
|
+
for i, error in enumerate(errors, 1):
|
|
200
|
+
lines.append(f"{i}. {error}")
|
|
201
|
+
|
|
202
|
+
# Add fix suggestions for common errors
|
|
203
|
+
if "version" in error.lower() and "format" in error.lower():
|
|
204
|
+
lines.append(" Fix: Use semantic versioning format: '0.0.1'")
|
|
205
|
+
|
|
206
|
+
elif "status" in error.lower():
|
|
207
|
+
lines.append(" Fix: Use one of: 'active', 'experimental', 'deprecated'")
|
|
208
|
+
|
|
209
|
+
elif "tokenizer" in error.lower() and "name" in error.lower():
|
|
210
|
+
lines.append(" Fix: Add tokenizer.name field (e.g., 'sentence-transformers/all-mpnet-base-v2')")
|
|
211
|
+
|
|
212
|
+
elif "tokenizer" in error.lower() and "type" in error.lower():
|
|
213
|
+
lines.append(" Fix: Add tokenizer.type field (e.g., 'AutoTokenizer')")
|
|
214
|
+
|
|
215
|
+
elif "tokenizer" in error.lower() and "config" in error.lower():
|
|
216
|
+
lines.append(" Fix: Add tokenizer.config as a dictionary with settings")
|
|
217
|
+
|
|
218
|
+
elif "bundle_file" in error.lower():
|
|
219
|
+
lines.append(" Fix: Add model.bundle_file field with .raxe bundle filename")
|
|
220
|
+
|
|
221
|
+
lines.append("")
|
|
222
|
+
|
|
223
|
+
# Add example manifest section
|
|
224
|
+
lines.extend([
|
|
225
|
+
"Example valid manifest structure:",
|
|
226
|
+
"```yaml",
|
|
227
|
+
"name: 'RAXE L2 v0.0.1'",
|
|
228
|
+
"version: '0.0.1'",
|
|
229
|
+
"status: 'active'",
|
|
230
|
+
"",
|
|
231
|
+
"model:",
|
|
232
|
+
" bundle_file: 'raxe_model_l2_v1.0.raxe'",
|
|
233
|
+
" embedding_model: 'all-mpnet-base-v2'",
|
|
234
|
+
"",
|
|
235
|
+
"tokenizer:",
|
|
236
|
+
" name: 'sentence-transformers/all-mpnet-base-v2'",
|
|
237
|
+
" type: 'AutoTokenizer'",
|
|
238
|
+
" config:",
|
|
239
|
+
" max_length: 512",
|
|
240
|
+
"```"
|
|
241
|
+
])
|
|
242
|
+
|
|
243
|
+
return "\n".join(lines)
|
|
244
|
+
|
|
245
|
+
def validate_only(self, path: Path) -> tuple[bool, list[str]]:
|
|
246
|
+
"""Validate manifest without loading.
|
|
247
|
+
|
|
248
|
+
Useful for pre-deployment validation checks.
|
|
249
|
+
|
|
250
|
+
Args:
|
|
251
|
+
path: Path to manifest.yaml file
|
|
252
|
+
|
|
253
|
+
Returns:
|
|
254
|
+
Tuple of (is_valid, error_messages)
|
|
255
|
+
|
|
256
|
+
Example:
|
|
257
|
+
>>> loader = ManifestLoader()
|
|
258
|
+
>>> is_valid, errors = loader.validate_only(Path("model/manifest.yaml"))
|
|
259
|
+
>>> if not is_valid:
|
|
260
|
+
... for error in errors:
|
|
261
|
+
... print(f"Error: {error}")
|
|
262
|
+
"""
|
|
263
|
+
try:
|
|
264
|
+
data = self._load_yaml(path)
|
|
265
|
+
except Exception as e:
|
|
266
|
+
return False, [f"Failed to load YAML: {e}"]
|
|
267
|
+
|
|
268
|
+
return validate_manifest(data)
|
|
269
|
+
|
|
270
|
+
|
|
271
|
+
def load_manifest(path: Path, strict: bool = True) -> dict[str, Any]:
|
|
272
|
+
"""Convenience function to load manifest.
|
|
273
|
+
|
|
274
|
+
Args:
|
|
275
|
+
path: Path to manifest.yaml file
|
|
276
|
+
strict: If True, raise on validation errors
|
|
277
|
+
|
|
278
|
+
Returns:
|
|
279
|
+
Validated manifest data
|
|
280
|
+
|
|
281
|
+
Raises:
|
|
282
|
+
ManifestLoadError: If file cannot be read
|
|
283
|
+
ManifestValidationError: If validation fails (strict mode)
|
|
284
|
+
|
|
285
|
+
Example:
|
|
286
|
+
>>> data = load_manifest(Path("model/manifest.yaml"))
|
|
287
|
+
>>> print(data["version"])
|
|
288
|
+
"0.0.1"
|
|
289
|
+
"""
|
|
290
|
+
loader = ManifestLoader(strict=strict)
|
|
291
|
+
return loader.load_manifest(path)
|
|
292
|
+
|
|
293
|
+
|
|
294
|
+
def validate_manifest_file(path: Path) -> tuple[bool, list[str]]:
|
|
295
|
+
"""Convenience function to validate manifest.
|
|
296
|
+
|
|
297
|
+
Args:
|
|
298
|
+
path: Path to manifest.yaml file
|
|
299
|
+
|
|
300
|
+
Returns:
|
|
301
|
+
Tuple of (is_valid, error_messages)
|
|
302
|
+
|
|
303
|
+
Example:
|
|
304
|
+
>>> is_valid, errors = validate_manifest_file(Path("model/manifest.yaml"))
|
|
305
|
+
>>> if is_valid:
|
|
306
|
+
... print("Manifest is valid!")
|
|
307
|
+
"""
|
|
308
|
+
loader = ManifestLoader()
|
|
309
|
+
return loader.validate_only(path)
|
|
@@ -0,0 +1,345 @@
|
|
|
1
|
+
"""Manifest schema definition for model packages.
|
|
2
|
+
|
|
3
|
+
Defines the YAML manifest structure for folder-based model packages.
|
|
4
|
+
Manifests provide rich metadata about models including tokenizer requirements,
|
|
5
|
+
performance metrics, and deployment information.
|
|
6
|
+
"""
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
import re
|
|
10
|
+
from dataclasses import dataclass
|
|
11
|
+
from enum import Enum
|
|
12
|
+
from typing import Any
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class ModelStatus(Enum):
|
|
16
|
+
"""Model deployment status."""
|
|
17
|
+
ACTIVE = "active"
|
|
18
|
+
EXPERIMENTAL = "experimental"
|
|
19
|
+
DEPRECATED = "deprecated"
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
@dataclass
|
|
23
|
+
class TokenizerConfig:
|
|
24
|
+
"""Tokenizer configuration from manifest.
|
|
25
|
+
|
|
26
|
+
Specifies the tokenizer to use with the model and its settings.
|
|
27
|
+
Used to ensure tokenizer compatibility with embedding models.
|
|
28
|
+
"""
|
|
29
|
+
name: str
|
|
30
|
+
type: str
|
|
31
|
+
config: dict[str, Any]
|
|
32
|
+
|
|
33
|
+
def validate(self) -> tuple[bool, list[str]]:
|
|
34
|
+
"""Validate tokenizer configuration.
|
|
35
|
+
|
|
36
|
+
Returns:
|
|
37
|
+
Tuple of (is_valid, errors)
|
|
38
|
+
"""
|
|
39
|
+
errors = []
|
|
40
|
+
|
|
41
|
+
if not self.name:
|
|
42
|
+
errors.append("Tokenizer name is required")
|
|
43
|
+
|
|
44
|
+
if not self.type:
|
|
45
|
+
errors.append("Tokenizer type is required")
|
|
46
|
+
|
|
47
|
+
if not isinstance(self.config, dict):
|
|
48
|
+
errors.append("Tokenizer config must be a dictionary")
|
|
49
|
+
|
|
50
|
+
return len(errors) == 0, errors
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
@dataclass
|
|
54
|
+
class ManifestSchema:
|
|
55
|
+
"""Schema for model manifest YAML files.
|
|
56
|
+
|
|
57
|
+
Defines the complete structure of a model manifest including
|
|
58
|
+
all required and optional fields.
|
|
59
|
+
|
|
60
|
+
Example manifest structure:
|
|
61
|
+
name: "RAXE L2 v0.0.1 ONNX INT8"
|
|
62
|
+
version: "0.0.1"
|
|
63
|
+
status: "active"
|
|
64
|
+
|
|
65
|
+
model:
|
|
66
|
+
bundle_file: "raxe_model_l2_v1.0.raxe"
|
|
67
|
+
embedding_model: "all-mpnet-base-v2"
|
|
68
|
+
|
|
69
|
+
tokenizer:
|
|
70
|
+
name: "sentence-transformers/all-mpnet-base-v2"
|
|
71
|
+
type: "AutoTokenizer"
|
|
72
|
+
config:
|
|
73
|
+
max_length: 512
|
|
74
|
+
|
|
75
|
+
performance:
|
|
76
|
+
target_latency_ms: 3.0
|
|
77
|
+
memory_mb: 130
|
|
78
|
+
"""
|
|
79
|
+
# Required fields
|
|
80
|
+
name: str
|
|
81
|
+
version: str
|
|
82
|
+
status: str
|
|
83
|
+
|
|
84
|
+
# Model configuration
|
|
85
|
+
model: dict[str, Any]
|
|
86
|
+
|
|
87
|
+
# Optional fields
|
|
88
|
+
tokenizer: TokenizerConfig | None = None
|
|
89
|
+
performance: dict[str, Any] | None = None
|
|
90
|
+
accuracy: dict[str, Any] | None = None
|
|
91
|
+
deployment: dict[str, Any] | None = None
|
|
92
|
+
|
|
93
|
+
@property
|
|
94
|
+
def model_status(self) -> ModelStatus:
|
|
95
|
+
"""Get status as enum."""
|
|
96
|
+
return ModelStatus(self.status)
|
|
97
|
+
|
|
98
|
+
@classmethod
|
|
99
|
+
def from_dict(cls, data: dict[str, Any]) -> ManifestSchema:
|
|
100
|
+
"""Create schema from dictionary.
|
|
101
|
+
|
|
102
|
+
Args:
|
|
103
|
+
data: Raw manifest data from YAML
|
|
104
|
+
|
|
105
|
+
Returns:
|
|
106
|
+
ManifestSchema instance
|
|
107
|
+
|
|
108
|
+
Raises:
|
|
109
|
+
ValueError: If required fields missing
|
|
110
|
+
"""
|
|
111
|
+
# Extract required fields
|
|
112
|
+
name = data.get("name")
|
|
113
|
+
version = data.get("version")
|
|
114
|
+
status = data.get("status", "experimental")
|
|
115
|
+
model = data.get("model", {})
|
|
116
|
+
|
|
117
|
+
# Parse tokenizer if present
|
|
118
|
+
tokenizer = None
|
|
119
|
+
if data.get("tokenizer"):
|
|
120
|
+
tok_data = data["tokenizer"]
|
|
121
|
+
tokenizer = TokenizerConfig(
|
|
122
|
+
name=tok_data.get("name", ""),
|
|
123
|
+
type=tok_data.get("type", ""),
|
|
124
|
+
config=tok_data.get("config", {})
|
|
125
|
+
)
|
|
126
|
+
|
|
127
|
+
return cls(
|
|
128
|
+
name=name,
|
|
129
|
+
version=version,
|
|
130
|
+
status=status,
|
|
131
|
+
model=model,
|
|
132
|
+
tokenizer=tokenizer,
|
|
133
|
+
performance=data.get("performance"),
|
|
134
|
+
accuracy=data.get("accuracy"),
|
|
135
|
+
deployment=data.get("deployment")
|
|
136
|
+
)
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
def validate_manifest(data: dict[str, Any]) -> tuple[bool, list[str]]:
|
|
140
|
+
"""Validate manifest data against schema.
|
|
141
|
+
|
|
142
|
+
Performs comprehensive validation including:
|
|
143
|
+
- Required fields present
|
|
144
|
+
- Version format valid
|
|
145
|
+
- Status enum valid
|
|
146
|
+
- Tokenizer config valid (if present)
|
|
147
|
+
- Performance metrics valid (if present)
|
|
148
|
+
|
|
149
|
+
Args:
|
|
150
|
+
data: Raw manifest data from YAML
|
|
151
|
+
|
|
152
|
+
Returns:
|
|
153
|
+
Tuple of (is_valid, error_messages)
|
|
154
|
+
|
|
155
|
+
Example:
|
|
156
|
+
>>> is_valid, errors = validate_manifest(manifest_data)
|
|
157
|
+
>>> if not is_valid:
|
|
158
|
+
... for error in errors:
|
|
159
|
+
... print(f"Validation error: {error}")
|
|
160
|
+
"""
|
|
161
|
+
errors = []
|
|
162
|
+
|
|
163
|
+
# Required fields
|
|
164
|
+
if "name" not in data or not data["name"]:
|
|
165
|
+
errors.append("Field 'name' is required")
|
|
166
|
+
|
|
167
|
+
if "version" not in data or not data["version"]:
|
|
168
|
+
errors.append("Field 'version' is required")
|
|
169
|
+
else:
|
|
170
|
+
# Validate version format (semantic versioning)
|
|
171
|
+
version = data["version"]
|
|
172
|
+
if not validate_version_format(version):
|
|
173
|
+
errors.append(
|
|
174
|
+
f"Invalid version format: {version}. "
|
|
175
|
+
"Expected semantic versioning (e.g., '0.0.1', '0.1.0')"
|
|
176
|
+
)
|
|
177
|
+
|
|
178
|
+
if "status" not in data or not data["status"]:
|
|
179
|
+
errors.append("Field 'status' is required")
|
|
180
|
+
else:
|
|
181
|
+
# Validate status enum
|
|
182
|
+
status = data["status"]
|
|
183
|
+
valid_statuses = [s.value for s in ModelStatus]
|
|
184
|
+
if status not in valid_statuses:
|
|
185
|
+
errors.append(
|
|
186
|
+
f"Invalid status: {status}. "
|
|
187
|
+
f"Must be one of: {', '.join(valid_statuses)}"
|
|
188
|
+
)
|
|
189
|
+
|
|
190
|
+
if "model" not in data or not data["model"]:
|
|
191
|
+
errors.append("Field 'model' is required")
|
|
192
|
+
else:
|
|
193
|
+
# Validate model section
|
|
194
|
+
model = data["model"]
|
|
195
|
+
if not isinstance(model, dict):
|
|
196
|
+
errors.append("Field 'model' must be a dictionary")
|
|
197
|
+
else:
|
|
198
|
+
if "bundle_file" not in model:
|
|
199
|
+
errors.append("Field 'model.bundle_file' is required")
|
|
200
|
+
|
|
201
|
+
# Optional tokenizer validation
|
|
202
|
+
if data.get("tokenizer"):
|
|
203
|
+
tok_data = data["tokenizer"]
|
|
204
|
+
if not isinstance(tok_data, dict):
|
|
205
|
+
errors.append("Field 'tokenizer' must be a dictionary")
|
|
206
|
+
else:
|
|
207
|
+
# Validate tokenizer fields
|
|
208
|
+
if "name" not in tok_data or not tok_data["name"]:
|
|
209
|
+
errors.append("Field 'tokenizer.name' is required when tokenizer is specified")
|
|
210
|
+
|
|
211
|
+
if "type" not in tok_data or not tok_data["type"]:
|
|
212
|
+
errors.append("Field 'tokenizer.type' is required when tokenizer is specified")
|
|
213
|
+
|
|
214
|
+
if "config" not in tok_data or not isinstance(tok_data.get("config"), dict):
|
|
215
|
+
errors.append("Field 'tokenizer.config' must be a dictionary when tokenizer is specified")
|
|
216
|
+
|
|
217
|
+
# Optional performance validation
|
|
218
|
+
if data.get("performance"):
|
|
219
|
+
perf = data["performance"]
|
|
220
|
+
if not isinstance(perf, dict):
|
|
221
|
+
errors.append("Field 'performance' must be a dictionary")
|
|
222
|
+
else:
|
|
223
|
+
# Validate numeric fields
|
|
224
|
+
numeric_fields = ["target_latency_ms", "p50_latency_ms", "p95_latency_ms",
|
|
225
|
+
"p99_latency_ms", "memory_mb"]
|
|
226
|
+
for field in numeric_fields:
|
|
227
|
+
if field in perf:
|
|
228
|
+
value = perf[field]
|
|
229
|
+
if not isinstance(value, (int, float)) or value < 0:
|
|
230
|
+
errors.append(
|
|
231
|
+
f"Field 'performance.{field}' must be a non-negative number"
|
|
232
|
+
)
|
|
233
|
+
|
|
234
|
+
# Optional accuracy validation
|
|
235
|
+
if data.get("accuracy"):
|
|
236
|
+
acc = data["accuracy"]
|
|
237
|
+
if not isinstance(acc, dict):
|
|
238
|
+
errors.append("Field 'accuracy' must be a dictionary")
|
|
239
|
+
else:
|
|
240
|
+
# Validate metric fields (0-1 range)
|
|
241
|
+
metric_fields = ["binary_f1", "family_f1", "subfamily_f1",
|
|
242
|
+
"false_positive_rate", "false_negative_rate"]
|
|
243
|
+
for field in metric_fields:
|
|
244
|
+
if field in acc:
|
|
245
|
+
value = acc[field]
|
|
246
|
+
if not isinstance(value, (int, float)) or not (0 <= value <= 1):
|
|
247
|
+
errors.append(
|
|
248
|
+
f"Field 'accuracy.{field}' must be a number between 0 and 1"
|
|
249
|
+
)
|
|
250
|
+
|
|
251
|
+
return len(errors) == 0, errors
|
|
252
|
+
|
|
253
|
+
|
|
254
|
+
def validate_version_format(version: str) -> bool:
|
|
255
|
+
"""Validate semantic version format.
|
|
256
|
+
|
|
257
|
+
Accepts formats like:
|
|
258
|
+
- "0.0.1"
|
|
259
|
+
- "0.1.0"
|
|
260
|
+
- "0.0.1-beta"
|
|
261
|
+
- "0.1.0-rc.1"
|
|
262
|
+
|
|
263
|
+
Args:
|
|
264
|
+
version: Version string to validate
|
|
265
|
+
|
|
266
|
+
Returns:
|
|
267
|
+
True if valid semantic version format
|
|
268
|
+
"""
|
|
269
|
+
# Semantic versioning pattern: MAJOR.MINOR.PATCH[-PRERELEASE][+BUILD]
|
|
270
|
+
pattern = r"^(\d+)\.(\d+)\.(\d+)(?:-([a-zA-Z0-9.-]+))?(?:\+([a-zA-Z0-9.-]+))?$"
|
|
271
|
+
return bool(re.match(pattern, version))
|
|
272
|
+
|
|
273
|
+
|
|
274
|
+
def validate_tokenizer(tokenizer_data: dict[str, Any]) -> tuple[bool, list[str]]:
|
|
275
|
+
"""Validate tokenizer configuration.
|
|
276
|
+
|
|
277
|
+
Checks that tokenizer has all required fields and valid values.
|
|
278
|
+
|
|
279
|
+
Args:
|
|
280
|
+
tokenizer_data: Tokenizer section from manifest
|
|
281
|
+
|
|
282
|
+
Returns:
|
|
283
|
+
Tuple of (is_valid, error_messages)
|
|
284
|
+
"""
|
|
285
|
+
errors = []
|
|
286
|
+
|
|
287
|
+
if not isinstance(tokenizer_data, dict):
|
|
288
|
+
errors.append("Tokenizer must be a dictionary")
|
|
289
|
+
return False, errors
|
|
290
|
+
|
|
291
|
+
# Required fields
|
|
292
|
+
required = ["name", "type", "config"]
|
|
293
|
+
for field in required:
|
|
294
|
+
if field not in tokenizer_data or not tokenizer_data[field]:
|
|
295
|
+
errors.append(f"Tokenizer field '{field}' is required")
|
|
296
|
+
|
|
297
|
+
# Validate config is a dict
|
|
298
|
+
if "config" in tokenizer_data:
|
|
299
|
+
config = tokenizer_data["config"]
|
|
300
|
+
if not isinstance(config, dict):
|
|
301
|
+
errors.append("Tokenizer config must be a dictionary")
|
|
302
|
+
|
|
303
|
+
return len(errors) == 0, errors
|
|
304
|
+
|
|
305
|
+
|
|
306
|
+
def get_required_fields() -> list[str]:
|
|
307
|
+
"""Get list of required manifest fields.
|
|
308
|
+
|
|
309
|
+
Returns:
|
|
310
|
+
List of required field names
|
|
311
|
+
"""
|
|
312
|
+
return [
|
|
313
|
+
"name",
|
|
314
|
+
"version",
|
|
315
|
+
"status",
|
|
316
|
+
"model",
|
|
317
|
+
"model.bundle_file"
|
|
318
|
+
]
|
|
319
|
+
|
|
320
|
+
|
|
321
|
+
def get_optional_fields() -> list[str]:
|
|
322
|
+
"""Get list of optional manifest fields.
|
|
323
|
+
|
|
324
|
+
Returns:
|
|
325
|
+
List of optional field names
|
|
326
|
+
"""
|
|
327
|
+
return [
|
|
328
|
+
"tokenizer",
|
|
329
|
+
"tokenizer.name",
|
|
330
|
+
"tokenizer.type",
|
|
331
|
+
"tokenizer.config",
|
|
332
|
+
"performance",
|
|
333
|
+
"performance.target_latency_ms",
|
|
334
|
+
"performance.p50_latency_ms",
|
|
335
|
+
"performance.p95_latency_ms",
|
|
336
|
+
"performance.p99_latency_ms",
|
|
337
|
+
"performance.memory_mb",
|
|
338
|
+
"accuracy",
|
|
339
|
+
"accuracy.binary_f1",
|
|
340
|
+
"accuracy.family_f1",
|
|
341
|
+
"accuracy.subfamily_f1",
|
|
342
|
+
"deployment",
|
|
343
|
+
"deployment.status",
|
|
344
|
+
"deployment.environments"
|
|
345
|
+
]
|