import { useState, useCallback } from 'react';
function useStreamingChat() {
const [content, setContent] = useState('');
const [isStreaming, setIsStreaming] = useState(false);
const sendMessage = useCallback(async (message) => {
setIsStreaming(true);
setContent('');
const response = await fetch('https://api.edenai.run/v3/llm/chat/completions', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
model: 'openai/gpt-4',
messages: [{role: 'user', content: message}],
stream: true
})
});
const reader = response.body.getReader();
const decoder = new TextDecoder();
let buffer = '';
while (true) {
const {done, value} = await reader.read();
if (done) break;
buffer += decoder.decode(value, {stream: true});
const lines = buffer.split('\n');
buffer = lines.pop();
for (const line of lines) {
if (line.startsWith('data: ')) {
const data = line.slice(6);
if (data === '[DONE]') break;
try {
const chunk = JSON.parse(data);
const newContent = chunk.choices[0]?.delta?.content;
if (newContent) {
setContent(prev => prev + newContent);
}
} catch (e) {}
}
}
}
setIsStreaming(false);
}, []);
return { content, isStreaming, sendMessage };
}