diff --git a/src/components/admin/AIConfig/AIConfig.tsx b/src/components/admin/AIConfig/AIConfig.tsx index 4454dfe..759f7b8 100644 --- a/src/components/admin/AIConfig/AIConfig.tsx +++ b/src/components/admin/AIConfig/AIConfig.tsx @@ -11,10 +11,6 @@ import { toast } from 'sonner'; interface AIConfigData { aiEnabled: boolean; - aiProvider: 'claude' | 'openai' | 'gemini'; - claudeApiKey: string; - openaiApiKey: string; - geminiApiKey: string; aiRemarkGeneration: boolean; maxRemarkChars: number; } @@ -22,19 +18,10 @@ interface AIConfigData { export function AIConfig() { const [loading, setLoading] = useState(true); const [saving, setSaving] = useState(false); - const [showApiKeys, setShowApiKeys] = useState>({ - claude: false, - openai: false, - gemini: false - }); const [config, setConfig] = useState({ aiEnabled: true, - aiProvider: 'claude', - claudeApiKey: '', - openaiApiKey: '', - geminiApiKey: '', aiRemarkGeneration: true, - maxRemarkChars: 500 + maxRemarkChars: 2000 }); useEffect(() => { @@ -54,10 +41,6 @@ export function AIConfig() { setConfig({ aiEnabled: configMap['AI_ENABLED'] === 'true', - aiProvider: (configMap['AI_PROVIDER'] || 'claude') as 'claude' | 'openai' | 'gemini', - claudeApiKey: configMap['CLAUDE_API_KEY'] || '', - openaiApiKey: configMap['OPENAI_API_KEY'] || '', - geminiApiKey: configMap['GEMINI_API_KEY'] || '', aiRemarkGeneration: configMap['AI_REMARK_GENERATION_ENABLED'] === 'true', maxRemarkChars: parseInt(configMap['AI_MAX_REMARK_LENGTH'] || '2000') }); @@ -76,10 +59,6 @@ export function AIConfig() { // Save all configurations await Promise.all([ updateConfiguration('AI_ENABLED', config.aiEnabled.toString()), - updateConfiguration('AI_PROVIDER', config.aiProvider), - updateConfiguration('CLAUDE_API_KEY', config.claudeApiKey), - updateConfiguration('OPENAI_API_KEY', config.openaiApiKey), - updateConfiguration('GEMINI_API_KEY', config.geminiApiKey), updateConfiguration('AI_REMARK_GENERATION_ENABLED', config.aiRemarkGeneration.toString()), updateConfiguration('AI_MAX_REMARK_LENGTH', config.maxRemarkChars.toString()) ]); @@ -100,19 +79,6 @@ export function AIConfig() { setConfig(prev => ({ ...prev, ...updates })); }; - const toggleApiKeyVisibility = (provider: 'claude' | 'openai' | 'gemini') => { - setShowApiKeys(prev => ({ - ...prev, - [provider]: !prev[provider] - })); - }; - - const maskApiKey = (key: string): string => { - if (!key || key.length === 0) return ''; - if (key.length <= 8) return '••••••••'; - return key.substring(0, 4) + '••••••••' + key.substring(key.length - 4); - }; - if (loading) { return ( @@ -134,7 +100,7 @@ export function AIConfig() {
AI Features Configuration - Configure AI provider, API keys, and enable/disable AI-powered features + Configure Vertex AI Gemini settings and enable/disable AI-powered features
@@ -142,18 +108,7 @@ export function AIConfig() { updateConfig({ aiEnabled: enabled })} - onProviderChange={(provider) => updateConfig({ aiProvider: provider })} - onClaudeApiKeyChange={(key) => updateConfig({ claudeApiKey: key })} - onOpenaiApiKeyChange={(key) => updateConfig({ openaiApiKey: key })} - onGeminiApiKeyChange={(key) => updateConfig({ geminiApiKey: key })} - onToggleApiKeyVisibility={toggleApiKeyVisibility} - maskApiKey={maskApiKey} /> diff --git a/src/components/admin/AIConfig/AIProviderSettings.tsx b/src/components/admin/AIConfig/AIProviderSettings.tsx index 3e25560..c7df8fc 100644 --- a/src/components/admin/AIConfig/AIProviderSettings.tsx +++ b/src/components/admin/AIConfig/AIProviderSettings.tsx @@ -1,63 +1,25 @@ -import { Label } from '@/components/ui/label'; -import { Input } from '@/components/ui/input'; import { Switch } from '@/components/ui/switch'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; -import { - Select, - SelectContent, - SelectItem, - SelectTrigger, - SelectValue, -} from '@/components/ui/select'; -import { Brain, Eye, EyeOff, Key } from 'lucide-react'; -import { Button } from '@/components/ui/button'; +import { Brain } from 'lucide-react'; interface AIProviderSettingsProps { aiEnabled: boolean; - aiProvider: 'claude' | 'openai' | 'gemini'; - claudeApiKey: string; - openaiApiKey: string; - geminiApiKey: string; - showApiKeys: Record; onAiEnabledChange: (enabled: boolean) => void; - onProviderChange: (provider: 'claude' | 'openai' | 'gemini') => void; - onClaudeApiKeyChange: (key: string) => void; - onOpenaiApiKeyChange: (key: string) => void; - onGeminiApiKeyChange: (key: string) => void; - onToggleApiKeyVisibility: (provider: 'claude' | 'openai' | 'gemini') => void; - maskApiKey: (key: string) => string; } -const PROVIDERS = [ - { value: 'claude', label: 'Claude (Anthropic)', description: 'Advanced AI by Anthropic' }, - { value: 'openai', label: 'OpenAI (GPT-4)', description: 'GPT-4 by OpenAI' }, - { value: 'gemini', label: 'Gemini (Google)', description: 'Gemini by Google' } -]; - export function AIProviderSettings({ aiEnabled, - aiProvider, - claudeApiKey, - openaiApiKey, - geminiApiKey, - showApiKeys, - onAiEnabledChange, - onProviderChange, - onClaudeApiKeyChange, - onOpenaiApiKeyChange, - onGeminiApiKeyChange, - onToggleApiKeyVisibility, - maskApiKey + onAiEnabledChange }: AIProviderSettingsProps) { return (
- AI Provider & API Keys + Vertex AI Gemini Configuration
- Select your AI provider and configure API keys + Configure AI features. Model and region are configured via environment variables.
@@ -74,145 +36,7 @@ export function AIProviderSettings({ onCheckedChange={onAiEnabledChange} /> - - {aiEnabled && ( - <> - {/* Provider Selection */} -
- - -
- - {/* API Keys for each provider */} -
- - - {/* Claude API Key */} -
- -
- onClaudeApiKeyChange(e.target.value)} - placeholder={showApiKeys.claude ? "sk-ant-..." : maskApiKey(claudeApiKey) || "sk-ant-..."} - className="border-gray-200 focus:border-re-green focus:ring-2 focus:ring-re-green/20 font-mono text-sm" - /> - -
-

- Get your API key from console.anthropic.com -

-
- - {/* OpenAI API Key */} -
- -
- onOpenaiApiKeyChange(e.target.value)} - placeholder={showApiKeys.openai ? "sk-..." : maskApiKey(openaiApiKey) || "sk-..."} - className="border-gray-200 focus:border-re-green focus:ring-2 focus:ring-re-green/20 font-mono text-sm" - /> - -
-

- Get your API key from platform.openai.com -

-
- - {/* Gemini API Key */} -
- -
- onGeminiApiKeyChange(e.target.value)} - placeholder={showApiKeys.gemini ? "AIza..." : maskApiKey(geminiApiKey) || "AIza..."} - className="border-gray-200 focus:border-re-green focus:ring-2 focus:ring-re-green/20 font-mono text-sm" - /> - -
-

- Get your API key from ai.google.dev -

-
-
- - )}
); } -