| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 | import type { FC } from 'react'import { useTranslation } from 'react-i18next'import type { ModelProvider } from '../declarations'import {  ConfigurationMethodEnum,  CustomConfigurationStatusEnum,  PreferredProviderTypeEnum,} from '../declarations'import {  useUpdateModelList,  useUpdateModelProviders,} from '../hooks'import PrioritySelector from './priority-selector'import PriorityUseTip from './priority-use-tip'import { UPDATE_MODEL_PROVIDER_CUSTOM_MODEL_LIST } from './index'import Indicator from '@/app/components/header/indicator'import { Settings01 } from '@/app/components/base/icons/src/vender/line/general'import Button from '@/app/components/base/button'import { changeModelProviderPriority } from '@/service/common'import { useToastContext } from '@/app/components/base/toast'import { useEventEmitterContextContext } from '@/context/event-emitter'type CredentialPanelProps = {  provider: ModelProvider  onSetup: () => void}const CredentialPanel: FC<CredentialPanelProps> = ({  provider,  onSetup,}) => {  const { t } = useTranslation()  const { notify } = useToastContext()  const { eventEmitter } = useEventEmitterContextContext()  const updateModelList = useUpdateModelList()  const updateModelProviders = useUpdateModelProviders()  const customConfig = provider.custom_configuration  const systemConfig = provider.system_configuration  const priorityUseType = provider.preferred_provider_type  const customConfiged = customConfig.status === CustomConfigurationStatusEnum.active  const configurateMethods = provider.configurate_methods  const handleChangePriority = async (key: PreferredProviderTypeEnum) => {    const res = await changeModelProviderPriority({      url: `/workspaces/current/model-providers/${provider.provider}/preferred-provider-type`,      body: {        preferred_provider_type: key,      },    })    if (res.result === 'success') {      notify({ type: 'success', message: t('common.actionMsg.modifiedSuccessfully') })      updateModelProviders()      configurateMethods.forEach((method) => {        if (method === ConfigurationMethodEnum.predefinedModel)          provider.supported_model_types.forEach(modelType => updateModelList(modelType))      })      eventEmitter?.emit({        type: UPDATE_MODEL_PROVIDER_CUSTOM_MODEL_LIST,        payload: provider.provider,      } as any)    }  }  return (    <>      {        provider.provider_credential_schema && (          <div className='shrink-0 relative ml-1 p-1 w-[112px] rounded-lg bg-white/[0.3] border-[0.5px] border-black/5'>            <div className='flex items-center justify-between mb-1 pt-1 pl-2 pr-[7px] h-5 text-xs font-medium text-gray-500'>              API-KEY              <Indicator color={customConfiged ? 'green' : 'gray'} />            </div>            <div className='flex items-center gap-0.5'>              <Button                className='grow'                size='small'                onClick={onSetup}              >                <Settings01 className='mr-1 w-3 h-3' />                {t('common.operation.setup')}              </Button>              {                systemConfig.enabled && customConfiged && (                  <PrioritySelector                    value={priorityUseType}                    onSelect={handleChangePriority}                  />                )              }            </div>            {              priorityUseType === PreferredProviderTypeEnum.custom && systemConfig.enabled && (                <PriorityUseTip />              )            }          </div>        )      }      {        systemConfig.enabled && customConfiged && !provider.provider_credential_schema && (          <div className='ml-1'>            <PrioritySelector              value={priorityUseType}              onSelect={handleChangePriority}            />          </div>        )      }    </>  )}export default CredentialPanel
 |