import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger } from "@/components/ui/dialog"; import { Button } from "@/components/ui/button"; import { Textarea } from "@/components/ui/textarea"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/components/ui/tooltip"; import { Sparkles, Loader2 } from "lucide-react"; import { useState, useEffect } from "react"; import { usePromptGenerator } from "@/hooks/use-prompt-generator"; import { useLocalModels } from "@/hooks/use-local-models"; interface PromptGeneratorDialogProps { defaultModel: string; onPromptGenerated: (prompt: string) => void; } export function PromptGeneratorDialog({ defaultModel, onPromptGenerated }: PromptGeneratorDialogProps) { const [open, setOpen] = useState(false); const [goal, setGoal] = useState(""); const [selectedModel, setSelectedModel] = useState(defaultModel || ""); const { generatePrompt, isGenerating } = usePromptGenerator(); const { models, loading } = useLocalModels(); // Set default model when dialog opens or defaultModel changes useEffect(() => { if (defaultModel && defaultModel.trim()) { setSelectedModel(defaultModel); } }, [defaultModel]); // Try to set specific default if available and no model is selected useEffect(() => { if (loading || models.length === 0) return; // Se já tem um modelo selecionado e válido, não alterar if (selectedModel && models.some(m => m.name === selectedModel)) return; // Primeiro, tenta usar o defaultModel se for válido if (defaultModel && defaultModel.trim() && models.some(m => m.name === defaultModel)) { setSelectedModel(defaultModel); return; } // Fallback para modelo preferido const preferredModel = "llama3.2-abliterate:3b"; const hasPreferred = models.some(m => m.name === preferredModel); if (hasPreferred && !selectedModel.trim()) { setSelectedModel(preferredModel); return; } // Se nenhum modelo está selecionado, seleciona o primeiro disponível if (!selectedModel.trim() && models.length > 0) { setSelectedModel(models[0].name); } }, [models, loading, defaultModel, selectedModel]); const handleGenerate = async () => { if (!goal.trim() || !selectedModel.trim()) return; try { const prompt = await generatePrompt(goal, selectedModel); onPromptGenerated(prompt); setOpen(false); setGoal(""); } catch (error) { console.error("Erro ao gerar prompt:", error); // TODO: Implementar toast de erro quando disponível } }; const handleCancel = () => { setOpen(false); setGoal(""); }; return ( Gerador de Prompts Descreva o que você quer que a IA faça, e nós criaremos um System Prompt otimizado para você.

Recomendado: Modelos com boa capacidade de instrução (ex: Llama 3, Mistral).