1- import { useState } from 'react'
1+ import { useEffect , useRef , useState } from 'react'
22
33import {
44 ChatCompletionMessage ,
@@ -11,6 +11,7 @@ import {
1111 Thread ,
1212 ThreadMessage ,
1313 events ,
14+ Model ,
1415} from '@janhq/core'
1516import { ConversationalExtension } from '@janhq/core'
1617import { useAtom , useAtomValue , useSetAtom } from 'jotai'
@@ -48,6 +49,11 @@ export default function useSendChatMessage() {
4849 const { startModel } = useActiveModel ( )
4950 const [ queuedMessage , setQueuedMessage ] = useState ( false )
5051
52+ const modelRef = useRef < Model | undefined > ( )
53+ useEffect ( ( ) => {
54+ modelRef . current = activeModel
55+ } , [ activeModel ] )
56+
5157 const resendChatMessage = async ( ) => {
5258 if ( ! activeThread ) {
5359 console . error ( 'No active thread' )
@@ -78,19 +84,35 @@ export default function useSendChatMessage() {
7884 id : ulid ( ) ,
7985 messages : messages ,
8086 threadId : activeThread . id ,
81- model : activeThread . assistants [ 0 ] . model ?? selectedModel ,
87+ model : activeThread . assistants [ 0 ] . model ?? selectedModel ,
8288 }
8389
8490 const modelId = selectedModel ?. id ?? activeThread . assistants [ 0 ] . model . id
8591
8692 if ( activeModel ?. id !== modelId ) {
8793 setQueuedMessage ( true )
88- await startModel ( modelId )
94+ startModel ( modelId )
95+ await WaitForModelStarting ( modelId )
8996 setQueuedMessage ( false )
9097 }
9198 events . emit ( EventName . OnMessageSent , messageRequest )
9299 }
93100
101+ // TODO: Refactor @louis
102+ const WaitForModelStarting = async ( modelId : string ) => {
103+ return new Promise < void > ( ( resolve ) => {
104+ setTimeout ( async ( ) => {
105+ if ( modelRef . current ?. id !== modelId ) {
106+ console . log ( 'waiting for model to start' )
107+ await WaitForModelStarting ( modelId )
108+ resolve ( )
109+ } else {
110+ resolve ( )
111+ }
112+ } , 200 )
113+ } )
114+ }
115+
94116 const sendChatMessage = async ( ) => {
95117 if ( ! currentPrompt || currentPrompt . trim ( ) . length === 0 ) {
96118 return
@@ -167,8 +189,10 @@ export default function useSendChatMessage() {
167189 id : msgId ,
168190 threadId : activeThread . id ,
169191 messages,
170- parameters : activeThread . assistants [ 0 ] . model . parameters ,
171- model : selectedModel ?? activeThread . assistants [ 0 ] . model ,
192+ parameters :
193+ selectedModel ?. parameters ??
194+ activeThread . assistants [ 0 ] . model . parameters ,
195+ model : selectedModel ?? activeThread . assistants [ 0 ] . model ,
172196 }
173197 const timestamp = Date . now ( )
174198 const threadMessage : ThreadMessage = {
@@ -200,9 +224,11 @@ export default function useSendChatMessage() {
200224
201225 if ( activeModel ?. id !== modelId ) {
202226 setQueuedMessage ( true )
203- await startModel ( modelId )
227+ startModel ( modelId )
228+ await WaitForModelStarting ( modelId )
204229 setQueuedMessage ( false )
205230 }
231+ console . log ( 'messageRequest' , messageRequest )
206232 events . emit ( EventName . OnMessageSent , messageRequest )
207233 }
208234
0 commit comments