|  | @@ -16,22 +16,21 @@ import ConfigModel from '@/app/components/app/configuration/config-model'
 | 
	
		
			
				|  |  |  import Config from '@/app/components/app/configuration/config'
 | 
	
		
			
				|  |  |  import Debug from '@/app/components/app/configuration/debug'
 | 
	
		
			
				|  |  |  import Confirm from '@/app/components/base/confirm'
 | 
	
		
			
				|  |  | -import { ProviderType } from '@/types/app'
 | 
	
		
			
				|  |  | +import { ProviderEnum } from '@/app/components/header/account-setting/model-page/declarations'
 | 
	
		
			
				|  |  |  import type { AppDetailResponse } from '@/models/app'
 | 
	
		
			
				|  |  |  import { ToastContext } from '@/app/components/base/toast'
 | 
	
		
			
				|  |  | -import { fetchTenantInfo } from '@/service/common'
 | 
	
		
			
				|  |  |  import { fetchAppDetail, updateAppModelConfig } from '@/service/apps'
 | 
	
		
			
				|  |  |  import { promptVariablesToUserInputsForm, userInputsFormToPromptVariables } from '@/utils/model-config'
 | 
	
		
			
				|  |  |  import { fetchDatasets } from '@/service/datasets'
 | 
	
		
			
				|  |  |  import AccountSetting from '@/app/components/header/account-setting'
 | 
	
		
			
				|  |  | +import { useProviderContext } from '@/context/provider-context'
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  const Configuration: FC = () => {
 | 
	
		
			
				|  |  |    const { t } = useTranslation()
 | 
	
		
			
				|  |  |    const { notify } = useContext(ToastContext)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    const [hasFetchedDetail, setHasFetchedDetail] = useState(false)
 | 
	
		
			
				|  |  | -  const [hasFetchedKey, setHasFetchedKey] = useState(false)
 | 
	
		
			
				|  |  | -  const isLoading = !hasFetchedDetail || !hasFetchedKey
 | 
	
		
			
				|  |  | +  const isLoading = !hasFetchedDetail
 | 
	
		
			
				|  |  |    const pathname = usePathname()
 | 
	
		
			
				|  |  |    const matched = pathname.match(/\/app\/([^/]+)/)
 | 
	
		
			
				|  |  |    const appId = (matched?.length && matched[1]) ? matched[1] : ''
 | 
	
	
		
			
				|  | @@ -68,7 +67,7 @@ const Configuration: FC = () => {
 | 
	
		
			
				|  |  |      frequency_penalty: 1, // -2-2
 | 
	
		
			
				|  |  |    })
 | 
	
		
			
				|  |  |    const [modelConfig, doSetModelConfig] = useState<ModelConfig>({
 | 
	
		
			
				|  |  | -    provider: ProviderType.openai,
 | 
	
		
			
				|  |  | +    provider: ProviderEnum.openai,
 | 
	
		
			
				|  |  |      model_id: 'gpt-3.5-turbo',
 | 
	
		
			
				|  |  |      configs: {
 | 
	
		
			
				|  |  |        prompt_template: '',
 | 
	
	
		
			
				|  | @@ -85,7 +84,7 @@ const Configuration: FC = () => {
 | 
	
		
			
				|  |  |      doSetModelConfig(newModelConfig)
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  const setModelId = (modelId: string, provider: ProviderType) => {
 | 
	
		
			
				|  |  | +  const setModelId = (modelId: string, provider: ProviderEnum) => {
 | 
	
		
			
				|  |  |      const newModelConfig = produce(modelConfig, (draft: any) => {
 | 
	
		
			
				|  |  |        draft.provider = provider
 | 
	
		
			
				|  |  |        draft.model_id = modelId
 | 
	
	
		
			
				|  | @@ -113,24 +112,26 @@ const Configuration: FC = () => {
 | 
	
		
			
				|  |  |      })
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  const [hasSetCustomAPIKEY, setHasSetCustomerAPIKEY] = useState(true)
 | 
	
		
			
				|  |  | -  const [isTrailFinished, setIsTrailFinished] = useState(false)
 | 
	
		
			
				|  |  | -  const hasSetAPIKEY = hasSetCustomAPIKEY || !isTrailFinished
 | 
	
		
			
				|  |  | +  const { textGenerationModelList } = useProviderContext()
 | 
	
		
			
				|  |  | +  const hasSetCustomAPIKEY = !!textGenerationModelList?.find(({ model_provider: provider }) => {
 | 
	
		
			
				|  |  | +    if (provider.provider_type === 'system' && provider.quota_type === 'paid')
 | 
	
		
			
				|  |  | +      return true
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  const [isShowSetAPIKey, { setTrue: showSetAPIKey, setFalse: hideSetAPIkey }] = useBoolean()
 | 
	
		
			
				|  |  | +    if (provider.provider_type === 'custom')
 | 
	
		
			
				|  |  | +      return true
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  const checkAPIKey = async () => {
 | 
	
		
			
				|  |  | -    const { in_trail, trial_end_reason } = await fetchTenantInfo({ url: '/info' })
 | 
	
		
			
				|  |  | -    const isTrailFinished = in_trail && trial_end_reason === 'trial_exceeded'
 | 
	
		
			
				|  |  | -    const hasSetCustomAPIKEY = trial_end_reason === 'using_custom'
 | 
	
		
			
				|  |  | -    setHasSetCustomerAPIKEY(hasSetCustomAPIKEY)
 | 
	
		
			
				|  |  | -    setIsTrailFinished(isTrailFinished)
 | 
	
		
			
				|  |  | -    setHasFetchedKey(true)
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | +    return false
 | 
	
		
			
				|  |  | +  })
 | 
	
		
			
				|  |  | +  const isTrailFinished = !hasSetCustomAPIKEY && textGenerationModelList
 | 
	
		
			
				|  |  | +    .filter(({ model_provider: provider }) => provider.quota_type === 'trial')
 | 
	
		
			
				|  |  | +    .every(({ model_provider: provider }) => {
 | 
	
		
			
				|  |  | +      const { quota_used, quota_limit } = provider
 | 
	
		
			
				|  |  | +      return quota_used === quota_limit
 | 
	
		
			
				|  |  | +    })
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  useEffect(() => {
 | 
	
		
			
				|  |  | -    checkAPIKey()
 | 
	
		
			
				|  |  | -  }, [])
 | 
	
		
			
				|  |  | +  const hasSetAPIKEY = hasSetCustomAPIKEY || !isTrailFinished
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  const [isShowSetAPIKey, { setTrue: showSetAPIKey, setFalse: hideSetAPIkey }] = useBoolean()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    useEffect(() => {
 | 
	
		
			
				|  |  |      (fetchAppDetail({ url: '/apps', id: appId }) as any).then(async (res: AppDetailResponse) => {
 | 
	
	
		
			
				|  | @@ -284,7 +285,7 @@ const Configuration: FC = () => {
 | 
	
		
			
				|  |  |                {/* Model and Parameters */}
 | 
	
		
			
				|  |  |                <ConfigModel
 | 
	
		
			
				|  |  |                  mode={mode}
 | 
	
		
			
				|  |  | -                provider={modelConfig.provider as ProviderType}
 | 
	
		
			
				|  |  | +                provider={modelConfig.provider as ProviderEnum}
 | 
	
		
			
				|  |  |                  completionParams={completionParams}
 | 
	
		
			
				|  |  |                  modelId={modelConfig.model_id}
 | 
	
		
			
				|  |  |                  setModelId={setModelId}
 | 
	
	
		
			
				|  | @@ -338,7 +339,6 @@ const Configuration: FC = () => {
 | 
	
		
			
				|  |  |            )
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          {isShowSetAPIKey && <AccountSetting activeTab="provider" onCancel={async () => {
 | 
	
		
			
				|  |  | -          await checkAPIKey()
 | 
	
		
			
				|  |  |            hideSetAPIkey()
 | 
	
		
			
				|  |  |          }} />}
 | 
	
		
			
				|  |  |        </>
 |