feat: Add support for saving and restoring last used system prompt

This commit is contained in:
n4ze3m
2024-12-07 18:15:14 +05:30
parent d45b279348
commit bd08526935
5 changed files with 102 additions and 11 deletions

View File

@@ -6,14 +6,24 @@ import { webUIResumeLastChat } from "@/services/app"
import {
formatToChatHistory,
formatToMessage,
getPromptById,
getRecentChatFromWebUI
} from "@/db"
import { getLastUsedChatSystemPrompt } from "@/services/model-settings"
import { useStoreChatModelSettings } from "@/store/model"
export const Playground = () => {
const drop = React.useRef<HTMLDivElement>(null)
const [dropedFile, setDropedFile] = React.useState<File | undefined>()
const { selectedKnowledge, messages, setHistoryId, setHistory, setMessages } =
useMessageOption()
const {
selectedKnowledge,
messages,
setHistoryId,
setHistory,
setMessages,
setSelectedSystemPrompt
} = useMessageOption()
const { setSystemPrompt } = useStoreChatModelSettings()
const [dropState, setDropState] = React.useState<
"idle" | "dragging" | "error"
@@ -90,6 +100,19 @@ export const Playground = () => {
setHistoryId(recentChat.history.id)
setHistory(formatToChatHistory(recentChat.messages))
setMessages(formatToMessage(recentChat.messages))
const lastUsedPrompt = await getLastUsedChatSystemPrompt(
recentChat.history.id
)
if (lastUsedPrompt) {
if (lastUsedPrompt.prompt_id) {
const prompt = await getPromptById(lastUsedPrompt.prompt_id)
if (prompt) {
setSelectedSystemPrompt(lastUsedPrompt.prompt_id)
}
}
setSystemPrompt(lastUsedPrompt.prompt_content)
}
}
}
}

View File

@@ -5,7 +5,8 @@ import {
formatToMessage,
deleteByHistoryId,
updateHistory,
pinHistory
pinHistory,
getPromptById
} from "@/db"
import { Empty, Skeleton, Dropdown, Menu } from "antd"
import { useMessageOption } from "~/hooks/useMessageOption"
@@ -20,8 +21,10 @@ import { useNavigate } from "react-router-dom"
import { useTranslation } from "react-i18next"
import {
getLastUsedChatModel,
getLastUsedChatSystemPrompt,
lastUsedChatModelEnabled
} from "@/services/model-settings"
import { useStoreChatModelSettings } from "@/store/model"
type Props = {
onClose: () => void
@@ -35,8 +38,12 @@ export const Sidebar = ({ onClose }: Props) => {
historyId,
clearChat,
setSelectedModel,
temporaryChat
temporaryChat,
setSelectedSystemPrompt
} = useMessageOption()
const { setSystemPrompt } = useStoreChatModelSettings()
const { t } = useTranslation(["option", "common"])
const client = useQueryClient()
const navigate = useNavigate()
@@ -127,7 +134,8 @@ export const Sidebar = ({ onClose }: Props) => {
})
return (
<div className={`overflow-y-auto z-99 ${temporaryChat ? 'pointer-events-none opacity-50' : ''}`}>
<div
className={`overflow-y-auto z-99 ${temporaryChat ? "pointer-events-none opacity-50" : ""}`}>
{status === "success" && chatHistories.length === 0 && (
<div className="flex justify-center items-center mt-20 overflow-hidden">
<Empty description={t("common:noHistory")} />
@@ -173,6 +181,19 @@ export const Sidebar = ({ onClose }: Props) => {
setSelectedModel(currentChatModel)
}
}
const lastUsedPrompt =
await getLastUsedChatSystemPrompt(chat.id)
if (lastUsedPrompt) {
if (lastUsedPrompt.prompt_id) {
const prompt = await getPromptById(
lastUsedPrompt.prompt_id
)
if (prompt) {
setSelectedSystemPrompt(lastUsedPrompt.prompt_id)
}
}
setSystemPrompt(lastUsedPrompt.prompt_content)
}
navigate("/")
onClose()
}}>
@@ -245,4 +266,4 @@ export const Sidebar = ({ onClose }: Props) => {
)}
</div>
)
}
}