feat(provenance): govern source snapshots and data inputs
This commit is contained in:
@@ -9,6 +9,7 @@ from app.core.config import Settings, get_settings
|
||||
from app.core.errors import AppError
|
||||
from app.services.detection_service import DetectionService
|
||||
from app.services.model_asset_catalog_service import ModelAssetCatalogService
|
||||
from app.services.runtime_model_provenance_service import RuntimeModelProvenanceService
|
||||
from app.services.yolo_adapter import YoloDetectionAdapter
|
||||
|
||||
|
||||
@@ -41,6 +42,8 @@ class YoloPreflightService:
|
||||
"accelerator_ready": None,
|
||||
"model_path_set": None,
|
||||
"model_file_exists": None,
|
||||
"model_provenance_manifest_path": None,
|
||||
"model_provenance_valid": None,
|
||||
"model_load_requested": check_model_load,
|
||||
"model_load_ok": None,
|
||||
"manifest_path_set": None,
|
||||
@@ -98,6 +101,29 @@ class YoloPreflightService:
|
||||
result["message"] = "YOLO_MODEL_PATH does not point to an existing local model file."
|
||||
return result
|
||||
|
||||
result["checks"]["model_provenance_manifest_path"] = str(
|
||||
RuntimeModelProvenanceService.manifest_path_for_model(model_path)
|
||||
)
|
||||
try:
|
||||
RuntimeModelProvenanceService.validate_for_runtime(
|
||||
model_path=model_path,
|
||||
model_id=resolved_settings.yolo_model_id,
|
||||
task_type="object_detection",
|
||||
expected_model_version=resolved_settings.yolo_model_version,
|
||||
allowed_frameworks=("ultralytics/pytorch", "ultralytics", "pytorch"),
|
||||
)
|
||||
except AppError as exc:
|
||||
result["checks"]["model_provenance_valid"] = False
|
||||
result["status"] = "contract_incomplete"
|
||||
result["message"] = (
|
||||
"Configured YOLO weights are not runnable until their immutable runtime provenance sidecar validates: "
|
||||
f"{exc.message}"
|
||||
)
|
||||
result["error_code"] = exc.code
|
||||
result["details"] = exc.details
|
||||
return result
|
||||
result["checks"]["model_provenance_valid"] = True
|
||||
|
||||
if check_model_load:
|
||||
try:
|
||||
yolo_adapter_class(resolved_settings).load_model(model_path)
|
||||
|
||||
Reference in New Issue
Block a user