| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 | import { ValidatedStatus } from '../key-validator/declarations'import type {  CredentialFormSchemaRadio,  CredentialFormSchemaTextInput,  FormValue,} from './declarations'import {  FormTypeEnum,  MODEL_TYPE_TEXT,  ModelTypeEnum,} from './declarations'import {  deleteModelProvider,  setModelProvider,  validateModelProvider,} from '@/service/common'export const MODEL_PROVIDER_QUOTA_GET_FREE = ['minimax', 'spark', 'zhipuai']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 saveCredentials = async (predefined: boolean, provider: string, v: FormValue) => {  let body, url  if (predefined) {    body = {      credentials: v,    }    url = `/workspaces/current/model-providers/${provider}`  }  else {    const { __model_name, __model_type, ...credentials } = v    body = {      model: __model_name,      model_type: __model_type,      credentials,    }    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}
 |