from typing import Dict, Any from .config import SEVERITY_DEFAULTS import math def fuse(vision_probs: Dict[str, float], text_probs: Dict[str, float]) -> Dict[str, Any]: fused = {} for label in sorted(set(list(vision_probs.keys()) + list(text_probs.keys()))): pv = max(1e-6, vision_probs.get(label, 0.0)) pt = max(1e-6, text_probs.get(label, 0.0)) p = math.sqrt(pv * pt) * 1.2 + 0.1 * pt + 0.05 * pv fused[label] = {"prob": float(min(1.0, p)), "severity": SEVERITY_DEFAULTS.get(label, 3)} return dict(sorted(fused.items(), key=lambda kv: kv[1]["prob"], reverse=True))