Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ namespace BotSharp.Abstraction.VectorStorage.Models;
public class VectorFilterGroup
{
[JsonPropertyName("filters")]
public List<VectorFilterSubGroup>? Filters { get; set; }
public IEnumerable<VectorFilterSubGroup>? Filters { get; set; }

[JsonPropertyName("logical_operator")]
public string LogicalOperator { get; set; } = "or";
Expand All @@ -14,7 +14,7 @@ public class VectorFilterGroup
public class VectorFilterSubGroup
{
[JsonPropertyName("operands")]
public List<VectorFilterOperand> Operands { get; set; } = [];
public IEnumerable<VectorFilterOperand> Operands { get; set; } = [];

[JsonPropertyName("logical_operator")]
public string LogicalOperator { get; set; } = "or";
Expand Down Expand Up @@ -52,18 +52,19 @@ public class VectorFilterRange
public string Key { get; set; } = null!;

[JsonPropertyName("conditions")]
public List<VectorFilterRangeCondition> Conditions { get; set; } = [];
public IEnumerable<VectorFilterRangeCondition> Conditions { get; set; } = [];

[JsonPropertyName("data_type")]
public VectorPayloadDataType DataType { get; set; } = VectorPayloadDataType.String;

public override string ToString()
{
var str = $"Data type: {DataType};";
Conditions?.ForEach(x =>

foreach (var condition in Conditions)
{
str += $"{Key} {x.Operator} {x.Value};";
});
str += $"{Key} {condition.Operator} {condition.Value};";
}
return str;
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using BotSharp.Abstraction.VectorStorage.Enums;
using Newtonsoft.Json.Linq;

namespace BotSharp.Abstraction.VectorStorage.Models;

Expand Down Expand Up @@ -26,33 +27,35 @@ public override string ToString()
return $"{DataValue} ({DataType})";
}

public static VectorPayloadValue BuildStringValue(string data)
{
return new(data, VectorPayloadDataType.String);
}

public static VectorPayloadValue BuildIntegerValue(long data)
{
return new(data, VectorPayloadDataType.Integer);
}

public static VectorPayloadValue BuildDoubleValue(double data)
{
return new(data, VectorPayloadDataType.Double);
}

public static VectorPayloadValue BuildBooleanValue(bool data)
{
return new(data, VectorPayloadDataType.Boolean);
}

public static VectorPayloadValue BuildDatetimeValue(DateTime data)
{
return new(data, VectorPayloadDataType.Datetime);
}

public static VectorPayloadValue BuildUnkownValue(object data)
{
return new(data, VectorPayloadDataType.Unknown);
}
public static VectorPayloadValue BuildStringValue(string data) => new(data, VectorPayloadDataType.String);
public static VectorPayloadValue BuildIntegerValue(long data) => new(data, VectorPayloadDataType.Integer);
public static VectorPayloadValue BuildIntegerValue(int data) => new(data, VectorPayloadDataType.Integer);
public static VectorPayloadValue BuildIntegerValue(short data) => new(data, VectorPayloadDataType.Integer);
public static VectorPayloadValue BuildIntegerValue(byte data) => new(data, VectorPayloadDataType.Integer);
public static VectorPayloadValue BuildDoubleValue(double data) => new(data, VectorPayloadDataType.Double);
public static VectorPayloadValue BuildDoubleValue(float data) => new(data, VectorPayloadDataType.Double);
public static VectorPayloadValue BuildBooleanValue(bool data) => new(data, VectorPayloadDataType.Boolean);
public static VectorPayloadValue BuildDatetimeValue(DateTime data) => new(data, VectorPayloadDataType.Datetime);
public static VectorPayloadValue BuildUnkownValue(object data) => new(data, VectorPayloadDataType.Unknown);


public static explicit operator VectorPayloadValue(string data) => VectorPayloadValue.BuildStringValue(data);
public static explicit operator VectorPayloadValue(long data) => VectorPayloadValue.BuildIntegerValue(data);
public static explicit operator VectorPayloadValue(int data) => VectorPayloadValue.BuildIntegerValue(data);
public static explicit operator VectorPayloadValue(short data) => VectorPayloadValue.BuildIntegerValue(data);
public static explicit operator VectorPayloadValue(byte data) => VectorPayloadValue.BuildIntegerValue(data);
public static explicit operator VectorPayloadValue(double data) => VectorPayloadValue.BuildDoubleValue(data);
public static explicit operator VectorPayloadValue(float data) => VectorPayloadValue.BuildDoubleValue(data);
public static explicit operator VectorPayloadValue(bool data) => VectorPayloadValue.BuildBooleanValue(data);
public static explicit operator VectorPayloadValue(DateTime data) => VectorPayloadValue.BuildDatetimeValue(data);

public static implicit operator string(VectorPayloadValue value) => value.DataValue?.ToString() ?? string.Empty;
public static implicit operator long(VectorPayloadValue value) => long.TryParse(value.DataValue?.ToString(), out var res) ? res : default;
public static implicit operator int(VectorPayloadValue value) => int.TryParse(value.DataValue?.ToString(), out var res) ? res : default;
public static implicit operator short(VectorPayloadValue value) => short.TryParse(value.DataValue?.ToString(), out var res) ? res : default;
public static implicit operator byte(VectorPayloadValue value) => byte.TryParse(value.DataValue?.ToString(), out var res) ? res : default;
public static implicit operator double(VectorPayloadValue value) => double.TryParse(value.DataValue?.ToString(), out var res) ? res : default;
public static implicit operator float(VectorPayloadValue value) => float.TryParse(value.DataValue?.ToString(), out var res) ? res : default;
public static implicit operator bool(VectorPayloadValue value) => bool.TryParse(value.DataValue?.ToString(), out var res) ? res : default;
public static implicit operator DateTime(VectorPayloadValue value) => DateTime.TryParse(value.DataValue?.ToString(), out var res) ? res : default;
}
2 changes: 2 additions & 0 deletions src/Plugins/BotSharp.Plugin.Qdrant/QdrantDb.cs
Original file line number Diff line number Diff line change
Expand Up @@ -507,6 +507,7 @@ public async Task<bool> DeleteCollectionShapshot(string collectionName, string s


#region Private methods
#region Query filter
private Filter? BuildQueryFilter(IEnumerable<VectorFilterGroup>? filterGroups)
{
if (filterGroups.IsNullOrEmpty())
Expand Down Expand Up @@ -783,6 +784,7 @@ public async Task<bool> DeleteCollectionShapshot(string collectionName, string s

return fieldCondition;
}
#endregion

private WithPayloadSelector? BuildPayloadSelector(IEnumerable<string>? payloads)
{
Expand Down
Loading