Ejemplo n.º 1
0
 /// <summary>
 /// Initializes an instance of the <see cref="ProjectManyEvents" /> class.
 /// </summary>
 /// <param name="embedding">The <see cref="EmbeddingId"/> that identifies the embedding.</param>
 /// <param name="projection">The <see cref="IProjection"/> that is used to update the state.</param>
 /// <param name="initialState">The <see cref="ProjectionState"/> that is used to initialize newly created states.</param>
 /// <param name="logger">The <see cref="ILogger" />.</param>
 public ProjectManyEvents(
     EmbeddingId identifier,
     IEmbedding embedding,
     ProjectionState initialState,
     ILogger logger)
 {
     _identifier   = identifier;
     _embedding    = embedding;
     _initialState = initialState;
     _logger       = logger;
 }
Ejemplo n.º 2
0
    /// <inheritdoc/>
    public IEmbeddingProcessor Create(EmbeddingId embeddingId, IEmbedding embedding, ProjectionState initialState, ExecutionContext executionContext)
    {
        var projectManyEvents = CreateProjectManyEvents(embeddingId, embedding, initialState);

        return(new EmbeddingProcessor(
                   embeddingId,
                   _tenant,
                   executionContext,
                   CreateEmbeddingStateUpdater(embeddingId, projectManyEvents),
                   _streamEventWatcher,
                   _eventStore,
                   _embeddingStore,
                   CreateStateTransitionEventsCalculator(embeddingId, embedding, projectManyEvents),
                   _loggerFactory.CreateLogger <EmbeddingProcessor>()));
    }
 /// <summary>
 /// Initializes an instance of the <see cref="StateTransitionEventsCalculator" /> class.
 /// </summary>
 /// <param name="identifier">The <see cref="EmbeddingId" />.</param>
 /// <param name="embedding">The <see cref="IEmbedding" />.</param>
 /// <param name="projector">The <see cref="IProjectManyEvents"/>.</param>
 /// <param name="stateComparer">The <see cref="ICompareStates"/>.</param>
 /// <param name="loopDetector">The <see cref="IDetectEmbeddingLoops"/>.</param>
 /// <param name="logger">The <see cref="ILogger"/>.</param>
 public StateTransitionEventsCalculator(
     EmbeddingId identifier,
     IEmbedding embedding,
     IProjectManyEvents projector,
     ICompareStates stateComparer,
     IDetectEmbeddingLoops loopDetector,
     ILogger logger)
 {
     _embeddingId   = identifier;
     _embedding     = embedding;
     _projector     = projector;
     _stateComparer = stateComparer;
     _loopDetector  = loopDetector;
     _logger        = logger;
 }
Ejemplo n.º 4
0
    /// <summary>
    /// Returns the top n most similar embeddings to the one given.
    /// </summary>
    public static IEnumerable <(IEmbedding embedding, double similarity)> GetMostSimilarEmbeddings(
        this IEnumerable <IEmbedding> embeddings,
        IEmbedding embedding,
        int n = 10,
        SimilarityFunctionType similarityFunctionType = SimilarityFunctionType.Cosine)
    {
        var similarityFunction = SimilarityFunctionResolver.ResolveSimilarityFunction(similarityFunctionType);

        var embeddingsArray = embeddings.ToArray();

        return(embeddingsArray.Where(we => we.Label != embedding.Label)
               .Select(otherEmbedding => (otherEmbedding, similarityFunction.Invoke(embedding.Vector.ToArray(), otherEmbedding.Vector.ToArray())))
               .OrderByDescending(owcs => owcs.Item2)
               .Take(n));
    }
Ejemplo n.º 5
0
    private static List <IEmbedding> GetNeighborsAndWeight(
        IEmbedding currentEmbedding,
        IEnumerable <IEmbedding> embeddings,
        Func <double[], double[], double> distanceFunction,
        double epsilon)
    {
        var neighbors = new List <IEmbedding>();

        foreach (var embedding in embeddings)
        {
            var distance = distanceFunction.Invoke(currentEmbedding.Vector, embedding.Vector);
            if (distance < epsilon)
            {
                neighbors.Add(embedding);
            }
        }
        return(neighbors);
    }