|
@@ -27,6 +27,7 @@ import { getCurrentCommitId } from "../utils";
|
|
|
import Link from "next/link";
|
|
|
import { UPDATE_URL } from "../constant";
|
|
|
import { SearchService, usePromptStore } from "../store/prompt";
|
|
|
+import { requestUsage } from "../requests";
|
|
|
|
|
|
function SettingItem(props: {
|
|
|
title: string;
|
|
@@ -54,7 +55,7 @@ export function Settings(props: { closeSettings: () => void }) {
|
|
|
state.updateConfig,
|
|
|
state.resetConfig,
|
|
|
state.clearAllData,
|
|
|
- ]
|
|
|
+ ],
|
|
|
);
|
|
|
|
|
|
const updateStore = useUpdateStore();
|
|
@@ -70,14 +71,34 @@ export function Settings(props: { closeSettings: () => void }) {
|
|
|
});
|
|
|
}
|
|
|
|
|
|
+ const [usage, setUsage] = useState<{
|
|
|
+ granted?: number;
|
|
|
+ used?: number;
|
|
|
+ }>();
|
|
|
+ const [loadingUsage, setLoadingUsage] = useState(false);
|
|
|
+ function checkUsage() {
|
|
|
+ setLoadingUsage(true);
|
|
|
+ requestUsage()
|
|
|
+ .then((res) =>
|
|
|
+ setUsage({
|
|
|
+ granted: res?.total_granted,
|
|
|
+ used: res?.total_used,
|
|
|
+ }),
|
|
|
+ )
|
|
|
+ .finally(() => {
|
|
|
+ setLoadingUsage(false);
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
useEffect(() => {
|
|
|
checkUpdate();
|
|
|
+ checkUsage();
|
|
|
}, []);
|
|
|
|
|
|
const accessStore = useAccessStore();
|
|
|
const enabledAccessControl = useMemo(
|
|
|
() => accessStore.enabledAccessControl(),
|
|
|
- []
|
|
|
+ [],
|
|
|
);
|
|
|
|
|
|
const promptStore = usePromptStore();
|
|
@@ -179,7 +200,7 @@ export function Settings(props: { closeSettings: () => void }) {
|
|
|
onChange={(e) => {
|
|
|
updateConfig(
|
|
|
(config) =>
|
|
|
- (config.submitKey = e.target.value as any as SubmitKey)
|
|
|
+ (config.submitKey = e.target.value as any as SubmitKey),
|
|
|
);
|
|
|
}}
|
|
|
>
|
|
@@ -199,7 +220,7 @@ export function Settings(props: { closeSettings: () => void }) {
|
|
|
value={config.theme}
|
|
|
onChange={(e) => {
|
|
|
updateConfig(
|
|
|
- (config) => (config.theme = e.target.value as any as Theme)
|
|
|
+ (config) => (config.theme = e.target.value as any as Theme),
|
|
|
);
|
|
|
}}
|
|
|
>
|
|
@@ -240,7 +261,7 @@ export function Settings(props: { closeSettings: () => void }) {
|
|
|
onChange={(e) =>
|
|
|
updateConfig(
|
|
|
(config) =>
|
|
|
- (config.fontSize = Number.parseInt(e.currentTarget.value))
|
|
|
+ (config.fontSize = Number.parseInt(e.currentTarget.value)),
|
|
|
)
|
|
|
}
|
|
|
></input>
|
|
@@ -253,7 +274,7 @@ export function Settings(props: { closeSettings: () => void }) {
|
|
|
checked={config.tightBorder}
|
|
|
onChange={(e) =>
|
|
|
updateConfig(
|
|
|
- (config) => (config.tightBorder = e.currentTarget.checked)
|
|
|
+ (config) => (config.tightBorder = e.currentTarget.checked),
|
|
|
)
|
|
|
}
|
|
|
></input>
|
|
@@ -271,7 +292,7 @@ export function Settings(props: { closeSettings: () => void }) {
|
|
|
onChange={(e) =>
|
|
|
updateConfig(
|
|
|
(config) =>
|
|
|
- (config.disablePromptHint = e.currentTarget.checked)
|
|
|
+ (config.disablePromptHint = e.currentTarget.checked),
|
|
|
)
|
|
|
}
|
|
|
></input>
|
|
@@ -281,7 +302,7 @@ export function Settings(props: { closeSettings: () => void }) {
|
|
|
title={Locale.Settings.Prompt.List}
|
|
|
subTitle={Locale.Settings.Prompt.ListCount(
|
|
|
builtinCount,
|
|
|
- customCount
|
|
|
+ customCount,
|
|
|
)}
|
|
|
>
|
|
|
<IconButton
|
|
@@ -324,6 +345,28 @@ export function Settings(props: { closeSettings: () => void }) {
|
|
|
></input>
|
|
|
</SettingItem>
|
|
|
|
|
|
+ <SettingItem
|
|
|
+ title={Locale.Settings.Usage.Title}
|
|
|
+ subTitle={
|
|
|
+ loadingUsage
|
|
|
+ ? Locale.Settings.Usage.IsChecking
|
|
|
+ : Locale.Settings.Usage.SubTitle(
|
|
|
+ usage?.granted ?? "[?]",
|
|
|
+ usage?.used ?? "[?]",
|
|
|
+ )
|
|
|
+ }
|
|
|
+ >
|
|
|
+ {loadingUsage ? (
|
|
|
+ <div />
|
|
|
+ ) : (
|
|
|
+ <IconButton
|
|
|
+ icon={<ResetIcon></ResetIcon>}
|
|
|
+ text={Locale.Settings.Usage.Check}
|
|
|
+ onClick={checkUsage}
|
|
|
+ />
|
|
|
+ )}
|
|
|
+ </SettingItem>
|
|
|
+
|
|
|
<SettingItem
|
|
|
title={Locale.Settings.HistoryCount.Title}
|
|
|
subTitle={Locale.Settings.HistoryCount.SubTitle}
|
|
@@ -338,7 +381,7 @@ export function Settings(props: { closeSettings: () => void }) {
|
|
|
onChange={(e) =>
|
|
|
updateConfig(
|
|
|
(config) =>
|
|
|
- (config.historyMessageCount = e.target.valueAsNumber)
|
|
|
+ (config.historyMessageCount = e.target.valueAsNumber),
|
|
|
)
|
|
|
}
|
|
|
></input>
|
|
@@ -357,7 +400,7 @@ export function Settings(props: { closeSettings: () => void }) {
|
|
|
updateConfig(
|
|
|
(config) =>
|
|
|
(config.compressMessageLengthThreshold =
|
|
|
- e.currentTarget.valueAsNumber)
|
|
|
+ e.currentTarget.valueAsNumber),
|
|
|
)
|
|
|
}
|
|
|
></input>
|
|
@@ -370,7 +413,8 @@ export function Settings(props: { closeSettings: () => void }) {
|
|
|
value={config.modelConfig.model}
|
|
|
onChange={(e) => {
|
|
|
updateConfig(
|
|
|
- (config) => (config.modelConfig.model = e.currentTarget.value)
|
|
|
+ (config) =>
|
|
|
+ (config.modelConfig.model = e.currentTarget.value),
|
|
|
);
|
|
|
}}
|
|
|
>
|
|
@@ -395,7 +439,7 @@ export function Settings(props: { closeSettings: () => void }) {
|
|
|
updateConfig(
|
|
|
(config) =>
|
|
|
(config.modelConfig.temperature =
|
|
|
- e.currentTarget.valueAsNumber)
|
|
|
+ e.currentTarget.valueAsNumber),
|
|
|
);
|
|
|
}}
|
|
|
></input>
|
|
@@ -413,7 +457,7 @@ export function Settings(props: { closeSettings: () => void }) {
|
|
|
updateConfig(
|
|
|
(config) =>
|
|
|
(config.modelConfig.max_tokens =
|
|
|
- e.currentTarget.valueAsNumber)
|
|
|
+ e.currentTarget.valueAsNumber),
|
|
|
)
|
|
|
}
|
|
|
></input>
|
|
@@ -432,7 +476,7 @@ export function Settings(props: { closeSettings: () => void }) {
|
|
|
updateConfig(
|
|
|
(config) =>
|
|
|
(config.modelConfig.presence_penalty =
|
|
|
- e.currentTarget.valueAsNumber)
|
|
|
+ e.currentTarget.valueAsNumber),
|
|
|
);
|
|
|
}}
|
|
|
></input>
|