Current File : /home/kelaby89/www/wp/wp-content/plugins/trx_addons/addons/ai-helper/classes/Api.php |
<?php
namespace TrxAddons\AiHelper;
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
use \TrxAddons\Core\Singleton;
/**
* Class to make queries to the OpenAi API
*/
abstract class Api extends Singleton {
/**
* The object to log queries to the API
*
* @access private
*
* @var Logger The object to log queries to the API
*/
var $logger = null;
var $logger_section = '';
/**
* The option name which store the token to take access to the API
*/
var $token_option = '';
/**
* The object of the API
*
* @access private
*
* @var api The object of the API
*/
var $api = null;
/**
* Class constructor.
*
* @access protected
*/
protected function __construct() {
parent::__construct();
$this->logger = Logger::instance();
}
/**
* Return an API token for the API from the plugin options.
* This method is a wrapper for the get_token() method to allow to override it in the child classes.
*
* @access public
*
* @return string API key for the API
*/
public function get_api_key() {
return $this->get_token();
}
/**
* Return an API token for the API from the plugin options
*
* @access protected
*
* @return string API token for the API
*/
protected function get_token() {
return trx_addons_get_option( $this->token_option, '' );
}
/**
* Return an object of the API
*
* @param string $token Access token for the API
*
* @return api The object of the API
*/
abstract public function get_api( $token = '' );
/**
* Return a number of tokens from the models list for the specified model
*
* @access static
*
* @param string $models List of models with their parameters
* @param string $model Model name for the API. If '*' - return a maximum value from all models
* @param string $key The key of the parameter to get
*
* @return int The number of tokens from the models list for the specified model
*/
static function get_tokens_from_list( $models, $model, $key ) {
$tokens = 0;
if ( ! empty( $model ) && ! empty( $models ) && is_array( $models ) ) {
foreach ( $models as $k => $v ) {
if ( $model == '*' ) {
$tokens = max( $tokens, ! empty( $v[ $key ] ) ? (int)$v[ $key ] : 0 );
} else {
if ( $k == $model ) {
$tokens = ! empty( $v[ $key ] ) ? (int)$v[ $key ] : 0;
break;
}
}
}
}
return $tokens;
}
/**
* Calculate the number of tokens for the API
*
* @access protected
*
* @param string $text Text to calculate
*
* @return int Number of tokens for the API
*/
protected function count_tokens( $text ) {
$tokens = 0;
// Way 1: Get number of words and multiply by coefficient
// $words = count( explode( ' ', $text ) );
// $coeff = strpos( $text, '<!-- wp:' ) !== false ? $this->blocks_to_tokens_coeff : $this->words_to_tokens_coeff;
// $tokens = round( $words * $coeff );
// Way 2: Get number of tokens via utility function with tokenizer
// if ( ! function_exists( 'gpt_encode' ) ) {
// require_once TRX_ADDONS_PLUGIN_DIR . TRX_ADDONS_PLUGIN_ADDONS . 'ai-helper/vendors/gpt3-encoder/gpt3-encoder.php';
// }
// $tokens = count( (array) gpt_encode( $text ) );
// Way 3: Get number of tokens via class tokenizer (same algorithm)
$tokens = count( (array) \Rahul900day\Gpt3Encoder\Encoder::encode( $text ) );
return $tokens;
}
}