add ai job queue

This commit is contained in:
Garret Patti
2026-04-13 12:29:09 -04:00
parent 8557c80c52
commit fea55594d0
18 changed files with 818 additions and 167 deletions

View File

@@ -196,6 +196,11 @@ export default function DoomScrollView({ items, videoContext = 'mixed', onClose,
const data = await res.json().catch(() => ({}))
throw new Error((data as { error?: string }).error ?? 'Extraction failed')
}
if (res.status === 202) {
setExtractError('Queued — check AI Integrations for progress')
setTimeout(() => setExtractError(null), 4000)
return
}
const result = await res.json()
setExtractedText(result.extractedText || null)
setTranslatedText(result.translatedText || null)

View File

@@ -8,7 +8,7 @@ const TABS = [
{ href: '/manage/tags', label: 'Tags' },
{ href: '/manage/users', label: 'Users' },
{ href: '/manage/scanning', label: 'Scanning' },
{ href: '/manage/ai-tagging', label: 'AI Tagging' },
{ href: '/manage/ai-tagging', label: 'AI Integrations' },
]
export default function ManageSubNav() {

View File

@@ -269,6 +269,11 @@ export default function ImageLightbox({ url, name, onClose, onPrev, onNext, item
const data = await res.json().catch(() => ({}))
throw new Error((data as { error?: string }).error ?? 'Failed to extract text')
}
if (res.status === 202) {
setExtractError('Queued — check AI Integrations for progress')
setTimeout(() => setExtractError(null), 4000)
return
}
const result = await res.json()
setExtractedText(result.extractedText || null)
setEditedExtractedText(result.extractedText || '')
@@ -385,8 +390,10 @@ export default function ImageLightbox({ url, name, onClose, onPrev, onNext, item
const data = await res.json().catch(() => ({}))
throw new Error((data as { error?: string }).error ?? 'Failed to translate')
}
const result = await res.json()
setTranslatedText(result.translatedText || null)
if (res.status !== 202) {
const result = await res.json()
setTranslatedText(result.translatedText || null)
}
} catch {
// ignore
} finally {

View File

@@ -192,6 +192,11 @@ export default function TagSelector({ itemKey, onTagsChanged, refreshKey }: Prop
const data = await res.json().catch(() => ({}))
throw new Error((data as { error?: string }).error ?? 'Failed to generate description')
}
if (res.status === 202) {
setDescError('Queued — check AI Integrations for progress')
setTimeout(() => setDescError(null), 4000)
return
}
const { description } = await res.json()
setAiDescription(description)
} catch (err) {