diff --git a/src/Infrastructure/BotSharp.Abstraction/VectorStorage/Models/VectorFilterGroup.cs b/src/Infrastructure/BotSharp.Abstraction/VectorStorage/Models/VectorFilterGroup.cs index 327645f9e..1b05f742a 100644 --- a/src/Infrastructure/BotSharp.Abstraction/VectorStorage/Models/VectorFilterGroup.cs +++ b/src/Infrastructure/BotSharp.Abstraction/VectorStorage/Models/VectorFilterGroup.cs @@ -5,7 +5,7 @@ namespace BotSharp.Abstraction.VectorStorage.Models; public class VectorFilterGroup { [JsonPropertyName("filters")] - public List? Filters { get; set; } + public IEnumerable? Filters { get; set; } [JsonPropertyName("logical_operator")] public string LogicalOperator { get; set; } = "or"; @@ -14,7 +14,7 @@ public class VectorFilterGroup public class VectorFilterSubGroup { [JsonPropertyName("operands")] - public List Operands { get; set; } = []; + public IEnumerable Operands { get; set; } = []; [JsonPropertyName("logical_operator")] public string LogicalOperator { get; set; } = "or"; @@ -52,7 +52,7 @@ public class VectorFilterRange public string Key { get; set; } = null!; [JsonPropertyName("conditions")] - public List Conditions { get; set; } = []; + public IEnumerable Conditions { get; set; } = []; [JsonPropertyName("data_type")] public VectorPayloadDataType DataType { get; set; } = VectorPayloadDataType.String; @@ -60,10 +60,11 @@ public class VectorFilterRange 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; } } diff --git a/src/Infrastructure/BotSharp.Abstraction/VectorStorage/Models/VectorPayloadValue.cs b/src/Infrastructure/BotSharp.Abstraction/VectorStorage/Models/VectorPayloadValue.cs index bcc70ef7f..e68fff8ed 100644 --- a/src/Infrastructure/BotSharp.Abstraction/VectorStorage/Models/VectorPayloadValue.cs +++ b/src/Infrastructure/BotSharp.Abstraction/VectorStorage/Models/VectorPayloadValue.cs @@ -1,4 +1,5 @@ using BotSharp.Abstraction.VectorStorage.Enums; +using Newtonsoft.Json.Linq; namespace BotSharp.Abstraction.VectorStorage.Models; @@ -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; } diff --git a/src/Plugins/BotSharp.Plugin.Qdrant/QdrantDb.cs b/src/Plugins/BotSharp.Plugin.Qdrant/QdrantDb.cs index 56a0fd44e..41826c370 100644 --- a/src/Plugins/BotSharp.Plugin.Qdrant/QdrantDb.cs +++ b/src/Plugins/BotSharp.Plugin.Qdrant/QdrantDb.cs @@ -507,6 +507,7 @@ public async Task DeleteCollectionShapshot(string collectionName, string s #region Private methods + #region Query filter private Filter? BuildQueryFilter(IEnumerable? filterGroups) { if (filterGroups.IsNullOrEmpty()) @@ -783,6 +784,7 @@ public async Task DeleteCollectionShapshot(string collectionName, string s return fieldCondition; } + #endregion private WithPayloadSelector? BuildPayloadSelector(IEnumerable? payloads) {