"use client"; import { useState, useEffect } from "react"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import { Textarea } from "@/components/ui/textarea"; import useStore from "@/lib/store"; import modelAdapter from "@/lib/services/adapter-instance"; import { Sparkles, Copy, RefreshCw, Loader2, CheckCircle2, Settings } from "lucide-react"; import { cn } from "@/lib/utils"; export default function PromptEnhancer() { const { currentPrompt, enhancedPrompt, selectedProvider, selectedModels, availableModels, apiKeys, isProcessing, error, setSelectedProvider, setCurrentPrompt, setEnhancedPrompt, setProcessing, setError, setAvailableModels, setSelectedModel, } = useStore(); const [copied, setCopied] = useState(false); const selectedModel = selectedModels[selectedProvider]; const models = availableModels[selectedProvider] || modelAdapter.getAvailableModels(selectedProvider); useEffect(() => { if (typeof window !== "undefined") { loadAvailableModels(); const saved = localStorage.getItem("promptarch-api-keys"); if (saved) { try { const keys = JSON.parse(saved); if (keys.qwen) modelAdapter.updateQwenApiKey(keys.qwen); if (keys.ollama) modelAdapter.updateOllamaApiKey(keys.ollama); if (keys.zai) modelAdapter.updateZaiApiKey(keys.zai); } catch (e) { console.error("Failed to load API keys:", e); } } } }, [selectedProvider]); const loadAvailableModels = async () => { const fallbackModels = modelAdapter.getAvailableModels(selectedProvider); setAvailableModels(selectedProvider, fallbackModels); try { const result = await modelAdapter.listModels(selectedProvider); if (result.success && result.data) { setAvailableModels(selectedProvider, result.data[selectedProvider] || fallbackModels); } } catch (error) { console.error("Failed to load models:", error); } }; const handleEnhance = async () => { if (!currentPrompt.trim()) { setError("Please enter a prompt to enhance"); return; } const apiKey = apiKeys[selectedProvider]; if (!apiKey || !apiKey.trim()) { setError(`Please configure your ${selectedProvider.toUpperCase()} API key in Settings`); return; } setProcessing(true); setError(null); try { const result = await modelAdapter.enhancePrompt(currentPrompt, selectedProvider, selectedModel); if (result.success && result.data) { setEnhancedPrompt(result.data); } else { setError(result.error || "Failed to enhance prompt"); } } catch (err) { setError(err instanceof Error ? err.message : "An error occurred"); } finally { setProcessing(false); } }; const handleCopy = async () => { if (enhancedPrompt) { await navigator.clipboard.writeText(enhancedPrompt); setCopied(true); setTimeout(() => setCopied(false), 2000); } }; const handleClear = () => { setCurrentPrompt(""); setEnhancedPrompt(null); setError(null); }; return (
Input Prompt Enter your prompt and we'll enhance it for AI coding agents
{(["qwen", "ollama", "zai"] as const).map((provider) => ( ))}