From 7a68141d84e578f570d3b3ccd42da665875bed25 Mon Sep 17 00:00:00 2001
From: westey <164392973+westey-m@users.noreply.github.com>
Date: Tue, 15 Apr 2025 11:00:12 +0100
Subject: [PATCH] Update to latest version of Qdrant SDK.
---
dotnet/Directory.Packages.props | 2 +-
...drantVectorStoreCollectionSearchMapping.cs | 21 ++++++++++++++++++-
.../QdrantVectorStoreRecordCollection.cs | 20 +++++++++++++++++-
...VectorStoreCollectionSearchMappingTests.cs | 4 +++-
.../QdrantVectorStoreRecordCollectionTests.cs | 20 +++++++++++-------
5 files changed, 55 insertions(+), 12 deletions(-)
diff --git a/dotnet/Directory.Packages.props b/dotnet/Directory.Packages.props
index 57b69e2620ec..dc5d23e892ac 100644
--- a/dotnet/Directory.Packages.props
+++ b/dotnet/Directory.Packages.props
@@ -157,7 +157,7 @@
-
+
diff --git a/dotnet/src/Connectors/Connectors.Memory.Qdrant/QdrantVectorStoreCollectionSearchMapping.cs b/dotnet/src/Connectors/Connectors.Memory.Qdrant/QdrantVectorStoreCollectionSearchMapping.cs
index 15a95467672f..756050d639ff 100644
--- a/dotnet/src/Connectors/Connectors.Memory.Qdrant/QdrantVectorStoreCollectionSearchMapping.cs
+++ b/dotnet/src/Connectors/Connectors.Memory.Qdrant/QdrantVectorStoreCollectionSearchMapping.cs
@@ -2,6 +2,7 @@
using System;
using System.Collections.Generic;
+using System.Linq;
using Microsoft.Extensions.VectorData;
using Qdrant.Client.Grpc;
@@ -103,10 +104,28 @@ public static VectorSearchResult MapScoredPointToVectorSearchResult payloadEntry in point.Payload)
{
pointStruct.Payload.Add(payloadEntry.Key, payloadEntry.Value);
diff --git a/dotnet/src/Connectors/Connectors.Memory.Qdrant/QdrantVectorStoreRecordCollection.cs b/dotnet/src/Connectors/Connectors.Memory.Qdrant/QdrantVectorStoreRecordCollection.cs
index 760aeaae24f4..24cbd097f422 100644
--- a/dotnet/src/Connectors/Connectors.Memory.Qdrant/QdrantVectorStoreRecordCollection.cs
+++ b/dotnet/src/Connectors/Connectors.Memory.Qdrant/QdrantVectorStoreRecordCollection.cs
@@ -461,10 +461,28 @@ private async IAsyncEnumerable GetBatchByPointIdAsync(
var pointStruct = new PointStruct
{
Id = retrievedPoint.Id,
- Vectors = retrievedPoint.Vectors,
Payload = { }
};
+ if (includeVectors)
+ {
+ pointStruct.Vectors = new();
+ switch (retrievedPoint.Vectors.VectorsOptionsCase)
+ {
+ case VectorsOutput.VectorsOptionsOneofCase.Vector:
+ pointStruct.Vectors.Vector = retrievedPoint.Vectors.Vector.Data.ToArray();
+ break;
+ case VectorsOutput.VectorsOptionsOneofCase.Vectors:
+ pointStruct.Vectors.Vectors_ = new();
+ foreach (var v in retrievedPoint.Vectors.Vectors.Vectors)
+ {
+ // TODO: Refactor mapper to not require pre-mapping to pointstruct to avoid this ToArray conversion.
+ pointStruct.Vectors.Vectors_.Vectors.Add(v.Key, v.Value.Data.ToArray());
+ }
+ break;
+ }
+ }
+
foreach (KeyValuePair payloadEntry in retrievedPoint.Payload)
{
pointStruct.Payload.Add(payloadEntry.Key, payloadEntry.Value);
diff --git a/dotnet/src/Connectors/Connectors.Qdrant.UnitTests/QdrantVectorStoreCollectionSearchMappingTests.cs b/dotnet/src/Connectors/Connectors.Qdrant.UnitTests/QdrantVectorStoreCollectionSearchMappingTests.cs
index afd5e545030a..638bc2cbf861 100644
--- a/dotnet/src/Connectors/Connectors.Qdrant.UnitTests/QdrantVectorStoreCollectionSearchMappingTests.cs
+++ b/dotnet/src/Connectors/Connectors.Qdrant.UnitTests/QdrantVectorStoreCollectionSearchMappingTests.cs
@@ -92,12 +92,14 @@ public void BuildFilterThrowsForUnknownFieldName()
[Fact]
public void MapScoredPointToVectorSearchResultMapsResults()
{
+ var responseVector = VectorOutput.Parser.ParseJson("{ \"data\": [1, 2, 3] }");
+
// Arrange.
var scoredPoint = new ScoredPoint
{
Id = 1,
Payload = { ["storage_DataField"] = "data 1" },
- Vectors = new float[] { 1, 2, 3 },
+ Vectors = new VectorsOutput() { Vector = responseVector },
Score = 0.5f
};
diff --git a/dotnet/src/Connectors/Connectors.Qdrant.UnitTests/QdrantVectorStoreRecordCollectionTests.cs b/dotnet/src/Connectors/Connectors.Qdrant.UnitTests/QdrantVectorStoreRecordCollectionTests.cs
index 3d071066ae2b..216828137953 100644
--- a/dotnet/src/Connectors/Connectors.Qdrant.UnitTests/QdrantVectorStoreRecordCollectionTests.cs
+++ b/dotnet/src/Connectors/Connectors.Qdrant.UnitTests/QdrantVectorStoreRecordCollectionTests.cs
@@ -691,15 +691,17 @@ private void SetupUpsertMock()
private static RetrievedPoint CreateRetrievedPoint(bool hasNamedVectors, TKey recordKey)
{
+ var responseVector = VectorOutput.Parser.ParseJson("{ \"data\": [1, 2, 3, 4] }");
+
RetrievedPoint point;
if (hasNamedVectors)
{
- var namedVectors = new NamedVectors();
- namedVectors.Vectors.Add("vector_storage_name", new[] { 1f, 2f, 3f, 4f });
+ var namedVectors = new NamedVectorsOutput();
+ namedVectors.Vectors.Add("vector_storage_name", responseVector);
point = new RetrievedPoint()
{
Payload = { ["OriginalNameData"] = "data 1", ["data_storage_name"] = "data 1" },
- Vectors = new Vectors { Vectors_ = namedVectors }
+ Vectors = new VectorsOutput { Vectors = namedVectors }
};
}
else
@@ -707,7 +709,7 @@ private static RetrievedPoint CreateRetrievedPoint(bool hasNamedVectors, T
point = new RetrievedPoint()
{
Payload = { ["OriginalNameData"] = "data 1", ["data_storage_name"] = "data 1" },
- Vectors = new[] { 1f, 2f, 3f, 4f }
+ Vectors = new VectorsOutput() { Vector = responseVector }
};
}
@@ -726,16 +728,18 @@ private static RetrievedPoint CreateRetrievedPoint(bool hasNamedVectors, T
private static ScoredPoint CreateScoredPoint(bool hasNamedVectors, TKey recordKey)
{
+ var responseVector = VectorOutput.Parser.ParseJson("{ \"data\": [1, 2, 3, 4] }");
+
ScoredPoint point;
if (hasNamedVectors)
{
- var namedVectors = new NamedVectors();
- namedVectors.Vectors.Add("vector_storage_name", new[] { 1f, 2f, 3f, 4f });
+ var namedVectors = new NamedVectorsOutput();
+ namedVectors.Vectors.Add("vector_storage_name", responseVector);
point = new ScoredPoint()
{
Score = 0.5f,
Payload = { ["OriginalNameData"] = "data 1", ["data_storage_name"] = "data 1" },
- Vectors = new Vectors { Vectors_ = namedVectors }
+ Vectors = new VectorsOutput { Vectors = namedVectors }
};
}
else
@@ -744,7 +748,7 @@ private static ScoredPoint CreateScoredPoint(bool hasNamedVectors, TKey re
{
Score = 0.5f,
Payload = { ["OriginalNameData"] = "data 1", ["data_storage_name"] = "data 1" },
- Vectors = new[] { 1f, 2f, 3f, 4f }
+ Vectors = new VectorsOutput() { Vector = responseVector }
};
}