MDL-82627 AI: Make some methods abstract

This commit is contained in:
Huong Nguyen
2024-09-11 11:25:17 +07:00
parent 3300712cda
commit 9746d9d5a1
2 changed files with 60 additions and 64 deletions
+59 -3
View File
@@ -17,7 +17,7 @@
namespace core_ai;
use core_ai\aiactions\base;
use core_ai\aiactions\responses;
use core_ai\aiactions\responses\response_base;
/**
* Base class for provider processors.
@@ -46,7 +46,63 @@ abstract class process_base {
/**
* Process the AI request.
*
* @return responses\response_base The result of the action.
* @return response_base The result of the action.
*/
abstract public function process(): responses\response_base;
public function process(): response_base {
// Check the rate limiter.
$ratelimitcheck = $this->provider->is_request_allowed($this->action);
if ($ratelimitcheck !== true) {
return $this->get_response(
success: false,
errorcode: $ratelimitcheck['errorcode'],
errormessage: $ratelimitcheck['errormessage'],
);
}
// Format the action response object.
return $this->prepare_response($this->query_ai_api());
}
/**
* Query the AI service.
*
* @return array The response from the AI service.
*/
abstract protected function query_ai_api(): array;
/**
* Prepare the response object.
*
* @param array $responsedata The response object.
* @return response_base The action response object.
*/
private function prepare_response(array $responsedata): response_base {
if ($responsedata['success']) {
$response = $this->get_response(
success: true,
);
$response->set_response_data($responsedata);
return $response;
} else {
return $this->get_response(
success: false,
errorcode: $responsedata['errorcode'],
errormessage: $responsedata['errormessage'],
);
}
}
/**
* Get the instantiated Response Class for the action described by this processor.
*
* @param mixed ...$args The arguments to pass to the response class constructor.
* @return response_base
*/
protected function get_response(...$args): response_base {
$responseclassname = $this->action::get_response_classname();
return new $responseclassname(
...$args,
);
}
}
@@ -69,44 +69,7 @@ abstract class abstract_processor extends process_base {
*/
abstract protected function handle_api_success(ResponseInterface $response): array;
/**
* Process the AI request.
*
* @return response_base The result of the action.
*/
public function process(): response_base {
// Check the rate limiter.
$ratelimitcheck = $this->provider->is_request_allowed($this->action);
if ($ratelimitcheck !== true) {
return $this->get_response(
success: false,
errorcode: $ratelimitcheck['errorcode'],
errormessage: $ratelimitcheck['errormessage'],
);
}
// Format the action response object.
return $this->prepare_response($this->query_ai_api());
}
/**
* Get the instantiated Response Class for the action described by this processor.
*
* @param array $args
* @return \core_ai\aiactions\responses\response_base
*/
protected function get_response(...$args): response_base {
$responseclassname = $this->action::get_response_classname();
return new $responseclassname(
...$args,
);
}
/**
* Query the AI service.
*
* @return array The response from the AI service.
*/
#[\Override]
protected function query_ai_api(): array {
$request = $this->create_request_object(
userid: $this->provider->generate_userid($this->action->get_configuration('userid')),
@@ -160,27 +123,4 @@ abstract class abstract_processor extends process_base {
return $responsearr;
}
/**
* Prepare the response object.
*
* @param array $responsedata The response object.
* @return response_base The action response object.
*/
private function prepare_response(array $responsedata): response_base {
if ($responsedata['success']) {
$response = $this->get_response(
success: true,
);
$response->set_response_data($responsedata);
return $response;
} else {
return $this->get_response(
success: false,
errorcode: $responsedata['errorcode'],
errormessage: $responsedata['errormessage'],
);
}
}
}