utils.ts 3.9 KB

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