diff --git a/web/app/components/header/account-setting/model-provider-page/index.tsx b/web/app/components/header/account-setting/model-provider-page/index.tsx
index 98de1203b1..583ee5ba33 100644
--- a/web/app/components/header/account-setting/model-provider-page/index.tsx
+++ b/web/app/components/header/account-setting/model-provider-page/index.tsx
@@ -1,4 +1,4 @@
-import { useMemo } from 'react'
+import { useEffect, useMemo } from 'react'
import { useTranslation } from 'react-i18next'
import { useDebounce } from 'ahooks'
import {
@@ -22,6 +22,7 @@ import { useProviderContext } from '@/context/provider-context'
import cn from '@/utils/classnames'
import { useGlobalPublicStore } from '@/context/global-public-context'
import QuotaPanel from './provider-added-card/quota-panel'
+import { useAppContext } from '@/context/app-context'
type Props = {
searchText: string
@@ -32,6 +33,7 @@ const FixedModelProvider = ['langgenius/openai/openai', 'langgenius/anthropic/an
const ModelProviderPage = ({ searchText }: Props) => {
const debouncedSearchText = useDebounce(searchText, { wait: 500 })
const { t } = useTranslation()
+ const { mutateCurrentWorkspace, isValidatingCurrentWorkspace } = useAppContext()
const { data: textGenerationDefaultModel } = useDefaultModel(ModelTypeEnum.textGeneration)
const { data: embeddingsDefaultModel } = useDefaultModel(ModelTypeEnum.textEmbedding)
const { data: rerankDefaultModel } = useDefaultModel(ModelTypeEnum.rerank)
@@ -40,6 +42,7 @@ const ModelProviderPage = ({ searchText }: Props) => {
const { modelProviders: providers } = useProviderContext()
const { enable_marketplace } = useGlobalPublicStore(s => s.systemFeatures)
const defaultModelNotConfigured = !textGenerationDefaultModel && !embeddingsDefaultModel && !speech2textDefaultModel && !rerankDefaultModel && !ttsDefaultModel
+
const [configuredProviders, notConfiguredProviders] = useMemo(() => {
const configuredProviders: ModelProvider[] = []
const notConfiguredProviders: ModelProvider[] = []
@@ -82,6 +85,10 @@ const ModelProviderPage = ({ searchText }: Props) => {
return [filteredConfiguredProviders, filteredNotConfiguredProviders]
}, [configuredProviders, debouncedSearchText, notConfiguredProviders])
+ useEffect(() => {
+ mutateCurrentWorkspace()
+ }, [mutateCurrentWorkspace])
+
return (
@@ -107,7 +114,7 @@ const ModelProviderPage = ({ searchText }: Props) => {
/>
-
+
{!filteredConfiguredProviders?.length && (
diff --git a/web/app/components/header/account-setting/model-provider-page/provider-added-card/quota-panel.tsx b/web/app/components/header/account-setting/model-provider-page/provider-added-card/quota-panel.tsx
index d5734c5acc..b9143578d1 100644
--- a/web/app/components/header/account-setting/model-provider-page/provider-added-card/quota-panel.tsx
+++ b/web/app/components/header/account-setting/model-provider-page/provider-added-card/quota-panel.tsx
@@ -12,6 +12,7 @@ import InstallFromMarketplace from '@/app/components/plugins/install-plugin/inst
import { useMarketplaceAllPlugins } from '../hooks'
import { useBoolean } from 'ahooks'
import useTimestamp from '@/hooks/use-timestamp'
+import Loading from '@/app/components/base/loading'
const allProviders = [
{ key: ModelProviderQuotaGetPaid.OPENAI, Icon: OpenaiSmall },
@@ -33,9 +34,11 @@ const providerKeyToPluginId: Record
= {
type QuotaPanelProps = {
providers: ModelProvider[]
+ isLoading?: boolean
}
const QuotaPanel: FC = ({
providers,
+ isLoading = false,
}) => {
const { t } = useTranslation()
const { currentWorkspace } = useAppContext()
@@ -74,6 +77,14 @@ const QuotaPanel: FC = ({
}
}
}, [providers, isShowInstallModal, hideInstallFromMarketplace])
+ console.log('isLoading', isLoading)
+ if (isLoading) {
+ return (
+
+
+
+ )
+ }
return (
diff --git a/web/context/app-context.tsx b/web/context/app-context.tsx
index 210ef273da..5f5f18499b 100644
--- a/web/context/app-context.tsx
+++ b/web/context/app-context.tsx
@@ -23,6 +23,7 @@ export type AppContextValue = {
langGeniusVersionInfo: LangGeniusVersionResponse
useSelector: typeof useSelector
isLoadingCurrentWorkspace: boolean
+ isValidatingCurrentWorkspace: boolean
}
const userProfilePlaceholder = {
@@ -69,6 +70,7 @@ const AppContext = createContext
({
langGeniusVersionInfo: initialLangGeniusVersionInfo,
useSelector,
isLoadingCurrentWorkspace: false,
+ isValidatingCurrentWorkspace: false,
})
export function useSelector(selector: (value: AppContextValue) => T): T {
@@ -81,7 +83,7 @@ export type AppContextProviderProps = {
export const AppContextProvider: FC = ({ children }) => {
const { data: userProfileResponse, mutate: mutateUserProfile, error: userProfileError } = useSWR({ url: '/account/profile', params: {} }, fetchUserProfile)
- const { data: currentWorkspaceResponse, mutate: mutateCurrentWorkspace, isLoading: isLoadingCurrentWorkspace } = useSWR({ url: '/workspaces/current', params: {} }, fetchCurrentWorkspace)
+ const { data: currentWorkspaceResponse, mutate: mutateCurrentWorkspace, isLoading: isLoadingCurrentWorkspace, isValidating: isValidatingCurrentWorkspace } = useSWR({ url: '/workspaces/current', params: {} }, fetchCurrentWorkspace)
const [userProfile, setUserProfile] = useState(userProfilePlaceholder)
const [langGeniusVersionInfo, setLangGeniusVersionInfo] = useState(initialLangGeniusVersionInfo)
@@ -171,6 +173,7 @@ export const AppContextProvider: FC = ({ children }) =>
isCurrentWorkspaceDatasetOperator,
mutateCurrentWorkspace,
isLoadingCurrentWorkspace,
+ isValidatingCurrentWorkspace,
}}>
{globalThis.document?.body?.getAttribute('data-public-maintenance-notice') && }