< Summary

Information
Class: Intentum.AI.Models.ProviderLlmIntentModelBase
Assembly: Intentum.AI
File(s): /home/runner/work/Intentum/Intentum/src/Intentum.AI/Models/ProviderLlmIntentModelBase.cs
Line coverage
78%
Covered lines: 26
Uncovered lines: 7
Coverable lines: 33
Total lines: 67
Line coverage: 78.7%
Branch coverage
50%
Covered branches: 2
Total branches: 4
Branch coverage: 50%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Cyclomatic complexity NPath complexity Sequence coverage
.ctor(...)100%11100%
Infer(...)100%22100%
InferAsync()0%220%
BuildIntent(...)100%11100%

File(s)

/home/runner/work/Intentum/Intentum/src/Intentum.AI/Models/ProviderLlmIntentModelBase.cs

#LineLine coverage
 1using Intentum.AI.Embeddings;
 2using Intentum.AI.Similarity;
 3using Intentum.Core.Behavior;
 4using Intentum.Core.Contracts;
 5using Intentum.Core.Intents;
 6
 7namespace Intentum.AI.Models;
 8
 9/// <summary>
 10/// Base implementation for provider-specific LLM intent models (OpenAI, Claude, Gemini, Mistral, Azure OpenAI).
 11/// Shared logic: embed dimensions, compute score, build signals with a provider source name.
 12/// </summary>
 513public abstract class ProviderLlmIntentModelBase(
 514    string sourceName,
 515    IIntentEmbeddingProvider embeddingProvider,
 516    IIntentSimilarityEngine similarityEngine)
 17    : IIntentModel
 18{
 19    /// <inheritdoc />
 20    public Intent Infer(BehaviorSpace behaviorSpace, BehaviorVector? precomputedVector = null)
 421    {
 422        var vector = precomputedVector ?? behaviorSpace.ToVector();
 23
 424        var embeddings = vector.Dimensions.Keys
 625            .Select(k => embeddingProvider.Embed(k))
 426            .ToList();
 27
 428        return BuildIntent(embeddings, vector);
 429    }
 30
 31    /// <summary>
 32    /// Async version that properly awaits embedding calls.
 33    /// </summary>
 34    public async Task<Intent> InferAsync(
 35        BehaviorSpace behaviorSpace,
 36        BehaviorVector? precomputedVector = null,
 37        CancellationToken cancellationToken = default)
 038    {
 039        var vector = precomputedVector ?? behaviorSpace.ToVector();
 40
 041        var tasks = vector.Dimensions.Keys
 042            .Select(k => embeddingProvider.EmbedAsync(k, cancellationToken));
 043        var embeddings = (await Task.WhenAll(tasks)).ToList();
 44
 045        return BuildIntent(embeddings, vector);
 046    }
 47
 48    [System.Diagnostics.CodeAnalysis.SuppressMessage("CodeQuality", "S1172:Unused method parameter should be removed", J
 49    private Intent BuildIntent(List<IntentEmbedding> embeddings, BehaviorVector _)
 450    {
 451        var score = similarityEngine.CalculateIntentScore(embeddings);
 452        var confidence = IntentConfidence.FromScore(score);
 53
 454        var signals = embeddings.Select(e =>
 655            new IntentSignal(
 656                Source: sourceName,
 657                Description: e.Source,
 658                Weight: e.Score))
 459            .ToList();
 60
 461        return new Intent(
 462            Name: "AI-Inferred-Intent",
 463            Signals: signals,
 464            Confidence: confidence
 465        );
 466    }
 67}