Configure separate OpenAI and Grok keys

This commit is contained in:
Wojtek
2026-10-16 13:04:34 +02:00
parent dc6b5ad3e8
commit 6daca5be59
7 changed files with 56 additions and 20 deletions
@@ -44,12 +44,22 @@ class AiController extends BaseController
$settings = json_decode((string) $row->params, true);
$settings = is_array($settings) ? $settings : [];
$apiKey = trim((string) $input->post->get('ai_api_key', '', 'RAW'));
$legacyKey = trim((string) ($settings['ai_api_key'] ?? ''));
$settings['ai_provider'] = $provider;
if ($apiKey !== '') {
$settings['ai_api_key'] = $apiKey;
foreach (['openai', 'grok'] as $keyProvider) {
$fieldName = 'ai_' . $keyProvider . '_api_key';
$apiKey = trim((string) $input->post->get($fieldName, '', 'RAW'));
if ($apiKey !== '') {
$settings[$fieldName] = $apiKey;
}
if ($keyProvider === $provider && empty($settings[$fieldName]) && $legacyKey !== '') {
$settings[$fieldName] = $legacyKey;
}
}
unset($settings['ai_api_key']);
$extension = (object) [
'extension_id' => (int) $row->extension_id,
@@ -92,7 +92,9 @@ class ResultModel extends BaseDatabaseModel
$params = ComponentHelper::getParams('com_testquestions');
$provider = trim((string) $params->get('ai_provider', 'openai'));
$apiKey = trim((string) $params->get('ai_api_key', ''));
$provider = strtolower(preg_replace('/[^a-z]/', '', $provider));
$keyName = 'ai_' . $provider . '_api_key';
$apiKey = trim((string) $params->get($keyName, $params->get('ai_api_key', '')));
$componentKeyLength = mb_strlen($apiKey);
// Odczytaj zapisane parametry bezpośrednio z bazy. Dzięki temu nie użyjemy
@@ -115,14 +117,21 @@ class ResultModel extends BaseDatabaseModel
if ($storedProvider !== '') {
$provider = $storedProvider;
}
}
if ($storedApiKey !== '' && !preg_match('/^\*+$/', $storedApiKey)) {
$apiKey = $storedApiKey;
}
$provider = strtolower(preg_replace('/[^a-z]/', '', $provider));
$keyName = 'ai_' . $provider . '_api_key';
$apiKey = trim((string) $params->get($keyName, $params->get('ai_api_key', '')));
$componentKeyLength = mb_strlen($apiKey);
$storedApiKey = is_array($storedParams)
? trim((string) ($storedParams[$keyName] ?? $storedParams['ai_api_key'] ?? ''))
: '';
if ($storedApiKey !== '' && !preg_match('/^\*+$/', $storedApiKey)) {
$apiKey = $storedApiKey;
}
if (trim($apiKey) === '') {
$databaseKey = is_array($storedParams) ? trim((string) ($storedParams['ai_api_key'] ?? '')) : '';
$databaseKey = $storedApiKey;
$databaseKeyLength = preg_match('/^\*+$/', $databaseKey) ? 0 : mb_strlen($databaseKey);
throw new \RuntimeException(
'AI_KEY_EMPTY|provider=' . ($provider !== '' ? $provider : '(pusty)')