import React, { useState, useEffect } from 'react'; import './SettingsModal.css'; const PROVIDERS = { openai: { name: 'OpenAI', models: ['gpt-4o', 'gpt-4-turbo'] }, anthropic: { name: 'Anthropic', models: ['claude-3-5-sonnet-20240620', 'claude-3-opus-20240229'] }, google: { name: 'Google Gemini', models: ['gemini/gemini-1.5-pro', 'gemini/gemini-1.5-flash'] }, deepseek: { name: 'DeepSeek', models: ['deepseek-chat'] } }; const SettingsModal = ({ isOpen, onClose, onSave }) => { const [provider, setProvider] = useState('openai'); const [model, setModel] = useState('gpt-4o'); const [apiKey, setApiKey] = useState(''); const [showKey, setShowKey] = useState(false); useEffect(() => { if (isOpen) { // Load from localStorage or defaults const storedConfig = JSON.parse(localStorage.getItem('llm_config') || '{}'); if (storedConfig.provider) setProvider(storedConfig.provider); if (storedConfig.model) setModel(storedConfig.model); if (storedConfig.apiKey) setApiKey(storedConfig.apiKey); } }, [isOpen]); const handleProviderChange = (e) => { const newProvider = e.target.value; setProvider(newProvider); // Default to first model setModel(PROVIDERS[newProvider].models[0]); }; const handleSave = () => { const config = { provider, model, apiKey }; localStorage.setItem('llm_config', JSON.stringify(config)); onSave(config); onClose(); }; if (!isOpen) return null; return (

⚙️ AI Settings

Bring your own API key to use different models. Keys are stored safely in your browser.

setApiKey(e.target.value)} placeholder={`Enter your ${PROVIDERS[provider].name} API Key`} />
{provider === 'openai' && 'Sk-...'} {provider === 'anthropic' && 'sk-ant-...'} {provider === 'google' && 'AIza...'}
); }; export default SettingsModal;