Skip to content

Commit 0893d48

Browse files
authored
Remove regenerate button and endpoint (#458)
Remove regeneration capabilities because it is flakey
1 parent 5be9491 commit 0893d48

File tree

11 files changed

+61
-395
lines changed

11 files changed

+61
-395
lines changed

ka-chat-bot/frontend/build-chat-app/asset-manifest.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"files": {
33
"main.css": "/static/css/main.f260d893.css",
4-
"main.js": "/static/js/main.b7fda65e.js",
4+
"main.js": "/static/js/main.ddf33c5b.js",
55
"static/js/206.8ac086ca.chunk.js": "/static/js/206.8ac086ca.chunk.js",
66
"static/media/databricks_text.svg": "/static/media/databricks_text.7adff03989481b9a15f527a4f5ea4ec0.svg",
77
"static/media/buttonIcon.svg": "/static/media/buttonIcon.defbe07cf4298fbe1d6170023592c490.svg",
@@ -17,6 +17,6 @@
1717
},
1818
"entrypoints": [
1919
"static/css/main.f260d893.css",
20-
"static/js/main.b7fda65e.js"
20+
"static/js/main.ddf33c5b.js"
2121
]
2222
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
<!doctype html><html lang="en"><head><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="chatbot app"/><title>Chatbot App</title><script defer="defer" src="/static/js/main.b7fda65e.js"></script><link href="/static/css/main.f260d893.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
1+
<!doctype html><html lang="en"><head><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="chatbot app"/><title>Chatbot App</title><script defer="defer" src="/static/js/main.ddf33c5b.js"></script><link href="/static/css/main.f260d893.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>

ka-chat-bot/frontend/build-chat-app/static/js/main.b7fda65e.js renamed to ka-chat-bot/frontend/build-chat-app/static/js/main.ddf33c5b.js

Lines changed: 50 additions & 50 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ka-chat-bot/frontend/src/api/chatApi.ts

Lines changed: 0 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -102,83 +102,6 @@ export const getChatHistory = async (): Promise<{ sessions: Chat[] }> => {
102102
}
103103
};
104104

105-
export const regenerateMessage = async (
106-
content: string,
107-
sessionId: string,
108-
messageId: string,
109-
includeHistory: boolean,
110-
servingEndpointName: string,
111-
onChunk: (chunk: {
112-
content?: string,
113-
sources?: any[],
114-
metrics?: {
115-
timeToFirstToken?: number;
116-
totalTime?: number;
117-
}
118-
}) => void
119-
): Promise<void> => {
120-
try {
121-
const response = await fetch(
122-
`${API_URL}/regenerate`,
123-
{
124-
method: 'POST',
125-
headers: {
126-
'Content-Type': 'application/json',
127-
'Accept': 'text/event-stream',
128-
},
129-
body: JSON.stringify({
130-
message_id: messageId,
131-
original_content: content,
132-
session_id: sessionId,
133-
include_history: includeHistory,
134-
serving_endpoint_name: servingEndpointName
135-
})
136-
}
137-
);
138-
139-
if (!response.ok) {
140-
throw new Error(`HTTP error! status: ${response.status}`);
141-
}
142-
143-
const reader = response.body?.getReader();
144-
if (!reader) throw new Error('No reader available');
145-
146-
const decoder = new TextDecoder();
147-
let accumulatedContent = '';
148-
149-
while (true) {
150-
const { done, value } = await reader.read();
151-
if (done) break;
152-
153-
const chunk = decoder.decode(value);
154-
const lines = chunk.split('\n');
155-
156-
for (const line of lines) {
157-
if (line.startsWith('data: ')) {
158-
const jsonStr = line.slice(6);
159-
if (jsonStr && jsonStr !== '{}') {
160-
try {
161-
const data = JSON.parse(jsonStr);
162-
if (data.content) {
163-
accumulatedContent += data.content;
164-
}
165-
onChunk({
166-
...data,
167-
content: accumulatedContent // Send accumulated content instead of just the chunk
168-
});
169-
} catch (e) {
170-
console.error('Error parsing JSON:', e);
171-
}
172-
}
173-
}
174-
}
175-
}
176-
} catch (error) {
177-
console.error('Error regenerating message:', error);
178-
throw error;
179-
}
180-
};
181-
182105
export const fetchUserInfo = async (): Promise<{ username: string; email: string, displayName: string }> => {
183106
try {
184107
const response = await fetch(`${API_URL}/user-info`);

ka-chat-bot/frontend/src/components/ChatArea.tsx

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,8 @@ const MessagesContainer = styled.div`
7474
`;
7575

7676
const ChatArea: React.FC = () => {
77-
const { messages, isSidebarOpen, regenerateMessage } = useChat();
77+
const { messages, isSidebarOpen } = useChat();
7878
const messagesEndRef = useRef<HTMLDivElement>(null);
79-
const [isRegenerating, setIsRegenerating] = useState(false);
8079
const [hasStartedChat, setHasStartedChat] = useState(false);
8180
const [includeHistory, setIncludeHistory] = useState(true);
8281

@@ -90,26 +89,20 @@ const ChatArea: React.FC = () => {
9089
}, [messages, hasStartedChat]);
9190

9291
useEffect(() => {
93-
if (messagesEndRef.current && !isRegenerating) {
92+
if (messagesEndRef.current) {
9493
messagesEndRef.current.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
9594
}
96-
}, [messages, isRegenerating]);
95+
}, [messages]);
9796

9897
const hasMessages = messages?.length > 0 || hasStartedChat;
9998

100-
const handleRegenerate = async (messageId: string) => {
101-
setIsRegenerating(true);
102-
await regenerateMessage(messageId, includeHistory);
103-
};
104-
10599
return (
106100
<ChatContainer data-testid="chat-area" sidebarOpen={isSidebarOpen}>
107101
<ChatTopNav />
108102
<ChatContent data-testid="chat-content">
109103
<WelcomeContainer visible={!hasMessages} data-testid="welcome-container">
110104
<WelcomeMessage data-testid="welcome-message">What can I help with?</WelcomeMessage>
111105
<ChatInput
112-
setIsRegenerating={setIsRegenerating}
113106
includeHistory={includeHistory}
114107
setIncludeHistory={setIncludeHistory}
115108
data-testid="chat-input"
@@ -122,19 +115,17 @@ const ChatArea: React.FC = () => {
122115
<ChatMessage
123116
key={index}
124117
message={message}
125-
onRegenerate={handleRegenerate}
126118
data-testid={`message-${index}`}
127119
/>
128120
))}
129-
{!isRegenerating && <div ref={messagesEndRef} />}
121+
{<div ref={messagesEndRef} />}
130122
</MessagesContainer>
131123
)}
132124
</ChatContent>
133125

134126
<FixedInputWrapper visible={hasMessages} data-testid="fixed-input-wrapper">
135127
<ChatInput
136128
fixed={true}
137-
setIsRegenerating={setIsRegenerating}
138129
includeHistory={includeHistory}
139130
setIncludeHistory={setIncludeHistory}
140131
/>

ka-chat-bot/frontend/src/components/ChatInput.tsx

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,14 +83,12 @@ const SendButton = styled(InputButton)`
8383

8484
interface ChatInputProps {
8585
fixed?: boolean;
86-
setIsRegenerating: (value: boolean) => void;
8786
includeHistory: boolean;
8887
setIncludeHistory: (value: boolean) => void;
8988
}
9089

9190
const ChatInput: React.FC<ChatInputProps> = ({
9291
fixed = false,
93-
setIsRegenerating,
9492
includeHistory,
9593
setIncludeHistory
9694
}) => {
@@ -108,7 +106,6 @@ const ChatInput: React.FC<ChatInputProps> = ({
108106

109107
const handleSubmit = async () => {
110108
if (inputValue.trim() && !loading) {
111-
setIsRegenerating(false);
112109
setInputValue('');
113110
await sendMessage(inputValue, includeHistory);
114111
if (textareaRef.current) {

ka-chat-bot/frontend/src/components/ChatMessage.tsx

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -401,11 +401,10 @@ const StyledLink = styled.a`
401401

402402
interface ChatMessageProps {
403403
message: Message;
404-
onRegenerate: (messageId: string) => Promise<void>;
405404
'data-testid'?: string;
406405
}
407406

408-
const ChatMessage: React.FC<ChatMessageProps> = ({ message, onRegenerate }) => {
407+
const ChatMessage: React.FC<ChatMessageProps> = ({ message }) => {
409408
const { copyMessage } = useChat();
410409
const isUser = message.role === 'user';
411410
const [showSources, setShowSources] = useState(false);
@@ -420,10 +419,6 @@ const ChatMessage: React.FC<ChatMessageProps> = ({ message, onRegenerate }) => {
420419
setTimeout(() => setCopied(false), 5000); // Reset after 5 seconds
421420
};
422421

423-
const handleRegenerate = async () => {
424-
await onRegenerate(message.message_id);
425-
};
426-
427422
const toggleThink = (thinkId: string) => {
428423
setClosedThinks(prev => {
429424
const newSet = [...prev];
@@ -631,11 +626,6 @@ const ChatMessage: React.FC<ChatMessageProps> = ({ message, onRegenerate }) => {
631626
<FontAwesomeIcon icon={faCheck} />
632627
</CheckIconWrapper>
633628
</CopyButton>
634-
<RefreshButton
635-
onClick={handleRegenerate}
636-
title="Regenerate"
637-
data-testid={`refresh-button-${message.message_id}`}
638-
/>
639629
</MessageActions>
640630
</MessageFooter>
641631
</BotMessageContent>

ka-chat-bot/frontend/src/context/ChatContext.tsx

Lines changed: 1 addition & 137 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import React, { createContext, useContext, useState, useEffect, useRef, ReactNode } from 'react';
22
import { Message, Chat } from '../types';
3-
import { sendMessage as apiSendMessage, getChatHistory, API_URL, regenerateMessage as apiRegenerateMessage, logout as apiLogout } from '../api/chatApi';
3+
import { sendMessage as apiSendMessage, getChatHistory, API_URL, logout as apiLogout } from '../api/chatApi';
44
import { v4 as uuid } from 'uuid';
55

66
interface ChatContextType {
@@ -14,7 +14,6 @@ interface ChatContextType {
1414
toggleSidebar: () => void;
1515
startNewSession: () => void;
1616
copyMessage: (content: string) => void;
17-
regenerateMessage: (messageId: string, includeHistory: boolean) => Promise<void>;
1817
logout: () => void;
1918
error: string | null;
2019
clearError: () => void;
@@ -217,140 +216,6 @@ export const ChatProvider = ({ children }: { children: ReactNode }) => {
217216
});
218217
};
219218

220-
const regenerateMessage = async (messageId: string, includeHistory: boolean = true) => {
221-
console.log('Regenerating message:', messages);
222-
console.log('Current session ID:', currentSessionId);
223-
224-
const messageIndex = messages.findIndex(msg => msg.message_id === messageId);
225-
if (messageIndex === -1) {
226-
console.error('Message not found:', messageId);
227-
setError('Cannot regenerate message: message not found.');
228-
return;
229-
}
230-
231-
const previousUserMessage = [...messages]
232-
.slice(0, messageIndex)
233-
.reverse()
234-
.find(msg => msg.role === 'user');
235-
236-
if (!previousUserMessage || !currentSessionId) {
237-
console.error('Cannot regenerate: missing user message or session ID');
238-
setError('Cannot regenerate message: missing context or session ID.');
239-
return;
240-
}
241-
242-
setLoading(true);
243-
setError(null);
244-
245-
const thinkingMessage: Message = {
246-
message_id: messageId,
247-
content: '',
248-
role: 'assistant',
249-
timestamp: new Date(),
250-
isThinking: true,
251-
model: currentEndpoint
252-
};
253-
254-
setMessages(prev => {
255-
const updatedMessages = [...prev];
256-
updatedMessages[messageIndex] = thinkingMessage;
257-
return updatedMessages;
258-
});
259-
260-
try {
261-
let messageSources: any[] | null = null;
262-
let messageMetrics: {
263-
timeToFirstToken?: number;
264-
totalTime?: number;
265-
} | null = null;
266-
let accumulatedContent = '';
267-
268-
await apiRegenerateMessage(
269-
previousUserMessage.content,
270-
currentSessionId,
271-
messageId,
272-
includeHistory,
273-
currentEndpoint,
274-
(chunk) => {
275-
if (chunk.content) {
276-
accumulatedContent = chunk.content;
277-
setMessages(prev => {
278-
const updatedMessages = [...prev];
279-
const currentMessage = updatedMessages[messageIndex];
280-
updatedMessages[messageIndex] = {
281-
...currentMessage,
282-
message_id: messageId,
283-
content: accumulatedContent,
284-
sources: chunk.sources || messageSources,
285-
metrics: chunk.metrics || messageMetrics,
286-
isThinking: false,
287-
model: currentEndpoint
288-
};
289-
return updatedMessages;
290-
});
291-
}
292-
if (chunk.sources) {
293-
messageSources = chunk.sources;
294-
}
295-
if (chunk.metrics) {
296-
messageMetrics = chunk.metrics;
297-
}
298-
}
299-
);
300-
301-
const finalMessage: Message = {
302-
message_id: messageId,
303-
content: accumulatedContent,
304-
role: 'assistant',
305-
timestamp: new Date(),
306-
isThinking: false,
307-
model: currentEndpoint,
308-
sources: messageSources,
309-
metrics: messageMetrics
310-
};
311-
312-
setMessages(prev => prev.map(msg =>
313-
msg.message_id === messageId ? finalMessage : msg
314-
));
315-
316-
} catch (error) {
317-
console.error('Error regenerating message:', error);
318-
setError('Failed to regenerate message. Please try again.');
319-
320-
const errorMessage: Message = {
321-
message_id: messageId,
322-
content: error instanceof Error && error.message === 'HTTP error! status: 429'
323-
? 'The service is currently experiencing high demand. Please wait a moment and try again.'
324-
: 'Sorry, I encountered an error while regenerating the message. Please try again.',
325-
role: 'assistant',
326-
timestamp: new Date(),
327-
model: currentEndpoint,
328-
isThinking: false,
329-
metrics: null
330-
};
331-
332-
setMessages(prev => {
333-
const updatedMessages = [...prev];
334-
const messageIndex = updatedMessages.findIndex(msg => msg.message_id === messageId);
335-
if (messageIndex !== -1) {
336-
updatedMessages[messageIndex] = errorMessage;
337-
}
338-
return updatedMessages;
339-
});
340-
console.log('error message:', errorMessage);
341-
} finally {
342-
try {
343-
const historyResponse = await fetch(`${API_URL}/chats`);
344-
const historyData = await historyResponse.json();
345-
setChats(historyData.sessions || []);
346-
} catch (error) {
347-
console.error('Error fetching chat history:', error);
348-
setError('Failed to update chat history.');
349-
}
350-
setLoading(false);
351-
}
352-
};
353-
354219
const logout = () => {
355220
// Clear local state
356221
setCurrentChat(null);
@@ -379,7 +244,6 @@ export const ChatProvider = ({ children }: { children: ReactNode }) => {
379244
toggleSidebar,
380245
startNewSession,
381246
copyMessage,
382-
regenerateMessage,
383247
logout,
384248
error,
385249
clearError,

0 commit comments

Comments
 (0)