diff --git a/VisionAsist/Models/OllamaService.cs b/VisionAsist/Models/OllamaService.cs index b96534f..7528b0b 100644 --- a/VisionAsist/Models/OllamaService.cs +++ b/VisionAsist/Models/OllamaService.cs @@ -17,13 +17,13 @@ public class OllamaMessage public static class OllamaService { private static readonly HttpClient _httpClient = new() { Timeout = TimeSpan.FromMinutes(5) }; - private const string BaseUrl = "http://localhost:11434/api"; + private static string BaseUrl => SettingsManager.Current.OllamaBaseUrl; public static async IAsyncEnumerable SendChatStreamAsync(string model, List messages, string? toolsJson = null) { var requestBody = new Dictionary { - { "model", model }, + { "model", string.IsNullOrEmpty(model) ? SettingsManager.Current.OllamaModel : model }, { "messages", messages }, { "stream", true } // ВКЛЮЧАЕМ СТРИМИНГ }; diff --git a/VisionAsist/Models/Selector.cs b/VisionAsist/Models/Selector.cs index 35afde2..738504d 100644 --- a/VisionAsist/Models/Selector.cs +++ b/VisionAsist/Models/Selector.cs @@ -9,7 +9,7 @@ namespace VisionAsist.Models; public class Selector { private static List _chatHistory = new(); - public static string CurrentModel = "qwen3.5:4b"; + public static string CurrentModel => SettingsManager.Current.OllamaModel; public static event Action? OnLogUpdate; private static void UpdateUI(string text) => OnLogUpdate?.Invoke(text); diff --git a/VisionAsist/Models/Settings.cs b/VisionAsist/Models/Settings.cs new file mode 100644 index 0000000..6052c7f --- /dev/null +++ b/VisionAsist/Models/Settings.cs @@ -0,0 +1,57 @@ +using System; +using System.IO; +using System.Text.Json; + +namespace VisionAsist.Models; + +public class AppSettings +{ + public string OllamaBaseUrl { get; set; } = "http://localhost:11434/api"; + public string OllamaModel { get; set; } = "llama3"; +} + +public static class SettingsManager +{ + private static readonly string SettingsFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "settings.json"); + private static AppSettings _current = new(); + + public static AppSettings Current => _current; + + static SettingsManager() + { + Load(); + } + + public static void Load() + { + try + { + if (File.Exists(SettingsFilePath)) + { + var json = File.ReadAllText(SettingsFilePath); + _current = JsonSerializer.Deserialize(json) ?? new AppSettings(); + } + else + { + Save(); + } + } + catch + { + _current = new AppSettings(); + } + } + + public static void Save() + { + try + { + var json = JsonSerializer.Serialize(_current, new JsonSerializerOptions { WriteIndented = true }); + File.WriteAllText(SettingsFilePath, json); + } + catch (Exception ex) + { + Console.WriteLine($"Error saving settings: {ex.Message}"); + } + } +} \ No newline at end of file diff --git a/VisionAsist/ViewModels/SettingsViewModel.cs b/VisionAsist/ViewModels/SettingsViewModel.cs index a54c75b..8845e0d 100644 --- a/VisionAsist/ViewModels/SettingsViewModel.cs +++ b/VisionAsist/ViewModels/SettingsViewModel.cs @@ -17,11 +17,33 @@ public class ModuleItem public class SettingsViewModel : ViewModelBase { - + public string OllamaBaseUrl + { + get => SettingsManager.Current.OllamaBaseUrl; + set + { + SettingsManager.Current.OllamaBaseUrl = value; + OnPropertyChanged(); + } + } + + public string OllamaModel + { + get => SettingsManager.Current.OllamaModel; + set + { + SettingsManager.Current.OllamaModel = value; + OnPropertyChanged(); + } + } + + public IRelayCommand SaveCommand { get; } + public ObservableCollection Modules { get; } = new(); public SettingsViewModel() { + SaveCommand = new RelayCommand(SettingsManager.Save); foreach (var module in Core.ModuleList) { diff --git a/VisionAsist/Views/Settings.axaml b/VisionAsist/Views/Settings.axaml index c907ac0..a8f463e 100644 --- a/VisionAsist/Views/Settings.axaml +++ b/VisionAsist/Views/Settings.axaml @@ -13,21 +13,39 @@ to set the actual DataContext for runtime, set the DataContext property in code (look at App.axaml.cs) --> - - - - - - - -