| import { ValidatedStatus } from '../key-validator/declarations' | |
| import type { | |
| CredentialFormSchemaRadio, | |
| CredentialFormSchemaTextInput, | |
| FormValue, | |
| ModelLoadBalancingConfig, | |
| } from './declarations' | |
| import { | |
| ConfigurationMethodEnum, | |
| FormTypeEnum, | |
| MODEL_TYPE_TEXT, | |
| ModelTypeEnum, | |
| } from './declarations' | |
| import { | |
| deleteModelProvider, | |
| setModelProvider, | |
| validateModelLoadBalancingCredentials, | |
| validateModelProvider, | |
| } from '@/service/common' | |
| export const MODEL_PROVIDER_QUOTA_GET_PAID = ['anthropic', 'openai', 'azure_openai'] | |
| export const DEFAULT_BACKGROUND_COLOR = '#F3F4F6' | |
| export const isNullOrUndefined = (value: any) => { | |
| return value === undefined || value === null | |
| } | |
| export const validateCredentials = async (predefined: boolean, provider: string, v: FormValue) => { | |
| let body, url | |
| if (predefined) { | |
| body = { | |
| credentials: v, | |
| } | |
| url = `/workspaces/current/model-providers/${provider}/credentials/validate` | |
| } | |
| else { | |
| const { __model_name, __model_type, ...credentials } = v | |
| body = { | |
| model: __model_name, | |
| model_type: __model_type, | |
| credentials, | |
| } | |
| url = `/workspaces/current/model-providers/${provider}/models/credentials/validate` | |
| } | |
| try { | |
| const res = await validateModelProvider({ url, body }) | |
| if (res.result === 'success') | |
| return Promise.resolve({ status: ValidatedStatus.Success }) | |
| else | |
| return Promise.resolve({ status: ValidatedStatus.Error, message: res.error || 'error' }) | |
| } | |
| catch (e: any) { | |
| return Promise.resolve({ status: ValidatedStatus.Error, message: e.message }) | |
| } | |
| } | |
| export const validateLoadBalancingCredentials = async (predefined: boolean, provider: string, v: FormValue, id?: string): Promise<{ | |
| status: ValidatedStatus | |
| message?: string | |
| }> => { | |
| const { __model_name, __model_type, ...credentials } = v | |
| try { | |
| const res = await validateModelLoadBalancingCredentials({ | |
| url: `/workspaces/current/model-providers/${provider}/models/load-balancing-configs/${id ? `${id}/` : ''}credentials-validate`, | |
| body: { | |
| model: __model_name, | |
| model_type: __model_type, | |
| credentials, | |
| }, | |
| }) | |
| if (res.result === 'success') | |
| return Promise.resolve({ status: ValidatedStatus.Success }) | |
| else | |
| return Promise.resolve({ status: ValidatedStatus.Error, message: res.error || 'error' }) | |
| } | |
| catch (e: any) { | |
| return Promise.resolve({ status: ValidatedStatus.Error, message: e.message }) | |
| } | |
| } | |
| export const saveCredentials = async (predefined: boolean, provider: string, v: FormValue, loadBalancing?: ModelLoadBalancingConfig) => { | |
| let body, url | |
| if (predefined) { | |
| body = { | |
| config_from: ConfigurationMethodEnum.predefinedModel, | |
| credentials: v, | |
| load_balancing: loadBalancing, | |
| } | |
| url = `/workspaces/current/model-providers/${provider}` | |
| } | |
| else { | |
| const { __model_name, __model_type, ...credentials } = v | |
| body = { | |
| model: __model_name, | |
| model_type: __model_type, | |
| credentials, | |
| load_balancing: loadBalancing, | |
| } | |
| url = `/workspaces/current/model-providers/${provider}/models` | |
| } | |
| return setModelProvider({ url, body }) | |
| } | |
| export const savePredefinedLoadBalancingConfig = async (provider: string, v: FormValue, loadBalancing?: ModelLoadBalancingConfig) => { | |
| const { __model_name, __model_type, ...credentials } = v | |
| const body = { | |
| config_from: ConfigurationMethodEnum.predefinedModel, | |
| model: __model_name, | |
| model_type: __model_type, | |
| credentials, | |
| load_balancing: loadBalancing, | |
| } | |
| const url = `/workspaces/current/model-providers/${provider}/models` | |
| return setModelProvider({ url, body }) | |
| } | |
| export const removeCredentials = async (predefined: boolean, provider: string, v: FormValue) => { | |
| let url = '' | |
| let body | |
| if (predefined) { | |
| url = `/workspaces/current/model-providers/${provider}` | |
| } | |
| else { | |
| if (v) { | |
| const { __model_name, __model_type } = v | |
| body = { | |
| model: __model_name, | |
| model_type: __model_type, | |
| } | |
| url = `/workspaces/current/model-providers/${provider}/models` | |
| } | |
| } | |
| return deleteModelProvider({ url, body }) | |
| } | |
| export const sizeFormat = (size: number) => { | |
| const remainder = Math.floor(size / 1000) | |
| if (remainder < 1) | |
| return `${size}` | |
| else | |
| return `${remainder}K` | |
| } | |
| export const modelTypeFormat = (modelType: ModelTypeEnum) => { | |
| if (modelType === ModelTypeEnum.textEmbedding) | |
| return 'TEXT EMBEDDING' | |
| return modelType.toLocaleUpperCase() | |
| } | |
| export const genModelTypeFormSchema = (modelTypes: ModelTypeEnum[]) => { | |
| return { | |
| type: FormTypeEnum.radio, | |
| label: { | |
| zh_Hans: '模型类型', | |
| en_US: 'Model Type', | |
| }, | |
| variable: '__model_type', | |
| default: modelTypes[0], | |
| required: true, | |
| show_on: [], | |
| options: modelTypes.map((modelType: ModelTypeEnum) => { | |
| return { | |
| value: modelType, | |
| label: { | |
| zh_Hans: MODEL_TYPE_TEXT[modelType], | |
| en_US: MODEL_TYPE_TEXT[modelType], | |
| }, | |
| show_on: [], | |
| } | |
| }), | |
| } as CredentialFormSchemaRadio | |
| } | |
| export const genModelNameFormSchema = (model?: Pick<CredentialFormSchemaTextInput, 'label' | 'placeholder'>) => { | |
| return { | |
| type: FormTypeEnum.textInput, | |
| label: model?.label || { | |
| zh_Hans: '模型名称', | |
| en_US: 'Model Name', | |
| }, | |
| variable: '__model_name', | |
| required: true, | |
| show_on: [], | |
| placeholder: model?.placeholder || { | |
| zh_Hans: '请输入模型名称', | |
| en_US: 'Please enter model name', | |
| }, | |
| } as CredentialFormSchemaTextInput | |
| } | |