function MainComponent() { const [messages, setMessages] = useState([]); const [inputMessage, setInputMessage] = useState(""); const [loading, setLoading] = useState(false); const [streamingMessage, setStreamingMessage] = useState(""); const messagesEndRef = useRef(null); const scrollToBottom = () => { messagesEndRef.current?.scrollIntoView({ behavior: "smooth" }); }; useEffect(() => { scrollToBottom(); }, [messages, streamingMessage]); const handleStreamResponse = useHandleStreamResponse({ onChunk: setStreamingMessage, onFinish: (message) => { setMessages((prev) => [...prev, { role: "assistant", content: message }]); setStreamingMessage(""); }, }); const handleSubmit = async () => { if (!inputMessage.trim() || loading) return; const userMessage = { role: "user", content: inputMessage }; setMessages((prev) => [...prev, userMessage]); setInputMessage(""); setLoading(true); try { const response = await fetch("/integrations/chat-gpt/conversationgpt4", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ messages: [...messages, userMessage], stream: true, }), }); if (!response.ok) { throw new Error(`Response failed with status ${response.status}`); } handleStreamResponse(response); } catch (error) { console.error(error); setMessages((prev) => [ ...prev, { role: "assistant", content: "Sorry, something went wrong. Please try again.", }, ]); } finally { setLoading(false); } }; const handleKeyPress = (e) => { if (e.key === "Enter" && !e.shiftKey) { e.preventDefault(); handleSubmit(); } };