using System; using System.Text.Json; using System.Text.Json.Nodes; using System.Text.Json.Serialization; using StabilityMatrix.Avalonia.ViewModels.Inference; namespace StabilityMatrix.Avalonia.Models; /// /// This is the project file for inference tabs /// [JsonSerializable(typeof(InferenceProjectDocument))] public class InferenceProjectDocument { [JsonIgnore] private static readonly JsonSerializerOptions SerializerOptions = new() { IgnoreReadOnlyProperties = true, WriteIndented = true, }; public int Version { get; set; } = 2; [JsonConverter(typeof(JsonStringEnumConverter))] public InferenceProjectType ProjectType { get; set; } public JsonObject? State { get; set; } public static InferenceProjectDocument FromLoadable(IJsonLoadableState loadableModel) { return new InferenceProjectDocument { ProjectType = loadableModel switch { InferenceTextToImageViewModel => InferenceProjectType.TextToImage, _ => throw new InvalidOperationException( $"Unknown loadable model type: {loadableModel.GetType()}" ) }, State = loadableModel.SaveStateToJsonObject() }; } public Type GetViewModelType() { return ProjectType switch { InferenceProjectType.TextToImage => typeof(InferenceTextToImageViewModel), InferenceProjectType.Unknown => throw new InvalidOperationException(), _ => throw new ArgumentOutOfRangeException(nameof(ProjectType), ProjectType, null) }; } public void VerifyVersion() { if (Version < 2) { throw new NotSupportedException( $"Project was created in an earlier pre-release version of Stability Matrix and is no longer supported. " + $"Please create a new project." ); } } }