'use client' import { useState } from 'react' import { useRouter } from 'next/navigation' export default function IngestModelsButton() { const router = useRouter() const [isIngesting, setIsIngesting] = useState(false) const [status, setStatus] = useState(null) const [results, setResults] = useState(null) const handleIngest = async () => { setIsIngesting(true) setStatus('Starting model ingestion... This may take several minutes.') setResults(null) try { // Use a longer timeout for the fetch request const controller = new AbortController() const timeoutId = setTimeout(() => controller.abort(), 600000) // 10 minutes // Try direct ingestion first (no Python required) let response = await fetch('/api/models/ingest-direct', { method: 'POST', signal: controller.signal, }) // If direct ingestion fails, try Python pipeline if (!response.ok) { response = await fetch('/api/models/ingest', { method: 'POST', signal: controller.signal, }) } clearTimeout(timeoutId) const data = await response.json() if (data.success) { setStatus('Model ingestion complete!') setResults(data) // Refresh the page to show new models setTimeout(() => { router.refresh() }, 2000) } else { setStatus(`Error: ${data.error || 'Unknown error'}`) setResults(data) } } catch (error: any) { if (error.name === 'AbortError') { setStatus('Ingestion is taking longer than expected. It may still be running in the background.') setResults({ error: 'Request timeout', message: 'The ingestion process may still be running. Check back in a few minutes or check server logs.', }) } else { setStatus(`Error: ${error.message}`) setResults({ error: error.message }) } } finally { setIsIngesting(false) } } return (
{status && (
{status}
{results && (
{(results.models_ingested !== undefined || results.created !== undefined) && (
Models ingested: {results.models_ingested || results.created || results.total || 0}
)} {results.error && (
{results.error}
)} {results.message && (
{results.message}
)}
)}
)}
) }