File upload polling for ingestion status
This commit is contained in:
parent
6b2e1a3587
commit
37cf89c2b5
1 changed files with 27 additions and 1 deletions
|
|
@ -1,5 +1,5 @@
|
|||
<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 {
|
||||
Card,
|
||||
|
|
@ -275,6 +275,7 @@ const retryIngestion = async (uuid: string) => {
|
|||
const idx = trainingFiles.value.findIndex((f) => f.uuid === uuid)
|
||||
if (idx !== -1) trainingFiles.value[idx] = response.data
|
||||
message.success('Ingestion re-queued')
|
||||
schedulePoll()
|
||||
} catch (error) {
|
||||
console.error('Failed to retry ingestion:', error)
|
||||
message.error('Failed to retry ingestion')
|
||||
|
|
@ -461,6 +462,7 @@ const uploadFileFromWizard = async () => {
|
|||
|
||||
trainingFiles.value.unshift(uploaded)
|
||||
wizardUploadedFiles.value.unshift(uploaded)
|
||||
schedulePoll()
|
||||
message.success(`File "${wizardSelectedFile.value.name}" uploaded successfully`)
|
||||
wizardSelectedFile.value = null
|
||||
wizardFileDescription.value = ''
|
||||
|
|
@ -503,6 +505,7 @@ const handleUploadModalOk = async () => {
|
|||
if (!uploaded) return
|
||||
|
||||
trainingFiles.value.unshift(uploaded)
|
||||
schedulePoll()
|
||||
message.success(`File "${uploadSelectedFile.value.name}" uploaded successfully`)
|
||||
uploadModalVisible.value = false
|
||||
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 () => {
|
||||
await fetchOrganization()
|
||||
await fetchMembers()
|
||||
await fetchInvites()
|
||||
await fetchRoles()
|
||||
await fetchTrainingFiles()
|
||||
schedulePoll()
|
||||
|
||||
const currentUserUuid = auth.user?.uuid
|
||||
const isOwner = organization.value?.owner?.uuid === currentUserUuid
|
||||
|
|
@ -664,6 +686,10 @@ onMounted(async () => {
|
|||
router.replace(`/organization/${organizationUuid}`)
|
||||
}
|
||||
})
|
||||
|
||||
onUnmounted(() => {
|
||||
stopPoll()
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
|
|
|
|||
Loading…
Reference in a new issue