From d27326125bf5062133eb52d81729a16a8568e378 Mon Sep 17 00:00:00 2001 From: Mckay Wrigley Date: Sat, 25 Mar 2023 07:12:51 -0600 Subject: [PATCH] regenerate button (#138) --- components/Chat/Chat.tsx | 48 +++++++++++++++------------------ components/Chat/ChatInput.tsx | 19 +++++++++++-- components/Chat/ChatMessage.tsx | 5 ++-- pages/index.tsx | 14 ++++------ utils/server/index.ts | 4 +-- 5 files changed, 47 insertions(+), 43 deletions(-) diff --git a/components/Chat/Chat.tsx b/components/Chat/Chat.tsx index 67f9502..4ed54e5 100644 --- a/components/Chat/Chat.tsx +++ b/components/Chat/Chat.tsx @@ -4,7 +4,6 @@ import { ChatInput } from "./ChatInput"; import { ChatLoader } from "./ChatLoader"; import { ChatMessage } from "./ChatMessage"; import { ModelSelect } from "./ModelSelect"; -import { Regenerate } from "./Regenerate"; import { SystemPrompt } from "./SystemPrompt"; interface Props { @@ -17,15 +16,13 @@ interface Props { messageError: boolean; loading: boolean; lightMode: "light" | "dark"; - onSend: (message: Message, isResend: boolean) => void; + onSend: (message: Message, isResend?: boolean, deleteCount?: number) => void; onUpdateConversation: (conversation: Conversation, data: KeyValuePair) => void; onEditMessage: (message: Message, messageIndex: number) => void; - onDeleteMessage: (message: Message, messageIndex: number) => void; - onRegenerate: () => void; stopConversationRef: MutableRefObject; } -export const Chat: FC = ({ conversation, models, apiKey, serverSideApiKeyIsSet, messageIsStreaming, modelError, messageError, loading, lightMode, onSend, onUpdateConversation, onEditMessage, onDeleteMessage, onRegenerate, stopConversationRef }) => { +export const Chat: FC = ({ conversation, models, apiKey, serverSideApiKeyIsSet, messageIsStreaming, modelError, messageError, loading, lightMode, onSend, onUpdateConversation, onEditMessage, stopConversationRef }) => { const [currentMessage, setCurrentMessage] = useState(); const [autoScrollEnabled, setAutoScrollEnabled] = useState(true); @@ -55,6 +52,7 @@ export const Chat: FC = ({ conversation, models, apiKey, serverSideApiKey useEffect(() => { scrollToBottom(); textareaRef.current?.focus(); + setCurrentMessage(conversation.messages[conversation.messages.length - 2]); }, [conversation.messages]); useEffect(() => { @@ -69,6 +67,8 @@ export const Chat: FC = ({ conversation, models, apiKey, serverSideApiKey } }, []); + console.log("currentMessage", currentMessage); + return (
{!(apiKey || serverSideApiKeyIsSet) ? ( @@ -120,7 +120,6 @@ export const Chat: FC = ({ conversation, models, apiKey, serverSideApiKey messageIndex={index} lightMode={lightMode} onEditMessage={onEditMessage} - onDeleteMessage={onDeleteMessage} /> ))} @@ -134,27 +133,22 @@ export const Chat: FC = ({ conversation, models, apiKey, serverSideApiKey )}
- {messageError ? ( - { - if (currentMessage) { - onSend(currentMessage, true); - } - }} - /> - ) : ( - { - setCurrentMessage(message); - onSend(message, false); - }} - onRegenerate={onRegenerate} - /> - )} + { + setCurrentMessage(message); + onSend(message); + }} + onRegenerate={() => { + if (currentMessage) { + onSend(currentMessage, true, 2); + } + }} + /> )} diff --git a/components/Chat/ChatInput.tsx b/components/Chat/ChatInput.tsx index 8e686f3..49e82c7 100644 --- a/components/Chat/ChatInput.tsx +++ b/components/Chat/ChatInput.tsx @@ -1,17 +1,18 @@ import { Message, OpenAIModel, OpenAIModelID } from "@/types"; -import { IconPlayerStop, IconSend } from "@tabler/icons-react"; +import { IconPlayerStop, IconRepeat, IconSend } from "@tabler/icons-react"; import { FC, KeyboardEvent, MutableRefObject, useEffect, useState } from "react"; interface Props { messageIsStreaming: boolean; model: OpenAIModel; + messages: Message[]; onSend: (message: Message) => void; onRegenerate: () => void; stopConversationRef: MutableRefObject; textareaRef: MutableRefObject; } -export const ChatInput: FC = ({ onSend, messageIsStreaming, model, stopConversationRef, textareaRef }) => { +export const ChatInput: FC = ({ messageIsStreaming, model, messages, onSend, onRegenerate, stopConversationRef, textareaRef }) => { const [content, setContent] = useState(); const [isTyping, setIsTyping] = useState(false); @@ -90,6 +91,20 @@ export const ChatInput: FC = ({ onSend, messageIsStreaming, model, stopCo Stop Generating )} + + {!messageIsStreaming && messages.length > 0 && ( + + )} +