diff --git a/src/pages/playground/components/multiple-chat/index.tsx b/src/pages/playground/components/multiple-chat/index.tsx
index b7fbb733..a900f923 100644
--- a/src/pages/playground/components/multiple-chat/index.tsx
+++ b/src/pages/playground/components/multiple-chat/index.tsx
@@ -79,9 +79,7 @@ const MultiCompare: React.FC
= ({ modelList, loaded }) => {
const modelRefList = Object.getOwnPropertySymbols(modelRefs.current);
modelRefList.forEach((instanceId: symbol) => {
const ref = modelRefs.current[instanceId];
- ref?.setMessageList((preList: any) => {
- return [...preList, { ...message }];
- });
+ ref?.addNewMessage(message);
});
};
diff --git a/src/pages/playground/components/multiple-chat/model-item.tsx b/src/pages/playground/components/multiple-chat/model-item.tsx
index 20699241..61ec46ff 100644
--- a/src/pages/playground/components/multiple-chat/model-item.tsx
+++ b/src/pages/playground/components/multiple-chat/model-item.tsx
@@ -65,19 +65,13 @@ const ModelItem: React.FC = forwardRef(
const controllerRef = useRef(null);
const currentMessageRef = useRef([]);
const modelScrollRef = useRef(null);
+ const messageListLengthCache = useRef(0);
const { initialize, updateScrollerPosition } = useOverlayScroller();
const setMessageId = () => {
messageId.current = messageId.current + 1;
};
- const maxHeight = useMemo(() => {
- const total = 72 + 110 + 46 + 16 + 32;
- if (spans.count < 4) {
- return `calc(100vh - ${total}px)`;
- }
- return `calc(100vh - ${total * 2 + 16}px)`;
- }, [spans.count]);
const abortFetch = () => {
controllerRef.current?.abort?.();
@@ -255,6 +249,19 @@ const ModelItem: React.FC = forwardRef(
currentMessageRef.current = [];
};
+ const addNewMessage = (message: Omit) => {
+ setMessageId();
+ setMessageList((preList) => {
+ return [
+ ...preList,
+ {
+ ...message,
+ uid: messageId.current
+ }
+ ];
+ });
+ };
+
const handleCloseViewCode = () => {
setShow(false);
};
@@ -345,14 +352,23 @@ const ModelItem: React.FC = forwardRef(
}, [modelScrollRef.current, initialize]);
useEffect(() => {
- updateScrollerPosition();
+ if (loadingStatus[instanceId]) {
+ updateScrollerPosition();
+ }
}, [messageList]);
+ useEffect(() => {
+ if (messageList.length > messageListLengthCache.current) {
+ updateScrollerPosition();
+ }
+ messageListLengthCache.current = messageList.length;
+ }, [messageList.length]);
+
useImperativeHandle(ref, () => {
return {
submit: handleSubmit,
abortFetch,
- setMessageList,
+ addNewMessage,
clear: handleClearMessage,
presetPrompt: handlePresetMessageList,
setSystemMessage,