Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions frontend/src/ide/chat-ai/DefaultPromptInput.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { Sender } from "@ant-design/x";
function DefaultPromptInput({
value,
isPromptRunning,
isResponseStreaming = false,
onSenderChange,
onSubmit,
onCancel,
Expand All @@ -25,7 +26,7 @@ function DefaultPromptInput({
actions={(_, info) => {
const { SendButton, LoadingButton } = info.components;

if (isPromptRunning) {
if (isPromptRunning && !isResponseStreaming) {
return (
<Tooltip title="Stop">
<LoadingButton variant="text" color="secondary" shape="default" />
Expand All @@ -51,7 +52,7 @@ function DefaultPromptInput({
/>
}
shape="default"
disabled={!value}
disabled={!value || isPromptRunning}
className={shouldHighlightSend ? "onboarding-send-highlight" : ""}
/>
</Tooltip>
Expand All @@ -64,6 +65,7 @@ function DefaultPromptInput({
DefaultPromptInput.propTypes = {
value: PropTypes.string.isRequired,
isPromptRunning: PropTypes.bool.isRequired,
isResponseStreaming: PropTypes.bool,
onSenderChange: PropTypes.func.isRequired,
onSubmit: PropTypes.func.isRequired,
onCancel: PropTypes.func.isRequired,
Expand Down
8 changes: 8 additions & 0 deletions frontend/src/ide/chat-ai/ExistingChat.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -246,6 +246,13 @@ const ExistingChat = memo(function ExistingChat({
return -1;
}, [chatMessages, chatIntents]);

// Check if response is actively streaming (thought chain done, response started)
const isResponseStreaming = useMemo(() => {
if (!chatMessages?.length) return false;
const lastMessage = chatMessages?.[chatMessages.length - 1];
return isPromptRunning && lastMessage?.response?.length > 0;
}, [chatMessages, isPromptRunning]);

useEffect(() => {
if (chatMessages.length) {
setLastChatMessageId(
Expand Down Expand Up @@ -454,6 +461,7 @@ const ExistingChat = memo(function ExistingChat({
<InputPrompt
savePrompt={handleSavePrompt}
isPromptRunning={isPromptRunning}
isResponseStreaming={isResponseStreaming}
chatIntents={chatIntents}
selectedChatIntent={selectedChatIntent}
setSelectedChatIntent={setSelectedChatIntent}
Expand Down
3 changes: 3 additions & 0 deletions frontend/src/ide/chat-ai/InputPrompt.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ const InputPrompt = memo(function InputPrompt({
savePrompt,
isNewChat = false,
isPromptRunning,
isResponseStreaming = false,
chatIntents,
selectedChatIntent,
setSelectedChatIntent,
Expand Down Expand Up @@ -209,6 +210,7 @@ const InputPrompt = memo(function InputPrompt({
value={value}
editorHeight={editorHeight}
isPromptRunning={isPromptRunning}
isResponseStreaming={isResponseStreaming}
onSenderChange={handleSenderChange}
onSubmit={handleSubmit}
onEditorMount={handleEditorMount}
Expand Down Expand Up @@ -252,6 +254,7 @@ InputPrompt.propTypes = {
savePrompt: PropTypes.func.isRequired,
isNewChat: PropTypes.bool,
isPromptRunning: PropTypes.bool.isRequired,
isResponseStreaming: PropTypes.bool,
chatIntents: PropTypes.array.isRequired,
selectedChatIntent: PropTypes.string,
setSelectedChatIntent: PropTypes.func.isRequired,
Expand Down
7 changes: 4 additions & 3 deletions frontend/src/ide/chat-ai/MonacoPromptInput.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ const MonacoPromptInput = memo(function MonacoPromptInput({
value,
editorHeight,
isPromptRunning,
isResponseStreaming = false,
onEditorMount,
onMonacoChange,
onSubmit,
Expand Down Expand Up @@ -159,9 +160,8 @@ const MonacoPromptInput = memo(function MonacoPromptInput({
return (
<div className="monaco-editor-wrapper">
{editorContent}

<div className="monaco-editor-send">
{isPromptRunning ? (
{isPromptRunning && !isResponseStreaming ? (
<Tooltip title="Stop">
<Button type="text" icon={<CloseOutlined />} onClick={onCancel} />
</Tooltip>
Expand Down Expand Up @@ -189,7 +189,7 @@ const MonacoPromptInput = memo(function MonacoPromptInput({
}
/>
}
disabled={!value}
disabled={!value || isPromptRunning}
onClick={handleSubmit}
className={shouldHighlightSend ? "onboarding-send-highlight" : ""}
/>
Expand All @@ -204,6 +204,7 @@ MonacoPromptInput.propTypes = {
value: PropTypes.string.isRequired,
editorHeight: PropTypes.number.isRequired,
isPromptRunning: PropTypes.bool.isRequired,
isResponseStreaming: PropTypes.bool,
Comment thread
greptile-apps[bot] marked this conversation as resolved.
onEditorMount: PropTypes.func,
onMonacoChange: PropTypes.func.isRequired,
onSubmit: PropTypes.func.isRequired,
Expand Down
4 changes: 4 additions & 0 deletions frontend/src/ide/chat-ai/PromptInput.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ const PromptInput = memo(function PromptInput({
value,
editorHeight,
isPromptRunning,
isResponseStreaming,
onSenderChange,
onSubmit,
onEditorMount,
Expand All @@ -34,6 +35,7 @@ const PromptInput = memo(function PromptInput({
<DefaultPromptInput
value={value}
isPromptRunning={isPromptRunning}
isResponseStreaming={isResponseStreaming}
onSenderChange={onSenderChange}
onSubmit={onSubmit}
onCancel={onCancel}
Expand All @@ -49,6 +51,7 @@ const PromptInput = memo(function PromptInput({
value={value}
editorHeight={editorHeight}
isPromptRunning={isPromptRunning}
isResponseStreaming={isResponseStreaming}
onEditorMount={onEditorMount}
onMonacoChange={onMonacoChange}
onSubmit={onSubmit}
Expand All @@ -70,6 +73,7 @@ PromptInput.propTypes = {
value: PropTypes.string.isRequired,
editorHeight: PropTypes.number.isRequired,
isPromptRunning: PropTypes.bool.isRequired,
isResponseStreaming: PropTypes.bool,
onSenderChange: PropTypes.func.isRequired,
onSubmit: PropTypes.func.isRequired,
onEditorMount: PropTypes.func.isRequired,
Expand Down
Loading