Skip to content

Commit

Permalink
Plugin: Add DeepSeek support and adapt AI Helper for content and quiz…
Browse files Browse the repository at this point in the history
… generation
  • Loading branch information
christianbeeznest committed Jan 22, 2025
1 parent a9d0097 commit 6954d86
Show file tree
Hide file tree
Showing 11 changed files with 678 additions and 384 deletions.
47 changes: 32 additions & 15 deletions main/exercise/export/aiken/aiken_import.inc.php
Original file line number Diff line number Diff line change
Expand Up @@ -44,36 +44,53 @@ function aiken_display_form()
}

/**
* Generates aiken format using AI api.
* Requires plugin ai_helper to connect to the api.
* Generates Aiken format using AI APIs (supports multiple providers).
* Requires plugin ai_helper to connect to the API.
*/
function generateAikenForm()
{
if (!('true' === api_get_plugin_setting('ai_helper', 'tool_enable') && 'true' === api_get_plugin_setting('ai_helper', 'tool_quiz_enable'))) {
return false;
}

$plugin = AiHelperPlugin::create();
$availableApis = $plugin->getApiList();

$configuredApi = $plugin->get('api_name');
$hasSingleApi = count($availableApis) === 1 || isset($availableApis[$configuredApi]);

$form = new FormValidator(
'aiken_generate',
'post',
api_get_self()."?".api_get_cidreq(),
null
);
$form->addElement('header', get_lang('AIQuestionsGenerator'));
$form->addElement('text', 'quiz_name', [get_lang('QuestionsTopic'), get_lang('QuestionsTopicHelp')]);

if ($hasSingleApi) {
$apiName = $availableApis[$configuredApi] ?? $configuredApi;
$form->addHtml('<div style="margin-bottom: 10px; font-size: 14px; color: #555;">'
. get_lang('UsingAIProvider') . ': <strong>' . htmlspecialchars($apiName) . '</strong></div>');
}

$form->addElement('text', 'quiz_name', get_lang('QuestionsTopic'));
$form->addRule('quiz_name', get_lang('ThisFieldIsRequired'), 'required');
$form->addElement('number', 'nro_questions', [get_lang('NumberOfQuestions'), get_lang('AIQuestionsGeneratorNumberHelper')]);
$form->addElement('number', 'nro_questions', get_lang('NumberOfQuestions'));
$form->addRule('nro_questions', get_lang('ThisFieldIsRequired'), 'required');

$options = [
'multiple_choice' => get_lang('MultipleAnswer'),
];
$form->addElement(
'select',
'question_type',
get_lang('QuestionType'),
$options
);
$form->addElement('select', 'question_type', get_lang('QuestionType'), $options);

if (!$hasSingleApi) {
$form->addElement(
'select',
'ai_provider',
get_lang('AIProvider'),
array_combine(array_keys($availableApis), array_keys($availableApis))
);
}

$generateUrl = api_get_path(WEB_PLUGIN_PATH).'ai_helper/tool/answers.php';
$language = api_get_interface_language();
Expand All @@ -87,10 +104,9 @@ function generateAikenForm()
var btnGenerate = $(this);
var quizName = $("[name=\'quiz_name\']").val();
var nroQ = parseInt($("[name=\'nro_questions\']").val());
var qType = $("[name=\'question_type\']").val();
var valid = (quizName != \'\' && nroQ > 0);
var qWeight = 1;
var qType = $("[name=\'question_type\']").val();'
. (!$hasSingleApi ? 'var provider = $("[name=\'ai_provider\']").val();' : 'var provider = "' . $configuredApi . '";') .
'var valid = (quizName != \'\' && nroQ > 0);
if (valid) {
btnGenerate.attr("disabled", true);
btnGenerate.text("'.get_lang('PleaseWaitThisCouldTakeAWhile').'");
Expand All @@ -100,7 +116,8 @@ function generateAikenForm()
"quiz_name": quizName,
"nro_questions": nroQ,
"question_type": qType,
"language": "'.$language.'"
"language": "'.$language.'",
"ai_provider": provider
}).done(function (data) {
btnGenerate.attr("disabled", false);
btnGenerate.text("'.get_lang('Generate').'");
Expand Down
118 changes: 55 additions & 63 deletions main/lp/LpAiHelper.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,25 @@ public function __construct()
*/
public function aiHelperForm()
{
$plugin = AiHelperPlugin::create();
$availableApis = $plugin->getApiList();
$configuredApi = $plugin->get('api_name');
$hasSingleApi = count($availableApis) === 1 || isset($availableApis[$configuredApi]);

$form = new FormValidator(
'lp_ai_generate',
'post',
api_get_self()."?".api_get_cidreq(),
null
);
$form->addElement('header', get_lang('LpAiGenerator'));

if ($hasSingleApi) {
$apiName = $availableApis[$configuredApi] ?? $configuredApi;
$form->addHtml('<div style="margin-bottom: 10px; font-size: 14px; color: #555;">'
. get_lang('UsingAIProvider') . ': <strong>' . htmlspecialchars($apiName) . '</strong></div>');
}

$form->addElement('text', 'lp_name', [get_lang('LpAiTopic'), get_lang('LpAiTopicHelp')]);
$form->addRule('lp_name', get_lang('ThisFieldIsRequired'), 'required');
$form->addElement('number', 'nro_items', [get_lang('LpAiNumberOfItems'), get_lang('LpAiNumberOfItemsHelper')]);
Expand All @@ -46,75 +58,55 @@ public function aiHelperForm()
$sessionId = api_get_session_id();
$redirectSuccess = api_get_path(WEB_CODE_PATH).'lp/lp_controller.php?'.api_get_cidreq().'&action=add_item&type=step&isStudentView=false&lp_id=';
$form->addHtml('<script>
$(function () {
$("#lp-quiz-area").hide();
$("#add-lp-quiz").change(function() {
if ($(this).is(":checked")) {
$("#lp-quiz-area").show();
} else {
$("#lp-quiz-area").hide();
}
});
$(function () {
$("#lp-quiz-area").hide();
$("#add-lp-quiz").change(function() {
$("#lp-quiz-area").toggle(this.checked);
});
$("#create-lp-ai").on("click", function (e) {
e.preventDefault();
e.stopPropagation();
$("#create-lp-ai").on("click", function (e) {
e.preventDefault();
e.stopPropagation();
var btnGenerate = $(this);
var lpName = $("[name=\'lp_name\']").val();
var nroItems = parseInt($("[name=\'nro_items\']").val());
var wordsCount = parseInt($("[name=\'words_count\']").val());
var valid = (lpName != \'\' && nroItems > 0 && wordsCount > 0);
var addTests = $("#add-lp-quiz").is(":checked");
var nroQuestions = parseInt($("[name=\'nro_questions\']").val());
var btnGenerate = $(this);
var lpName = $("[name=\'lp_name\']").val();
var nroItems = parseInt($("[name=\'nro_items\']").val());
var wordsCount = parseInt($("[name=\'words_count\']").val());
var addTests = $("#add-lp-quiz").is(":checked");
var nroQuestions = parseInt($("[name=\'nro_questions\']").val());
var provider = "' . $configuredApi . '";
if (valid) {
if (addTests) {
var quizValid = (nroQuestions > 0 && nroQuestions <= 5);
if (!quizValid) {
alert("'.sprintf(get_lang('NumberOfQuestionsLimitedFromXToY'), 1, 5).'");
return false;
}
}
btnGenerate.attr("disabled", true);
btnGenerate.text("'.get_lang('PleaseWaitThisCouldTakeAWhile').'");
$.getJSON("'.$generateUrl.'", {
"lp_name": lpName,
"nro_items": nroItems,
"words_count": wordsCount,
"language": "'.$language.'",
"course_code": "'.$courseCode.'",
"session_id": "'.$sessionId.'",
"add_tests": addTests,
"nro_questions": nroQuestions
}).done(function (data) {
btnGenerate.attr("disabled", false);
btnGenerate.text("'.get_lang('Generate').'");
if (data.success && data.success == true) {
if (lpName && nroItems > 0 && wordsCount > 0) {
if (addTests && (nroQuestions <= 0 || nroQuestions > 5)) {
alert("'.sprintf(get_lang('NumberOfQuestionsLimitedFromXToY'), 1, 5).'");
return false;
}
btnGenerate.attr("disabled", true).text("'.get_lang('PleaseWaitThisCouldTakeAWhile').'");
$.getJSON("'.$generateUrl.'", {
"lp_name": lpName,
"nro_items": nroItems,
"words_count": wordsCount,
"language": "'.$language.'",
"course_code": "'.$courseCode.'",
"session_id": "'.$sessionId.'",
"add_tests": addTests,
"nro_questions": nroQuestions,
"ai_provider": provider
}).done(function (data) {
btnGenerate.attr("disabled", false).text("'.get_lang('Generate').'");
if (data.success) {
location.href = "'.$redirectSuccess.'" + data.lp_id;
} else {
var errorMessage = "'.get_lang('NoSearchResults').'. '.get_lang('PleaseTryAgain').'";
if (data.text) {
errorMessage = data.text;
}
alert(errorMessage);
}
});
}
} else {
alert(data.text || "'.get_lang('NoSearchResults').'. '.get_lang('PleaseTryAgain').'");
}
});
});
</script>');

$form->addButton(
'create_lp_button',
get_lang('LearnpathAddLearnpath'),
'',
'default',
'default',
null,
['id' => 'create-lp-ai']
);
}
});
});
</script>');

$form->addButton('create_lp_button', get_lang('LearnpathAddLearnpath'), '', 'default', 'default', null, ['id' => 'create-lp-ai']);
echo $form->returnForm();
}
}
Loading

0 comments on commit 6954d86

Please sign in to comment.