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 aiprovider_ollama;use GuzzleHttp\Psr7\Request;use Psr\Http\Message\RequestInterface;use Psr\Http\Message\ResponseInterface;/*** Class process text generation.** @package aiprovider_ollama* @copyright 2024 Matt Porritt <matt.porritt@moodle.com>* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later*/class process_generate_text extends abstract_processor {#[\Override]protected function get_system_instruction(): string {return $this->provider->actionconfig[$this->action::class]['settings']['systeminstruction'];}#[\Override]protected function create_request_object(string $userid): RequestInterface {// Create the request object.$requestobj = new \stdClass();$requestobj->model = $this->get_model();$requestobj->stream = false;$requestobj->prompt = $this->action->get_configuration('prompttext');$requestobj->user = $userid;$requestobj->options = new \stdClass();// If there is a system string available, use it.$systeminstruction = $this->get_system_instruction();if (!empty($systeminstruction)) {$requestobj->system = $systeminstruction;}// Append the extra model settings.$modelsettings = $this->get_model_settings();foreach ($modelsettings as $setting => $value) {$requestobj->options->$setting = $value;}return new Request(method: 'POST',uri: '',body: json_encode($requestobj),headers: ['Content-Type' => 'application/json',],);}/*** Handle a successful response from the external AI api.** @param ResponseInterface $response The response object.* @return array The response.*/protected function handle_api_success(ResponseInterface $response): array {$responsebody = $response->getBody();$bodyobj = json_decode($responsebody->getContents());return ['success' => true,'generatedcontent' => $bodyobj->response,'finishreason' => $bodyobj->done_reason,'prompttokens' => $bodyobj->prompt_eval_count,'completiontokens' => $bodyobj->eval_count,'model' => $bodyobj->model ?? $this->get_model(), // Fallback to config model.];}}