77 lines
2.4 KiB
TypeScript
77 lines
2.4 KiB
TypeScript
import { Modal, showConfirm } from "@/app/components/ui-lib";
|
|
import { useChatStore } from "@/app/store/chat";
|
|
import { useMaskStore } from "@/app/store/mask";
|
|
import { useNavigate } from "react-router-dom";
|
|
import Locale from "@/app/locales";
|
|
import { IconButton } from "@/app/components/button";
|
|
import { Path } from "@/app/constant";
|
|
|
|
import ResetIcon from "@/app/icons/reload.svg";
|
|
import CopyIcon from "@/app/icons/copy.svg";
|
|
import MaskConfig from "@/app/containers/Settings/components/MaskConfig";
|
|
import { ListItem } from "@/app/components/List";
|
|
|
|
export default function SessionConfigModel(props: { onClose: () => void }) {
|
|
const chatStore = useChatStore();
|
|
const session = chatStore.currentSession();
|
|
const maskStore = useMaskStore();
|
|
const navigate = useNavigate();
|
|
|
|
return (
|
|
<div className="modal-mask">
|
|
<Modal
|
|
title={Locale.Context.Edit}
|
|
onClose={() => props.onClose()}
|
|
actions={[
|
|
<IconButton
|
|
key="reset"
|
|
icon={<ResetIcon />}
|
|
bordered
|
|
text={Locale.Chat.Config.Reset}
|
|
onClick={async () => {
|
|
if (await showConfirm(Locale.Memory.ResetConfirm)) {
|
|
chatStore.updateCurrentSession(
|
|
(session) => (session.memoryPrompt = ""),
|
|
);
|
|
}
|
|
}}
|
|
/>,
|
|
<IconButton
|
|
key="copy"
|
|
icon={<CopyIcon />}
|
|
bordered
|
|
text={Locale.Chat.Config.SaveAs}
|
|
onClick={() => {
|
|
navigate(Path.Masks);
|
|
setTimeout(() => {
|
|
maskStore.create(session.mask);
|
|
}, 500);
|
|
}}
|
|
/>,
|
|
]}
|
|
>
|
|
<MaskConfig
|
|
mask={session.mask}
|
|
updateMask={(updater) => {
|
|
const mask = { ...session.mask };
|
|
updater(mask);
|
|
chatStore.updateCurrentSession((session) => (session.mask = mask));
|
|
}}
|
|
shouldSyncFromGlobal
|
|
extraListItems={
|
|
session.mask.modelConfig.sendMemory ? (
|
|
<ListItem
|
|
className="copyable"
|
|
title={`${Locale.Memory.Title} (${session.lastSummarizeIndex} of ${session.messages.length})`}
|
|
subTitle={session.memoryPrompt || Locale.Memory.EmptyContent}
|
|
></ListItem>
|
|
) : (
|
|
<></>
|
|
)
|
|
}
|
|
></MaskConfig>
|
|
</Modal>
|
|
</div>
|
|
);
|
|
}
|