fix: harden live assistant interactions
This commit is contained in:
@@ -20,6 +20,13 @@ interface UseGeoAssistantOptions {
|
||||
selectionBbox: VectorSelectionBBox | null
|
||||
}
|
||||
|
||||
let assistantMessageSequence = 0
|
||||
|
||||
function nextAssistantMessageId(role: AssistantChatMessage['role']): string {
|
||||
assistantMessageSequence += 1
|
||||
return `${role}-${Date.now()}-${assistantMessageSequence}`
|
||||
}
|
||||
|
||||
export function useGeoAssistant({ selectedProjectId, selectedAreaId, selectionBbox }: UseGeoAssistantOptions) {
|
||||
const [status, setStatus] = useState<AssistantStatus | null>(null)
|
||||
const [models, setModels] = useState<AssistantModelRead[]>([])
|
||||
@@ -68,7 +75,7 @@ export function useGeoAssistant({ selectedProjectId, selectedAreaId, selectionBb
|
||||
const ask = async (question: string): Promise<boolean> => {
|
||||
const trimmed = question.trim()
|
||||
if (!selectedProjectId || !trimmed || !selectedModel) return false
|
||||
const userMessage: GeoAssistantMessage = { id: crypto.randomUUID(), role: 'user', content: trimmed }
|
||||
const userMessage: GeoAssistantMessage = { id: nextAssistantMessageId('user'), role: 'user', content: trimmed }
|
||||
setMessages((current) => [...current, userMessage])
|
||||
setLoading(true)
|
||||
setError(null)
|
||||
@@ -83,7 +90,7 @@ export function useGeoAssistant({ selectedProjectId, selectedAreaId, selectionBb
|
||||
})
|
||||
setMessages((current) => [
|
||||
...current,
|
||||
{ id: crypto.randomUUID(), role: 'assistant', content: result.answer, response: result },
|
||||
{ id: nextAssistantMessageId('assistant'), role: 'assistant', content: result.answer, response: result },
|
||||
])
|
||||
return true
|
||||
} catch (requestError) {
|
||||
|
||||
Reference in New Issue
Block a user