utils.ts 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. import { ValidatedStatus } from '../key-validator/declarations'
  2. import type {
  3. CredentialFormSchemaRadio,
  4. CredentialFormSchemaTextInput,
  5. FormValue,
  6. } from './declarations'
  7. import {
  8. FormTypeEnum,
  9. MODEL_TYPE_TEXT,
  10. ModelTypeEnum,
  11. } from './declarations'
  12. import {
  13. deleteModelProvider,
  14. setModelProvider,
  15. validateModelProvider,
  16. } from '@/service/common'
  17. export const MODEL_PROVIDER_QUOTA_GET_FREE = ['minimax', 'spark', 'zhipuai']
  18. export const MODEL_PROVIDER_QUOTA_GET_PAID = ['anthropic', 'openai', 'azure_openai']
  19. export const DEFAULT_BACKGROUND_COLOR = '#F3F4F6'
  20. export const isNullOrUndefined = (value: any) => {
  21. return value === undefined || value === null
  22. }
  23. export const validateCredentials = async (predefined: boolean, provider: string, v: FormValue) => {
  24. let body, url
  25. if (predefined) {
  26. body = {
  27. credentials: v,
  28. }
  29. url = `/workspaces/current/model-providers/${provider}/credentials/validate`
  30. }
  31. else {
  32. const { __model_name, __model_type, ...credentials } = v
  33. body = {
  34. model: __model_name,
  35. model_type: __model_type,
  36. credentials,
  37. }
  38. url = `/workspaces/current/model-providers/${provider}/models/credentials/validate`
  39. }
  40. try {
  41. const res = await validateModelProvider({ url, body })
  42. if (res.result === 'success')
  43. return Promise.resolve({ status: ValidatedStatus.Success })
  44. else
  45. return Promise.resolve({ status: ValidatedStatus.Error, message: res.error || 'error' })
  46. }
  47. catch (e: any) {
  48. return Promise.resolve({ status: ValidatedStatus.Error, message: e.message })
  49. }
  50. }
  51. export const saveCredentials = async (predefined: boolean, provider: string, v: FormValue) => {
  52. let body, url
  53. if (predefined) {
  54. body = {
  55. credentials: v,
  56. }
  57. url = `/workspaces/current/model-providers/${provider}`
  58. }
  59. else {
  60. const { __model_name, __model_type, ...credentials } = v
  61. body = {
  62. model: __model_name,
  63. model_type: __model_type,
  64. credentials,
  65. }
  66. url = `/workspaces/current/model-providers/${provider}/models`
  67. }
  68. return setModelProvider({ url, body })
  69. }
  70. export const removeCredentials = async (predefined: boolean, provider: string, v: FormValue) => {
  71. let url = ''
  72. let body
  73. if (predefined) {
  74. url = `/workspaces/current/model-providers/${provider}`
  75. }
  76. else {
  77. if (v) {
  78. const { __model_name, __model_type } = v
  79. body = {
  80. model: __model_name,
  81. model_type: __model_type,
  82. }
  83. url = `/workspaces/current/model-providers/${provider}/models`
  84. }
  85. }
  86. return deleteModelProvider({ url, body })
  87. }
  88. export const sizeFormat = (size: number) => {
  89. const remainder = Math.floor(size / 1000)
  90. if (remainder < 1)
  91. return `${size}`
  92. else
  93. return `${remainder}K`
  94. }
  95. export const modelTypeFormat = (modelType: ModelTypeEnum) => {
  96. if (modelType === ModelTypeEnum.textEmbedding)
  97. return 'TEXT EMBEDDING'
  98. return modelType.toLocaleUpperCase()
  99. }
  100. export const genModelTypeFormSchema = (modelTypes: ModelTypeEnum[]) => {
  101. return {
  102. type: FormTypeEnum.radio,
  103. label: {
  104. zh_Hans: '模型类型',
  105. en_US: 'Model Type',
  106. },
  107. variable: '__model_type',
  108. default: modelTypes[0],
  109. required: true,
  110. show_on: [],
  111. options: modelTypes.map((modelType: ModelTypeEnum) => {
  112. return {
  113. value: modelType,
  114. label: {
  115. zh_Hans: MODEL_TYPE_TEXT[modelType],
  116. en_US: MODEL_TYPE_TEXT[modelType],
  117. },
  118. show_on: [],
  119. }
  120. }),
  121. } as CredentialFormSchemaRadio
  122. }
  123. export const genModelNameFormSchema = (model?: Pick<CredentialFormSchemaTextInput, 'label' | 'placeholder'>) => {
  124. return {
  125. type: FormTypeEnum.textInput,
  126. label: model?.label || {
  127. zh_Hans: '模型名称',
  128. en_US: 'Model Name',
  129. },
  130. variable: '__model_name',
  131. required: true,
  132. show_on: [],
  133. placeholder: model?.placeholder || {
  134. zh_Hans: '请输入模型名称',
  135. en_US: 'Please enter model name',
  136. },
  137. } as CredentialFormSchemaTextInput
  138. }