model-config.tsx 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. import { ALL_MODELS, ModalConfigValidator, ModelConfig } from "../store";
  2. import Locale from "../locales";
  3. import { InputRange } from "./input-range";
  4. import { ListItem, Select } from "./ui-lib";
  5. export function ModelConfigList(props: {
  6. modelConfig: ModelConfig;
  7. updateConfig: (updater: (config: ModelConfig) => void) => void;
  8. }) {
  9. return (
  10. <>
  11. <ListItem title={Locale.Settings.Model}>
  12. <Select
  13. value={props.modelConfig.model}
  14. onChange={(e) => {
  15. props.updateConfig(
  16. (config) =>
  17. (config.model = ModalConfigValidator.model(
  18. e.currentTarget.value,
  19. )),
  20. );
  21. }}
  22. >
  23. {ALL_MODELS.map((v) => (
  24. <option value={v.name} key={v.name} disabled={!v.available}>
  25. {v.name}
  26. </option>
  27. ))}
  28. </Select>
  29. </ListItem>
  30. <ListItem
  31. title={Locale.Settings.Temperature.Title}
  32. subTitle={Locale.Settings.Temperature.SubTitle}
  33. >
  34. <InputRange
  35. value={props.modelConfig.temperature?.toFixed(1)}
  36. min="0"
  37. max="1" // lets limit it to 0-1
  38. step="0.1"
  39. onChange={(e) => {
  40. props.updateConfig(
  41. (config) =>
  42. (config.temperature = ModalConfigValidator.temperature(
  43. e.currentTarget.valueAsNumber,
  44. )),
  45. );
  46. }}
  47. ></InputRange>
  48. </ListItem>
  49. <ListItem
  50. title={Locale.Settings.TopP.Title}
  51. subTitle={Locale.Settings.TopP.SubTitle}
  52. >
  53. <InputRange
  54. value={(props.modelConfig.top_p ?? 1).toFixed(1)}
  55. min="0"
  56. max="1"
  57. step="0.1"
  58. onChange={(e) => {
  59. props.updateConfig(
  60. (config) =>
  61. (config.top_p = ModalConfigValidator.top_p(
  62. e.currentTarget.valueAsNumber,
  63. )),
  64. );
  65. }}
  66. ></InputRange>
  67. </ListItem>
  68. <ListItem
  69. title={Locale.Settings.MaxTokens.Title}
  70. subTitle={Locale.Settings.MaxTokens.SubTitle}
  71. >
  72. <input
  73. type="number"
  74. min={100}
  75. max={32000}
  76. value={props.modelConfig.max_tokens}
  77. onChange={(e) =>
  78. props.updateConfig(
  79. (config) =>
  80. (config.max_tokens = ModalConfigValidator.max_tokens(
  81. e.currentTarget.valueAsNumber,
  82. )),
  83. )
  84. }
  85. ></input>
  86. </ListItem>
  87. <ListItem
  88. title={Locale.Settings.PresencePenalty.Title}
  89. subTitle={Locale.Settings.PresencePenalty.SubTitle}
  90. >
  91. <InputRange
  92. value={props.modelConfig.presence_penalty?.toFixed(1)}
  93. min="-2"
  94. max="2"
  95. step="0.1"
  96. onChange={(e) => {
  97. props.updateConfig(
  98. (config) =>
  99. (config.presence_penalty =
  100. ModalConfigValidator.presence_penalty(
  101. e.currentTarget.valueAsNumber,
  102. )),
  103. );
  104. }}
  105. ></InputRange>
  106. </ListItem>
  107. <ListItem
  108. title={Locale.Settings.FrequencyPenalty.Title}
  109. subTitle={Locale.Settings.FrequencyPenalty.SubTitle}
  110. >
  111. <InputRange
  112. value={props.modelConfig.frequency_penalty?.toFixed(1)}
  113. min="-2"
  114. max="2"
  115. step="0.1"
  116. onChange={(e) => {
  117. props.updateConfig(
  118. (config) =>
  119. (config.frequency_penalty =
  120. ModalConfigValidator.frequency_penalty(
  121. e.currentTarget.valueAsNumber,
  122. )),
  123. );
  124. }}
  125. ></InputRange>
  126. </ListItem>
  127. <ListItem
  128. title={Locale.Settings.InputTemplate.Title}
  129. subTitle={Locale.Settings.InputTemplate.SubTitle}
  130. >
  131. <input
  132. type="text"
  133. value={props.modelConfig.template}
  134. onChange={(e) =>
  135. props.updateConfig(
  136. (config) => (config.template = e.currentTarget.value),
  137. )
  138. }
  139. ></input>
  140. </ListItem>
  141. <ListItem
  142. title={Locale.Settings.HistoryCount.Title}
  143. subTitle={Locale.Settings.HistoryCount.SubTitle}
  144. >
  145. <InputRange
  146. title={props.modelConfig.historyMessageCount.toString()}
  147. value={props.modelConfig.historyMessageCount}
  148. min="0"
  149. max="32"
  150. step="1"
  151. onChange={(e) =>
  152. props.updateConfig(
  153. (config) => (config.historyMessageCount = e.target.valueAsNumber),
  154. )
  155. }
  156. ></InputRange>
  157. </ListItem>
  158. <ListItem
  159. title={Locale.Settings.CompressThreshold.Title}
  160. subTitle={Locale.Settings.CompressThreshold.SubTitle}
  161. >
  162. <input
  163. type="number"
  164. min={500}
  165. max={4000}
  166. value={props.modelConfig.compressMessageLengthThreshold}
  167. onChange={(e) =>
  168. props.updateConfig(
  169. (config) =>
  170. (config.compressMessageLengthThreshold =
  171. e.currentTarget.valueAsNumber),
  172. )
  173. }
  174. ></input>
  175. </ListItem>
  176. <ListItem title={Locale.Memory.Title} subTitle={Locale.Memory.Send}>
  177. <input
  178. type="checkbox"
  179. checked={props.modelConfig.sendMemory}
  180. onChange={(e) =>
  181. props.updateConfig(
  182. (config) => (config.sendMemory = e.currentTarget.checked),
  183. )
  184. }
  185. ></input>
  186. </ListItem>
  187. </>
  188. );
  189. }