| 
                        123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 | 
                        - import { useState } from 'react'
 - import useSWR from 'swr'
 - import { LockClosedIcon } from '@heroicons/react/24/solid'
 - import { useTranslation } from 'react-i18next'
 - import Link from 'next/link'
 - import ProviderItem from './provider-item'
 - import OpenaiHostedProvider from './openai-hosted-provider'
 - import type { ProviderHosted } from '@/models/common'
 - import { fetchProviders } from '@/service/common'
 - import { IS_CE_EDITION } from '@/config'
 - 
 - const providersMap: { [k: string]: any } = {
 -   'openai-custom': {
 -     icon: 'openai',
 -     name: 'OpenAI',
 -   },
 -   'azure_openai-custom': {
 -     icon: 'azure',
 -     name: 'Azure OpenAI Service',
 -   },
 - }
 - 
 - // const providersList = [
 - //   {
 - //     id: 'openai',
 - //     name: 'OpenAI',
 - //     providerKey: '1',
 - //     status: '',
 - //     child: <OpenaiProvider />
 - //   },
 - //   {
 - //     id: 'azure',
 - //     name: 'Azure OpenAI Service',
 - //     providerKey: '1',
 - //     status: 'error',
 - //     child: <AzureProvider />
 - //   },
 - //   {
 - //     id: 'anthropic',
 - //     name: 'Anthropic',
 - //     providerKey: '',
 - //     status: '',
 - //     child: <div>placeholder</div>
 - //   },
 - //   {
 - //     id: 'hugging-face',
 - //     name: 'Hugging Face Hub',
 - //     providerKey: '',
 - //     comingSoon: true,
 - //     status: '',
 - //     child: <div>placeholder</div>
 - //   }
 - // ]
 - 
 - const ProviderPage = () => {
 -   const { t } = useTranslation()
 -   const [activeProviderId, setActiveProviderId] = useState('')
 -   const { data, mutate } = useSWR({ url: '/workspaces/current/providers' }, fetchProviders)
 -   const providers = data?.filter(provider => providersMap[`${provider.provider_name}-${provider.provider_type}`])?.map((provider) => {
 -     const providerKey = `${provider.provider_name}-${provider.provider_type}`
 -     return {
 -       provider,
 -       icon: providersMap[providerKey].icon,
 -       name: providersMap[providerKey].name,
 -     }
 -   })
 -   const providerHosted = data?.filter(provider => provider.provider_name === 'openai' && provider.provider_type === 'system')?.[0]
 - 
 -   return (
 -     <div className='pb-7'>
 -       {
 -         providerHosted && !IS_CE_EDITION && (
 -           <>
 -             <div>
 -               <OpenaiHostedProvider provider={providerHosted as ProviderHosted} />
 -             </div>
 -             <div className='my-5 w-full h-0 border-[0.5px] border-gray-100' />
 -           </>
 -         )
 -       }
 -       <div>
 -         {
 -           providers?.map(providerItem => (
 -             <ProviderItem
 -               key={`${providerItem.provider.provider_name}-${providerItem.provider.provider_type}`}
 -               icon={providerItem.icon}
 -               name={providerItem.name}
 -               provider={providerItem.provider}
 -               activeId={activeProviderId}
 -               onActive={aid => setActiveProviderId(aid)}
 -               onSave={() => mutate()}
 -             />
 -           ))
 -         }
 -       </div>
 -       <div className='absolute bottom-0 w-full h-[42px] flex items-center bg-white text-xs text-gray-500'>
 -         <LockClosedIcon className='w-3 h-3 mr-1' />
 -         {t('common.provider.encrypted.front')}
 -         <Link
 -           className='text-primary-600 mx-1'
 -           target={'_blank'}
 -           href='https://pycryptodome.readthedocs.io/en/latest/src/cipher/oaep.html'
 -         >
 -           PKCS1_OAEP
 -         </Link>
 -         {t('common.provider.encrypted.back')}
 -       </div>
 -     </div>
 -   )
 - }
 - 
 - export default ProviderPage
 
 
  |