Spaces:
Sleeping
Sleeping
| '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> | |
| ) | |
| } | |