| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235 | 
							- import {
 
-   useCallback,
 
-   useEffect,
 
-   useMemo,
 
-   useState,
 
- } from 'react'
 
- import useSWR, { useSWRConfig } from 'swr'
 
- import { useContext } from 'use-context-selector'
 
- import type {
 
-   CustomConfigurationModelFixedFields,
 
-   DefaultModel,
 
-   DefaultModelResponse,
 
-   Model,
 
-   ModelTypeEnum,
 
- } from './declarations'
 
- import {
 
-   ConfigurationMethodEnum,
 
-   ModelStatusEnum,
 
- } from './declarations'
 
- import I18n from '@/context/i18n'
 
- import {
 
-   fetchDefaultModal,
 
-   fetchModelList,
 
-   fetchModelProviderCredentials,
 
-   fetchModelProviders,
 
-   getPayUrl,
 
- } from '@/service/common'
 
- import { useProviderContext } from '@/context/provider-context'
 
- type UseDefaultModelAndModelList = (
 
-   defaultModel: DefaultModelResponse | undefined,
 
-   modelList: Model[],
 
- ) => [DefaultModel | undefined, (model: DefaultModel) => void]
 
- export const useSystemDefaultModelAndModelList: UseDefaultModelAndModelList = (
 
-   defaultModel,
 
-   modelList,
 
- ) => {
 
-   const currentDefaultModel = useMemo(() => {
 
-     const currentProvider = modelList.find(provider => provider.provider === defaultModel?.provider.provider)
 
-     const currentModel = currentProvider?.models.find(model => model.model === defaultModel?.model)
 
-     const currentDefaultModel = currentProvider && currentModel && {
 
-       model: currentModel.model,
 
-       provider: currentProvider.provider,
 
-     }
 
-     return currentDefaultModel
 
-   }, [defaultModel, modelList])
 
-   const [defaultModelState, setDefaultModelState] = useState<DefaultModel | undefined>(currentDefaultModel)
 
-   const handleDefaultModelChange = useCallback((model: DefaultModel) => {
 
-     setDefaultModelState(model)
 
-   }, [])
 
-   useEffect(() => {
 
-     setDefaultModelState(currentDefaultModel)
 
-   }, [currentDefaultModel])
 
-   return [defaultModelState, handleDefaultModelChange]
 
- }
 
- export const useLanguage = () => {
 
-   const { locale } = useContext(I18n)
 
-   return locale.replace('-', '_')
 
- }
 
- export const useProviderCredentialsAndLoadBalancing = (
 
-   provider: string,
 
-   configurationMethod: ConfigurationMethodEnum,
 
-   configured?: boolean,
 
-   currentCustomConfigurationModelFixedFields?: CustomConfigurationModelFixedFields,
 
- ) => {
 
-   const { data: predefinedFormSchemasValue, mutate: mutatePredefined } = useSWR(
 
-     (configurationMethod === ConfigurationMethodEnum.predefinedModel && configured)
 
-       ? `/workspaces/current/model-providers/${provider}/credentials`
 
-       : null,
 
-     fetchModelProviderCredentials,
 
-   )
 
-   const { data: customFormSchemasValue, mutate: mutateCustomized } = useSWR(
 
-     (configurationMethod === ConfigurationMethodEnum.customizableModel && currentCustomConfigurationModelFixedFields)
 
-       ? `/workspaces/current/model-providers/${provider}/models/credentials?model=${currentCustomConfigurationModelFixedFields?.__model_name}&model_type=${currentCustomConfigurationModelFixedFields?.__model_type}`
 
-       : null,
 
-     fetchModelProviderCredentials,
 
-   )
 
-   const credentials = useMemo(() => {
 
-     return configurationMethod === ConfigurationMethodEnum.predefinedModel
 
-       ? predefinedFormSchemasValue?.credentials
 
-       : customFormSchemasValue?.credentials
 
-         ? {
 
-           ...customFormSchemasValue?.credentials,
 
-           ...currentCustomConfigurationModelFixedFields,
 
-         }
 
-         : undefined
 
-   }, [
 
-     configurationMethod,
 
-     currentCustomConfigurationModelFixedFields,
 
-     customFormSchemasValue?.credentials,
 
-     predefinedFormSchemasValue?.credentials,
 
-   ])
 
-   const mutate = useMemo(() => () => {
 
-     mutatePredefined()
 
-     mutateCustomized()
 
-   }, [mutateCustomized, mutatePredefined])
 
-   return {
 
-     credentials,
 
-     loadBalancing: (configurationMethod === ConfigurationMethodEnum.predefinedModel
 
-       ? predefinedFormSchemasValue
 
-       : customFormSchemasValue
 
-     )?.load_balancing,
 
-     mutate,
 
-   }
 
-   // as ([Record<string, string | boolean | undefined> | undefined, ModelLoadBalancingConfig | undefined])
 
- }
 
- export const useModelList = (type: ModelTypeEnum) => {
 
-   const { data, mutate, isLoading } = useSWR(`/workspaces/current/models/model-types/${type}`, fetchModelList)
 
-   return {
 
-     data: data?.data || [],
 
-     mutate,
 
-     isLoading,
 
-   }
 
- }
 
- export const useDefaultModel = (type: ModelTypeEnum) => {
 
-   const { data, mutate, isLoading } = useSWR(`/workspaces/current/default-model?model_type=${type}`, fetchDefaultModal)
 
-   return {
 
-     data: data?.data,
 
-     mutate,
 
-     isLoading,
 
-   }
 
- }
 
- export const useCurrentProviderAndModel = (modelList: Model[], defaultModel?: DefaultModel) => {
 
-   const currentProvider = modelList.find(provider => provider.provider === defaultModel?.provider)
 
-   const currentModel = currentProvider?.models.find(model => model.model === defaultModel?.model)
 
-   return {
 
-     currentProvider,
 
-     currentModel,
 
-   }
 
- }
 
- export const useTextGenerationCurrentProviderAndModelAndModelList = (defaultModel?: DefaultModel) => {
 
-   const { textGenerationModelList } = useProviderContext()
 
-   const activeTextGenerationModelList = textGenerationModelList.filter(model => model.status === ModelStatusEnum.active)
 
-   const {
 
-     currentProvider,
 
-     currentModel,
 
-   } = useCurrentProviderAndModel(textGenerationModelList, defaultModel)
 
-   return {
 
-     currentProvider,
 
-     currentModel,
 
-     textGenerationModelList,
 
-     activeTextGenerationModelList,
 
-   }
 
- }
 
- export const useModelListAndDefaultModel = (type: ModelTypeEnum) => {
 
-   const { data: modelList } = useModelList(type)
 
-   const { data: defaultModel } = useDefaultModel(type)
 
-   return {
 
-     modelList,
 
-     defaultModel,
 
-   }
 
- }
 
- export const useModelListAndDefaultModelAndCurrentProviderAndModel = (type: ModelTypeEnum) => {
 
-   const { modelList, defaultModel } = useModelListAndDefaultModel(type)
 
-   const { currentProvider, currentModel } = useCurrentProviderAndModel(
 
-     modelList,
 
-     { provider: defaultModel?.provider.provider || '', model: defaultModel?.model || '' },
 
-   )
 
-   return {
 
-     modelList,
 
-     defaultModel,
 
-     currentProvider,
 
-     currentModel,
 
-   }
 
- }
 
- export const useUpdateModelList = () => {
 
-   const { mutate } = useSWRConfig()
 
-   const updateModelList = useCallback((type: ModelTypeEnum) => {
 
-     mutate(`/workspaces/current/models/model-types/${type}`)
 
-   }, [mutate])
 
-   return updateModelList
 
- }
 
- export const useAnthropicBuyQuota = () => {
 
-   const [loading, setLoading] = useState(false)
 
-   const handleGetPayUrl = async () => {
 
-     if (loading)
 
-       return
 
-     setLoading(true)
 
-     try {
 
-       const res = await getPayUrl('/workspaces/current/model-providers/anthropic/checkout-url')
 
-       window.location.href = res.url
 
-     }
 
-     finally {
 
-       setLoading(false)
 
-     }
 
-   }
 
-   return handleGetPayUrl
 
- }
 
- export const useModelProviders = () => {
 
-   const { data: providersData, mutate, isLoading } = useSWR('/workspaces/current/model-providers', fetchModelProviders)
 
-   return {
 
-     data: providersData?.data || [],
 
-     mutate,
 
-     isLoading,
 
-   }
 
- }
 
- export const useUpdateModelProviders = () => {
 
-   const { mutate } = useSWRConfig()
 
-   const updateModelProviders = useCallback(() => {
 
-     mutate('/workspaces/current/model-providers')
 
-   }, [mutate])
 
-   return updateModelProviders
 
- }
 
 
  |