model-config.tsx 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. import styles from "./settings.module.scss";
  2. import { ALL_MODELS, ModalConfigValidator, ModelConfig } from "../store";
  3. import Locale from "../locales";
  4. import { InputRange } from "./input-range";
  5. import { List, ListItem } from "./ui-lib";
  6. export function ModelConfigList(props: {
  7. modelConfig: ModelConfig;
  8. updateConfig: (updater: (config: ModelConfig) => void) => void;
  9. }) {
  10. return (
  11. <>
  12. <ListItem title={Locale.Settings.Model}>
  13. <select
  14. value={props.modelConfig.model}
  15. onChange={(e) => {
  16. props.updateConfig(
  17. (config) =>
  18. (config.model = ModalConfigValidator.model(
  19. e.currentTarget.value,
  20. )),
  21. );
  22. }}
  23. >
  24. {ALL_MODELS.map((v) => (
  25. <option value={v.name} key={v.name} disabled={!v.available}>
  26. {v.name}
  27. </option>
  28. ))}
  29. </select>
  30. </ListItem>
  31. <ListItem
  32. title={Locale.Settings.Temperature.Title}
  33. subTitle={Locale.Settings.Temperature.SubTitle}
  34. >
  35. <InputRange
  36. value={props.modelConfig.temperature?.toFixed(1)}
  37. min="0"
  38. max="1" // lets limit it to 0-1
  39. step="0.1"
  40. onChange={(e) => {
  41. props.updateConfig(
  42. (config) =>
  43. (config.temperature = ModalConfigValidator.temperature(
  44. e.currentTarget.valueAsNumber,
  45. )),
  46. );
  47. }}
  48. ></InputRange>
  49. </ListItem>
  50. <ListItem
  51. title={Locale.Settings.MaxTokens.Title}
  52. subTitle={Locale.Settings.MaxTokens.SubTitle}
  53. >
  54. <input
  55. type="number"
  56. min={100}
  57. max={32000}
  58. value={props.modelConfig.max_tokens}
  59. onChange={(e) =>
  60. props.updateConfig(
  61. (config) =>
  62. (config.max_tokens = ModalConfigValidator.max_tokens(
  63. e.currentTarget.valueAsNumber,
  64. )),
  65. )
  66. }
  67. ></input>
  68. </ListItem>
  69. <ListItem
  70. title={Locale.Settings.PresencePenlty.Title}
  71. subTitle={Locale.Settings.PresencePenlty.SubTitle}
  72. >
  73. <InputRange
  74. value={props.modelConfig.presence_penalty?.toFixed(1)}
  75. min="-2"
  76. max="2"
  77. step="0.1"
  78. onChange={(e) => {
  79. props.updateConfig(
  80. (config) =>
  81. (config.presence_penalty =
  82. ModalConfigValidator.presence_penalty(
  83. e.currentTarget.valueAsNumber,
  84. )),
  85. );
  86. }}
  87. ></InputRange>
  88. </ListItem>
  89. <ListItem
  90. title={Locale.Settings.HistoryCount.Title}
  91. subTitle={Locale.Settings.HistoryCount.SubTitle}
  92. >
  93. <InputRange
  94. title={props.modelConfig.historyMessageCount.toString()}
  95. value={props.modelConfig.historyMessageCount}
  96. min="0"
  97. max="32"
  98. step="1"
  99. onChange={(e) =>
  100. props.updateConfig(
  101. (config) => (config.historyMessageCount = e.target.valueAsNumber),
  102. )
  103. }
  104. ></InputRange>
  105. </ListItem>
  106. <ListItem
  107. title={Locale.Settings.CompressThreshold.Title}
  108. subTitle={Locale.Settings.CompressThreshold.SubTitle}
  109. >
  110. <input
  111. type="number"
  112. min={500}
  113. max={4000}
  114. value={props.modelConfig.compressMessageLengthThreshold}
  115. onChange={(e) =>
  116. props.updateConfig(
  117. (config) =>
  118. (config.compressMessageLengthThreshold =
  119. e.currentTarget.valueAsNumber),
  120. )
  121. }
  122. ></input>
  123. </ListItem>
  124. <ListItem title={Locale.Memory.Title} subTitle={Locale.Memory.Send}>
  125. <input
  126. type="checkbox"
  127. checked={props.modelConfig.sendMemory}
  128. onChange={(e) =>
  129. props.updateConfig(
  130. (config) => (config.sendMemory = e.currentTarget.checked),
  131. )
  132. }
  133. ></input>
  134. </ListItem>
  135. </>
  136. );
  137. }