Fixed multithreading mutation issue

This commit is contained in:
2025-12-31 03:43:44 +01:00
parent bc293bf7ec
commit 8d56883e7e
2 changed files with 16 additions and 6 deletions

View File

@@ -218,6 +218,7 @@ public class SearchdomainHelper(ILogger<SearchdomainHelper> logger, DatabaseHelp
{ {
searchdomain.ReconciliateOrInvalidateCacheForNewOrUpdatedEntity(preexistingEntity); searchdomain.ReconciliateOrInvalidateCacheForNewOrUpdatedEntity(preexistingEntity);
} }
searchdomain.UpdateModelsInUse();
return preexistingEntity; return preexistingEntity;
} }
else else
@@ -243,6 +244,7 @@ public class SearchdomainHelper(ILogger<SearchdomainHelper> logger, DatabaseHelp
}; };
entityCache.Add(entity); entityCache.Add(entity);
searchdomain.ReconciliateOrInvalidateCacheForNewOrUpdatedEntity(entity); searchdomain.ReconciliateOrInvalidateCacheForNewOrUpdatedEntity(entity);
searchdomain.UpdateModelsInUse();
return entity; return entity;
} }
} }

View File

@@ -216,6 +216,11 @@ public class Searchdomain
return queryEmbeddings; return queryEmbeddings;
} }
public void UpdateModelsInUse()
{
modelsInUse = GetModels([.. entityCache]);
}
private static float EvaluateEntityAgainstQueryEmbeddings(Entity entity, Dictionary<string, float[]> queryEmbeddings) private static float EvaluateEntityAgainstQueryEmbeddings(Entity entity, Dictionary<string, float[]> queryEmbeddings)
{ {
List<(string, float)> datapointProbs = []; List<(string, float)> datapointProbs = [];
@@ -237,16 +242,19 @@ public class Searchdomain
public static List<string> GetModels(List<Entity> entities) public static List<string> GetModels(List<Entity> entities)
{ {
List<string> result = []; List<string> 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; foreach ((string, float[]) tuple in datapoint.embeddings)
if (!result.Contains(model))
{ {
result.Add(model); string model = tuple.Item1;
if (!result.Contains(model))
{
result.Add(model);
}
} }
} }
} }