balibabu
feat: Search for the answers you want based on the selected knowledge base #2247 (#2287)
d4bff6a
import { useTestChunkRetrieval } from '@/hooks/knowledge-hooks'; | |
import { useSendMessageWithSse } from '@/hooks/logic-hooks'; | |
import { IAnswer } from '@/interfaces/database/chat'; | |
import api from '@/utils/api'; | |
import { isEmpty } from 'lodash'; | |
import { useCallback, useEffect, useState } from 'react'; | |
export const useSendQuestion = (kbIds: string[]) => { | |
const { send, answer, done } = useSendMessageWithSse(api.ask); | |
const { testChunk, loading } = useTestChunkRetrieval(); | |
const [sendingLoading, setSendingLoading] = useState(false); | |
const [currentAnswer, setCurrentAnswer] = useState({} as IAnswer); | |
const sendQuestion = useCallback( | |
(question: string) => { | |
setCurrentAnswer({} as IAnswer); | |
setSendingLoading(true); | |
send({ kb_ids: kbIds, question }); | |
testChunk({ kb_id: kbIds, highlight: true, question }); | |
}, | |
[send, testChunk, kbIds], | |
); | |
useEffect(() => { | |
if (!isEmpty(answer)) { | |
setCurrentAnswer(answer); | |
} | |
}, [answer]); | |
useEffect(() => { | |
if (done) { | |
setSendingLoading(false); | |
} | |
}, [done]); | |
return { sendQuestion, loading, sendingLoading, answer: currentAnswer }; | |
}; | |