diff --git a/src/message.tsx b/src/message.tsx
index f163b74..853098f 100644
--- a/src/message.tsx
+++ b/src/message.tsx
@@ -4,6 +4,10 @@ import { ChatStore, ChatStoreMessage } from "./app";
import { calculate_token_length, getMessageText } from "./chatgpt";
import Markdown from "preact-markdown";
import TTSButton from "./tts";
+import { MessageHide } from "./messageHide";
+import { MessageDetail } from "./messageDetail";
+import { MessageToolCall } from "./messageToolCall";
+import { MessageToolResp } from "./messageToolResp";
interface EditMessageProps {
chat: ChatStoreMessage;
@@ -355,69 +359,13 @@ export default function Message(props: Props) {
} ${chat.hide ? "opacity-50" : ""}`}
>
{chat.hide ? (
- getMessageText(chat).split("\n")[0].slice(0, 18) + "... (deleted)"
+
) : typeof chat.content !== "string" ? (
- chat.content.map((mdt) =>
- mdt.type === "text" ? (
- chat.hide ? (
- mdt.text?.split("\n")[0].slice(0, 16) + "... (deleted)"
- ) : renderMarkdown ? (
- // @ts-ignore
-
- ) : (
- mdt.text
- )
- ) : (
-
{
- window.open(mdt.image_url?.url, "_blank");
- }}
- />
- )
- )
+
) : chat.tool_calls ? (
-
-
- {chat.tool_calls?.map((tool_call) => (
-
-
- Tool Call ID:{" "}
- copyToClipboard(String(tool_call.id))}
- >
- {tool_call?.id}
-
-
-
Type: {tool_call?.type}
-
- Function:
-
- copyToClipboard(tool_call.function.name)
- }
- >
- {tool_call.function.name}
-
-
-
- Arguments:
-
- copyToClipboard(tool_call.function.arguments)
- }
- >
- {tool_call.function.arguments}
-
-
-
- ))}
-
-
+
+ ) : chat.role === "tool" ? (
+
) : renderMarkdown ? (
// @ts-ignore
@@ -425,6 +373,7 @@ export default function Message(props: Props) {
{
// only show when content is string or list of message
+ // this check is used to avoid rendering tool call
chat.content && getMessageText(chat)
}
diff --git a/src/messageDetail.tsx b/src/messageDetail.tsx
new file mode 100644
index 0000000..84666e3
--- /dev/null
+++ b/src/messageDetail.tsx
@@ -0,0 +1,35 @@
+import { ChatStoreMessage } from "./app";
+
+interface Props {
+ chat: ChatStoreMessage;
+ renderMarkdown: boolean;
+}
+export function MessageDetail({ chat, renderMarkdown }: Props) {
+ if (typeof chat.content === "string") {
+ return ;
+ }
+ return (
+
+ {chat.content.map((mdt) =>
+ mdt.type === "text" ? (
+ chat.hide ? (
+ mdt.text?.split("\n")[0].slice(0, 16) + "... (deleted)"
+ ) : renderMarkdown ? (
+ // @ts-ignore
+
+ ) : (
+ mdt.text
+ )
+ ) : (
+

{
+ window.open(mdt.image_url?.url, "_blank");
+ }}
+ />
+ )
+ )}
+
+ );
+}
diff --git a/src/messageHide.tsx b/src/messageHide.tsx
new file mode 100644
index 0000000..9e78cb6
--- /dev/null
+++ b/src/messageHide.tsx
@@ -0,0 +1,12 @@
+import { ChatStoreMessage } from "./app";
+import { getMessageText } from "./chatgpt";
+
+interface Props {
+ chat: ChatStoreMessage;
+}
+
+export function MessageHide({ chat }: Props) {
+ return (
+ {getMessageText(chat).split("\n")[0].slice(0, 18)} ... (deleted)
+ );
+}
diff --git a/src/messageToolCall.tsx b/src/messageToolCall.tsx
new file mode 100644
index 0000000..5dd194b
--- /dev/null
+++ b/src/messageToolCall.tsx
@@ -0,0 +1,44 @@
+import { ChatStoreMessage } from "./app";
+
+interface Props {
+ chat: ChatStoreMessage;
+ copyToClipboard: (text: string) => void;
+}
+export function MessageToolCall({ chat, copyToClipboard }: Props) {
+ return (
+
+ {chat.tool_calls?.map((tool_call) => (
+
+
+ Tool Call ID:{" "}
+ copyToClipboard(String(tool_call.id))}
+ >
+ {tool_call?.id}
+
+
+
Type: {tool_call?.type}
+
+ Function:
+ copyToClipboard(tool_call.function.name)}
+ >
+ {tool_call.function.name}
+
+
+
+ Arguments:
+ copyToClipboard(tool_call.function.arguments)}
+ >
+ {tool_call.function.arguments}
+
+
+
+ ))}
+
+ );
+}
diff --git a/src/messageToolResp.tsx b/src/messageToolResp.tsx
new file mode 100644
index 0000000..52d17e7
--- /dev/null
+++ b/src/messageToolResp.tsx
@@ -0,0 +1,24 @@
+import { ChatStoreMessage } from "./app";
+
+interface Props {
+ chat: ChatStoreMessage;
+ copyToClipboard: (text: string) => void;
+}
+export function MessageToolResp({ chat, copyToClipboard }: Props) {
+ return (
+
+
+
+ Tool Response ID:{" "}
+ copyToClipboard(String(chat.tool_call_id))}
+ >
+ {chat.tool_call_id}
+
+
+
{chat.content}
+
+
+ );
+}