mirror of
https://github.com/lobehub/lobehub.git
synced 2026-03-27 13:29:15 +07:00
🐛 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:
@@ -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, {
|
||||
|
||||
@@ -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),
|
||||
|
||||
Reference in New Issue
Block a user