| import { useState } from 'react' |
| import axios from 'axios' |
|
|
| const useChat = () => { |
| const [messages, setMessages] = useState([]) |
| const [features, setFeatures] = useState({}) |
| const [sessionId, setSessionId] = useState(null) |
| const [loading, setLoading] = useState(false) |
| const [prediction, setPrediction] = useState(null) |
|
|
| const sendMessage = async (text) => { |
| if (!text.trim()) return |
|
|
| |
| setMessages(prev => [...prev, { role: 'user', content: text }]) |
| setLoading(true) |
|
|
| try { |
| |
| const res = await axios.post('/api/chat', { |
| session_id: sessionId, |
| message: text, |
| history: messages, |
| }) |
|
|
| |
| setSessionId(res.data.session_id) |
| setFeatures(res.data.features) |
| setMessages(prev => [...prev, { role: 'assistant', content: res.data.message }]) |
|
|
| |
| if (res.data.is_complete && res.data.prediction) { |
| setPrediction(res.data.prediction) |
| } |
|
|
| return res.data |
| } catch (error) { |
| console.error('Error sending message:', error) |
| setMessages(prev => [...prev, { |
| role: 'assistant', |
| content: '❌ Error: Could not process your message. Please try again.' |
| }]) |
| } finally { |
| setLoading(false) |
| } |
| } |
|
|
| const resetChat = async () => { |
| if (!sessionId) { |
| |
| setMessages([]) |
| setFeatures({}) |
| setPrediction(null) |
| return |
| } |
|
|
| try { |
| await axios.post('/api/reset', { session_id: sessionId }) |
| setMessages([]) |
| setFeatures({}) |
| setSessionId(null) |
| setPrediction(null) |
| } catch (error) { |
| console.error('Error resetting session:', error) |
| |
| setMessages([]) |
| setFeatures({}) |
| setSessionId(null) |
| setPrediction(null) |
| } |
| } |
|
|
| return { |
| messages, |
| features, |
| loading, |
| sessionId, |
| prediction, |
| sendMessage, |
| resetChat, |
| } |
| } |
|
|
| export default useChat |
|
|