use-model-form-schemas.ts 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. import { useMemo } from 'react'
  2. import { useTranslation } from 'react-i18next'
  3. import type {
  4. Credential,
  5. CustomModelCredential,
  6. ModelProvider,
  7. } from '../../declarations'
  8. import {
  9. genModelNameFormSchema,
  10. genModelTypeFormSchema,
  11. } from '../../utils'
  12. import { FormTypeEnum } from '@/app/components/base/form/types'
  13. export const useModelFormSchemas = (
  14. provider: ModelProvider,
  15. providerFormSchemaPredefined: boolean,
  16. credentials?: Record<string, any>,
  17. credential?: Credential,
  18. model?: CustomModelCredential,
  19. ) => {
  20. const { t } = useTranslation()
  21. const {
  22. provider_credential_schema,
  23. supported_model_types,
  24. model_credential_schema,
  25. } = provider
  26. const formSchemas = useMemo(() => {
  27. return providerFormSchemaPredefined
  28. ? provider_credential_schema.credential_form_schemas
  29. : model_credential_schema.credential_form_schemas
  30. }, [
  31. providerFormSchemaPredefined,
  32. provider_credential_schema?.credential_form_schemas,
  33. supported_model_types,
  34. model_credential_schema?.credential_form_schemas,
  35. model_credential_schema?.model,
  36. model,
  37. ])
  38. const formSchemasWithAuthorizationName = useMemo(() => {
  39. const authorizationNameSchema = {
  40. type: FormTypeEnum.textInput,
  41. variable: '__authorization_name__',
  42. label: t('plugin.auth.authorizationName'),
  43. required: false,
  44. }
  45. return [
  46. authorizationNameSchema,
  47. ...formSchemas,
  48. ]
  49. }, [formSchemas, t])
  50. const formValues = useMemo(() => {
  51. let result: any = {}
  52. formSchemas.forEach((schema) => {
  53. result[schema.variable] = schema.default
  54. })
  55. if (credential) {
  56. result = { ...result, __authorization_name__: credential?.credential_name }
  57. if (credentials)
  58. result = { ...result, ...credentials }
  59. }
  60. if (model)
  61. result = { ...result, __model_name: model?.model, __model_type: model?.model_type }
  62. return result
  63. }, [credentials, credential, model, formSchemas])
  64. const modelNameAndTypeFormSchemas = useMemo(() => {
  65. if (providerFormSchemaPredefined)
  66. return []
  67. const modelNameSchema = genModelNameFormSchema(model_credential_schema?.model)
  68. const modelTypeSchema = genModelTypeFormSchema(supported_model_types)
  69. return [
  70. modelNameSchema,
  71. modelTypeSchema,
  72. ]
  73. }, [supported_model_types, model_credential_schema?.model, providerFormSchemaPredefined])
  74. const modelNameAndTypeFormValues = useMemo(() => {
  75. let result = {}
  76. if (providerFormSchemaPredefined)
  77. return result
  78. if (model)
  79. result = { ...result, __model_name: model?.model, __model_type: model?.model_type }
  80. return result
  81. }, [model, providerFormSchemaPredefined])
  82. return {
  83. formSchemas: formSchemasWithAuthorizationName,
  84. formValues,
  85. modelNameAndTypeFormSchemas,
  86. modelNameAndTypeFormValues,
  87. }
  88. }