Skip to content

Commit 6e85b3c

Browse files
committed
Fix ExtraNetwork not updating with source
1 parent dfb31ab commit 6e85b3c

File tree

1 file changed

+29
-20
lines changed

1 file changed

+29
-20
lines changed

StabilityMatrix.Avalonia/ViewModels/Inference/ExtraNetworkCardViewModel.cs

Lines changed: 29 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.ComponentModel;
2+
using System.Reactive;
23
using System.Reactive.Linq;
34
using System.Text.Json.Nodes;
45
using System.Text.Json.Serialization;
@@ -60,43 +61,51 @@ public partial class ExtraNetworkCardViewModel : DisposableLoadableViewModelBase
6061
[ObservableProperty]
6162
private HybridModelFile? selectedBaseModel;
6263

63-
public readonly SourceCache<HybridModelFile, string> LoraModelsSource = new(p => p.GetId());
64-
6564
/// <inheritdoc/>
6665
public ExtraNetworkCardViewModel(IInferenceClientManager clientManager, ISettingsManager settingsManager)
6766
{
6867
this.settingsManager = settingsManager;
6968
ClientManager = clientManager;
7069

71-
var filterPredicate = this.WhenPropertyChanged(vm => vm.SelectedBaseModel)
70+
// Observable signal when SelectedBaseModel changes
71+
var baseModelChangedSignal = this.WhenPropertyChanged(vm => vm.SelectedBaseModel)
7272
.Throttle(TimeSpan.FromMilliseconds(50))
73-
.DistinctUntilChanged()
74-
.ObserveOn(SynchronizationContext.Current)
75-
.Select(_ => (Func<HybridModelFile, bool>)FilterCompatibleLoras);
73+
.Select(_ => Unit.Default);
74+
75+
// Observable signal when the FilterExtraNetworksByBaseModel setting changes
76+
var settingChangedSignal = settingsManager
77+
.ObservePropertyChanged(s => s.FilterExtraNetworksByBaseModel)
78+
.Select(_ => Unit.Default);
79+
80+
// Combine signals
81+
var reapplyFilterSignal = Observable
82+
.Merge([baseModelChangedSignal, settingChangedSignal])
83+
// StartWith ensures the filter is applied at least once initially
84+
.StartWith(Unit.Default);
85+
86+
var filterPredicate = reapplyFilterSignal
87+
.ObserveOn(SynchronizationContext.Current!)
88+
.Select(_ =>
89+
{
90+
if (!settingsManager.Settings.FilterExtraNetworksByBaseModel)
91+
return (Func<HybridModelFile, bool>)(_ => true);
92+
93+
return (Func<HybridModelFile, bool>)FilterCompatibleLoras;
94+
});
7695

7796
AddDisposable(
78-
LoraModelsSource
79-
.Connect()
80-
.DeferUntilLoaded()
97+
ClientManager
98+
.LoraModelsChangeSet.DeferUntilLoaded()
8199
.Filter(filterPredicate)
82100
.SortAndBind(
83101
LoraModels,
84102
SortExpressionComparer<HybridModelFile>
85103
.Ascending(f => f.Type)
86104
.ThenByAscending(f => f.SortKey)
87105
)
88-
.ObserveOn(SynchronizationContext.Current)
106+
.ObserveOn(SynchronizationContext.Current!)
89107
.Subscribe()
90108
);
91-
92-
AddDisposable(
93-
settingsManager.RegisterPropertyChangedHandler(
94-
s => s.FilterExtraNetworksByBaseModel,
95-
_ => LoraModelsSource.Refresh()
96-
)
97-
);
98-
99-
LoraModelsSource.EditDiff(clientManager.LoraModels);
100109
}
101110

102111
public IObservableCollection<HybridModelFile> LoraModels { get; } =
@@ -118,7 +127,7 @@ public override JsonObject SaveStateToJsonObject()
118127
IsModelWeightEnabled = IsModelWeightEnabled,
119128
IsClipWeightEnabled = IsClipWeightEnabled,
120129
ModelWeight = ModelWeight,
121-
ClipWeight = ClipWeight
130+
ClipWeight = ClipWeight,
122131
}
123132
);
124133
}

0 commit comments

Comments
 (0)