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 AnthropicHostedProvider from './anthropic-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',
},
'anthropic-custom': {
icon: 'anthropic',
name: 'Anthropic',
},
}
// const providersList = [
// {
// id: 'openai',
// name: 'OpenAI',
// providerKey: '1',
// status: '',
// child:
// },
// {
// id: 'azure',
// name: 'Azure OpenAI Service',
// providerKey: '1',
// status: 'error',
// child:
// },
// {
// id: 'anthropic',
// name: 'Anthropic',
// providerKey: '',
// status: '',
// child:
placeholder
// },
// {
// id: 'hugging-face',
// name: 'Hugging Face Hub',
// providerKey: '',
// comingSoon: true,
// status: '',
// child: placeholder
// }
// ]
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]
const anthropicHosted = data?.filter(provider => provider.provider_name === 'anthropic' && provider.provider_type === 'system')?.[0]
const providedOpenaiProvider = data?.find(provider => provider.is_enabled && (provider.provider_name === 'openai' || provider.provider_name === 'azure_openai'))
return (
{
providerHosted && !IS_CE_EDITION && (
<>
>
)
}
{
anthropicHosted && !IS_CE_EDITION && (
<>
>
)
}
{
providers?.map(providerItem => (
setActiveProviderId(aid)}
onSave={() => mutate()}
providedOpenaiProvider={providedOpenaiProvider}
/>
))
}
{t('common.provider.encrypted.front')}
PKCS1_OAEP
{t('common.provider.encrypted.back')}
)
}
export default ProviderPage