-
- }
- onClick={async () => {
- const newMessage = await showPrompt(
- Locale.Chat.Actions.Edit,
- message.content,
- 10,
- );
- chatStore.updateCurrentSession((session) => {
- const m = session.mask.context
- .concat(session.messages)
- .find((m) => m.id === message.id);
- if (m) {
- m.content = newMessage;
- }
- });
- }}
- >
-
- {isUser ? (
-
- ) : (
- <>
- {["system"].includes(message.role) ? (
-
- ) : (
-
- )}
- >
- )}
-
-
- {message.streaming ? (
-
}
- onClick={() => onUserStop(message.id ?? i)}
- />
- ) : (
- <>
-
}
- onClick={() => onResend(message)}
- />
+ const shouldShowMessage = !favoriteView || message.tag === "1";
-
}
- onClick={() => onDelete(message.id ?? i)}
+ return (
+ shouldShowMessage && (
+
+
+
+
+
+
+ }
+ onClick={async () => {
+ const newMessage = await showPrompt(
+ Locale.Chat.Actions.Edit,
+ message.content,
+ 10,
+ );
+ chatStore.updateCurrentSession((session) => {
+ const m = session.mask.context
+ .concat(session.messages)
+ .find((m) => m.id === message.id);
+ if (m) {
+ m.content = newMessage;
+ }
+ });
+ }}
+ >
+
+ {isUser ? (
+
+ ) : (
+ <>
+ {["system"].includes(message.role) ? (
+
+ ) : (
+
+ )}
+ >
+ )}
+
+ {showActions && (
+
+
+ {message.streaming ? (
}
- onClick={() => onPinMessage(message)}
+ text={Locale.Chat.Actions.Stop}
+ icon={}
+ onClick={() => onUserStop(message.id ?? i)}
/>
- }
- onClick={() => copyToClipboard(message.content)}
- />
- >
- )}
+ ) : (
+ <>
+ }
+ onClick={() => onResend(message)}
+ />
+
+ }
+ onClick={() => onDelete(message.id ?? i)}
+ />
+
+ }
+ onClick={() => onPinMessage(message)}
+ />
+ }
+ onClick={() =>
+ copyToClipboard(message.content)
+ }
+ />
+
+ ) : (
+
+ )
+ }
+ onClick={() => onDelete2(message.id ?? i)}
+ />
+ >
+ )}
+
+ )}
+
+ {showTyping && (
+
+ {Locale.Chat.Typing}
)}
-
- {showTyping && (
-
- {Locale.Chat.Typing}
+
+ onRightClick(e, message)}
+ onDoubleClickCapture={() => {
+ if (!isMobileScreen) return;
+ setUserInput(message.content);
+ }}
+ fontSize={fontSize}
+ parentRef={scrollRef}
+ defaultShow={i >= messages.length - 6}
+ />
- )}
-
- onRightClick(e, message)}
- onDoubleClickCapture={() => {
- if (!isMobileScreen) return;
- setUserInput(message.content);
- }}
- fontSize={fontSize}
- parentRef={scrollRef}
- defaultShow={i >= messages.length - 6}
- />
-
-
- {isContext
- ? Locale.Chat.IsContext
- : message.date.toLocaleString()}
+
+ {isContext
+ ? Locale.Chat.IsContext
+ : message.date.toLocaleString()}
+
-
- {shouldShowClearContextDivider && }
-
+ {shouldShowClearContextDivider &&
}
+
+ )
);
})}
diff --git a/app/icons/star.svg b/app/icons/star.svg
new file mode 100644
index 00000000000..063906c0b08
--- /dev/null
+++ b/app/icons/star.svg
@@ -0,0 +1,21 @@
+
+
+
diff --git a/app/icons/star2.svg b/app/icons/star2.svg
new file mode 100644
index 00000000000..fb52b605855
--- /dev/null
+++ b/app/icons/star2.svg
@@ -0,0 +1,20 @@
+
+
+
diff --git a/app/store/chat.ts b/app/store/chat.ts
index 66a39d2b227..ac3f1df35de 100644
--- a/app/store/chat.ts
+++ b/app/store/chat.ts
@@ -24,6 +24,7 @@ export type ChatMessage = RequestMessage & {
isError?: boolean;
id: string;
model?: ModelType;
+ tag?: string;
};
export function createMessage(override: Partial
): ChatMessage {
@@ -54,6 +55,7 @@ export interface ChatSession {
clearContextIndex?: number;
mask: Mask;
+ favoriteView?: boolean;
}
export const DEFAULT_TOPIC = Locale.Store.DefaultTopic;