< Summary

Information
Class: Intentum.Observability.IntentumMetrics
Assembly: Intentum.Observability
File(s): /home/runner/work/Intentum/Intentum/src/Intentum.Observability/IntentumMetrics.cs
Line coverage
81%
Covered lines: 61
Uncovered lines: 14
Coverable lines: 75
Total lines: 133
Line coverage: 81.3%
Branch coverage
0%
Covered branches: 0
Total branches: 2
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Cyclomatic complexity NPath complexity Sequence coverage
.cctor()100%11100%
RecordIntentInference(...)100%11100%
RecordPolicyDecision(...)100%11100%
RecordBehaviorSpaceSize(...)100%11100%
RecordEmbeddingCall(...)100%110%
RecordEmbeddingCacheAccess(...)0%220%
RecordLlmClassification(...)100%110%

File(s)

/home/runner/work/Intentum/Intentum/src/Intentum.Observability/IntentumMetrics.cs

#LineLine coverage
 1using System.Diagnostics;
 2using System.Diagnostics.Metrics;
 3using Intentum.Core.Behavior;
 4using Intentum.Core.Intents;
 5using Intentum.Runtime.Policy;
 6
 7namespace Intentum.Observability;
 8
 9/// <summary>
 10/// OpenTelemetry metrics for Intentum operations.
 11/// </summary>
 12public static class IntentumMetrics
 13{
 114    private static readonly Meter Meter = new("Intentum", "1.0.0");
 15
 116    private static readonly Counter<long> IntentInferenceCount = Meter.CreateCounter<long>(
 117        "intentum.intent.inference.count",
 118        description: "Number of intent inferences performed");
 19
 120    private static readonly Histogram<double> IntentInferenceDuration = Meter.CreateHistogram<double>(
 121        "intentum.intent.inference.duration",
 122        unit: "ms",
 123        description: "Duration of intent inference operations");
 24
 125    private static readonly Histogram<double> IntentConfidenceScore = Meter.CreateHistogram<double>(
 126        "intentum.intent.confidence.score",
 127        description: "Confidence score of inferred intents");
 28
 129    private static readonly Counter<long> PolicyDecisionCount = Meter.CreateCounter<long>(
 130        "intentum.policy.decision.count",
 131        description: "Number of policy decisions made");
 32
 133    private static readonly Histogram<int> BehaviorSpaceSize = Meter.CreateHistogram<int>(
 134        "intentum.behavior.space.size",
 135        description: "Size of behavior spaces");
 36
 37    /// <summary>
 38    /// Records an intent inference operation.
 39    /// </summary>
 40    public static void RecordIntentInference(Intent intent, TimeSpan duration)
 741    {
 742        var tags = new TagList
 743        {
 744            { "confidence.level", intent.Confidence.Level },
 745            { "signal.count", intent.Signals.Count }
 746        };
 47
 748        IntentInferenceCount.Add(1, tags);
 749        IntentInferenceDuration.Record(duration.TotalMilliseconds, tags);
 750        IntentConfidenceScore.Record(intent.Confidence.Score, tags);
 751    }
 52
 53    /// <summary>
 54    /// Records a policy decision.
 55    /// </summary>
 56    public static void RecordPolicyDecision(PolicyDecision decision)
 1157    {
 1158        var tags = new TagList
 1159        {
 1160            { "decision", decision.ToString() }
 1161        };
 62
 1163        PolicyDecisionCount.Add(1, tags);
 1164    }
 65
 66    /// <summary>
 67    /// Records behavior space size.
 68    /// </summary>
 69    public static void RecordBehaviorSpaceSize(BehaviorSpace space)
 770    {
 771        var tags = new TagList
 772        {
 773            { "event.count", space.Events.Count }
 774        };
 75
 776        BehaviorSpaceSize.Record(space.Events.Count, tags);
 777    }
 78
 179    private static readonly Counter<long> EmbeddingCallCount = Meter.CreateCounter<long>(
 180        "intentum.embedding.call.count",
 181        description: "Number of embedding API calls");
 82
 183    private static readonly Histogram<double> EmbeddingCallDuration = Meter.CreateHistogram<double>(
 184        "intentum.embedding.call.duration",
 185        unit: "ms",
 186        description: "Duration of embedding API calls");
 87
 188    private static readonly Counter<long> EmbeddingCacheHitCount = Meter.CreateCounter<long>(
 189        "intentum.embedding.cache.hit",
 190        description: "Number of embedding cache hits");
 91
 192    private static readonly Counter<long> EmbeddingCacheMissCount = Meter.CreateCounter<long>(
 193        "intentum.embedding.cache.miss",
 194        description: "Number of embedding cache misses");
 95
 196    private static readonly Counter<long> LlmClassificationCount = Meter.CreateCounter<long>(
 197        "intentum.llm.classification.count",
 198        description: "Number of LLM classification calls");
 99
 1100    private static readonly Histogram<double> LlmClassificationDuration = Meter.CreateHistogram<double>(
 1101        "intentum.llm.classification.duration",
 1102        unit: "ms",
 1103        description: "Duration of LLM classification calls");
 104
 105    /// <summary>
 106    /// Records an embedding API call.
 107    /// </summary>
 108    public static void RecordEmbeddingCall(string provider, TimeSpan duration, bool success)
 0109    {
 0110        var tags = new TagList { { "provider", provider }, { "success", success } };
 0111        EmbeddingCallCount.Add(1, tags);
 0112        EmbeddingCallDuration.Record(duration.TotalMilliseconds, tags);
 0113    }
 114
 115    /// <summary>
 116    /// Records an embedding cache hit or miss.
 117    /// </summary>
 118    public static void RecordEmbeddingCacheAccess(bool hit)
 0119    {
 0120        if (hit) EmbeddingCacheHitCount.Add(1);
 0121        else EmbeddingCacheMissCount.Add(1);
 0122    }
 123
 124    /// <summary>
 125    /// Records an LLM classification call.
 126    /// </summary>
 127    public static void RecordLlmClassification(string model, TimeSpan duration, bool success)
 0128    {
 0129        var tags = new TagList { { "model", model }, { "success", success } };
 0130        LlmClassificationCount.Add(1, tags);
 0131        LlmClassificationDuration.Record(duration.TotalMilliseconds, tags);
 0132    }
 133}