161 lines
2.8 KiB
TypeScript
161 lines
2.8 KiB
TypeScript
import { saveHistory, saveMessage } from "@/libs/db"
|
|
import { ChatHistory } from "@/store/option"
|
|
|
|
export const saveMessageOnError = async ({
|
|
e,
|
|
history,
|
|
setHistory,
|
|
image,
|
|
userMessage,
|
|
botMessage,
|
|
historyId,
|
|
selectedModel,
|
|
setHistoryId,
|
|
isRegenerating
|
|
}: {
|
|
e: any
|
|
setHistory: (history: ChatHistory) => void
|
|
history: ChatHistory
|
|
userMessage: string
|
|
image: string
|
|
botMessage: string
|
|
historyId: string | null
|
|
selectedModel: string
|
|
setHistoryId: (historyId: string) => void
|
|
isRegenerating: boolean
|
|
}) => {
|
|
if (
|
|
e?.name === "AbortError" ||
|
|
e?.message === "AbortError" ||
|
|
e?.name?.includes("AbortError") ||
|
|
e?.message?.includes("AbortError")
|
|
) {
|
|
setHistory([
|
|
...history,
|
|
{
|
|
role: "user",
|
|
content: userMessage,
|
|
image
|
|
},
|
|
{
|
|
role: "assistant",
|
|
content: botMessage
|
|
}
|
|
])
|
|
|
|
if (historyId) {
|
|
if (!isRegenerating) {
|
|
await saveMessage(
|
|
historyId,
|
|
selectedModel,
|
|
"user",
|
|
userMessage,
|
|
[image],
|
|
[],
|
|
1
|
|
)
|
|
}
|
|
await saveMessage(
|
|
historyId,
|
|
selectedModel,
|
|
"assistant",
|
|
botMessage,
|
|
[],
|
|
[],
|
|
2
|
|
)
|
|
} else {
|
|
const newHistoryId = await saveHistory(userMessage)
|
|
if (!isRegenerating) {
|
|
await saveMessage(
|
|
newHistoryId.id,
|
|
selectedModel,
|
|
"user",
|
|
userMessage,
|
|
[image],
|
|
[],
|
|
1
|
|
)
|
|
}
|
|
await saveMessage(
|
|
newHistoryId.id,
|
|
selectedModel,
|
|
"assistant",
|
|
botMessage,
|
|
[],
|
|
[],
|
|
2
|
|
)
|
|
setHistoryId(newHistoryId.id)
|
|
}
|
|
|
|
return true
|
|
}
|
|
|
|
return false
|
|
}
|
|
|
|
export const saveMessageOnSuccess = async ({
|
|
historyId,
|
|
setHistoryId,
|
|
isRegenerate,
|
|
selectedModel,
|
|
message,
|
|
image,
|
|
fullText,
|
|
source
|
|
}: {
|
|
historyId: string | null
|
|
setHistoryId: (historyId: string) => void
|
|
isRegenerate: boolean
|
|
selectedModel: string | null
|
|
message: string
|
|
image: string
|
|
fullText: string
|
|
source: any[]
|
|
}) => {
|
|
if (historyId) {
|
|
if (!isRegenerate) {
|
|
await saveMessage(
|
|
historyId,
|
|
selectedModel,
|
|
"user",
|
|
message,
|
|
[image],
|
|
[],
|
|
1
|
|
)
|
|
}
|
|
await saveMessage(
|
|
historyId,
|
|
selectedModel!,
|
|
"assistant",
|
|
fullText,
|
|
[],
|
|
source,
|
|
2
|
|
)
|
|
} else {
|
|
const newHistoryId = await saveHistory(message)
|
|
await saveMessage(
|
|
newHistoryId.id,
|
|
selectedModel,
|
|
"user",
|
|
message,
|
|
[image],
|
|
[],
|
|
1
|
|
)
|
|
await saveMessage(
|
|
newHistoryId.id,
|
|
selectedModel!,
|
|
"assistant",
|
|
fullText,
|
|
[],
|
|
source,
|
|
2
|
|
)
|
|
setHistoryId(newHistoryId.id)
|
|
}
|
|
}
|