From 8d56883e7ebd9a4da7998370ed05d0845ad920cd Mon Sep 17 00:00:00 2001 From: LD-Reborn Date: Wed, 31 Dec 2025 03:43:44 +0100 Subject: [PATCH] Fixed multithreading mutation issue --- src/Server/Helper/SearchdomainHelper.cs | 2 ++ src/Server/Searchdomain.cs | 20 ++++++++++++++------ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/Server/Helper/SearchdomainHelper.cs b/src/Server/Helper/SearchdomainHelper.cs index 2e0d6b4..69b271f 100644 --- a/src/Server/Helper/SearchdomainHelper.cs +++ b/src/Server/Helper/SearchdomainHelper.cs @@ -218,6 +218,7 @@ public class SearchdomainHelper(ILogger logger, DatabaseHelp { searchdomain.ReconciliateOrInvalidateCacheForNewOrUpdatedEntity(preexistingEntity); } + searchdomain.UpdateModelsInUse(); return preexistingEntity; } else @@ -243,6 +244,7 @@ public class SearchdomainHelper(ILogger logger, DatabaseHelp }; entityCache.Add(entity); searchdomain.ReconciliateOrInvalidateCacheForNewOrUpdatedEntity(entity); + searchdomain.UpdateModelsInUse(); return entity; } } diff --git a/src/Server/Searchdomain.cs b/src/Server/Searchdomain.cs index 421fe8d..c764203 100644 --- a/src/Server/Searchdomain.cs +++ b/src/Server/Searchdomain.cs @@ -216,6 +216,11 @@ public class Searchdomain return queryEmbeddings; } + public void UpdateModelsInUse() + { + modelsInUse = GetModels([.. entityCache]); + } + private static float EvaluateEntityAgainstQueryEmbeddings(Entity entity, Dictionary queryEmbeddings) { List<(string, float)> datapointProbs = []; @@ -237,16 +242,19 @@ public class Searchdomain public static List GetModels(List entities) { List result = []; - foreach (Entity entity in entities) + lock (entities) { - foreach (Datapoint datapoint in entity.datapoints) + foreach (Entity entity in entities) { - foreach ((string, float[]) tuple in datapoint.embeddings) + foreach (Datapoint datapoint in entity.datapoints) { - string model = tuple.Item1; - if (!result.Contains(model)) + foreach ((string, float[]) tuple in datapoint.embeddings) { - result.Add(model); + string model = tuple.Item1; + if (!result.Contains(model)) + { + result.Add(model); + } } } }