model-config.tsx 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. import { ALL_MODELS, ModalConfigValidator, ModelConfig } from "../store";
  2. import Locale from "../locales";
  3. import { InputRange } from "./input-range";
  4. import { List, 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.MaxTokens.Title}
  51. subTitle={Locale.Settings.MaxTokens.SubTitle}
  52. >
  53. <input
  54. type="number"
  55. min={100}
  56. max={32000}
  57. value={props.modelConfig.max_tokens}
  58. onChange={(e) =>
  59. props.updateConfig(
  60. (config) =>
  61. (config.max_tokens = ModalConfigValidator.max_tokens(
  62. e.currentTarget.valueAsNumber,
  63. )),
  64. )
  65. }
  66. ></input>
  67. </ListItem>
  68. <ListItem
  69. title={Locale.Settings.PresencePenalty.Title}
  70. subTitle={Locale.Settings.PresencePenalty.SubTitle}
  71. >
  72. <InputRange
  73. value={props.modelConfig.presence_penalty?.toFixed(1)}
  74. min="-2"
  75. max="2"
  76. step="0.1"
  77. onChange={(e) => {
  78. props.updateConfig(
  79. (config) =>
  80. (config.presence_penalty =
  81. ModalConfigValidator.presence_penalty(
  82. e.currentTarget.valueAsNumber,
  83. )),
  84. );
  85. }}
  86. ></InputRange>
  87. </ListItem>
  88. <ListItem
  89. title={Locale.Settings.FrequencyPenalty.Title}
  90. subTitle={Locale.Settings.FrequencyPenalty.SubTitle}
  91. >
  92. <InputRange
  93. value={props.modelConfig.frequency_penalty?.toFixed(1)}
  94. min="-2"
  95. max="2"
  96. step="0.1"
  97. onChange={(e) => {
  98. props.updateConfig(
  99. (config) =>
  100. (config.frequency_penalty =
  101. ModalConfigValidator.frequency_penalty(
  102. e.currentTarget.valueAsNumber,
  103. )),
  104. );
  105. }}
  106. ></InputRange>
  107. </ListItem>
  108. <ListItem
  109. title={Locale.Settings.HistoryCount.Title}
  110. subTitle={Locale.Settings.HistoryCount.SubTitle}
  111. >
  112. <InputRange
  113. title={props.modelConfig.historyMessageCount.toString()}
  114. value={props.modelConfig.historyMessageCount}
  115. min="0"
  116. max="32"
  117. step="1"
  118. onChange={(e) =>
  119. props.updateConfig(
  120. (config) => (config.historyMessageCount = e.target.valueAsNumber),
  121. )
  122. }
  123. ></InputRange>
  124. </ListItem>
  125. <ListItem
  126. title={Locale.Settings.CompressThreshold.Title}
  127. subTitle={Locale.Settings.CompressThreshold.SubTitle}
  128. >
  129. <input
  130. type="number"
  131. min={500}
  132. max={4000}
  133. value={props.modelConfig.compressMessageLengthThreshold}
  134. onChange={(e) =>
  135. props.updateConfig(
  136. (config) =>
  137. (config.compressMessageLengthThreshold =
  138. e.currentTarget.valueAsNumber),
  139. )
  140. }
  141. ></input>
  142. </ListItem>
  143. <ListItem title={Locale.Memory.Title} subTitle={Locale.Memory.Send}>
  144. <input
  145. type="checkbox"
  146. checked={props.modelConfig.sendMemory}
  147. onChange={(e) =>
  148. props.updateConfig(
  149. (config) => (config.sendMemory = e.currentTarget.checked),
  150. )
  151. }
  152. ></input>
  153. </ListItem>
  154. </>
  155. );
  156. }