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
9 changes: 9 additions & 0 deletions StabilityMatrix.Avalonia/Languages/Resources.Designer.cs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 4 additions & 1 deletion StabilityMatrix.Avalonia/Languages/Resources.ja-JP.resx
Original file line number Diff line number Diff line change
Expand Up @@ -231,6 +231,9 @@
<data name="Label_UpdateAvailable" xml:space="preserve">
<value>更新あり</value>
</data>
<data name="Label_EarlyAccessUpdateAvailable" xml:space="preserve">
<value>Early Accessの更新あり</value>
</data>
<data name="Label_BecomeAPatron" xml:space="preserve">
<value>Patreonになる</value>
</data>
Expand Down Expand Up @@ -1432,4 +1435,4 @@ Sparkは兆レベルのパラメータを持つ基盤モデルで、膨大なパ
### 🔒 プライバシーファースト
私たちはプライバシーを最優先に考えています。([生成AI利用規約](https://lykos.ai/gen-ai-terms)) **あなたのプロンプトや出力内容は、Lykos AIや必要なクラウドインフラパートナーによるAI学習には一切使用されません。** 処理はお客様の質問に対する返答を生成するためだけに安全を重視して使われ、**その後はプロンプト内容そのものではなく、メタデータ(タイムスタンプやトークン数など)のみを保存します。** あなたのデータが販売や共有されることは決してありません。</value>
</data>
</root>
</root>
3 changes: 3 additions & 0 deletions StabilityMatrix.Avalonia/Languages/Resources.resx
Original file line number Diff line number Diff line change
Expand Up @@ -231,6 +231,9 @@
<data name="Label_UpdateAvailable" xml:space="preserve">
<value>Update Available</value>
</data>
<data name="Label_EarlyAccessUpdateAvailable" xml:space="preserve">
<value>Early Access Update Available</value>
</data>
<data name="Label_BecomeAPatron" xml:space="preserve">
<value>Become a Patron</value>
</data>
Expand Down
9 changes: 9 additions & 0 deletions StabilityMatrix.Avalonia/Styles/Card.axaml
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,15 @@
</Style>
</Style>

<!-- Early Access -->
<Style Selector="controls|Card.early-access">
<Setter Property="Background" Value="{DynamicResource ThemeDeepOrangeColorTransparent}" />
<Setter Property="BorderBrush" Value="{DynamicResource ThemeDeepOrangeColorTransparent}" />
<Style Selector="^ /template/ ContentPresenter#PART_ContentPresenter">
<Setter Property="Foreground" Value="{DynamicResource ButtonForeground}" />
</Style>
</Style>

<!-- Info -->
<Style Selector="controls|Card.info">
<Setter Property="Background" Value="{DynamicResource ThemeDarkBlueColorTransparent}" />
Expand Down
92 changes: 47 additions & 45 deletions StabilityMatrix.Avalonia/Styles/ThemeColors.axaml
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
<ResourceDictionary xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sty="clr-namespace:FluentAvalonia.Styling;assembly=FluentAvalonia">
<!-- Static colors -->
<ResourceDictionary
xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sty="clr-namespace:FluentAvalonia.Styling;assembly=FluentAvalonia">
<!-- Static colors -->
<Color x:Key="ThemePrimaryColor">#333333</Color>
<Color x:Key="ThemeDarkDarkRedColor">#952923</Color>
<Color x:Key="ThemeDarkRedColor">#C2362E</Color>
Expand Down Expand Up @@ -32,58 +33,59 @@
<Color x:Key="ThemeAmberColor">#FFC107</Color>
<Color x:Key="ThemeOrangeColor">#FF9800</Color>
<Color x:Key="ThemeDeepOrangeColor">#FF5722</Color>
<Color x:Key="ThemeDeepOrangeColorTransparent">#AAFF5722</Color>
<Color x:Key="ThemeEldenRingOrangeColor">#FF4F00</Color>
<Color x:Key="ThemeBrownColor">#795548</Color>
<Color x:Key="ThemeGreyColor">#9E9E9E</Color>
<Color x:Key="ThemeLightGreyColor">#C0C0C0</Color>
<Color x:Key="ThemeBlueGreyColor">#607D8B</Color>
<!-- Dark / light dynamic colors -->

<!-- Dark / light dynamic colors -->
<ResourceDictionary.ThemeDictionaries>
<ResourceDictionary x:Key="Default">
<SolidColorBrush x:Key="ThemeBackgroundBrush" Color="#AAAAAA"/>
<SolidColorBrush x:Key="ThemeDarkAccentForegroundBrush" Color="#AAAAAA"/>
<SolidColorBrush x:Key="ThemeDarkAccentBackgroundBrush" Color="#686868"/>
<SolidColorBrush x:Key="RegionColor" Color="#AAAAAA"/>
<SolidColorBrush x:Key="CompletionBorderBrush" Color="#43454A"/>
<SolidColorBrush x:Key="CompletionBackgroundBrush" Color="#2B2D30"/>
<SolidColorBrush x:Key="CompletionSecondaryBackgroundBrush" Color="#393B40"/>
<SolidColorBrush x:Key="CompletionForegroundBrush" Color="#B4B8BF"/>
<SolidColorBrush x:Key="CompletionSecondaryForegroundBrush" Color="#878B8D"/>
<SolidColorBrush x:Key="CompletionSelectionBackgroundBrush" Color="#2E436E"/>
<SolidColorBrush x:Key="CompletionSelectionForegroundBrush" Color="#5389F4"/>
<SolidColorBrush x:Key="ThemeBackgroundBrush" Color="#AAAAAA" />
<SolidColorBrush x:Key="ThemeDarkAccentForegroundBrush" Color="#AAAAAA" />
<SolidColorBrush x:Key="ThemeDarkAccentBackgroundBrush" Color="#686868" />
<SolidColorBrush x:Key="RegionColor" Color="#AAAAAA" />

<SolidColorBrush x:Key="CompletionBorderBrush" Color="#43454A" />
<SolidColorBrush x:Key="CompletionBackgroundBrush" Color="#2B2D30" />
<SolidColorBrush x:Key="CompletionSecondaryBackgroundBrush" Color="#393B40" />
<SolidColorBrush x:Key="CompletionForegroundBrush" Color="#B4B8BF" />
<SolidColorBrush x:Key="CompletionSecondaryForegroundBrush" Color="#878B8D" />
<SolidColorBrush x:Key="CompletionSelectionBackgroundBrush" Color="#2E436E" />
<SolidColorBrush x:Key="CompletionSelectionForegroundBrush" Color="#5389F4" />
</ResourceDictionary>

<ResourceDictionary x:Key="Dark">
<SolidColorBrush x:Key="ThemeBackgroundBrush" Color="#282828"/>
<SolidColorBrush x:Key="ThemeDarkAccentForegroundBrush" Color="#AAAAAA"/>
<SolidColorBrush x:Key="ThemeDarkAccentBackgroundBrush" Color="#252525"/>
<SolidColorBrush x:Key="RegionColor" Color="#282828"/>
<SolidColorBrush x:Key="CompletionBorderBrush" Color="#43454A"/>
<SolidColorBrush x:Key="CompletionBackgroundBrush" Color="#2B2D30"/>
<SolidColorBrush x:Key="CompletionSecondaryBackgroundBrush" Color="#393B40"/>
<SolidColorBrush x:Key="CompletionForegroundBrush" Color="#B4B8BF"/>
<SolidColorBrush x:Key="CompletionSecondaryForegroundBrush" Color="#878B8D"/>
<SolidColorBrush x:Key="CompletionSelectionBackgroundBrush" Color="#2E436E"/>
<SolidColorBrush x:Key="CompletionSelectionForegroundBrush" Color="#5389F4"/>
<SolidColorBrush x:Key="ThemeBackgroundBrush" Color="#282828" />
<SolidColorBrush x:Key="ThemeDarkAccentForegroundBrush" Color="#AAAAAA" />
<SolidColorBrush x:Key="ThemeDarkAccentBackgroundBrush" Color="#252525" />
<SolidColorBrush x:Key="RegionColor" Color="#282828" />

<SolidColorBrush x:Key="CompletionBorderBrush" Color="#43454A" />
<SolidColorBrush x:Key="CompletionBackgroundBrush" Color="#2B2D30" />
<SolidColorBrush x:Key="CompletionSecondaryBackgroundBrush" Color="#393B40" />
<SolidColorBrush x:Key="CompletionForegroundBrush" Color="#B4B8BF" />
<SolidColorBrush x:Key="CompletionSecondaryForegroundBrush" Color="#878B8D" />
<SolidColorBrush x:Key="CompletionSelectionBackgroundBrush" Color="#2E436E" />
<SolidColorBrush x:Key="CompletionSelectionForegroundBrush" Color="#5389F4" />
</ResourceDictionary>

<ResourceDictionary x:Key="{x:Static sty:FluentAvaloniaTheme.HighContrastTheme}">
<SolidColorBrush x:Key="ThemeBackgroundBrush" Color="#AAAAAA"/>
<SolidColorBrush x:Key="ThemeDarkAccentForegroundBrush" Color="#AAAAAA"/>
<SolidColorBrush x:Key="ThemeDarkAccentBackgroundBrush" Color="#686868"/>
<SolidColorBrush x:Key="RegionColor" Color="#AAAAAA"/>
<SolidColorBrush x:Key="CompletionBorderBrush" Color="#43454A"/>
<SolidColorBrush x:Key="CompletionBackgroundBrush" Color="#2B2D30"/>
<SolidColorBrush x:Key="CompletionSecondaryBackgroundBrush" Color="#393B40"/>
<SolidColorBrush x:Key="CompletionForegroundBrush" Color="#B4B8BF"/>
<SolidColorBrush x:Key="CompletionSecondaryForegroundBrush" Color="#878B8D"/>
<SolidColorBrush x:Key="CompletionSelectionBackgroundBrush" Color="#2E436E"/>
<SolidColorBrush x:Key="CompletionSelectionForegroundBrush" Color="#5389F4"/>
<SolidColorBrush x:Key="ThemeBackgroundBrush" Color="#AAAAAA" />
<SolidColorBrush x:Key="ThemeDarkAccentForegroundBrush" Color="#AAAAAA" />
<SolidColorBrush x:Key="ThemeDarkAccentBackgroundBrush" Color="#686868" />
<SolidColorBrush x:Key="RegionColor" Color="#AAAAAA" />

<SolidColorBrush x:Key="CompletionBorderBrush" Color="#43454A" />
<SolidColorBrush x:Key="CompletionBackgroundBrush" Color="#2B2D30" />
<SolidColorBrush x:Key="CompletionSecondaryBackgroundBrush" Color="#393B40" />
<SolidColorBrush x:Key="CompletionForegroundBrush" Color="#B4B8BF" />
<SolidColorBrush x:Key="CompletionSecondaryForegroundBrush" Color="#878B8D" />
<SolidColorBrush x:Key="CompletionSelectionBackgroundBrush" Color="#2E436E" />
<SolidColorBrush x:Key="CompletionSelectionForegroundBrush" Color="#5389F4" />
</ResourceDictionary>
</ResourceDictionary.ThemeDictionaries>

</ResourceDictionary>
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ namespace StabilityMatrix.Avalonia.ViewModels.CheckpointManager;
public partial class CheckpointFileViewModel : SelectableViewModelBase
{
[ObservableProperty]
[NotifyPropertyChangedFor(nameof(HasEarlyAccessUpdateOnly))]
[NotifyPropertyChangedFor(nameof(HasStandardUpdate))]
private LocalModelFile checkpointFile;

[ObservableProperty]
Expand Down Expand Up @@ -64,6 +66,8 @@ public partial class CheckpointFileViewModel : SelectableViewModelBase
public bool CanShowTriggerWords => CheckpointFile.ConnectedModelInfo?.TrainedWords?.Length > 0;
public string BaseModelName => CheckpointFile.ConnectedModelInfo?.BaseModel ?? string.Empty;
public CivitModelType ModelType => CheckpointFile.ConnectedModelInfo?.ModelType ?? CivitModelType.Unknown;
public bool HasEarlyAccessUpdateOnly => CheckpointFile.HasEarlyAccessUpdateOnly;
public bool HasStandardUpdate => CheckpointFile.HasUpdate && !CheckpointFile.HasEarlyAccessUpdateOnly;

/// <inheritdoc/>
public CheckpointFileViewModel(
Expand Down
20 changes: 19 additions & 1 deletion StabilityMatrix.Avalonia/Views/CheckpointsPage.axaml
Original file line number Diff line number Diff line change
Expand Up @@ -629,7 +629,7 @@
HorizontalAlignment="Left"
VerticalAlignment="Top"
Classes="success"
IsVisible="{Binding CheckpointFile.HasUpdate}">
IsVisible="{Binding HasStandardUpdate}">

<TextBlock
HorizontalAlignment="Center"
Expand All @@ -640,6 +640,24 @@
<Run Text="{Binding CheckpointFile.LatestModelInfo.LatestVersionCreatedAt}" />
</TextBlock>
</controls:Card>
<controls:Card
Height="24"
Margin="4,8,0,0"
Padding="4"
HorizontalAlignment="Left"
VerticalAlignment="Top"
Classes="early-access"
IsVisible="{Binding HasEarlyAccessUpdateOnly}">

<TextBlock
HorizontalAlignment="Center"
VerticalAlignment="Center"
FontSize="11"
FontWeight="Medium">
<Run Text="{x:Static lang:Resources.Label_EarlyAccessUpdateAvailable}" />
<Run Text="{Binding CheckpointFile.LatestModelInfo.LatestVersionCreatedAt}" />
</TextBlock>
</controls:Card>
</WrapPanel>
</LayoutTransformControl>

Expand Down
20 changes: 16 additions & 4 deletions StabilityMatrix.Core/Models/Database/LocalModelFile.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,18 @@ public bool Equals(LocalModelFile? x, LocalModelFile? y)
return false;
return x.RelativePath == y.RelativePath
&& Equals(x.ConnectedModelInfo, y.ConnectedModelInfo)
&& x.HasUpdate == y.HasUpdate;
&& x.HasUpdate == y.HasUpdate
&& x.HasEarlyAccessUpdateOnly == y.HasEarlyAccessUpdateOnly;
}

public int GetHashCode(LocalModelFile obj)
{
return HashCode.Combine(obj.RelativePath, obj.ConnectedModelInfo, obj.HasUpdate);
return HashCode.Combine(
obj.RelativePath,
obj.ConnectedModelInfo,
obj.HasUpdate,
obj.HasEarlyAccessUpdateOnly
);
}
}

Expand All @@ -44,12 +50,13 @@ public virtual bool Equals(LocalModelFile? other)
return true;
return RelativePath == other.RelativePath
&& ConnectedModelInfo == other.ConnectedModelInfo
&& HasUpdate == other.HasUpdate;
&& HasUpdate == other.HasUpdate
&& HasEarlyAccessUpdateOnly == other.HasEarlyAccessUpdateOnly;
}

public override int GetHashCode()
{
return HashCode.Combine(RelativePath, ConnectedModelInfo, HasUpdate);
return HashCode.Combine(RelativePath, ConnectedModelInfo, HasUpdate, HasEarlyAccessUpdateOnly);
}

/// <summary>
Expand Down Expand Up @@ -88,6 +95,11 @@ public override int GetHashCode()
/// </summary>
public bool HasUpdate { get; set; }

/// <summary>
/// Whether updates are limited to Early Access versions only.
/// </summary>
public bool HasEarlyAccessUpdateOnly { get; set; }

/// <summary>
/// Last time this model was checked for an update
/// </summary>
Expand Down
22 changes: 22 additions & 0 deletions StabilityMatrix.Core/Services/ModelIndexService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -511,6 +511,7 @@ private async Task RefreshIndexParallelCore()
if (modelsDict.TryGetValue(model.RelativePath, out var dbModel))
{
model.HasUpdate = dbModel.HasUpdate;
model.HasEarlyAccessUpdateOnly = dbModel.HasEarlyAccessUpdateOnly;
model.LastUpdateCheck = dbModel.LastUpdateCheck;
model.LatestModelInfo = dbModel.LatestModelInfo;
}
Expand Down Expand Up @@ -668,6 +669,7 @@ await liteDbContext.LocalModelFiles.FindAllAsync().ConfigureAwait(false) ?? []
.ToList();

dbModel.HasUpdate = !latestHashes.Any(hash => installedHashes.Contains(hash!));
dbModel.HasEarlyAccessUpdateOnly = GetHasEarlyAccessUpdateOnly(dbModel, remoteModel);
dbModel.LastUpdateCheck = DateTimeOffset.UtcNow;
dbModel.LatestModelInfo = remoteModel;

Expand Down Expand Up @@ -700,4 +702,24 @@ private static HashSet<string> CollectModelHashes(IEnumerable<LocalModelFile> mo
}
return hashes;
}

private static bool GetHasEarlyAccessUpdateOnly(LocalModelFile model, CivitModel? remoteModel)
{
if (!model.HasUpdate || !model.HasCivitMetadata)
return false;

var versions = remoteModel?.ModelVersions;
if (versions == null || versions.Count == 0)
return false;

var installedVersionId = model.ConnectedModelInfo?.VersionId;
if (installedVersionId == null)
return false;

var installedIndex = versions.FindIndex(version => version.Id == installedVersionId.Value);
if (installedIndex <= 0)
return false;

return versions.Take(installedIndex).All(version => version.IsEarlyAccess);
}
}
Loading
Loading