/// <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; }
/// <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; }
/// <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)); }
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); }