utils.ts 4.0 KB

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