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}

+
+
+ ); +}