@@ -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