File upload polling for ingestion status

This commit is contained in:
Viswamedha Nalabotu 2026-03-22 16:10:22 +00:00
parent 6b2e1a3587
commit 37cf89c2b5

View file

@ -1,5 +1,5 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, onMounted, computed, h } from 'vue' import { ref, onMounted, onUnmounted, computed, h } from 'vue'
import { useRoute, useRouter } from 'vue-router' import { useRoute, useRouter } from 'vue-router'
import { import {
Card, Card,
@ -275,6 +275,7 @@ const retryIngestion = async (uuid: string) => {
const idx = trainingFiles.value.findIndex((f) => f.uuid === uuid) const idx = trainingFiles.value.findIndex((f) => f.uuid === uuid)
if (idx !== -1) trainingFiles.value[idx] = response.data if (idx !== -1) trainingFiles.value[idx] = response.data
message.success('Ingestion re-queued') message.success('Ingestion re-queued')
schedulePoll()
} catch (error) { } catch (error) {
console.error('Failed to retry ingestion:', error) console.error('Failed to retry ingestion:', error)
message.error('Failed to retry ingestion') message.error('Failed to retry ingestion')
@ -461,6 +462,7 @@ const uploadFileFromWizard = async () => {
trainingFiles.value.unshift(uploaded) trainingFiles.value.unshift(uploaded)
wizardUploadedFiles.value.unshift(uploaded) wizardUploadedFiles.value.unshift(uploaded)
schedulePoll()
message.success(`File "${wizardSelectedFile.value.name}" uploaded successfully`) message.success(`File "${wizardSelectedFile.value.name}" uploaded successfully`)
wizardSelectedFile.value = null wizardSelectedFile.value = null
wizardFileDescription.value = '' wizardFileDescription.value = ''
@ -503,6 +505,7 @@ const handleUploadModalOk = async () => {
if (!uploaded) return if (!uploaded) return
trainingFiles.value.unshift(uploaded) trainingFiles.value.unshift(uploaded)
schedulePoll()
message.success(`File "${uploadSelectedFile.value.name}" uploaded successfully`) message.success(`File "${uploadSelectedFile.value.name}" uploaded successfully`)
uploadModalVisible.value = false uploadModalVisible.value = false
uploadSelectedFile.value = null uploadSelectedFile.value = null
@ -647,12 +650,31 @@ const saveDescription = async () => {
} }
} }
let pollTimer: ReturnType<typeof setTimeout> | null = null
const schedulePoll = () => {
const hasIngesting = trainingFiles.value.some((f) => f.status === 'ingesting')
if (!hasIngesting) return
pollTimer = setTimeout(async () => {
await fetchTrainingFiles()
schedulePoll()
}, 5000)
}
const stopPoll = () => {
if (pollTimer !== null) {
clearTimeout(pollTimer)
pollTimer = null
}
}
onMounted(async () => { onMounted(async () => {
await fetchOrganization() await fetchOrganization()
await fetchMembers() await fetchMembers()
await fetchInvites() await fetchInvites()
await fetchRoles() await fetchRoles()
await fetchTrainingFiles() await fetchTrainingFiles()
schedulePoll()
const currentUserUuid = auth.user?.uuid const currentUserUuid = auth.user?.uuid
const isOwner = organization.value?.owner?.uuid === currentUserUuid const isOwner = organization.value?.owner?.uuid === currentUserUuid
@ -664,6 +686,10 @@ onMounted(async () => {
router.replace(`/organization/${organizationUuid}`) router.replace(`/organization/${organizationUuid}`)
} }
}) })
onUnmounted(() => {
stopPoll()
})
</script> </script>
<template> <template>