Closed
Description
Describe the bug
When the Filter predicate on VectorSearchOptions<T>
is a nullable, search fails with an exception.
activeOnly
is defined as bool? activeOnly = null
in the methods parameters. Since the if block already ensures its never null, I don't see any issue why that operation should fail.
Both activeOnly
and activeOnly.Value
result in the exception.
Only by changing the method declaration to bool activeOnly
or bool activeOnly = true
, read non-nullable, the query executes successfully.
Imho this is not an expected behaviour and should be fixed, as its a very common way to define predicates that way.
To Reproduce
Expression<Func<Project, bool>>? filter = null;
if (activeOnly is not null)
{
filter = project => project.IsActive == activeOnly;
}
VectorSearchOptions<Project> filterOptions = new()
{
Top = top,
IncludeTotalCount = true,
Filter = filter,
};
Throws:
Exception Details
System.NotSupportedException HResult=0x80131515 Message=Equality expression not supported by Qdrant Source=Microsoft.SemanticKernel.Connectors.Qdrant StackTrace: at Microsoft.SemanticKernel.Connectors.Qdrant.QdrantFilterTranslator.TranslateEqual(Expression left, Expression right, Boolean negated) at Microsoft.SemanticKernel.Connectors.Qdrant.QdrantFilterTranslator.Translate(Expression node) at Microsoft.SemanticKernel.Connectors.Qdrant.QdrantFilterTranslator.Translate(LambdaExpression lambdaExpression, IReadOnlyDictionary`2 storagePropertyNames) at Microsoft.SemanticKernel.Connectors.Qdrant.QdrantVectorStoreRecordCollection`1.d__32`1.MoveNext()
Expression<Func<Project, bool>>? filter = null;
if (activeOnly is not null)
{
filter = project => project.IsActive == activeOnly.Value;
}
VectorSearchOptions<Project> filterOptions = new()
{
Top = top,
IncludeTotalCount = true,
Filter = filter,
};
Expected behavior
Operation to succeed.
Platform
- Language: C#
- Source: Nuget
- Microsoft.SemanticKernel 1.47.0
- Microsoft.SemanticKernel.Connectors.Ollama 1.47.0-alpha
- Microsoft.SemanticKernel.Connectors.Qdrant 1.47.0-preview
- AI model: not applicable
- IDE: Visual Studio 2022
- OS: Windows 11, 24H2
Metadata
Metadata
Assignees
Labels
Type
Projects
Status
Sprint: Done