MediHelp / frontend /src /hooks /useChat.js
zunayed02's picture
Deploy Medical Diagnosis AI - Full Stack Application
5feba25
Raw
History Blame Contribute Delete
2.1 kB
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
// Add user message immediately
setMessages(prev => [...prev, { role: 'user', content: text }])
setLoading(true)
try {
// Call POST /api/chat
const res = await axios.post('/api/chat', {
session_id: sessionId,
message: text,
history: messages,
})
// Update state from response
setSessionId(res.data.session_id)
setFeatures(res.data.features)
setMessages(prev => [...prev, { role: 'assistant', content: res.data.message }])
// Store prediction if complete
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) {
// Reset UI without API call if no session yet
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)
// Still reset UI even if API call fails
setMessages([])
setFeatures({})
setSessionId(null)
setPrediction(null)
}
}
return {
messages,
features,
loading,
sessionId,
prediction,
sendMessage,
resetChat,
}
}
export default useChat