From a430284aa21e3ae1f0d5654e55b2ad2852519cc2 Mon Sep 17 00:00:00 2001 From: wwf <yearningwang@iqtogether.com> Date: 星期三, 04 六月 2025 15:17:49 +0800 Subject: [PATCH] 初始化 --- context/provider-context.tsx | 99 +++++++------------------------------------------ 1 files changed, 15 insertions(+), 84 deletions(-) diff --git a/context/provider-context.tsx b/context/provider-context.tsx index 90af9aa..75747ba 100644 --- a/context/provider-context.tsx +++ b/context/provider-context.tsx @@ -3,39 +3,29 @@ import { createContext, useContext, useContextSelector } from 'use-context-selector' import useSWR from 'swr' import { useEffect, useState } from 'react' -import dayjs from 'dayjs' -import { useTranslation } from 'react-i18next' import { fetchModelList, fetchModelProviders, fetchSupportRetrievalMethods, } from '@/service/common' import { - CurrentSystemQuotaTypeEnum, ModelStatusEnum, ModelTypeEnum, } from '@/app/components/header/account-setting/model-provider-page/declarations' import type { Model, ModelProvider } from '@/app/components/header/account-setting/model-provider-page/declarations' import type { RETRIEVE_METHOD } from '@/types/app' -import type { BasicPlan } from '@/app/components/billing/type' import { Plan, type UsagePlanInfo } from '@/app/components/billing/type' import { fetchCurrentPlanInfo } from '@/service/billing' import { parseCurrentPlan } from '@/app/components/billing/utils' import { defaultPlan } from '@/app/components/billing/config' -import Toast from '@/app/components/base/toast' -import { - useEducationStatus, -} from '@/service/use-education' -import { noop } from 'lodash-es' type ProviderContextState = { modelProviders: ModelProvider[] - refreshModelProviders: () => void textGenerationModelList: Model[] supportRetrievalMethods: RETRIEVE_METHOD[] isAPIKeySet: boolean plan: { - type: BasicPlan + type: Plan usage: UsagePlanInfo total: UsagePlanInfo } @@ -45,13 +35,9 @@ enableReplaceWebAppLogo: boolean modelLoadBalancingEnabled: boolean datasetOperatorEnabled: boolean - enableEducationPlan: boolean - isEducationWorkspace: boolean - isEducationAccount: boolean } const ProviderContext = createContext<ProviderContextState>({ modelProviders: [], - refreshModelProviders: noop, textGenerationModelList: [], supportRetrievalMethods: [], isAPIKeySet: true, @@ -74,19 +60,17 @@ }, isFetchedPlan: false, enableBilling: false, - onPlanInfoChanged: noop, + onPlanInfoChanged: () => { }, enableReplaceWebAppLogo: false, modelLoadBalancingEnabled: false, datasetOperatorEnabled: false, - enableEducationPlan: false, - isEducationWorkspace: false, - isEducationAccount: false, }) export const useProviderContext = () => useContext(ProviderContext) // Adding a dangling comma to avoid the generic parsing issue in tsx, see: // https://github.com/microsoft/TypeScript/issues/15713 +// eslint-disable-next-line @typescript-eslint/comma-dangle export const useProviderContextSelector = <T,>(selector: (state: ProviderContextState) => T): T => useContextSelector(ProviderContext, selector) @@ -96,7 +80,7 @@ export const ProviderContextProvider = ({ children, }: ProviderContextProviderProps) => { - const { data: providersData, mutate: refreshModelProviders } = useSWR('/workspaces/current/model-providers', fetchModelProviders) + const { data: providersData } = useSWR('/workspaces/current/model-providers', fetchModelProviders) const fetchModelListUrlPrefix = '/workspaces/current/models/model-types/' const { data: textGenerationModelList } = useSWR(`${fetchModelListUrlPrefix}${ModelTypeEnum.textGeneration}`, fetchModelList) const { data: supportRetrievalMethods } = useSWR('/datasets/retrieval-setting', fetchSupportRetrievalMethods) @@ -108,77 +92,27 @@ const [modelLoadBalancingEnabled, setModelLoadBalancingEnabled] = useState(false) const [datasetOperatorEnabled, setDatasetOperatorEnabled] = useState(false) - const [enableEducationPlan, setEnableEducationPlan] = useState(false) - const [isEducationWorkspace, setIsEducationWorkspace] = useState(false) - const { data: isEducationAccount } = useEducationStatus(!enableEducationPlan) - const fetchPlan = async () => { - try { - const data = await fetchCurrentPlanInfo() - if (!data) { - console.error('Failed to fetch plan info: data is undefined') - return - } - - // set default value to avoid undefined error - setEnableBilling(data.billing?.enabled ?? false) - setEnableEducationPlan(data.education?.enabled ?? false) - setIsEducationWorkspace(data.education?.activated ?? false) - setEnableReplaceWebAppLogo(data.can_replace_logo ?? false) - - if (data.billing?.enabled) { - setPlan(parseCurrentPlan(data) as any) - setIsFetchedPlan(true) - } - - if (data.model_load_balancing_enabled) - setModelLoadBalancingEnabled(true) - if (data.dataset_operator_enabled) - setDatasetOperatorEnabled(true) + const data = await fetchCurrentPlanInfo() + const enabled = data.billing.enabled + setEnableBilling(enabled) + setEnableReplaceWebAppLogo(data.can_replace_logo) + if (enabled) { + setPlan(parseCurrentPlan(data)) + setIsFetchedPlan(true) } - catch (error) { - console.error('Failed to fetch plan info:', error) - // set default value to avoid undefined error - setEnableBilling(false) - setEnableEducationPlan(false) - setIsEducationWorkspace(false) - setEnableReplaceWebAppLogo(false) - } + if (data.model_load_balancing_enabled) + setModelLoadBalancingEnabled(true) + if (data.dataset_operator_enabled) + setDatasetOperatorEnabled(true) } useEffect(() => { fetchPlan() }, []) - const { t } = useTranslation() - useEffect(() => { - if (localStorage.getItem('anthropic_quota_notice') === 'true') - return - - if (dayjs().isAfter(dayjs('2025-03-17'))) - return - - if (providersData?.data && providersData.data.length > 0) { - const anthropic = providersData.data.find(provider => provider.provider === 'anthropic') - if (anthropic && anthropic.system_configuration.current_quota_type === CurrentSystemQuotaTypeEnum.trial) { - const quota = anthropic.system_configuration.quota_configurations.find(item => item.quota_type === anthropic.system_configuration.current_quota_type) - if (quota && quota.is_valid && quota.quota_used < quota.quota_limit) { - Toast.notify({ - type: 'info', - message: t('common.provider.anthropicHosted.trialQuotaTip'), - duration: 60000, - onClose: () => { - localStorage.setItem('anthropic_quota_notice', 'true') - }, - }) - } - } - } - }, [providersData, t]) - return ( <ProviderContext.Provider value={{ modelProviders: providersData?.data || [], - refreshModelProviders, textGenerationModelList: textGenerationModelList?.data || [], isAPIKeySet: !!textGenerationModelList?.data.some(model => model.status === ModelStatusEnum.active), supportRetrievalMethods: supportRetrievalMethods?.retrieval_method || [], @@ -189,9 +123,6 @@ enableReplaceWebAppLogo, modelLoadBalancingEnabled, datasetOperatorEnabled, - enableEducationPlan, - isEducationWorkspace, - isEducationAccount: isEducationAccount?.result || false, }}> {children} </ProviderContext.Provider> -- Gitblit v1.8.0