Add Gemini API as an AI provider

This commit is contained in:
Wojtek
2026-10-16 22:41:08 +02:00
parent 8045698072
commit 686e927249
13 changed files with 89 additions and 28 deletions
@@ -8,9 +8,11 @@
<?php $openaiKey = (string) ($this->settings['ai_openai_api_key'] ?? ($provider === 'openai' ? $legacyKey : '')); ?>
<?php $grokKey = (string) ($this->settings['ai_grok_api_key'] ?? ($provider === 'grok' ? $legacyKey : '')); ?>
<?php $groqKey = (string) ($this->settings['ai_groq_api_key'] ?? ($provider === 'groq' ? $legacyKey : '')); ?>
<?php $geminiKey = (string) ($this->settings['ai_gemini_api_key'] ?? ($provider === 'gemini' ? $legacyKey : '')); ?>
<?php $openaiModel = (string) ($this->settings['ai_openai_model'] ?? 'gpt-4.1-mini'); ?>
<?php $grokModel = (string) ($this->settings['ai_grok_model'] ?? 'grok-4.7'); ?>
<?php $groqModel = (string) ($this->settings['ai_groq_model'] ?? 'openai/gpt-oss-120b'); ?>
<?php $geminiModel = (string) ($this->settings['ai_gemini_model'] ?? 'gemini-3.8-flash'); ?>
<form action="<?php echo Route::_('index.php?option=com_testquestions&view=ai'); ?>" method="post" name="adminForm" id="adminForm">
<div class="card" style="max-width: 900px;">
<div class="card-body">
@@ -20,6 +22,7 @@
<option value="openai" <?php echo $provider === 'openai' ? 'selected' : ''; ?>>OpenAI</option>
<option value="grok" <?php echo $provider === 'grok' ? 'selected' : ''; ?>>Grok</option>
<option value="groq" <?php echo $provider === 'groq' ? 'selected' : ''; ?>>Groq</option>
<option value="gemini" <?php echo $provider === 'gemini' ? 'selected' : ''; ?>>Gemini</option>
</select>
</div>
<div class="mb-3" data-ai-provider-section="openai">
@@ -76,6 +79,24 @@
<?php endforeach; ?>
</select>
</div>
<div class="mb-3" data-ai-provider-section="gemini">
<label for="ai-gemini-api-key" class="form-label"><?php echo \Joomla\CMS\Language\Text::_('COM_TESTQUESTIONS_AI_GEMINI_KEY'); ?></label>
<div class="input-group">
<input type="password" id="ai-gemini-api-key" name="ai_gemini_api_key" value="<?php echo htmlspecialchars($geminiKey, ENT_QUOTES, 'UTF-8'); ?>" class="form-control" size="120" maxlength="4096" autocomplete="new-password">
<button type="button" class="btn btn-outline-secondary" data-ai-key-toggle="ai-gemini-api-key">Pokaż</button>
</div>
<small class="form-text text-muted">
<?php echo $geminiKey !== '' ? 'Zapisany klucz: ' . mb_strlen($geminiKey) . ' znaków. Pozostaw pole bez zmian, aby go zachować.' : 'Nie zapisano klucza Gemini.'; ?>
</small>
</div>
<div class="mb-3" data-ai-provider-section="gemini">
<label for="ai-gemini-model" class="form-label"><?php echo \Joomla\CMS\Language\Text::_('COM_TESTQUESTIONS_AI_GEMINI_MODEL'); ?></label>
<select id="ai-gemini-model" name="ai_gemini_model" class="form-select" required>
<?php foreach ($availableModels['gemini'] as $modelId => $modelLabel) : ?>
<option value="<?php echo htmlspecialchars($modelId, ENT_QUOTES, 'UTF-8'); ?>" <?php echo $geminiModel === $modelId ? 'selected' : ''; ?>><?php echo htmlspecialchars($modelLabel, ENT_QUOTES, 'UTF-8'); ?></option>
<?php endforeach; ?>
</select>
</div>
<hr>
<h3><?php echo \Joomla\CMS\Language\Text::_('COM_TESTQUESTIONS_AI_TOKEN_USAGE'); ?></h3>
<p class="text-muted"><?php echo \Joomla\CMS\Language\Text::_('COM_TESTQUESTIONS_AI_TOKEN_USAGE_INFO'); ?></p>
@@ -92,7 +113,7 @@
</tr>
</thead>
<tbody>
<?php foreach (['openai' => 'OpenAI', 'grok' => 'Grok', 'groq' => 'Groq'] as $usageProvider => $usageProviderLabel) : ?>
<?php foreach (['openai' => 'OpenAI', 'grok' => 'Grok', 'groq' => 'Groq', 'gemini' => 'Gemini'] as $usageProvider => $usageProviderLabel) : ?>
<?php $providerUsage = $usageTotals[$usageProvider]; ?>
<tr>
<th><?php echo $usageProviderLabel; ?></th>