| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 | 
							- import { memo, useCallback } from 'react'
 
- import { useTranslation } from 'react-i18next'
 
- import { useDebounceFn } from 'ahooks'
 
- import type { CustomConfigurationModelFixedFields, ModelItem, ModelProvider } from '../declarations'
 
- import { ConfigurationMethodEnum, ModelStatusEnum } from '../declarations'
 
- import ModelBadge from '../model-badge'
 
- import ModelIcon from '../model-icon'
 
- import ModelName from '../model-name'
 
- import classNames from '@/utils/classnames'
 
- import Button from '@/app/components/base/button'
 
- import { Balance } from '@/app/components/base/icons/src/vender/line/financeAndECommerce'
 
- import { Settings01 } from '@/app/components/base/icons/src/vender/line/general'
 
- import Switch from '@/app/components/base/switch'
 
- import Tooltip from '@/app/components/base/tooltip'
 
- import { useProviderContext, useProviderContextSelector } from '@/context/provider-context'
 
- import { disableModel, enableModel } from '@/service/common'
 
- import { Plan } from '@/app/components/billing/type'
 
- import { useAppContext } from '@/context/app-context'
 
- export type ModelListItemProps = {
 
-   model: ModelItem
 
-   provider: ModelProvider
 
-   isConfigurable: boolean
 
-   onConfig: (currentCustomConfigurationModelFixedFields?: CustomConfigurationModelFixedFields) => void
 
-   onModifyLoadBalancing?: (model: ModelItem) => void
 
- }
 
- const ModelListItem = ({ model, provider, isConfigurable, onConfig, onModifyLoadBalancing }: ModelListItemProps) => {
 
-   const { t } = useTranslation()
 
-   const { plan } = useProviderContext()
 
-   const modelLoadBalancingEnabled = useProviderContextSelector(state => state.modelLoadBalancingEnabled)
 
-   const { isCurrentWorkspaceManager } = useAppContext()
 
-   const toggleModelEnablingStatus = useCallback(async (enabled: boolean) => {
 
-     if (enabled)
 
-       await enableModel(`/workspaces/current/model-providers/${provider.provider}/models/enable`, { model: model.model, model_type: model.model_type })
 
-     else
 
-       await disableModel(`/workspaces/current/model-providers/${provider.provider}/models/disable`, { model: model.model, model_type: model.model_type })
 
-   }, [model.model, model.model_type, provider.provider])
 
-   const { run: debouncedToggleModelEnablingStatus } = useDebounceFn(toggleModelEnablingStatus, { wait: 500 })
 
-   const onEnablingStateChange = useCallback(async (value: boolean) => {
 
-     debouncedToggleModelEnablingStatus(value)
 
-   }, [debouncedToggleModelEnablingStatus])
 
-   return (
 
-     <div
 
-       key={model.model}
 
-       className={classNames(
 
-         'group flex items-center pl-2 pr-2.5 h-8 rounded-lg',
 
-         isConfigurable && 'hover:bg-gray-50',
 
-         model.deprecated && 'opacity-60',
 
-       )}
 
-     >
 
-       <ModelIcon
 
-         className='shrink-0 mr-2'
 
-         provider={provider}
 
-         modelName={model.model}
 
-       />
 
-       <ModelName
 
-         className='grow text-sm font-normal text-gray-900'
 
-         modelItem={model}
 
-         showModelType
 
-         showMode
 
-         showContextSize
 
-       >
 
-         {modelLoadBalancingEnabled && !model.deprecated && model.load_balancing_enabled && (
 
-           <ModelBadge className='ml-1 uppercase text-indigo-600 border-indigo-300'>
 
-             <Balance className='w-3 h-3 mr-0.5' />
 
-             {t('common.modelProvider.loadBalancingHeadline')}
 
-           </ModelBadge>
 
-         )}
 
-       </ModelName>
 
-       <div className='shrink-0 flex items-center'>
 
-         {
 
-           model.fetch_from === ConfigurationMethodEnum.customizableModel
 
-             ? (isCurrentWorkspaceManager && (
 
-               <Button
 
-                 className='hidden group-hover:flex h-7'
 
-                 onClick={() => onConfig({ __model_name: model.model, __model_type: model.model_type })}
 
-               >
 
-                 <Settings01 className='mr-[5px] w-3.5 h-3.5' />
 
-                 {t('common.modelProvider.config')}
 
-               </Button>
 
-             ))
 
-             : (isCurrentWorkspaceManager && (modelLoadBalancingEnabled || plan.type === Plan.sandbox) && !model.deprecated && [ModelStatusEnum.active, ModelStatusEnum.disabled].includes(model.status))
 
-               ? (
 
-                 <Button
 
-                   className='opacity-0 group-hover:opacity-100 h-[28px] transition-opacity'
 
-                   onClick={() => onModifyLoadBalancing?.(model)}
 
-                 >
 
-                   <Balance className='mr-1 w-[14px] h-[14px]' />
 
-                   {t('common.modelProvider.configLoadBalancing')}
 
-                 </Button>
 
-               )
 
-               : null
 
-         }
 
-         {
 
-           model.deprecated
 
-             ? (
 
-               <Tooltip
 
-                 popupContent={
 
-                   <span className='font-semibold'>{t('common.modelProvider.modelHasBeenDeprecated')}</span>} offset={{ mainAxis: 4 }
 
-                 }
 
-                 needsDelay
 
-               >
 
-                 <Switch defaultValue={false} disabled size='md' />
 
-               </Tooltip>
 
-             )
 
-             : (isCurrentWorkspaceManager && (
 
-               <Switch
 
-                 className='ml-2'
 
-                 defaultValue={model?.status === ModelStatusEnum.active}
 
-                 disabled={![ModelStatusEnum.active, ModelStatusEnum.disabled].includes(model.status)}
 
-                 size='md'
 
-                 onChange={onEnablingStateChange}
 
-               />
 
-             ))
 
-         }
 
-       </div>
 
-     </div>
 
-   )
 
- }
 
- export default memo(ModelListItem)
 
 
  |