moodle/ai/placement/courseassist/classes/external/summarise_text.php
Matt Porritt 368114c7cd MDL-82977 AI: Provider instances
Create provider instances for AI povider plugins.
Each provider plugin can now have multiple instances,
allowing for different configurations and models using
the same base provider.
2025-01-22 08:43:13 +11:00

155 lines
5.1 KiB
PHP

<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
namespace aiplacement_courseassist\external;
use aiplacement_courseassist\utils;
use core_external\external_api;
use core_external\external_function_parameters;
use core_external\external_value;
/**
* External API to call summarise text action for this placement.
*
* @package aiplacement_courseassist
* @copyright 2024 Huong Nguyen <huongnv13@gmail.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class summarise_text extends external_api {
/**
* Summarise text parameters.
*
* @return external_function_parameters
* @since Moodle 4.5
*/
public static function execute_parameters(): external_function_parameters {
return new external_function_parameters([
'contextid' => new external_value(
PARAM_INT,
'The context ID',
VALUE_REQUIRED,
),
'prompttext' => new external_value(
PARAM_RAW,
'The prompt text for the AI service',
VALUE_REQUIRED,
),
]);
}
/**
* Summarise text from the AI placement.
*
* @param int $contextid The context ID.
* @param string $prompttext The data encoded as a json array.
* @return array The generated content.
* @since Moodle 4.5
*/
public static function execute(
int $contextid,
string $prompttext
): array {
global $USER;
// Parameter validation.
[
'contextid' => $contextid,
'prompttext' => $prompttext,
] = self::validate_parameters(self::execute_parameters(), [
'contextid' => $contextid,
'prompttext' => $prompttext,
]);
// Context validation and permission check.
// Get the context from the passed in ID.
$context = \context::instance_by_id($contextid);
// Check the user has permission to use the AI service.
self::validate_context($context);
if (!utils::is_course_assist_available($context)) {
throw new \moodle_exception('nocourseassist', 'aiplacement_courseassist');
}
// Prepare the action.
$action = new \core_ai\aiactions\summarise_text(
contextid: $contextid,
userid: $USER->id,
prompttext: $prompttext,
);
// Send the action to the AI manager.
$manager = \core\di::get(\core_ai\manager::class);
$response = $manager->process_action($action);
// Return the response.
return [
'success' => $response->get_success(),
'generatedcontent' => $response->get_response_data()['generatedcontent'] ?? '',
'finishreason' => $response->get_response_data()['finishreason'] ?? '',
'errorcode' => $response->get_errorcode(),
'error' => $response->get_errormessage(),
'timecreated' => $response->get_timecreated(),
'prompttext' => $prompttext,
];
}
/**
* Generate content return value.
*
* @return external_function_parameters
* @since Moodle 4.5
*/
public static function execute_returns(): external_function_parameters {
return new external_function_parameters([
'success' => new external_value(
PARAM_BOOL,
'Was the request successful',
VALUE_REQUIRED
),
'timecreated' => new external_value(
PARAM_INT,
'The time the request was created',
VALUE_REQUIRED,
),
'prompttext' => new external_value(
PARAM_RAW,
'The prompt text for the AI service',
VALUE_REQUIRED,
),
'generatedcontent' => new external_value(
PARAM_RAW,
'The text generated by AI.',
VALUE_DEFAULT,
),
'finishreason' => new external_value(
PARAM_ALPHA,
'The reason generation was stopped',
VALUE_DEFAULT,
'stop',
),
'errorcode' => new external_value(
PARAM_INT,
'Error code if any',
VALUE_DEFAULT,
0,
),
'error' => new external_value(
PARAM_TEXT,
'Error message if any',
VALUE_DEFAULT,
'',
),
]);
}
}