diff --git a/admin/DashboardController.php b/admin/DashboardController.php index 5e18598..bca6b74 100644 --- a/admin/DashboardController.php +++ b/admin/DashboardController.php @@ -2513,8 +2513,20 @@ HTML; $commands = $config['commands'] ?? []; $menus = $config['menus'] ?? []; $flows = $config['flows'] ?? []; - $aiProviderOpenai = $aiProviderVal === 'openai' ? ' selected' : ''; - $aiProviderMock = $aiProviderVal === 'mock' ? ' selected' : ''; + $aiProviderOpenai = $aiProviderVal === 'openai' ? ' selected' : ''; + $aiProviderGemini = $aiProviderVal === 'gemini' ? ' selected' : ''; + $aiProviderMock = $aiProviderVal === 'mock' ? ' selected' : ''; + $openaiApiKeyVal = self::h($config['openai_api_key'] ?? ''); + $geminiApiKeyVal = self::h($config['gemini_api_key'] ?? ''); + $geminiModelVal = $config['gemini_model'] ?? 'gemini-2.0-flash'; + $geminiModelF20 = $geminiModelVal === 'gemini-2.0-flash' ? ' selected' : ''; + $geminiModelF15 = $geminiModelVal === 'gemini-1.5-flash' ? ' selected' : ''; + $geminiModelP15 = $geminiModelVal === 'gemini-1.5-pro' ? ' selected' : ''; + // Determine which provider panel to show initially + $showOpenai = ($aiProviderVal === 'openai' || $aiProviderVal === '') + ? 'display:flex;flex-direction:column;gap:10px' : 'display:none'; + $showGemini = $aiProviderVal === 'gemini' + ? 'display:flex;flex-direction:column;gap:10px' : 'display:none'; // Per-category config HTML $perTypeConfig = $config['per_type'] ?? []; @@ -2892,23 +2904,53 @@ HTML;
🤖 Inteligencia Artificial
- - - + +
Si no se selecciona, usa el proveedor de Configuración General
-
-
- - + + +
+
+
+ + +
+
+ + +
+
+ + +
+
+
+ + +
+
+ + +
+
+
+ +
@@ -3214,6 +3256,17 @@ function addFlowCard() { container.lastElementChild.scrollIntoView({behavior:'smooth'}); } +function aiProviderChange(v) { + const oai = document.getElementById('ai-openai-fields'); + const gem = document.getElementById('ai-gemini-fields'); + if (oai) oai.style.display = (v === 'openai' || v === '') ? 'flex' : 'none'; + if (oai) oai.style.flexDirection = 'column'; + if (oai) oai.style.gap = '10px'; + if (gem) gem.style.display = v === 'gemini' ? 'flex' : 'none'; + if (gem) gem.style.flexDirection = 'column'; + if (gem) gem.style.gap = '10px'; +} + function updatePreview() { const g = document.getElementById('prevGreeting')?.value || ''; const f = document.getElementById('prevFallback')?.value || ''; diff --git a/public/index.php b/public/index.php index 7a0cd6b..8e437e5 100644 --- a/public/index.php +++ b/public/index.php @@ -474,8 +474,14 @@ $routes = [ $aiTemp = trim($_POST['ai_temperature'] ?? ''); if ($aiTemp !== '') $config['ai_temperature'] = (float)$aiTemp; $aiProvider = trim($_POST['ai_provider'] ?? ''); - if ($aiProvider !== '') $config['ai_provider'] = $aiProvider; + if ($aiProvider !== '') $config['ai_provider'] = $aiProvider; else unset($config['ai_provider']); $config['ai_for_media'] = isset($_POST['ai_for_media']); + $openaiKey = trim($_POST['openai_api_key'] ?? ''); + if ($openaiKey !== '') $config['openai_api_key'] = $openaiKey; + $geminiKey = trim($_POST['gemini_api_key'] ?? ''); + if ($geminiKey !== '') $config['gemini_api_key'] = $geminiKey; + $geminiModel = trim($_POST['gemini_model'] ?? ''); + if ($geminiModel !== '') $config['gemini_model'] = $geminiModel; // Per-category menus — merge sobre la config existente para no perder flows/commands por categoría $perTypeMenus = $_POST['per_type_menu'] ?? [];