| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 | import { useState } from 'react'import { useTranslation } from 'react-i18next'import { useToastContext } from '@/app/components/base/toast'import { ssePost } from '@/service/base'export const useTextGeneration = () => {  const { t } = useTranslation()  const { notify } = useToastContext()  const [isResponding, setIsResponding] = useState(false)  const [completion, setCompletion] = useState('')  const [messageId, setMessageId] = useState<string | null>(null)  const handleSend = async (    url: string,    data: any,  ) => {    if (isResponding) {      notify({ type: 'info', message: t('appDebug.errorMessage.waitForResponse') })      return false    }    setIsResponding(true)    setCompletion('')    setMessageId('')    let res: string[] = []    ssePost(      url,      {        body: {          response_mode: 'streaming',          ...data,        },      },      {        onData: (data: string, _isFirstMessage: boolean, { messageId }) => {          res.push(data)          setCompletion(res.join(''))          setMessageId(messageId)        },        onMessageReplace: (messageReplace) => {          res = [messageReplace.answer]          setCompletion(res.join(''))        },        onCompleted() {          setIsResponding(false)        },        onError() {          setIsResponding(false)        },      })    return true  }  return {    completion,    isResponding,    setIsResponding,    handleSend,    messageId,  }}
 |