CoolFace
Apppublic

luli331/oppy_google

sourceHugging Facemitupdated 7mo agoView on Hugging Face
0likes
initiative.py51 linesDownload Raw Back to backend
1from datetime import datetime2 3 4def evaluate_project(project: dict, emails: list[dict], events: list[dict], search_score: float) -> dict:5    """Evaluate a project's status based on deterministic rules.6 7    Returns:8        {"status": "READY"|"URGENT"|"SIGNAL", "alerts": [str]}9    """10    alerts = []11    status = "READY"12 13    # Rule 1: Silence detected14    reply_days = [15        e["days_since_reply"]16        for e in emails17        if e.get("days_since_reply") is not None18    ]19    if reply_days:20        max_silence = max(reply_days)21        if max_silence >= 5:22            contact = emails[0]["from"]23            alerts.append(f"Silence depuis {max_silence} jours de {contact}")24            status = "URGENT"25 26    # Rule 2: Deadline < 48h without prep block27    deadline_str = project.get("deadline")28    if not deadline_str:29        return {"status": status, "alerts": alerts}30    deadline = datetime.fromisoformat(deadline_str)31    now = datetime.now()32    hours_to_deadline = (deadline - now).total_seconds() / 360033    has_prep = any(e.get("prep_block", False) for e in events)34    if hours_to_deadline < 48 and not has_prep:35        alerts.append(f"Deadline dans {int(hours_to_deadline)}h - aucun bloc de prep")36        status = "URGENT"37 38    # Rule 3: External signal relevant39    if search_score > 0.6:40        alerts.append("Signal externe pertinent detecte")41        if status != "URGENT":42            status = "SIGNAL"43 44    # Rule 4: High urgency email45    urgency_scores = [e.get("urgency_score", 0) for e in emails]46    if any(s > 0.8 for s in urgency_scores):47        alerts.append("Email a haute urgence detecte")48        status = "URGENT"49 50    return {"status": status, "alerts": alerts}51