< Summary

Information
Class: Intentum.Explainability.IntentTreeExplainer
Assembly: Intentum.Explainability
File(s): /home/runner/work/Intentum/Intentum/src/Intentum.Explainability/IntentTreeExplainer.cs
Line coverage
100%
Covered lines: 25
Uncovered lines: 0
Coverable lines: 25
Total lines: 47
Line coverage: 100%
Branch coverage
100%
Covered branches: 8
Total branches: 8
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Cyclomatic complexity NPath complexity Sequence coverage
GetIntentTree(...)100%88100%

File(s)

/home/runner/work/Intentum/Intentum/src/Intentum.Explainability/IntentTreeExplainer.cs

#LineLine coverage
 1using Intentum.Core.Behavior;
 2using Intentum.Core.Intents;
 3using Intentum.Runtime.Engine;
 4using Intentum.Runtime.Policy;
 5
 6namespace Intentum.Explainability;
 7
 8/// <summary>
 9/// Default implementation of intent decision tree: uses policy engine EvaluateWithRule and intent signals.
 10/// </summary>
 11public sealed class IntentTreeExplainer : IIntentTreeExplainer
 12{
 13    /// <inheritdoc />
 14    public IntentDecisionTree GetIntentTree(
 15        Intent intent,
 16        IntentPolicy policy,
 17        BehaviorSpace? behaviorSpace = null)
 418    {
 419        var (decision, matchedRule) = IntentPolicyEngine.EvaluateWithRule(intent, policy);
 20
 421        var intentSummary = new IntentTreeIntentSummary(
 422            intent.Name,
 423            intent.Confidence.Level,
 424            intent.Confidence.Score);
 25
 426        var signals = intent.Signals
 127            .Select(s => new IntentTreeSignalNode(s.Source, s.Description, s.Weight))
 428            .ToList();
 29
 430        string? behaviorSummary = null;
 431        if (behaviorSpace is { Events.Count: > 0 })
 132        {
 133            var parts = behaviorSpace.Events
 234                .OrderBy(e => e.OccurredAt)
 235                .Select(e => $"{e.Actor}:{e.Action}")
 136                .ToList();
 137            behaviorSummary = string.Join(" → ", parts);
 138        }
 39
 440        return new IntentDecisionTree(
 441            decision,
 442            matchedRule?.Name,
 443            intentSummary,
 444            signals,
 445            behaviorSummary);
 446    }
 47}