diff --git a/examples/server/public/index.html.gz b/examples/server/public/index.html.gz index 1925b334b..3acd603ab 100644 Binary files a/examples/server/public/index.html.gz and b/examples/server/public/index.html.gz differ diff --git a/examples/server/webui/src/components/ChatMessage.tsx b/examples/server/webui/src/components/ChatMessage.tsx index 68be7c751..40ea74711 100644 --- a/examples/server/webui/src/components/ChatMessage.tsx +++ b/examples/server/webui/src/components/ChatMessage.tsx @@ -159,6 +159,35 @@ export default function ChatMessage({ )} + + {msg.extra && msg.extra.length > 0 && ( +
+ + Extra content + +
+ {msg.extra.map( + (extra, i) => + extra.type === 'textFile' ? ( +
+ {extra.name} +
{extra.content}
+
+ ) : extra.type === 'context' ? ( +
+
{extra.content}
+
+ ) : null // TODO: support other extra types + )} +
+
+ )} + (null); + + const { extraContext, clearExtraContext } = useVSCodeContext( + inputRef, + setInputMsg + ); + // TODO: improve this when we have "upload file" feature + const currExtra: Message['extra'] = extraContext ? [extraContext] : undefined; // keep track of leaf node for rendering const [currNodeId, setCurrNodeId] = useState(-1); @@ -115,10 +124,20 @@ export default function ChatScreen() { setCurrNodeId(-1); // get the last message node const lastMsgNodeId = messages.at(-1)?.msg.id ?? null; - if (!(await sendMessage(currConvId, lastMsgNodeId, inputMsg, onChunk))) { + if ( + !(await sendMessage( + currConvId, + lastMsgNodeId, + inputMsg, + currExtra, + onChunk + )) + ) { // restore the input message if failed setInputMsg(lastInpMsg); } + // OK + clearExtraContext(); }; const handleEditMessage = async (msg: Message, content: string) => { @@ -129,6 +148,7 @@ export default function ChatScreen() { viewingChat.conv.id, msg.parent, content, + msg.extra, onChunk ); setCurrNodeId(-1); @@ -143,6 +163,7 @@ export default function ChatScreen() { viewingChat.conv.id, msg.parent, null, + msg.extra, onChunk ); setCurrNodeId(-1); @@ -203,6 +224,7 @@ export default function ChatScreen() {