Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

index.tsx 9.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288
  1. import {
  2. LlmModelType,
  3. ModelVariableType,
  4. settledModelVariableMap,
  5. } from '@/constants/knowledge';
  6. import { Divider, Flex, Form, InputNumber, Select, Slider, Switch } from 'antd';
  7. import camelCase from 'lodash/camelCase';
  8. import { useTranslate } from '@/hooks/common-hooks';
  9. import { useSelectLlmOptionsByModelType } from '@/hooks/llm-hooks';
  10. import { useCallback, useMemo } from 'react';
  11. import styles from './index.less';
  12. interface IProps {
  13. prefix?: string;
  14. formItemLayout?: any;
  15. handleParametersChange?(value: ModelVariableType): void;
  16. }
  17. const LlmSettingItems = ({ prefix, formItemLayout = {} }: IProps) => {
  18. const form = Form.useFormInstance();
  19. const { t } = useTranslate('chat');
  20. const parameterOptions = Object.values(ModelVariableType).map((x) => ({
  21. label: t(camelCase(x)),
  22. value: x,
  23. }));
  24. const handleParametersChange = useCallback(
  25. (value: ModelVariableType) => {
  26. const variable = settledModelVariableMap[value];
  27. form?.setFieldsValue(variable);
  28. },
  29. [form],
  30. );
  31. const memorizedPrefix = useMemo(() => (prefix ? [prefix] : []), [prefix]);
  32. const modelOptions = useSelectLlmOptionsByModelType();
  33. return (
  34. <>
  35. <Form.Item
  36. label={t('model')}
  37. name="llm_id"
  38. tooltip={t('modelTip')}
  39. {...formItemLayout}
  40. rules={[{ required: true, message: t('modelMessage') }]}
  41. >
  42. <Select options={[...modelOptions[LlmModelType.Chat], ...modelOptions[LlmModelType.Image2text],]} showSearch/>
  43. </Form.Item>
  44. <Divider></Divider>
  45. <Form.Item
  46. label={t('freedom')}
  47. name="parameter"
  48. tooltip={t('freedomTip')}
  49. {...formItemLayout}
  50. initialValue={ModelVariableType.Precise}
  51. >
  52. <Select<ModelVariableType>
  53. options={parameterOptions}
  54. onChange={handleParametersChange}
  55. />
  56. </Form.Item>
  57. <Form.Item
  58. label={t('temperature')}
  59. tooltip={t('temperatureTip')}
  60. {...formItemLayout}
  61. >
  62. <Flex gap={20} align="center">
  63. <Form.Item
  64. name={'temperatureEnabled'}
  65. valuePropName="checked"
  66. noStyle
  67. >
  68. <Switch size="small" />
  69. </Form.Item>
  70. <Form.Item noStyle dependencies={['temperatureEnabled']}>
  71. {({ getFieldValue }) => {
  72. const disabled = !getFieldValue('temperatureEnabled');
  73. return (
  74. <>
  75. <Flex flex={1}>
  76. <Form.Item
  77. name={[...memorizedPrefix, 'temperature']}
  78. noStyle
  79. >
  80. <Slider
  81. className={styles.variableSlider}
  82. max={1}
  83. step={0.01}
  84. disabled={disabled}
  85. />
  86. </Form.Item>
  87. </Flex>
  88. <Form.Item name={[...memorizedPrefix, 'temperature']} noStyle>
  89. <InputNumber
  90. className={styles.sliderInputNumber}
  91. max={1}
  92. min={0}
  93. step={0.01}
  94. disabled={disabled}
  95. />
  96. </Form.Item>
  97. </>
  98. );
  99. }}
  100. </Form.Item>
  101. </Flex>
  102. </Form.Item>
  103. <Form.Item label={t('topP')} tooltip={t('topPTip')} {...formItemLayout}>
  104. <Flex gap={20} align="center">
  105. <Form.Item name={'topPEnabled'} valuePropName="checked" noStyle>
  106. <Switch size="small" />
  107. </Form.Item>
  108. <Form.Item noStyle dependencies={['topPEnabled']}>
  109. {({ getFieldValue }) => {
  110. const disabled = !getFieldValue('topPEnabled');
  111. return (
  112. <>
  113. <Flex flex={1}>
  114. <Form.Item name={[...memorizedPrefix, 'top_p']} noStyle>
  115. <Slider
  116. className={styles.variableSlider}
  117. max={1}
  118. step={0.01}
  119. disabled={disabled}
  120. />
  121. </Form.Item>
  122. </Flex>
  123. <Form.Item name={[...memorizedPrefix, 'top_p']} noStyle>
  124. <InputNumber
  125. className={styles.sliderInputNumber}
  126. max={1}
  127. min={0}
  128. step={0.01}
  129. disabled={disabled}
  130. />
  131. </Form.Item>
  132. </>
  133. );
  134. }}
  135. </Form.Item>
  136. </Flex>
  137. </Form.Item>
  138. <Form.Item
  139. label={t('presencePenalty')}
  140. tooltip={t('presencePenaltyTip')}
  141. {...formItemLayout}
  142. >
  143. <Flex gap={20} align="center">
  144. <Form.Item
  145. name={'presencePenaltyEnabled'}
  146. valuePropName="checked"
  147. noStyle
  148. >
  149. <Switch size="small" />
  150. </Form.Item>
  151. <Form.Item noStyle dependencies={['presencePenaltyEnabled']}>
  152. {({ getFieldValue }) => {
  153. const disabled = !getFieldValue('presencePenaltyEnabled');
  154. return (
  155. <>
  156. <Flex flex={1}>
  157. <Form.Item
  158. name={[...memorizedPrefix, 'presence_penalty']}
  159. noStyle
  160. >
  161. <Slider
  162. className={styles.variableSlider}
  163. max={1}
  164. step={0.01}
  165. disabled={disabled}
  166. />
  167. </Form.Item>
  168. </Flex>
  169. <Form.Item
  170. name={[...memorizedPrefix, 'presence_penalty']}
  171. noStyle
  172. >
  173. <InputNumber
  174. className={styles.sliderInputNumber}
  175. max={1}
  176. min={0}
  177. step={0.01}
  178. disabled={disabled}
  179. />
  180. </Form.Item>
  181. </>
  182. );
  183. }}
  184. </Form.Item>
  185. </Flex>
  186. </Form.Item>
  187. <Form.Item
  188. label={t('frequencyPenalty')}
  189. tooltip={t('frequencyPenaltyTip')}
  190. {...formItemLayout}
  191. >
  192. <Flex gap={20} align="center">
  193. <Form.Item
  194. name={'frequencyPenaltyEnabled'}
  195. valuePropName="checked"
  196. noStyle
  197. >
  198. <Switch size="small" />
  199. </Form.Item>
  200. <Form.Item noStyle dependencies={['frequencyPenaltyEnabled']}>
  201. {({ getFieldValue }) => {
  202. const disabled = !getFieldValue('frequencyPenaltyEnabled');
  203. return (
  204. <>
  205. <Flex flex={1}>
  206. <Form.Item
  207. name={[...memorizedPrefix, 'frequency_penalty']}
  208. noStyle
  209. >
  210. <Slider
  211. className={styles.variableSlider}
  212. max={1}
  213. step={0.01}
  214. disabled={disabled}
  215. />
  216. </Form.Item>
  217. </Flex>
  218. <Form.Item
  219. name={[...memorizedPrefix, 'frequency_penalty']}
  220. noStyle
  221. >
  222. <InputNumber
  223. className={styles.sliderInputNumber}
  224. max={1}
  225. min={0}
  226. step={0.01}
  227. disabled={disabled}
  228. />
  229. </Form.Item>
  230. </>
  231. );
  232. }}
  233. </Form.Item>
  234. </Flex>
  235. </Form.Item>
  236. <Form.Item
  237. label={t('maxTokens')}
  238. tooltip={t('maxTokensTip')}
  239. {...formItemLayout}
  240. >
  241. <Flex gap={20} align="center">
  242. <Form.Item name={'maxTokensEnabled'} valuePropName="checked" noStyle>
  243. <Switch size="small" />
  244. </Form.Item>
  245. <Form.Item noStyle dependencies={['maxTokensEnabled']}>
  246. {({ getFieldValue }) => {
  247. const disabled = !getFieldValue('maxTokensEnabled');
  248. return (
  249. <>
  250. <Flex flex={1}>
  251. <Form.Item
  252. name={[...memorizedPrefix, 'max_tokens']}
  253. noStyle
  254. >
  255. <Slider
  256. className={styles.variableSlider}
  257. max={2048}
  258. disabled={disabled}
  259. />
  260. </Form.Item>
  261. </Flex>
  262. <Form.Item name={[...memorizedPrefix, 'max_tokens']} noStyle>
  263. <InputNumber
  264. disabled={disabled}
  265. className={styles.sliderInputNumber}
  266. max={2048}
  267. min={0}
  268. />
  269. </Form.Item>
  270. </>
  271. );
  272. }}
  273. </Form.Item>
  274. </Flex>
  275. </Form.Item>
  276. </>
  277. );
  278. };
  279. export default LlmSettingItems;