< Summary

Information
Class: Intentum.AI.Mock.MockEmbeddingProvider
Assembly: Intentum.AI
File(s): /home/runner/work/Intentum/Intentum/src/Intentum.AI/Mock/MockEmbeddingProvider.cs
Line coverage
100%
Covered lines: 33
Uncovered lines: 0
Coverable lines: 33
Total lines: 58
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
Embed(...)100%11100%
GenerateDeterministicVector(...)100%66100%
HashForKeyAndIndex(...)100%22100%

File(s)

/home/runner/work/Intentum/Intentum/src/Intentum.AI/Mock/MockEmbeddingProvider.cs

#LineLine coverage
 1using Intentum.AI.Embeddings;
 2
 3namespace Intentum.AI.Mock;
 4
 5/// <summary>
 6/// Deterministic mock for offline and CI usage.
 7/// </summary>
 8public sealed class MockEmbeddingProvider : IIntentEmbeddingProvider
 9{
 10    public IntentEmbedding Embed(string behaviorKey)
 24611    {
 24612        var hash = behaviorKey.GetHashCode();
 24613        var normalized = Math.Abs(hash % 100) / 100.0;
 14
 15        // Generate a simple deterministic vector for cosine similarity support
 24616        var vector = GenerateDeterministicVector(behaviorKey, dimension: 8);
 17
 24618        return new IntentEmbedding(
 24619            Source: behaviorKey,
 24620            Score: normalized,
 24621            Vector: vector
 24622        );
 24623    }
 24
 25    /// <summary>
 26    /// Generates a deterministic vector from a behavior key for testing purposes.
 27    /// Uses a deterministic hash expansion (no PRNG) so the same key always yields the same vector.
 28    /// </summary>
 29    private static double[] GenerateDeterministicVector(string behaviorKey, int dimension)
 24630    {
 24631        var vector = new double[dimension];
 442832        for (int i = 0; i < dimension; i++)
 196833        {
 196834            var h = HashForKeyAndIndex(behaviorKey, i);
 196835            vector[i] = (h / (double)int.MaxValue) * 2 - 1; // Range: [-1, 1]
 196836        }
 37
 221438        var magnitude = Math.Sqrt(vector.Sum(x => x * x));
 24639        if (magnitude > 0)
 24640        {
 442841            for (int i = 0; i < dimension; i++)
 196842                vector[i] /= magnitude;
 24643        }
 24644        return vector;
 24645    }
 46
 47    private static int HashForKeyAndIndex(string key, int index)
 196848    {
 49        unchecked
 196850        {
 196851            var h = 17;
 6256052            foreach (var c in key)
 2832853                h = h * 31 + c;
 196854            h = h * 31 + index;
 196855            return Math.Abs(h);
 56        }
 196857    }
 58}