namespace AIStudio.Tools.DataBackup; /// /// A file or folder AI Studio keeps in its data or configuration folder. /// /// The folder in which the entry lies. /// The path of the entry within that folder, with forward slashes. A folder ends with a slash. /// What the entry holds, and with it, whether it belongs into a backup. public sealed record DataBackupEntry(DataBackupLocation Location, string RelativePath, DataBackupEntryKind Kind) { /// /// Whether the entry belongs into a backup. /// public bool IsIncluded => this.Kind is DataBackupEntryKind.SETTINGS or DataBackupEntryKind.WORKSPACES or DataBackupEntryKind.TEMPORARY_CHATS or DataBackupEntryKind.CHAT_PROVENANCE or DataBackupEntryKind.PLUGINS or DataBackupEntryKind.TOKENIZERS or DataBackupEntryKind.VISUAL_BRIEFINGS or DataBackupEntryKind.DATA_SOURCE_INDEX or DataBackupEntryKind.VECTOR_STORES or DataBackupEntryKind.MEDIA_TRANSCRIPTS; /// /// Whether a backup takes the entry from the copies it makes while the indexing pauses, rather than from the data folder. /// /// /// The indexing writes to these entries, and they refer to each other: the index knows which /// transcript belongs to which file. A backup therefore copies them together while nothing /// writes, cf. DataBackupService.CopyIndexesAsync, and a restore replaces them only together. /// public bool ComesFromIndexCopies => this.Kind is DataBackupEntryKind.DATA_SOURCE_INDEX or DataBackupEntryKind.VECTOR_STORES or DataBackupEntryKind.MEDIA_TRANSCRIPTS; /// /// Whether a backup takes the entry from the copy it makes of the provenance store, rather than from the data folder. /// /// /// The chats write to the store at any time, so a file-by-file copy could catch it halfway /// through a write. Unlike the indexes, it is copied for every backup, since it belongs to the /// chats, which every backup holds. Cf. DataBackupSources.CopyProvenanceStoreAsync. /// public bool ComesFromProvenanceCopy => this.Kind is DataBackupEntryKind.CHAT_PROVENANCE; /// /// Whether the entry is a folder rather than a single file. /// public bool IsFolder => this.RelativePath.EndsWith(DataBackupContents.SEPARATOR); }