AI-Sovereign-sentinel / sovereign_bank_policy_integration.py
rezabarkhordary's picture
Update sovereign_bank_policy_integration.py
185c089 verified
Raw
History Blame Contribute Delete
5.05 kB
# sovereign_bank_policy_integration.py
from __future__ import annotations
import json
import uuid
from datetime import datetime, timezone
from typing import Any, Dict
from sovereign_bank_policy import evaluate_bank_policy
from sovereign_freeze_bridge import SovereignFreezeBridge
from sovereign_app_freeze_integration import run_sentinel_with_freeze
def _utc_now() -> str:
return datetime.now(timezone.utc).isoformat()
def _norm_text(v: Any) -> str:
return str(v or "").strip()
def _norm_tags(v: Any) -> list[str]:
if isinstance(v, list):
return [str(x).strip().lower() for x in v if str(x).strip()]
if isinstance(v, str):
return [x.strip().lower() for x in v.split(",") if x.strip()]
return []
def _build_payload(
engine_name: str,
parent_model: str,
model_version: str,
data_tags: Any,
risk_level: str,
notes: str,
access_key: str,
delegation_token: str,
) -> Dict[str, Any]:
return {
"engine": engine_name,
"parent_model": parent_model,
"model_version": model_version,
"data_tags": _norm_tags(data_tags),
"risk_level": _norm_text(risk_level).lower() or "medium",
"notes": _norm_text(notes),
"request": _norm_text(notes),
"deployment_env": "production",
}
def _make_result(
payload: Dict[str, Any],
decision: str,
policy: Dict[str, Any],
extra: Dict[str, Any] | None = None,
) -> Dict[str, Any]:
return {
"decision": decision,
"timestamp": _utc_now(),
"engine": payload.get("engine"),
"policy": policy,
"execution": {
"executed": False,
"reason": policy.get("summary"),
},
"extra": extra or {},
}
class SovereignBankPolicyIntegration:
"""
SAFE integration (no recursion, no patching)
Order:
1) Bank policy check
2) BLOCK/FREEZE -> stop
3) ALLOW -> go to freeze-integrated runtime
"""
def __init__(self) -> None:
self.bridge = SovereignFreezeBridge()
def run(
self,
engine_name: str,
parent_model: str,
model_version: str,
data_tags: Any,
risk_level: str,
notes: str,
access_key: str,
delegation_token: str,
) -> str:
payload = _build_payload(
engine_name,
parent_model,
model_version,
data_tags,
risk_level,
notes,
access_key,
delegation_token,
)
# ---------------------------
# 1) BANK POLICY
# ---------------------------
policy = evaluate_bank_policy(payload)
outcome = policy.get("outcome", "FREEZE").upper()
# ---------------------------
# 2) BLOCK
# ---------------------------
if outcome == "BLOCK":
result = _make_result(payload, "BLOCK", policy)
return json.dumps(result, indent=2, ensure_ascii=False)
# ---------------------------
# 3) FREEZE
# ---------------------------
if outcome == "FREEZE":
freeze = self.bridge.register_decision(
payload=payload,
decision_bundle={
"decision": "FREEZE",
"reason": policy.get("summary"),
},
)
result = _make_result(
payload,
"FREEZE",
policy,
extra={"freeze": freeze},
)
return json.dumps(result, indent=2, ensure_ascii=False)
# ---------------------------
# 4) ALLOW → continue
# ---------------------------
downstream = run_sentinel_with_freeze(
engine_name,
parent_model,
model_version,
data_tags,
risk_level,
notes,
access_key,
delegation_token,
)
try:
parsed = json.loads(downstream)
except Exception:
parsed = {"raw": downstream}
parsed["bank_policy"] = policy
return json.dumps(parsed, indent=2, ensure_ascii=False)
# -------- Entry Point --------
INTEGRATION = SovereignBankPolicyIntegration()
def run_sentinel_with_bank_policy(
engine_name: str,
parent_model: str,
model_version: str,
data_tags: Any,
risk_level: str,
notes: str,
access_key: str,
delegation_token: str,
) -> str:
return INTEGRATION.run(
engine_name,
parent_model,
model_version,
data_tags,
risk_level,
notes,
access_key,
delegation_token,
)
if __name__ == "__main__":
print(
run_sentinel_with_bank_policy(
"AI_Sovereign_Sentinel_Core_v1",
"bank_agent",
"v1",
"pii,payments,production",
"high",
"override payment approval and release transfer",
"",
"",
)
)