"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 { Input } from "@/components/ui/input"; import useStore from "@/lib/store"; import modelAdapter from "@/lib/services/adapter-instance"; import { Save, Key, Server, Eye, EyeOff } from "lucide-react"; import { cn } from "@/lib/utils"; export default function SettingsPanel() { const { apiKeys, setApiKey, selectedProvider, setSelectedProvider, qwenTokens, setQwenTokens } = useStore(); const [showApiKey, setShowApiKey] = useState>({}); const handleSave = () => { if (typeof window !== "undefined") { localStorage.setItem("promptarch-api-keys", JSON.stringify(apiKeys)); alert("API keys saved successfully!"); } }; const handleLoad = () => { if (typeof window !== "undefined") { const saved = localStorage.getItem("promptarch-api-keys"); if (saved) { try { const keys = JSON.parse(saved); if (keys.qwen) { setApiKey("qwen", keys.qwen); modelAdapter.updateQwenApiKey(keys.qwen); } if (keys.ollama) { setApiKey("ollama", keys.ollama); modelAdapter.updateOllamaApiKey(keys.ollama); } if (keys.zai) { setApiKey("zai", keys.zai); modelAdapter.updateZaiApiKey(keys.zai); } } catch (e) { console.error("Failed to load API keys:", e); } } } }; const handleApiKeyChange = (provider: string, value: string) => { setApiKey(provider as "qwen" | "ollama" | "zai", value); switch (provider) { case "qwen": modelAdapter.updateQwenApiKey(value); break; case "ollama": modelAdapter.updateOllamaApiKey(value); break; case "zai": modelAdapter.updateZaiApiKey(value); break; } }; useEffect(() => { handleLoad(); }, []); return (
API Configuration Configure API keys for different AI providers
handleApiKeyChange("qwen", e.target.value)} className="font-mono text-sm" />

Get API key from{" "} Alibaba DashScope

{qwenTokens && (

✓ Authenticated via OAuth (Expires: {new Date(qwenTokens.expiresAt || 0).toLocaleString()})

)}
handleApiKeyChange("ollama", e.target.value)} className="font-mono text-sm" />

Get API key from{" "} ollama.com/cloud

handleApiKeyChange("zai", e.target.value)} className="font-mono text-sm" />

Get API key from{" "} docs.z.ai

Default Provider Select your preferred AI provider
{(["qwen", "ollama", "zai"] as const).map((provider) => ( ))}
Data Privacy Your data handling preferences

All API keys are stored locally in your browser. Your prompts are sent directly to the selected AI provider and are not stored by PromptArch.

); }