using Spectre.Console; namespace LLama.Examples; internal static class UserSettings { private static readonly string SettingsFilePath = Path.Join(AppContext.BaseDirectory, "DefaultModel.env"); private static string? ReadDefaultModelPath() { if (!File.Exists(SettingsFilePath)) return null; string path = File.ReadAllText(SettingsFilePath).Trim(); if (!File.Exists(path)) return null; return path; } private static void WriteDefaultModelPath(string path) { File.WriteAllText(SettingsFilePath, path); } public static string GetModelPath(bool alwaysPrompt = false) { var defaultPath = ReadDefaultModelPath(); var path = defaultPath is null || alwaysPrompt ? PromptUserForPath() : PromptUserForPathWithDefault(defaultPath); if (File.Exists(path)) WriteDefaultModelPath(path); return path; } private static string PromptUserForPath() { return AnsiConsole.Prompt( new TextPrompt("Please input your model path:") .PromptStyle("white") .Validate(File.Exists, "[red]ERROR: invalid model file path - file does not exist[/]") ); } private static string PromptUserForPathWithDefault(string defaultPath) { return AnsiConsole.Prompt( new TextPrompt("Please input your model path (or ENTER for default):") .DefaultValue(defaultPath) .PromptStyle("white") .Validate(File.Exists, "[red]ERROR: invalid model file path - file does not exist[/]") ); } }