open-notebook / frontend /src /app /(dashboard) /models /components /EmbeddingModelChangeDialog.tsx
baveshraam's picture
FIX: SurrealDB 2.0 migration syntax and Frontend/CORS link
f871fed
'use client'
import { useState } from 'react'
import { useRouter } from 'next/navigation'
import {
AlertDialog,
AlertDialogAction,
AlertDialogCancel,
AlertDialogContent,
AlertDialogDescription,
AlertDialogFooter,
AlertDialogHeader,
AlertDialogTitle,
} from '@/components/ui/alert-dialog'
import { Button } from '@/components/ui/button'
import { AlertTriangle, ExternalLink } from 'lucide-react'
interface EmbeddingModelChangeDialogProps {
open: boolean
onOpenChange: (open: boolean) => void
onConfirm: () => void
oldModelName?: string
newModelName?: string
}
export function EmbeddingModelChangeDialog({
open,
onOpenChange,
onConfirm,
oldModelName,
newModelName
}: EmbeddingModelChangeDialogProps) {
const router = useRouter()
const [isConfirming, setIsConfirming] = useState(false)
const handleConfirmAndRebuild = () => {
setIsConfirming(true)
onConfirm()
// Give a moment for the model to update, then redirect
setTimeout(() => {
router.push('/advanced')
onOpenChange(false)
setIsConfirming(false)
}, 500)
}
const handleConfirmOnly = () => {
onConfirm()
onOpenChange(false)
}
return (
<AlertDialog open={open} onOpenChange={onOpenChange}>
<AlertDialogContent className="max-w-lg">
<AlertDialogHeader>
<div className="flex items-center gap-2 mb-2">
<AlertTriangle className="h-5 w-5 text-yellow-500" />
<AlertDialogTitle>Embedding Model Change</AlertDialogTitle>
</div>
<AlertDialogDescription asChild>
<div className="space-y-3 text-base text-muted-foreground">
<p>
You are about to change your embedding model{' '}
{oldModelName && newModelName && (
<>
from <strong>{oldModelName}</strong> to <strong>{newModelName}</strong>
</>
)}
.
</p>
<div className="bg-muted p-4 rounded-md space-y-2">
<p className="font-semibold text-foreground">⚠️ Important: Rebuild Required</p>
<p className="text-sm">
Changing your embedding model requires rebuilding all existing embeddings to maintain consistency.
Without rebuilding, your searches may return incorrect or incomplete results.
</p>
</div>
<div className="space-y-2 text-sm">
<p className="font-medium text-foreground">What happens next:</p>
<ul className="list-disc list-inside space-y-1 ml-2">
<li>Your default embedding model will be updated</li>
<li>Existing embeddings will remain unchanged until rebuild</li>
<li>New content will use the new embedding model</li>
<li>You should rebuild embeddings as soon as possible</li>
</ul>
</div>
<p className="text-sm font-medium text-foreground">
Would you like to proceed to the Advanced page to start the rebuild now?
</p>
</div>
</AlertDialogDescription>
</AlertDialogHeader>
<AlertDialogFooter className="flex-col sm:flex-row gap-2">
<AlertDialogCancel disabled={isConfirming}>
Cancel
</AlertDialogCancel>
<Button
variant="outline"
onClick={handleConfirmOnly}
disabled={isConfirming}
>
Change Model Only
</Button>
<AlertDialogAction
onClick={handleConfirmAndRebuild}
disabled={isConfirming}
className="bg-primary"
>
<ExternalLink className="mr-2 h-4 w-4" />
Change & Go to Rebuild
</AlertDialogAction>
</AlertDialogFooter>
</AlertDialogContent>
</AlertDialog>
)
}