utils.ts 3.8 KB

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