|
@@ -15,8 +15,19 @@ export type Message = ChatCompletionResponseMessage & {
|
|
|
date: string;
|
|
|
streaming?: boolean;
|
|
|
isError?: boolean;
|
|
|
+ id?: number;
|
|
|
};
|
|
|
|
|
|
+export function createMessage(override: Partial<Message>): Message {
|
|
|
+ return {
|
|
|
+ id: Date.now(),
|
|
|
+ date: new Date().toLocaleString(),
|
|
|
+ role: "user",
|
|
|
+ content: "",
|
|
|
+ ...override,
|
|
|
+ };
|
|
|
+}
|
|
|
+
|
|
|
export enum SubmitKey {
|
|
|
Enter = "Enter",
|
|
|
CtrlEnter = "Ctrl + Enter",
|
|
@@ -159,11 +170,10 @@ export interface ChatSession {
|
|
|
}
|
|
|
|
|
|
const DEFAULT_TOPIC = Locale.Store.DefaultTopic;
|
|
|
-export const BOT_HELLO: Message = {
|
|
|
+export const BOT_HELLO: Message = createMessage({
|
|
|
role: "assistant",
|
|
|
content: Locale.Store.BotHello,
|
|
|
- date: "",
|
|
|
-};
|
|
|
+});
|
|
|
|
|
|
function createEmptySession(): ChatSession {
|
|
|
const createDate = new Date().toLocaleString();
|
|
@@ -311,18 +321,15 @@ export const useChatStore = create<ChatStore>()(
|
|
|
},
|
|
|
|
|
|
async onUserInput(content) {
|
|
|
- const userMessage: Message = {
|
|
|
+ const userMessage: Message = createMessage({
|
|
|
role: "user",
|
|
|
content,
|
|
|
- date: new Date().toLocaleString(),
|
|
|
- };
|
|
|
+ });
|
|
|
|
|
|
- const botMessage: Message = {
|
|
|
- content: "",
|
|
|
+ const botMessage: Message = createMessage({
|
|
|
role: "assistant",
|
|
|
- date: new Date().toLocaleString(),
|
|
|
streaming: true,
|
|
|
- };
|
|
|
+ });
|
|
|
|
|
|
// get recent messages
|
|
|
const recentMessages = get().getMessagesWithMemory();
|
|
@@ -345,7 +352,10 @@ export const useChatStore = create<ChatStore>()(
|
|
|
botMessage.streaming = false;
|
|
|
botMessage.content = content;
|
|
|
get().onNewMessage(botMessage);
|
|
|
- ControllerPool.remove(sessionIndex, messageIndex);
|
|
|
+ ControllerPool.remove(
|
|
|
+ sessionIndex,
|
|
|
+ botMessage.id ?? messageIndex,
|
|
|
+ );
|
|
|
} else {
|
|
|
botMessage.content = content;
|
|
|
set(() => ({}));
|
|
@@ -361,13 +371,13 @@ export const useChatStore = create<ChatStore>()(
|
|
|
userMessage.isError = true;
|
|
|
botMessage.isError = true;
|
|
|
set(() => ({}));
|
|
|
- ControllerPool.remove(sessionIndex, messageIndex);
|
|
|
+ ControllerPool.remove(sessionIndex, botMessage.id ?? messageIndex);
|
|
|
},
|
|
|
onController(controller) {
|
|
|
// collect controller for stop/retry
|
|
|
ControllerPool.addController(
|
|
|
sessionIndex,
|
|
|
- messageIndex,
|
|
|
+ botMessage.id ?? messageIndex,
|
|
|
controller,
|
|
|
);
|
|
|
},
|
|
@@ -441,7 +451,8 @@ export const useChatStore = create<ChatStore>()(
|
|
|
requestWithPrompt(session.messages, Locale.Store.Prompt.Topic).then(
|
|
|
(res) => {
|
|
|
get().updateCurrentSession(
|
|
|
- (session) => (session.topic = trimTopic(res)),
|
|
|
+ (session) =>
|
|
|
+ (session.topic = res ? trimTopic(res) : DEFAULT_TOPIC),
|
|
|
);
|
|
|
},
|
|
|
);
|