You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

index.tsx 3.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. import { useTranslate } from '@/hooks/common-hooks';
  2. import { IModalProps } from '@/interfaces/common';
  3. import { IAddLlmRequestBody } from '@/interfaces/request/llm';
  4. import { Form, Input, Modal, Select, InputNumber } from 'antd';
  5. import omit from 'lodash/omit';
  6. type FieldType = IAddLlmRequestBody & {
  7. vision: boolean;
  8. yiyan_ak: string;
  9. yiyan_sk: string;
  10. };
  11. const { Option } = Select;
  12. const YiyanModal = ({
  13. visible,
  14. hideModal,
  15. onOk,
  16. loading,
  17. llmFactory,
  18. }: IModalProps<IAddLlmRequestBody> & { llmFactory: string }) => {
  19. const [form] = Form.useForm<FieldType>();
  20. const { t } = useTranslate('setting');
  21. const handleOk = async () => {
  22. const values = await form.validateFields();
  23. const modelType =
  24. values.model_type === 'chat' && values.vision
  25. ? 'image2text'
  26. : values.model_type;
  27. const data = {
  28. ...omit(values, ['vision']),
  29. model_type: modelType,
  30. llm_factory: llmFactory,
  31. max_tokens:values.max_tokens,
  32. };
  33. console.info(data);
  34. onOk?.(data);
  35. };
  36. return (
  37. <Modal
  38. title={t('addLlmTitle', { name: llmFactory })}
  39. open={visible}
  40. onOk={handleOk}
  41. onCancel={hideModal}
  42. okButtonProps={{ loading }}
  43. confirmLoading={loading}
  44. >
  45. <Form
  46. name="basic"
  47. style={{ maxWidth: 600 }}
  48. autoComplete="off"
  49. layout={'vertical'}
  50. form={form}
  51. >
  52. <Form.Item<FieldType>
  53. label={t('modelType')}
  54. name="model_type"
  55. initialValue={'chat'}
  56. rules={[{ required: true, message: t('modelTypeMessage') }]}
  57. >
  58. <Select placeholder={t('modelTypeMessage')}>
  59. <Option value="chat">chat</Option>
  60. <Option value="embedding">embedding</Option>
  61. <Option value="rerank">rerank</Option>
  62. </Select>
  63. </Form.Item>
  64. <Form.Item<FieldType>
  65. label={t('modelName')}
  66. name="llm_name"
  67. rules={[{ required: true, message: t('yiyanModelNameMessage') }]}
  68. >
  69. <Input placeholder={t('yiyanModelNameMessage')} />
  70. </Form.Item>
  71. <Form.Item<FieldType>
  72. label={t('addyiyanAK')}
  73. name="yiyan_ak"
  74. rules={[{ required: true, message: t('yiyanAKMessage') }]}
  75. >
  76. <Input placeholder={t('yiyanAKMessage')} />
  77. </Form.Item>
  78. <Form.Item<FieldType>
  79. label={t('addyiyanSK')}
  80. name="yiyan_sk"
  81. rules={[{ required: true, message: t('yiyanSKMessage') }]}
  82. >
  83. <Input placeholder={t('yiyanSKMessage')} />
  84. </Form.Item>
  85. <Form.Item<FieldType>
  86. label={t('maxTokens')}
  87. name="max_tokens"
  88. rules={[
  89. { required: true, message: t('maxTokensMessage') },
  90. {
  91. type: 'number',
  92. message: t('maxTokensInvalidMessage'),
  93. },
  94. ({ getFieldValue }) => ({
  95. validator(_, value) {
  96. if (value < 0) {
  97. return Promise.reject(new Error(t('maxTokensMinMessage')));
  98. }
  99. return Promise.resolve();
  100. },
  101. }),
  102. ]}
  103. >
  104. <InputNumber
  105. placeholder={t('maxTokensTip')}
  106. style={{ width: '100%' }}
  107. />
  108. </Form.Item>
  109. </Form>
  110. </Modal>
  111. );
  112. };
  113. export default YiyanModal;