mirror of
https://github.com/langgenius/dify.git
synced 2026-03-28 01:29:55 +08:00
52 lines
1.3 KiB
TypeScript
52 lines
1.3 KiB
TypeScript
import { useState } from 'react'
|
|
import { useTranslation } from 'react-i18next'
|
|
import { toast } from '@/app/components/base/ui/toast'
|
|
import { ssePost } from '@/service/base'
|
|
|
|
export const useTextGeneration = () => {
|
|
const { t } = useTranslation()
|
|
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) {
|
|
toast.info(t('errorMessage.waitForResponse', { ns: 'appDebug' }))
|
|
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,
|
|
}
|
|
}
|