🐛 fix: fixed when desktop userId was change manytimes the aimodel not right (#10389)

* fix: fixed when desktop userId was change manytimes the ai model catch not right

* feat: change the isSyncActive as second params
This commit is contained in:
Shinji-Li
2025-11-25 10:58:34 +08:00
committed by GitHub
parent 021f955aeb
commit 3ed81539d0
2 changed files with 31 additions and 11 deletions

View File

@@ -15,6 +15,8 @@ import { serverConfigSelectors } from '@/store/serverConfig/selectors';
import { useUrlHydrationStore } from '@/store/urlHydration';
import { useUserStore } from '@/store/user';
import { authSelectors } from '@/store/user/selectors';
import { electronSyncSelectors } from '@/store/electron/selectors';
import { useElectronStore } from '@/store/electron';
const StoreInitialization = memo(() => {
// prefetch error ns to avoid don't show error content correctly
@@ -63,8 +65,10 @@ const StoreInitialization = memo(() => {
// init inbox agent and default agent config
useInitAgentStore(isLoginOnInit, serverConfig.defaultAgent?.config);
const isSyncActive = useElectronStore((s) => electronSyncSelectors.isSyncActive(s));
// init user provider key vaults
useInitAiProviderKeyVaults(isLoginOnInit);
useInitAiProviderKeyVaults(isLoginOnInit,isSyncActive);
// init user state
useInitUserState(isLoginOnInit, serverConfig, {

View File

@@ -1,4 +1,4 @@
import { isDesktop } from '@lobechat/const';
import { DESKTOP_USER_ID, isDesktop } from '@lobechat/const';
import { getModelPropertyWithFallback, resolveImageSinglePrice } from '@lobechat/model-runtime';
import { uniqBy } from 'lodash-es';
import {
@@ -16,7 +16,7 @@ import { useClientDataSWR } from '@/libs/swr';
import { aiProviderService } from '@/services/aiProvider';
import { AiInfraStore } from '@/store/aiInfra/store';
import { useUserStore } from '@/store/user';
import { authSelectors } from '@/store/user/selectors';
import { authSelectors, userProfileSelectors } from '@/store/user/selectors';
import {
AiProviderDetailItem,
AiProviderListItem,
@@ -77,10 +77,10 @@ export const normalizeImageModel = async (
const fallbackParametersPromise = model.parameters
? Promise.resolve<ModelParamsSchema | undefined>(model.parameters)
: getModelPropertyWithFallback<ModelParamsSchema | undefined>(
model.id,
'parameters',
model.providerId,
);
model.id,
'parameters',
model.providerId,
);
const modelWithPricing = model as AIImageModelCard;
const fallbackPricingPromise = modelWithPricing.pricing
@@ -194,6 +194,7 @@ export interface AiProviderAction {
*/
useFetchAiProviderRuntimeState: (
isLoginOnInit: boolean | undefined,
isSyncActive?: boolean,
) => SWRResponse<AiProviderRuntimeStateWithBuiltinModels | undefined>;
}
@@ -318,11 +319,27 @@ export const createAiProviderSlice: StateCreator<
},
),
useFetchAiProviderRuntimeState: (isLogin) => {
const isAuthLoaded = authSelectors.isLoaded(useUserStore.getState());
useFetchAiProviderRuntimeState: (isLogin, isSyncActive?) => {
const isAuthLoaded = useUserStore(authSelectors.isLoaded);
const userId = useUserStore(userProfileSelectors.userId);
// Only fetch when auth is loaded and login status is explicitly defined (true or false)
// Prevents unnecessary requests when login state is null/undefined
const shouldFetch = isAuthLoaded && isLogin !== null && isLogin !== undefined;
let shouldFetch = isAuthLoaded && isLogin !== null && isLogin !== undefined;
if (isDesktop) {
if (isSyncActive) {
if (userId === undefined || userId === DESKTOP_USER_ID) {
shouldFetch = false;
} else {
shouldFetch = true;
}
} else if (userId === undefined) {
shouldFetch = false;
} else {
shouldFetch = true;
}
}
return useClientDataSWR<AiProviderRuntimeStateWithBuiltinModels | undefined>(
shouldFetch ? [AiProviderSwrKey.fetchAiProviderRuntimeState, isLogin] : null,
async ([, isLogin]) => {
@@ -331,7 +348,6 @@ export const createAiProviderSlice: StateCreator<
if (isLogin) {
const data = await aiProviderService.getAiProviderRuntimeState();
// Build model lists with proper async handling
const [enabledChatModelList, enabledImageModelList] = await Promise.all([
buildChatProviderModelLists(data.enabledChatAiProviders, data.enabledAiModels),