AutorÃa | Ultima modificación | Ver Log |
<?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_editor\external;use aiplacement_editor\utils;use core_external\external_api;use core_external\external_function_parameters;use core_external\external_value;/*** External API to call an action for this placement.** @package aiplacement_editor* @copyright 2024 Matt Porritt <matt.porritt@moodle.com>* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later*/class generate_image extends external_api {/*** Generate image 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,),'aspectratio' => new external_value(PARAM_ALPHA,'The aspect ratio of the image',VALUE_REQUIRED,),'quality' => new external_value(PARAM_ALPHA,'The quality of the image',VALUE_REQUIRED,),'numimages' => new external_value(PARAM_INT,'The number of images to generate',VALUE_DEFAULT,1,),'style' => new external_value(PARAM_ALPHA,'The style of the image',VALUE_DEFAULT,'natural',),]);}/*** Generate image from the AI placement.** @param int $contextid The context ID.* @param string $prompttext The data encoded as a json array.* @param string $aspectratio The aspect ratio of the image.* @param string $quality The quality of the image.* @param string $numimages The number of images to generate.* @param string $style The style of the image.* @return array The generated content.* @since Moodle 4.5*/public static function execute(int $contextid,string $prompttext,string $aspectratio,string $quality,string $numimages,string $style = '',): array {global $USER;// Parameter validation.['contextid' => $contextid,'prompttext' => $prompttext,'aspectratio' => $aspectratio,'quality' => $quality,'numimages' => $numimages,'style' => $style,] = self::validate_parameters(self::execute_parameters(), ['contextid' => $contextid,'prompttext' => $prompttext,'aspectratio' => $aspectratio,'quality' => $quality,'numimages' => $numimages,'style' => $style,]);// 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_html_editor_placement_action_available($context, 'generate_text',\core_ai\aiactions\generate_image::class)) {throw new \moodle_exception('noeditor', 'aiplacement_editor');}// Prepare the action.$action = new \core_ai\aiactions\generate_image(contextid: $contextid,userid: $USER->id,prompttext: $prompttext,quality: $quality,aspectratio: $aspectratio,numimages: $numimages,style: $style,);// Send the action to the AI manager.$manager = \core\di::get(\core_ai\manager::class);$response = $manager->process_action($action);// If we have a successful response, generate the URL for the draft file.if ($response->get_success()) {$draftfile = $response->get_response_data()['draftfile'];$drafturl = \moodle_url::make_draftfile_url($draftfile->get_itemid(),$draftfile->get_filepath(),$draftfile->get_filename(),false,)->out(false);} else {$drafturl = '';}// Return the response.return ['success' => $response->get_success(),'revisedprompt' => $response->get_response_data()['revisedprompt'] ?? '','drafturl' => $drafturl,'errorcode' => $response->get_errorcode(),'error' => $response->get_errormessage(),];}/*** 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,),'revisedprompt' => new external_value(PARAM_TEXT,'Revised prompt generated by the AI',VALUE_DEFAULT,'',),'drafturl' => new external_value(PARAM_URL,'Draft file URL for the image',VALUE_DEFAULT,'',),'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,'',),]);}}