This commit is contained in:
@@ -17,13 +17,13 @@ public class OllamaMessage
|
|||||||
public static class OllamaService
|
public static class OllamaService
|
||||||
{
|
{
|
||||||
private static readonly HttpClient _httpClient = new() { Timeout = TimeSpan.FromMinutes(5) };
|
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<string> SendChatStreamAsync(string model, List<OllamaMessage> messages, string? toolsJson = null)
|
public static async IAsyncEnumerable<string> SendChatStreamAsync(string model, List<OllamaMessage> messages, string? toolsJson = null)
|
||||||
{
|
{
|
||||||
var requestBody = new Dictionary<string, object>
|
var requestBody = new Dictionary<string, object>
|
||||||
{
|
{
|
||||||
{ "model", model },
|
{ "model", string.IsNullOrEmpty(model) ? SettingsManager.Current.OllamaModel : model },
|
||||||
{ "messages", messages },
|
{ "messages", messages },
|
||||||
{ "stream", true } // ВКЛЮЧАЕМ СТРИМИНГ
|
{ "stream", true } // ВКЛЮЧАЕМ СТРИМИНГ
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ namespace VisionAsist.Models;
|
|||||||
public class Selector
|
public class Selector
|
||||||
{
|
{
|
||||||
private static List<OllamaMessage> _chatHistory = new();
|
private static List<OllamaMessage> _chatHistory = new();
|
||||||
public static string CurrentModel = "qwen3.5:4b";
|
public static string CurrentModel => SettingsManager.Current.OllamaModel;
|
||||||
|
|
||||||
public static event Action<string>? OnLogUpdate;
|
public static event Action<string>? OnLogUpdate;
|
||||||
private static void UpdateUI(string text) => OnLogUpdate?.Invoke(text);
|
private static void UpdateUI(string text) => OnLogUpdate?.Invoke(text);
|
||||||
|
|||||||
57
VisionAsist/Models/Settings.cs
Normal file
57
VisionAsist/Models/Settings.cs
Normal file
@@ -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<AppSettings>(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}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -17,11 +17,33 @@ public class ModuleItem
|
|||||||
|
|
||||||
public class SettingsViewModel : ViewModelBase
|
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<ModuleItem> Modules { get; } = new();
|
public ObservableCollection<ModuleItem> Modules { get; } = new();
|
||||||
|
|
||||||
public SettingsViewModel()
|
public SettingsViewModel()
|
||||||
{
|
{
|
||||||
|
SaveCommand = new RelayCommand(SettingsManager.Save);
|
||||||
|
|
||||||
foreach (var module in Core.ModuleList)
|
foreach (var module in Core.ModuleList)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -13,21 +13,39 @@
|
|||||||
to set the actual DataContext for runtime, set the DataContext property in code (look at App.axaml.cs) -->
|
to set the actual DataContext for runtime, set the DataContext property in code (look at App.axaml.cs) -->
|
||||||
<vm:SettingsViewModel/>
|
<vm:SettingsViewModel/>
|
||||||
</Design.DataContext>
|
</Design.DataContext>
|
||||||
<ListBox ItemsSource="{Binding Modules}"
|
<DockPanel LastChildFill="True" Margin="10">
|
||||||
HorizontalAlignment="Stretch"
|
<StackPanel DockPanel.Dock="Top" Spacing="10" Margin="0,0,0,10">
|
||||||
VerticalAlignment="Stretch">
|
<TextBlock Text="Ollama Settings" FontSize="20" FontWeight="Bold"/>
|
||||||
|
|
||||||
<ListBox.ItemTemplate>
|
<Grid ColumnDefinitions="Auto,*" RowDefinitions="Auto,Auto">
|
||||||
<DataTemplate x:DataType="vm:ModuleItem">
|
<TextBlock Text="Base URL:" VerticalAlignment="Center" Margin="0,0,10,0"/>
|
||||||
<Border Background="DarkBlue" CornerRadius="5" Padding="10" Margin="5">
|
<TextBox Grid.Column="1" Text="{Binding OllamaBaseUrl}" Margin="0,5"/>
|
||||||
<Grid ColumnDefinitions="*,Auto">
|
|
||||||
<TextBlock Text="{Binding Name}" />
|
<TextBlock Grid.Row="1" Text="Model:" VerticalAlignment="Center" Margin="0,0,10,0"/>
|
||||||
<Button Content="Settings"
|
<TextBox Grid.Row="1" Grid.Column="1" Text="{Binding OllamaModel}" Margin="0,5"/>
|
||||||
Grid.Column="1"
|
</Grid>
|
||||||
Command="{Binding SettingsCommand}"/>
|
|
||||||
</Grid>
|
<Button Content="Save Settings" Command="{Binding SaveCommand}" HorizontalAlignment="Right"/>
|
||||||
</Border>
|
|
||||||
</DataTemplate>
|
<Separator Margin="0,10"/>
|
||||||
</ListBox.ItemTemplate>
|
<TextBlock Text="Modules" FontSize="18" FontWeight="SemiBold"/>
|
||||||
</ListBox>
|
</StackPanel>
|
||||||
|
|
||||||
|
<ListBox ItemsSource="{Binding Modules}"
|
||||||
|
HorizontalAlignment="Stretch"
|
||||||
|
VerticalAlignment="Stretch">
|
||||||
|
<ListBox.ItemTemplate>
|
||||||
|
<DataTemplate x:DataType="vm:ModuleItem">
|
||||||
|
<Border Background="#2a2a2a" CornerRadius="5" Padding="10" Margin="5">
|
||||||
|
<Grid ColumnDefinitions="*,Auto">
|
||||||
|
<TextBlock Text="{Binding Name}" VerticalAlignment="Center"/>
|
||||||
|
<Button Content="Settings"
|
||||||
|
Grid.Column="1"
|
||||||
|
Command="{Binding SettingsCommand}"/>
|
||||||
|
</Grid>
|
||||||
|
</Border>
|
||||||
|
</DataTemplate>
|
||||||
|
</ListBox.ItemTemplate>
|
||||||
|
</ListBox>
|
||||||
|
</DockPanel>
|
||||||
</Window>
|
</Window>
|
||||||
|
|||||||
Reference in New Issue
Block a user