mirror of https://github.com/buster-so/buster.git
log reasoning flip to evals branch
This commit is contained in:
parent
9212903e9e
commit
70b3421d34
|
@ -187,7 +187,7 @@ export const PreventNavigation: React.FC<PreventNavigationProps> = React.memo(
|
|||
window.history.pushState(null, document.title, window.location.href);
|
||||
});
|
||||
|
||||
if (!isDirty) return <div className="bg-green-500 p-10" />;
|
||||
if (!isDirty) return null;
|
||||
|
||||
return (
|
||||
<LeavingDialog
|
||||
|
@ -256,7 +256,6 @@ const LeavingDialog: React.FC<{
|
|||
|
||||
return (
|
||||
<>
|
||||
<div className="bg-red-500 p-10" />
|
||||
<AppModal open={isOpen} onClose={onClose} header={memoizedHeader} footer={memoizedFooter} />
|
||||
</>
|
||||
);
|
||||
|
|
|
@ -27,6 +27,7 @@ type ParagraphProps = {
|
|||
style?: React.CSSProperties;
|
||||
onClick?: React.MouseEventHandler<HTMLHeadingElement>;
|
||||
children: React.ReactNode;
|
||||
onCopy?: React.ClipboardEventHandler<HTMLHeadingElement>;
|
||||
} & VariantProps<typeof textColorVariants> &
|
||||
VariantProps<typeof paragraphVariants>;
|
||||
|
||||
|
@ -37,7 +38,8 @@ export const Paragraph: React.FC<ParagraphProps> = ({
|
|||
children,
|
||||
className,
|
||||
style,
|
||||
lineHeight = 'base'
|
||||
lineHeight = 'base',
|
||||
onCopy
|
||||
}) => {
|
||||
return (
|
||||
<p
|
||||
|
@ -47,6 +49,7 @@ export const Paragraph: React.FC<ParagraphProps> = ({
|
|||
className
|
||||
)}
|
||||
style={style}
|
||||
onCopy={onCopy}
|
||||
onClick={onClick}>
|
||||
{children}
|
||||
</p>
|
||||
|
|
|
@ -6,7 +6,7 @@ import { Paragraph } from '@/components/ui/typography';
|
|||
import { MessageContainer } from './MessageContainer';
|
||||
import { Tooltip } from '@/components/ui/tooltip';
|
||||
import { cn } from '@/lib/classMerge';
|
||||
import { PenWriting, Copy, Check } from '@/components/ui/icons';
|
||||
import { PenWriting, Copy } from '@/components/ui/icons';
|
||||
import { Button } from '@/components/ui/buttons';
|
||||
import { useBusterNotifications } from '@/context/BusterNotifications';
|
||||
import { useMemoizedFn } from '@/hooks';
|
||||
|
@ -19,6 +19,7 @@ export const ChatUserMessage: React.FC<{
|
|||
isCompletedStream: boolean;
|
||||
requestMessage: NonNullable<BusterChatMessageRequest>;
|
||||
}> = React.memo(({ messageId, chatId, isCompletedStream, requestMessage }) => {
|
||||
const { openSuccessMessage } = useBusterNotifications();
|
||||
const [isTooltipOpen, setIsTooltipOpen] = useState(false);
|
||||
const [isEditing, setIsEditing] = useState(false);
|
||||
|
||||
|
@ -29,6 +30,18 @@ export const ChatUserMessage: React.FC<{
|
|||
setIsTooltipOpen(false);
|
||||
});
|
||||
|
||||
const handleCopy = useMemoizedFn((e?: React.ClipboardEvent) => {
|
||||
// Prevent default copy behavior
|
||||
//I do not know why this is needed, but it is...
|
||||
if (e) {
|
||||
e.preventDefault();
|
||||
e.clipboardData.setData('text/plain', request);
|
||||
} else {
|
||||
navigator.clipboard.writeText(request);
|
||||
}
|
||||
openSuccessMessage('Copied to clipboard');
|
||||
});
|
||||
|
||||
return (
|
||||
<MessageContainer
|
||||
senderName={sender_name}
|
||||
|
@ -45,12 +58,17 @@ export const ChatUserMessage: React.FC<{
|
|||
/>
|
||||
) : (
|
||||
<>
|
||||
<Paragraph className="whitespace-pre-wrap">{request}</Paragraph>
|
||||
<div>
|
||||
<Paragraph className="break-words whitespace-normal" onCopy={handleCopy}>
|
||||
{request}
|
||||
</Paragraph>
|
||||
</div>
|
||||
{isCompletedStream && (
|
||||
<RequestMessageTooltip
|
||||
isTooltipOpen={isTooltipOpen}
|
||||
requestMessage={requestMessage}
|
||||
setIsEditing={setIsEditing}
|
||||
onCopy={handleCopy}
|
||||
/>
|
||||
)}
|
||||
</>
|
||||
|
@ -65,14 +83,10 @@ const RequestMessageTooltip: React.FC<{
|
|||
isTooltipOpen: boolean;
|
||||
requestMessage: NonNullable<BusterChatMessageRequest>;
|
||||
setIsEditing: (isEditing: boolean) => void;
|
||||
}> = React.memo(({ isTooltipOpen, requestMessage, setIsEditing }) => {
|
||||
onCopy: () => void;
|
||||
}> = React.memo(({ isTooltipOpen, requestMessage, setIsEditing, onCopy }) => {
|
||||
const { openSuccessMessage } = useBusterNotifications();
|
||||
|
||||
const onCopy = useMemoizedFn(() => {
|
||||
navigator.clipboard.writeText(requestMessage.request);
|
||||
openSuccessMessage('Copied to clipboard');
|
||||
});
|
||||
|
||||
const onEdit = useMemoizedFn(() => {
|
||||
setIsEditing(true);
|
||||
});
|
||||
|
@ -80,7 +94,7 @@ const RequestMessageTooltip: React.FC<{
|
|||
return (
|
||||
<div
|
||||
className={cn(
|
||||
'absolute right-1 -bottom-0 translate-y-full transform',
|
||||
'absolute top-0 right-1 -translate-y-1 transform',
|
||||
'bg-background z-50 rounded border shadow',
|
||||
'transition-all duration-200',
|
||||
isTooltipOpen ? 'scale-100 opacity-100' : 'scale-95 opacity-0'
|
||||
|
|
|
@ -7,8 +7,9 @@ import { BusterChatResponseMessage_file } from '@/api/asset_interfaces/chat';
|
|||
import { useAppLayoutContextSelector } from '@/context/BusterAppLayout';
|
||||
import { useGetFileLink } from '@/context/Assets/useGetFileLink';
|
||||
import { useChatLayoutContextSelector } from '../ChatLayoutContext';
|
||||
import { usePrevious } from '@/hooks';
|
||||
import { useMount, usePrevious } from '@/hooks';
|
||||
import { useGetInitialChatFile } from './useGetInitialChatFile';
|
||||
import { BusterRoutes } from '@/routes';
|
||||
|
||||
export const useAutoChangeLayout = ({
|
||||
lastMessageId,
|
||||
|
@ -44,7 +45,19 @@ export const useAutoChangeLayout = ({
|
|||
|
||||
const hasReasoning = !!reasoningMessagesLength;
|
||||
|
||||
useMount(() => {
|
||||
console.log('MOUNTED?');
|
||||
});
|
||||
|
||||
useEffect(() => {
|
||||
console.log({
|
||||
isCompletedStream,
|
||||
hasReasoning,
|
||||
chatId,
|
||||
previousLastMessageId: previousLastMessageId.current,
|
||||
lastMessageId,
|
||||
previousIsCompletedStream
|
||||
});
|
||||
//this will trigger when the chat is streaming and is has not completed yet (new chat)
|
||||
if (
|
||||
!isCompletedStream &&
|
||||
|
@ -53,12 +66,18 @@ export const useAutoChangeLayout = ({
|
|||
chatId
|
||||
) {
|
||||
previousLastMessageId.current = lastMessageId;
|
||||
onSetSelectedFile({ id: lastMessageId, type: 'reasoning', versionNumber: undefined });
|
||||
// onSetSelectedFile({ id: lastMessageId, type: 'reasoning', versionNumber: undefined });
|
||||
onChangePage({
|
||||
route: BusterRoutes.APP_CHAT_ID_REASONING_ID,
|
||||
chatId,
|
||||
messageId: lastMessageId
|
||||
});
|
||||
console.log('FLIP TO REASONING!', lastMessageId);
|
||||
}
|
||||
|
||||
//this will when the chat is completed and it WAS streaming
|
||||
else if (isCompletedStream && previousIsCompletedStream === false) {
|
||||
//
|
||||
console.log('SELECT STREAMING FILE');
|
||||
const chatMessage = getChatMessageMemoized(lastMessageId);
|
||||
const lastFileId = findLast(chatMessage?.response_message_ids, (id) => {
|
||||
const responseMessage = chatMessage?.response_messages[id];
|
||||
|
@ -68,7 +87,6 @@ export const useAutoChangeLayout = ({
|
|||
| BusterChatResponseMessage_file
|
||||
| undefined;
|
||||
|
||||
//this will trigger when the chat was streaming (new chat)
|
||||
if (lastFileId && lastFile) {
|
||||
const { link, isSelected, selectedVersionNumber } = getFileLinkMeta({
|
||||
fileId: lastFileId,
|
||||
|
@ -78,17 +96,17 @@ export const useAutoChangeLayout = ({
|
|||
useVersionHistoryMode: !chatId
|
||||
});
|
||||
|
||||
if (
|
||||
!isSelected &&
|
||||
selectedVersionNumber !== lastFile.version_number &&
|
||||
selectedFileId !== lastFileId
|
||||
) {
|
||||
onSetSelectedFile({
|
||||
id: lastFileId,
|
||||
type: lastFile.file_type,
|
||||
versionNumber: selectedVersionNumber
|
||||
});
|
||||
}
|
||||
// if (
|
||||
// !isSelected &&
|
||||
// selectedVersionNumber !== lastFile.version_number &&
|
||||
// selectedFileId !== lastFileId
|
||||
// ) {
|
||||
// onSetSelectedFile({
|
||||
// id: lastFileId,
|
||||
// type: lastFile.file_type,
|
||||
// versionNumber: selectedVersionNumber
|
||||
// });
|
||||
// }
|
||||
|
||||
if (link) {
|
||||
onChangePage(link);
|
||||
|
@ -98,6 +116,7 @@ export const useAutoChangeLayout = ({
|
|||
}
|
||||
//this will trigger on a page refresh and the chat is completed
|
||||
else if (isCompletedStream && chatId) {
|
||||
console.log('SELECT INITIAL CHAT FILE - PAGE LOAD');
|
||||
const isChatOnlyMode = !metricId && !dashboardId && !messageId;
|
||||
if (isChatOnlyMode) {
|
||||
return;
|
||||
|
@ -117,5 +136,5 @@ export const useAutoChangeLayout = ({
|
|||
onChangePage(href);
|
||||
}
|
||||
}
|
||||
}, [isCompletedStream, hasReasoning, lastMessageId]);
|
||||
}, [isCompletedStream, hasReasoning, chatId, lastMessageId]);
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue