Skip to content

Commit 63860ef

Browse files
committed
fix thumbs feedback
1 parent 2f5495d commit 63860ef

File tree

8 files changed

+68
-57
lines changed

8 files changed

+68
-57
lines changed

dist/components/Bot.d.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,6 @@ export type MessageResponseVersion = {
7272
artifacts?: Partial<FileUpload>[];
7373
thinking?: string;
7474
thinkingDuration?: number;
75-
isThinking?: boolean;
7675
rating?: FeedbackRatingType;
7776
dateTime?: string;
7877
};

dist/components/Bot.d.ts.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/components/bubbles/BotBubble.d.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { FeedbackRatingType } from '@/queries/sendMessageQuery';
12
import { IAction, MessageType } from '../Bot';
23
import { DateTimeToggleTheme } from '@/features/bubble/types';
34
type Props = {
@@ -23,6 +24,7 @@ type Props = {
2324
handleSourceDocumentsClick: (src: any) => void;
2425
onRegenerateResponse?: () => void;
2526
showRegenerateResponseButton?: boolean;
27+
onRatingUpdate?: (messageId: string, rating: FeedbackRatingType) => void;
2628
isTTSEnabled?: boolean;
2729
isTTSLoading?: Record<string, boolean>;
2830
isTTSPlaying?: Record<string, boolean>;

dist/components/bubbles/BotBubble.d.ts.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/web.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/web.umd.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/components/Bot.tsx

Lines changed: 35 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,6 @@ export type MessageResponseVersion = {
129129
artifacts?: Partial<FileUpload>[];
130130
thinking?: string;
131131
thinkingDuration?: number;
132-
isThinking?: boolean;
133132
rating?: FeedbackRatingType;
134133
dateTime?: string;
135134
};
@@ -516,7 +515,7 @@ export const Bot = (botProps: BotProps & { class?: string }) => {
516515
const [isMessageStopping, setIsMessageStopping] = createSignal(false);
517516
const [starterPrompts, setStarterPrompts] = createSignal<string[]>([], { equals: false });
518517
const [chatFeedbackStatus, setChatFeedbackStatus] = createSignal<boolean>(false);
519-
const [chatFeedbackRegenerateResponseStatus, setChatFeedbackRegenerateResponseStatus] = createSignal<boolean>(false);
518+
const [messageRatings, setMessageRatings] = createSignal<Record<string, FeedbackRatingType>>({});
520519
const [fullFileUpload, setFullFileUpload] = createSignal<boolean>(false);
521520
const [uploadsConfig, setUploadsConfig] = createSignal<UploadsConfig>();
522521
const [leadsConfig, setLeadsConfig] = createSignal<LeadsConfig>();
@@ -915,21 +914,10 @@ export const Bot = (botProps: BotProps & { class?: string }) => {
915914
artifacts: message.artifacts,
916915
thinking: message.thinking,
917916
thinkingDuration: message.thinkingDuration,
918-
isThinking: message.isThinking,
919917
rating: message.rating,
920918
dateTime: message.dateTime,
921919
});
922920

923-
const parseConfigBoolean = (value: unknown, defaultValue: boolean) => {
924-
if (typeof value === 'boolean') return value;
925-
if (typeof value === 'string') {
926-
const normalized = value.trim().toLowerCase();
927-
if (normalized === 'true') return true;
928-
if (normalized === 'false') return false;
929-
}
930-
return defaultValue;
931-
};
932-
933921
const getLastApiMessageIndex = () => {
934922
const currentMessages = messages();
935923
for (let i = currentMessages.length - 1; i >= 0; i--) {
@@ -939,30 +927,44 @@ export const Bot = (botProps: BotProps & { class?: string }) => {
939927
};
940928

941929
const canRegenerateResponse = (messageIndex: number) => {
942-
if (!chatFeedbackStatus() || !chatFeedbackRegenerateResponseStatus() || loading()) return false;
930+
if (!chatFeedbackStatus() || loading()) return false;
943931
if (messageIndex !== getLastApiMessageIndex()) return false;
944932
const previousMessage = messages()[messageIndex - 1];
945933
if (!previousMessage || previousMessage.type !== 'userMessage') return false;
946934
if (previousMessage.fileUploads?.length) return false;
947935
return true;
948936
};
949937

938+
const handleRatingUpdate = (messageId: string, rating: FeedbackRatingType) => {
939+
setMessageRatings((prev) => ({ ...prev, [messageId]: rating }));
940+
};
941+
950942
const handleRegenerateResponse = async (messageIndex: number) => {
951943
if (loading()) return;
952944
if (previews().length) return;
953945
if (startInputType() === 'formInput') return;
954946

955947
const currentMessages = messages();
956948
const targetMessage = currentMessages[messageIndex];
957-
if (!targetMessage || targetMessage.type !== 'apiMessage') return;
958-
959949
const previousMessage = currentMessages[messageIndex - 1];
960-
if (!previousMessage || previousMessage.type !== 'userMessage' || previousMessage.fileUploads?.length) return;
961950

962-
const existingResponseVersions =
963-
targetMessage.responseVersions && targetMessage.responseVersions.length > 0
964-
? [...targetMessage.responseVersions]
965-
: [createResponseVersion(targetMessage)];
951+
const ratings = messageRatings();
952+
const withRating = (v: MessageResponseVersion): MessageResponseVersion =>
953+
v.messageId && ratings[v.messageId] ? { ...v, rating: ratings[v.messageId] } : v;
954+
955+
const existingResponseVersions = (() => {
956+
if (targetMessage.responseVersions && targetMessage.responseVersions.length > 0) {
957+
const versions = [...targetMessage.responseVersions].map(withRating);
958+
// The latest slot may have message:'' if it was loaded from localStorage before
959+
// the end-event persist ran. Overwrite it with the actual content on the top-level message.
960+
const last = versions.length - 1;
961+
if (!versions[last].message) {
962+
versions[last] = withRating(createResponseVersion(targetMessage));
963+
}
964+
return versions;
965+
}
966+
return [withRating(createResponseVersion(targetMessage))];
967+
})();
966968

967969
setFollowUpPrompts([]);
968970
const updatedMessages = currentMessages.slice(0, messageIndex);
@@ -1109,6 +1111,17 @@ export const Bot = (botProps: BotProps & { class?: string }) => {
11091111
break;
11101112
case 'end':
11111113
finalizeThinking();
1114+
if (options?.responseVersions && options.responseVersions.length > 0) {
1115+
setMessages((prevMessages) => {
1116+
const lastMsg = prevMessages[prevMessages.length - 1];
1117+
if (lastMsg.type === 'userMessage' || !lastMsg.responseVersions?.length) return prevMessages;
1118+
const versions = [...lastMsg.responseVersions];
1119+
versions[versions.length - 1] = createResponseVersion(lastMsg);
1120+
const updatedMessages = [...prevMessages.slice(0, -1), { ...lastMsg, responseVersions: versions }];
1121+
addChatMessage(updatedMessages);
1122+
return updatedMessages;
1123+
});
1124+
}
11121125
setLocalStorageChatflow(chatflowid, chatId);
11131126
closeResponse();
11141127
break;
@@ -2734,6 +2747,7 @@ export const Bot = (botProps: BotProps & { class?: string }) => {
27342747
chatFeedbackStatus={chatFeedbackStatus()}
27352748
onRegenerateResponse={() => handleRegenerateResponse(index())}
27362749
showRegenerateResponseButton={canRegenerateResponse(index())}
2750+
onRatingUpdate={handleRatingUpdate}
27372751
fontSize={props.fontSize}
27382752
isLoading={loading() && index() === messages().length - 1}
27392753
showAgentMessages={props.showAgentMessages}

0 commit comments

Comments
 (0)