using System.Diagnostics; using System.Text.Json.Nodes; using AvaloniaEdit.Document; using CommunityToolkit.Mvvm.ComponentModel; using StabilityMatrix.Avalonia.Controls; using StabilityMatrix.Avalonia.Models.Inference; using StabilityMatrix.Avalonia.Models.TagCompletion; using StabilityMatrix.Avalonia.ViewModels.Base; using StabilityMatrix.Core.Attributes; using StabilityMatrix.Core.Services; namespace StabilityMatrix.Avalonia.ViewModels.Inference; [View(typeof(PromptCard))] public partial class PromptCardViewModel : LoadableViewModelBase { public ICompletionProvider CompletionProvider { get; } public ITokenizerProvider TokenizerProvider { get; } public TextDocument PromptDocument { get; } = new(); public TextDocument NegativePromptDocument { get; } = new(); [ObservableProperty] private bool isAutoCompletionEnabled; /// public PromptCardViewModel( ICompletionProvider completionProvider, ITokenizerProvider tokenizerProvider, ISettingsManager settingsManager) { CompletionProvider = completionProvider; TokenizerProvider = tokenizerProvider; settingsManager.RelayPropertyFor(this, vm => vm.IsAutoCompletionEnabled, settings => settings.IsPromptCompletionEnabled, true); } partial void OnIsAutoCompletionEnabledChanged(bool value) { Debug.WriteLine("OnIsAutoCompletionEnabledChanged: " + value); } /// public override JsonObject SaveStateToJsonObject() { return SerializeModel(new PromptCardModel { Prompt = PromptDocument.Text, NegativePrompt = NegativePromptDocument.Text }); } /// public override void LoadStateFromJsonObject(JsonObject state) { var model = DeserializeModel(state); PromptDocument.Text = model.Prompt ?? ""; NegativePromptDocument.Text = model.NegativePrompt ?? ""; } }