Use chatCompletionStream() to receive responses token-by-token. This requires providing a callback object with onToken, onDone, and onError handlers.
Important: When managing a local chat history array, do not include the empty placeholder assistant message in the payload sent to the server; slice it out before calling the method.
const { chatCompletionStream } = useChatgpt()
const chatTree = ref([])
const inputData = ref('')
async function sendStreamedMessage() {
try {
const message = { role: 'user', content: inputData.value }
chatTree.value.push(message)
const assistantMessage = { role: 'assistant', content: '' }
chatTree.value.push(assistantMessage)
// Slice to remove the placeholder assistant message from the payload
const payloadMessages = chatTree.value.slice(0, -1)
await chatCompletionStream(payloadMessages, undefined, undefined, {
onToken(token) {
assistantMessage.content += token
},
onDone() {
// streaming finished
},
onError(err) {
alert(`Stream error: ${typeof err === 'string' ? err : err?.message || 'Unknown'}`)
}
})
} catch(error) {
alert(`Error: ${error}`)
}
}