Team Ai
Apppublic

pratik-250620/MultiModal-Coherence-AI

sourceHugging Facemitupdated 8mo agoView on Hugging Face
2likes
validators.py58 linesDownload Raw Back to planner
1from __future__ import annotations2 3from dataclasses import dataclass4from typing import List5 6from .schema import SemanticPlan, RiskFlag, ComplexityLevel7 8 9@dataclass(frozen=True)10class PlanValidationResult:11    ok: bool12    warnings: List[str]13    risk_flags: List[RiskFlag]14    complexity_level: ComplexityLevel15 16 17def validate_plan(plan: SemanticPlan) -> PlanValidationResult:18    warnings: List[str] = []19    risk_flags: List[RiskFlag] = list(plan.risk_flags)20 21    if len(plan.primary_entities) > 5:22        warnings.append("Too many primary_entities; may reduce coherence.")23        if RiskFlag.ambiguity not in risk_flags:24            risk_flags.append(RiskFlag.ambiguity)25 26    if len(plan.must_include) > 7:27        warnings.append("Too many must_include constraints; generation may become brittle.")28        if plan.complexity_level == ComplexityLevel.low:29            complexity = ComplexityLevel.medium30        else:31            complexity = plan.complexity_level32    else:33        complexity = plan.complexity_level34 35    lower_moods = {m.lower() for m in plan.mood_emotion}36    if "calm" in lower_moods and "tense" in lower_moods:37        warnings.append("Conflicting mood_emotion signals (calm + tense).")38        if RiskFlag.emotional_conflict not in risk_flags:39            risk_flags.append(RiskFlag.emotional_conflict)40 41    overlap = {x.lower() for x in plan.must_include}.intersection(42        {y.lower() for y in plan.must_avoid}43    )44    if overlap:45        warnings.append(46            "Conflicting constraints: "47            f"{sorted(overlap)} appear in both must_include and must_avoid."48        )49        if RiskFlag.conflicting_constraints not in risk_flags:50            risk_flags.append(RiskFlag.conflicting_constraints)51 52    return PlanValidationResult(53        ok=True,54        warnings=warnings,55        risk_flags=risk_flags,56        complexity_level=complexity,57    )58