File size: 1,555 Bytes
8da5378
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# agents/explainer_agent.py
import sys, os
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

from ml.explain import explain_signal

def explain(signal_data: dict, research_data: dict) -> dict:
    """
    Agent 3 — Explainer Agent
    Converts SHAP values + sentiment into plain English
    """
    print(f"[Explainer Agent] Building explanation for {signal_data['symbol']}...")

    symbol    = signal_data["symbol"]
    signal    = signal_data["signal"]
    sentiment = signal_data["sentiment"]
    risk      = signal_data["risk_metrics"]

    # Get SHAP reasons
    shap_result = explain_signal(symbol, signal)
    reasons     = shap_result["reasons"]

    # Add sentiment reason
    reasons.append(f"📰 News sentiment: {sentiment['summary']}")

    # Build full explanation card
    explanation = {
        "symbol":       symbol,
        "signal":       signal,
        "confidence":   f"{int(signal_data['confidence'] * 100)}%",
        "price":        f"₹{signal_data['latest_price']}",
        "reasons":      reasons,
        "risk": {
            "sharpe":   risk["sharpe_ratio"],
            "drawdown": risk["max_drawdown"],
            "var":      risk["var_95"],
            "note":     shap_result["risk_note"],
        },
        "sentiment": {
            "dominant":   sentiment["dominant"],
            "confidence": sentiment["confidence"],
            "scores":     sentiment["scores"],
        }
    }

    print(f"[Explainer Agent] Done — {len(reasons)} reasons generated")
    return explanation