focus on intervals, and fix provider
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
using System;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Linq;
|
||||
@@ -33,7 +33,19 @@ namespace AnotherReplayReader
|
||||
RefreshProviderList();
|
||||
if (_settings.Providers.Count > 0)
|
||||
{
|
||||
_providerListBox.SelectedIndex = 0;
|
||||
var lastSelection = _settings.ResolveLastSelection();
|
||||
if (lastSelection is { } last)
|
||||
{
|
||||
// 恢复上次选中的 Provider 与模型。
|
||||
// OnProviderSelectionChanged 会从持久化的 CurrentModelId 恢复模型;
|
||||
// 显式调用 SelectModel 作为双保险(模型仍存在则精确恢复)。
|
||||
_providerListBox.SelectedItem = last.Provider;
|
||||
SelectModel(last.Model);
|
||||
}
|
||||
else
|
||||
{
|
||||
_providerListBox.SelectedIndex = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -52,6 +64,19 @@ namespace AnotherReplayReader
|
||||
return _settings.Prompt;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 把当前选中的 Provider/模型保存到设置文件(供窗口关闭时调用,
|
||||
/// 下次打开 AI 设置页时恢复上次选择)。
|
||||
/// </summary>
|
||||
public void SaveCurrentSelection()
|
||||
{
|
||||
if (_currentProvider is not null && _currentModel is not null)
|
||||
{
|
||||
_settings.SetCurrentSelection(_currentProvider, _currentModel);
|
||||
_settings.Save();
|
||||
}
|
||||
}
|
||||
|
||||
private void RefreshPromptFields()
|
||||
{
|
||||
_useCustomPromptCheck.IsChecked = _settings.Prompt.UseCustomSystemPrompt;
|
||||
@@ -102,6 +127,9 @@ namespace AnotherReplayReader
|
||||
|
||||
private void OnProviderSelectionChanged(object sender, SelectionChangedEventArgs e)
|
||||
{
|
||||
// 记住当前模型选择,切换 Provider 后若新 Provider 存在同名模型则保持选择
|
||||
var previousModelId = _settings.CurrentModelId;
|
||||
|
||||
_currentProvider = _providerListBox.SelectedItem as AiProvider;
|
||||
if (_currentProvider is null)
|
||||
{
|
||||
@@ -115,7 +143,26 @@ namespace AnotherReplayReader
|
||||
_topPBox.Text = _currentProvider.DefaultTopP.ToString();
|
||||
_maxTokensBox.Text = _currentProvider.DefaultMaxTokens.ToString();
|
||||
|
||||
// 记录上次选中的 Provider(模型在 OnModelSelectionChanged 中记录)
|
||||
_settings.CurrentProviderName = _currentProvider.Name;
|
||||
RefreshModelList();
|
||||
// 尝试恢复上一个选中的模型(启动恢复与 Provider 切换共用同一路径)
|
||||
if (!string.IsNullOrWhiteSpace(previousModelId))
|
||||
{
|
||||
var previousItem = _modelComboBox.Items
|
||||
.OfType<ModelDisplayItem>()
|
||||
.FirstOrDefault(m => string.Equals(
|
||||
m.Model.ModelId, previousModelId, StringComparison.OrdinalIgnoreCase));
|
||||
if (previousItem is not null)
|
||||
{
|
||||
_modelComboBox.SelectedItem = previousItem;
|
||||
}
|
||||
}
|
||||
// 无任何模型/无可恢复目标时回退到第一个模型
|
||||
if (_currentModel is null && _modelComboBox.Items.Count > 0)
|
||||
{
|
||||
_modelComboBox.SelectedIndex = 0;
|
||||
}
|
||||
}
|
||||
|
||||
private void OnAddProviderClick(object sender, RoutedEventArgs e)
|
||||
@@ -147,6 +194,8 @@ namespace AnotherReplayReader
|
||||
}
|
||||
|
||||
_settings.Providers.Remove(_currentProvider);
|
||||
_settings.CurrentProviderName = null;
|
||||
_settings.CurrentModelId = null;
|
||||
_settings.Save();
|
||||
RefreshProviderList();
|
||||
if (_settings.Providers.Count > 0)
|
||||
@@ -156,6 +205,7 @@ namespace AnotherReplayReader
|
||||
else
|
||||
{
|
||||
_currentProvider = null;
|
||||
_currentModel = null;
|
||||
ClearProviderFields();
|
||||
}
|
||||
}
|
||||
@@ -177,6 +227,7 @@ namespace AnotherReplayReader
|
||||
int.TryParse(_maxTokensBox.Text, out int maxTokens);
|
||||
_currentProvider.DefaultMaxTokens = maxTokens;
|
||||
|
||||
_settings.CurrentProviderName = _currentProvider.Name;
|
||||
_settings.Save();
|
||||
RefreshProviderList();
|
||||
_providerListBox.SelectedItem = _currentProvider;
|
||||
@@ -215,10 +266,33 @@ namespace AnotherReplayReader
|
||||
}
|
||||
else
|
||||
{
|
||||
// 当前 Provider 没有任何模型:清空当前模型,避免残留上一个 Provider 的模型
|
||||
_currentModel = null;
|
||||
_settings.CurrentModelId = null;
|
||||
ClearModelFields();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 在模型下拉框中选中指定模型;找不到时回退到第一个模型。
|
||||
/// 仅供启动恢复使用(避免刷新列表后触发首次默认选中)。
|
||||
/// </summary>
|
||||
private void SelectModel(AiModel model)
|
||||
{
|
||||
var item = _modelComboBox.Items
|
||||
.OfType<ModelDisplayItem>()
|
||||
.FirstOrDefault(m => string.Equals(
|
||||
m.Model.ModelId, model.ModelId, StringComparison.OrdinalIgnoreCase));
|
||||
if (item is not null)
|
||||
{
|
||||
_modelComboBox.SelectedItem = item;
|
||||
}
|
||||
else if (_modelComboBox.Items.Count > 0)
|
||||
{
|
||||
_modelComboBox.SelectedIndex = 0;
|
||||
}
|
||||
}
|
||||
|
||||
private void OnModelSelectionChanged(object sender, SelectionChangedEventArgs e)
|
||||
{
|
||||
var selected = _modelComboBox.SelectedItem as ModelDisplayItem;
|
||||
@@ -226,10 +300,13 @@ namespace AnotherReplayReader
|
||||
|
||||
if (_currentModel is null)
|
||||
{
|
||||
_settings.CurrentModelId = null;
|
||||
ClearModelFields();
|
||||
return;
|
||||
}
|
||||
|
||||
_settings.CurrentModelId = _currentModel.ModelId;
|
||||
|
||||
_modelIdBox.Text = _currentModel.ModelId;
|
||||
_contextLengthBox.Text = _currentModel.ContextLength.ToString();
|
||||
_contextBudgetBox.Text = _currentModel.ContextBudget is { } budget ? budget.ToString() : "0";
|
||||
@@ -312,6 +389,18 @@ namespace AnotherReplayReader
|
||||
|
||||
_settings.Save();
|
||||
RefreshModelList();
|
||||
// 保持上次选中的模型(若仍存在),否则回退到第一个
|
||||
if (_settings.CurrentModelId is { } lastModelId)
|
||||
{
|
||||
var lastItem = _modelComboBox.Items
|
||||
.OfType<ModelDisplayItem>()
|
||||
.FirstOrDefault(m => string.Equals(
|
||||
m.Model.ModelId, lastModelId, StringComparison.OrdinalIgnoreCase));
|
||||
if (lastItem is not null)
|
||||
{
|
||||
_modelComboBox.SelectedItem = lastItem;
|
||||
}
|
||||
}
|
||||
_modelStatusText.Text = $"获取成功,共 {ids.Count} 个模型";
|
||||
}
|
||||
catch (Exception ex)
|
||||
@@ -359,6 +448,8 @@ namespace AnotherReplayReader
|
||||
|
||||
_currentProvider.Models.Remove(_currentModel);
|
||||
_settings.Save();
|
||||
// 被删除模型不再是上次选择;RefreshModelList 会回退到第一个模型
|
||||
_settings.CurrentModelId = null;
|
||||
RefreshModelList();
|
||||
}
|
||||
|
||||
@@ -411,7 +502,13 @@ namespace AnotherReplayReader
|
||||
}
|
||||
|
||||
_settings.Save();
|
||||
// 模型 ID 已修改:更新持久化选择,避免下一次启动仍按旧 ID 解析
|
||||
_settings.CurrentModelId = _currentModel.ModelId;
|
||||
RefreshModelList();
|
||||
_modelComboBox.SelectedItem = _modelComboBox.Items
|
||||
.OfType<ModelDisplayItem>()
|
||||
.FirstOrDefault(m => string.Equals(
|
||||
m.Model.ModelId, _currentModel.ModelId, StringComparison.OrdinalIgnoreCase));
|
||||
MessageBox.Show("模型修改已保存", "信息", MessageBoxButton.OK);
|
||||
}
|
||||
|
||||
@@ -437,7 +534,8 @@ namespace AnotherReplayReader
|
||||
RefreshModelList();
|
||||
_modelComboBox.SelectedItem = _modelComboBox.Items
|
||||
.OfType<ModelDisplayItem>()
|
||||
.FirstOrDefault(m => m.Model.ModelId == _currentModel.ModelId);
|
||||
.FirstOrDefault(m => string.Equals(
|
||||
m.Model.ModelId, _currentModel.ModelId, StringComparison.OrdinalIgnoreCase));
|
||||
MessageBox.Show("已从已知模板填充", "信息", MessageBoxButton.OK);
|
||||
}
|
||||
else
|
||||
|
||||
Reference in New Issue
Block a user