fix: fetch AI models in background to avoid main window waiting to show (#2267)

Signed-off-by: leo <longshuang@msn.cn>
This commit is contained in:
leo
2026-04-15 11:00:06 +08:00
parent 5fd7551869
commit 0bf4f92247
5 changed files with 16 additions and 17 deletions

View File

@@ -2,7 +2,6 @@
using System.ClientModel;
using System.Collections.Generic;
using System.Text.Json.Serialization;
using System.Threading.Tasks;
using Azure.AI.OpenAI;
using CommunityToolkit.Mvvm.ComponentModel;
using OpenAI;
@@ -55,7 +54,7 @@ namespace SourceGit.AI
set;
} = string.Empty;
public async Task<List<string>> FetchAvailableModelsAsync()
public void FetchAvailableModels()
{
var allModels = GetOpenAIClient().GetOpenAIModelClient().GetModels();
AvailableModels = new List<string>();
@@ -71,8 +70,6 @@ namespace SourceGit.AI
{
Model = null;
}
return AvailableModels;
}
public ChatClient GetChatClient()

View File

@@ -547,6 +547,7 @@ namespace SourceGit
var pref = ViewModels.Preferences.Instance;
pref.SetCanModify();
pref.UpdateAvailableAIModels();
_launcher = new ViewModels.Launcher(startupRepo);
desktop.MainWindow = new Views.Launcher() { DataContext = _launcher };

View File

@@ -629,19 +629,22 @@ namespace SourceGit.ViewModels
RemoveInvalidRepositoriesRecursive(RepositoryNodes);
}
public async Task UpdateAvailableAIModelsAsync()
public void UpdateAvailableAIModels()
{
foreach (var service in OpenAIServices)
Task.Run(() =>
{
try
foreach (var service in OpenAIServices)
{
await service.FetchAvailableModelsAsync();
try
{
service.FetchAvailableModels();
}
catch
{
// Ignore errors.
}
}
catch
{
// Ignore errors.
}
}
});
}
public void Save()

View File

@@ -106,7 +106,7 @@ namespace SourceGit.Views
Activate();
}
protected override async void OnOpened(EventArgs e)
protected override void OnOpened(EventArgs e)
{
base.OnOpened(e);
@@ -114,8 +114,6 @@ namespace SourceGit.Views
var state = preferences.Layout.LauncherWindowState;
if (state == WindowState.Maximized || state == WindowState.FullScreen)
WindowState = WindowState.Maximized;
await preferences.UpdateAvailableAIModelsAsync();
}
protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change)

View File

@@ -206,7 +206,7 @@ namespace SourceGit.Views
}
var preferences = ViewModels.Preferences.Instance;
await preferences.UpdateAvailableAIModelsAsync();
preferences.UpdateAvailableAIModels();
preferences.Save();
}