Skip to content

Commit c282df3

Browse files
authored
bugfix: socket message (#995)
1 parent 99aa775 commit c282df3

1 file changed

Lines changed: 51 additions & 51 deletions

File tree

frontend/src/pages/bots/$botId/chats/$chatId.tsx

Lines changed: 51 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,58 @@ export default () => {
2121
const protocol = window.location.protocol === 'http:' ? 'ws://' : 'wss://';
2222
const host = window.location.host;
2323

24-
const { latestMessage, sendMessage, readyState } = useWebSocket(
24+
const { sendMessage, readyState } = useWebSocket(
2525
`${protocol}${host}/api/v1/bots/${botId}/chats/${chatId}/connect`,
26+
{
27+
onMessage: (message) => {
28+
const fragment = JSON.parse(message.data) as ChatMessage;
29+
30+
if (fragment.type === 'start') {
31+
setMessages((msgs) =>
32+
msgs.concat({
33+
...fragment,
34+
role: 'ai',
35+
}),
36+
);
37+
setLoading(true);
38+
}
39+
40+
if (fragment.type === 'message') {
41+
setMessages((msgs) => {
42+
const last = msgs.findLast((m) => m.id === fragment.id);
43+
if (last) {
44+
last.data = (last.data || '') + (fragment.data || '');
45+
}
46+
return [...msgs];
47+
});
48+
}
49+
50+
if (fragment.type === 'stop') {
51+
const references = fragment.data as unknown as Reference[];
52+
if (references) {
53+
setMessages((msgs) => {
54+
const last = msgs.findLast((m) => m.id === fragment.id);
55+
if (last) {
56+
last.references = references;
57+
}
58+
return [...msgs];
59+
});
60+
}
61+
setLoading(false);
62+
}
63+
64+
if (fragment.type === 'error') {
65+
setMessages((msgs) => {
66+
const last = msgs.findLast((m) => m.id === fragment.id);
67+
if (last) {
68+
last.data = fragment.data;
69+
}
70+
return [...msgs];
71+
});
72+
setLoading(false);
73+
}
74+
}
75+
},
2676
);
2777

2878
const onSubmit = useCallback(async (data: string) => {
@@ -57,56 +107,6 @@ export default () => {
57107
}
58108
};
59109

60-
useEffect(() => {
61-
if (!latestMessage) return;
62-
const fragment = JSON.parse(latestMessage?.data) as ChatMessage;
63-
64-
if (fragment.type === 'start') {
65-
setMessages((msgs) =>
66-
msgs.concat({
67-
...fragment,
68-
role: 'ai',
69-
}),
70-
);
71-
setLoading(true);
72-
}
73-
74-
if (fragment.type === 'message') {
75-
setMessages((msgs) => {
76-
const last = msgs.findLast((m) => m.id === fragment.id);
77-
if (last) {
78-
last.data = (last.data || '') + (fragment.data || '');
79-
}
80-
return [...msgs];
81-
});
82-
}
83-
84-
if (fragment.type === 'stop') {
85-
const references = fragment.data as unknown as Reference[];
86-
if (references) {
87-
setMessages((msgs) => {
88-
const last = msgs.findLast((m) => m.id === fragment.id);
89-
if (last) {
90-
last.references = references;
91-
}
92-
return [...msgs];
93-
});
94-
}
95-
setLoading(false);
96-
}
97-
98-
if (fragment.type === 'error') {
99-
setMessages((msgs) => {
100-
const last = msgs.findLast((m) => m.id === fragment.id);
101-
if (last) {
102-
last.data = fragment.data;
103-
}
104-
return [...msgs];
105-
});
106-
setLoading(false);
107-
}
108-
}, [latestMessage]);
109-
110110
useEffect(() => {
111111
if (chatId && botId) getChat(botId, chatId);
112112
return () => {

0 commit comments

Comments
 (0)