diff --git a/src/Databases/Abstractions/src/VectorStoreExtensions.cs b/src/Databases/Abstractions/src/VectorStoreExtensions.cs index e34ad192..2933f553 100644 --- a/src/Databases/Abstractions/src/VectorStoreExtensions.cs +++ b/src/Databases/Abstractions/src/VectorStoreExtensions.cs @@ -57,6 +57,7 @@ public static async Task> AddDocumentsAsync( this IVectorDatabase vectorDatabase, IEmbeddingModel embeddingModel, IReadOnlyCollection documents, + EmbeddingSettings? embeddingSettings = default, CancellationToken cancellationToken = default) { vectorDatabase = vectorDatabase ?? throw new ArgumentNullException(nameof(vectorDatabase)); @@ -66,6 +67,7 @@ public static async Task> AddDocumentsAsync( embeddingModel: embeddingModel, texts: documents.Select(x => x.PageContent).ToArray(), metadatas: documents.Select(x => x.Metadata).ToArray(), + embeddingSettings: embeddingSettings, cancellationToken).ConfigureAwait(false); } @@ -74,13 +76,26 @@ public static async Task> AddTextsAsync( IEmbeddingModel embeddingModel, IReadOnlyCollection texts, IReadOnlyCollection>? metadatas = null, + EmbeddingSettings? embeddingSettings = default, CancellationToken cancellationToken = default) { vectorDatabase = vectorDatabase ?? throw new ArgumentNullException(nameof(vectorDatabase)); embeddingModel = embeddingModel ?? throw new ArgumentNullException(nameof(embeddingModel)); + var embeddingRequest = new EmbeddingRequest + { + Strings = texts.ToArray(), + Images = metadatas? + .Select((metadata, i) => metadata.TryGetValue(texts.ElementAt(i), out object? result) + ? result as BinaryData + : null) + .Where(x => x != null) + .Select(x => Data.FromBytes(x!.ToArray())) + .ToArray() ?? [], + }; + float[][] embeddings = await embeddingModel - .CreateEmbeddingsAsync(texts.ToArray(), null, cancellationToken) + .CreateEmbeddingsAsync(embeddingRequest, embeddingSettings, cancellationToken) .ConfigureAwait(false); return await vectorDatabase.AddAsync( diff --git a/src/Databases/OpenSearch/src/OpenSearchVectorStore.cs b/src/Databases/OpenSearch/src/OpenSearchVectorStore.cs index 672ccc6d..a9c2668f 100644 --- a/src/Databases/OpenSearch/src/OpenSearchVectorStore.cs +++ b/src/Databases/OpenSearch/src/OpenSearchVectorStore.cs @@ -65,7 +65,7 @@ public async Task> AddAsync( ); } - var bulkResponse = await _client!.BulkAsync(bulkDescriptor, cancellationToken) + var bulkResponse = await _client.BulkAsync(bulkDescriptor, cancellationToken) .ConfigureAwait(false); return items @@ -73,45 +73,6 @@ public async Task> AddAsync( .ToArray(); } - public async Task> AddImagesAsync(IEnumerable documents, CancellationToken cancellationToken = default) - { - var bulkDescriptor = new BulkDescriptor(); - var i = 1; - - var enumerable = documents as Document[] ?? documents.ToArray(); - foreach (var document in enumerable) - { - document.Metadata.TryGetValue(document.PageContent, out object? value); - var image = (BinaryData)value!; - var images = new List { Data.FromBytes(image.ToArray()) }; - - var embeddingRequest = new EmbeddingRequest - { - Strings = new List() { document.PageContent }, - Images = images - }; - var embed = await EmbeddingModel.CreateEmbeddingsAsync(embeddingRequest, cancellationToken: cancellationToken) - .ConfigureAwait(false); - - var vectorRecord = new VectorRecord - { - Id = i++.ToString(CultureInfo.InvariantCulture), - Text = document.PageContent, - Vector = embed.Values.SelectMany(x => x).ToArray() - }; - - bulkDescriptor.Index(desc => desc - .Document(vectorRecord) - .Index(_indexName) - ); - } - - var bulkResponse = await _client!.BulkAsync(bulkDescriptor, cancellationToken) - .ConfigureAwait(false); - - return new List(); - } - public Task DeleteAsync( IEnumerable ids, CancellationToken cancellationToken = default)