"use client"; import { useState, useEffect } from "react"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; 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"; export default function SettingsPanel() { const { apiKeys, setApiKey, selectedProvider, setSelectedProvider } = 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.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 "ollama" | "zai", value); switch (provider) { 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("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
{(["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 selected AI provider and are not stored by PromptArch.

); }