Current Path : /storage/v11800/affypharma/public_html/wp-content/plugins/ai-engine/classes/ |
Linux v11800 5.3.0-1023-aws #25~18.04.1-Ubuntu SMP Fri Jun 5 15:19:18 UTC 2020 aarch64
|
Current File : /storage/v11800/affypharma/public_html/wp-content/plugins/ai-engine/classes/rest.php |
<?php
class Meow_MWAI_Rest
{
private $core = null;
private $namespace = 'mwai/v1';
public function __construct( $core ) {
$this->core = $core;
add_action( 'rest_api_init', array( $this, 'rest_init' ) );
}
/**
* Retrieve the message from the parameters and optionally sanitize it.
*
* @param array &$params The parameters array, passed by reference.
* @param bool $sanitize Whether to sanitize the message using sanitize_text_field.
* @return string The retrieved (and optionally sanitized) message.
*/
function retrieve_message( &$params, $sanitize = false ) : string {
if ( isset( $params['message'] ) ) {
$message = $params['message'];
}
elseif ( isset( $params['prompt'] ) ) {
$message = $params['prompt'];
unset( $params['prompt'] );
$params['message'] = $message;
$this->core->log( '⚠️ "prompt" is deprecated, please use "message" instead.' );
}
else {
$message = "";
}
if ( $sanitize ) {
$message = sanitize_text_field( $message );
}
return $message;
}
function rest_init() {
try {
// Session Endpoint
register_rest_route( $this->namespace, '/start_session', array(
'methods' => 'POST',
'permission_callback' => [ $this->core, 'can_start_session' ],
'callback' => [ $this, 'rest_start_session' ],
) );
// Settings Endpoints
register_rest_route( $this->namespace, '/settings/update', array(
'methods' => 'POST',
'permission_callback' => [ $this->core, 'can_access_settings' ],
'callback' => [ $this, 'rest_settings_update' ],
) );
register_rest_route( $this->namespace, '/settings/options', array(
'methods' => 'GET',
'permission_callback' => [ $this->core, 'can_access_settings' ],
'callback' => [ $this, 'rest_settings_list' ],
) );
register_rest_route( $this->namespace, '/settings/reset', array(
'methods' => 'POST',
'permission_callback' => [ $this->core, 'can_access_settings' ],
'callback' => [ $this, 'rest_settings_reset' ],
) );
register_rest_route( $this->namespace, '/settings/chatbots', array(
'methods' => ['GET', 'POST'],
'permission_callback' => [ $this->core, 'can_access_settings' ],
'callback' => [ $this, 'rest_settings_chatbots' ],
) );
register_rest_route( $this->namespace, '/settings/themes', array(
'methods' => ['GET', 'POST'],
'permission_callback' => [ $this->core, 'can_access_settings' ],
'callback' => [ $this, 'rest_settings_themes' ],
) );
// System Endpoints
register_rest_route( $this->namespace, '/system/logs/list', array(
'methods' => 'POST',
'permission_callback' => [ $this->core, 'can_access_settings' ],
'callback' => [ $this, 'rest_system_logs_list' ],
) );
register_rest_route( $this->namespace, '/system/logs/delete', array(
'methods' => 'POST',
'permission_callback' => [ $this->core, 'can_access_settings' ],
'callback' => [ $this, 'rest_system_logs_delete' ],
) );
register_rest_route( $this->namespace, '/system/logs/meta', array(
'methods' => 'POST',
'permission_callback' => [ $this->core, 'can_access_settings' ],
'callback' => [ $this, 'rest_system_logs_meta_get' ],
) );
register_rest_route( $this->namespace, '/system/templates', array(
'methods' => 'POST',
'permission_callback' => [ $this->core, 'can_access_features' ],
'callback' => [ $this, 'rest_system_templates_save' ],
) );
register_rest_route( $this->namespace, '/system/templates', array(
'methods' => 'GET',
'permission_callback' => [ $this->core, 'can_access_features' ],
'callback' => [ $this, 'rest_system_templates_get' ],
) );
// AI Endpoints
register_rest_route( $this->namespace, '/ai/models', array(
'methods' => 'POST',
'permission_callback' => [ $this->core, 'can_access_features' ],
'callback' => [ $this, 'rest_ai_models' ],
) );
register_rest_route( $this->namespace, '/ai/completions', array(
'methods' => 'POST',
'permission_callback' => [ $this->core, 'can_access_features' ],
'callback' => [ $this, 'rest_ai_completions' ],
) );
register_rest_route( $this->namespace, '/ai/images', array(
'methods' => 'POST',
'permission_callback' => [ $this->core, 'can_access_features' ],
'callback' => [ $this, 'rest_ai_images' ],
) );
register_rest_route( $this->namespace, '/ai/copilot', array(
'methods' => 'POST',
'permission_callback' => [ $this->core, 'can_access_features' ],
'callback' => [ $this, 'rest_ai_copilot' ],
) );
register_rest_route( $this->namespace, '/ai/magic_wand', array(
'methods' => 'POST',
'callback' => [ $this, 'rest_ai_magic_wand' ],
'permission_callback' => [ $this->core, 'can_access_features' ],
) );
register_rest_route( $this->namespace, '/ai/moderate', array(
'methods' => 'POST',
'permission_callback' => [ $this->core, 'can_access_settings' ],
'callback' => [ $this, 'rest_ai_moderate' ],
) );
register_rest_route( $this->namespace, '/ai/transcribe_audio', array(
'methods' => 'POST',
'permission_callback' => [ $this->core, 'can_access_settings' ],
'callback' => [ $this, 'rest_ai_transcribe_audio' ],
) );
register_rest_route( $this->namespace, '/ai/transcribe_image', array(
'methods' => 'POST',
'permission_callback' => [ $this->core, 'can_access_settings' ],
'callback' => [ $this, 'rest_ai_transcribe_image' ],
) );
register_rest_route( $this->namespace, '/ai/json', array(
'methods' => 'POST',
'permission_callback' => [ $this->core, 'can_access_settings' ],
'callback' => [ $this, 'rest_ai_json' ],
) );
// Helpers Endpoints
register_rest_route( $this->namespace, '/helpers/update_post_title', array(
'methods' => 'POST',
'permission_callback' => [ $this->core, 'can_access_features' ],
'callback' => [ $this, 'rest_helpers_update_title' ],
) );
register_rest_route( $this->namespace, '/helpers/update_post_excerpt', array(
'methods' => 'POST',
'permission_callback' => [ $this->core, 'can_access_features' ],
'callback' => [ $this, 'rest_helpers_update_excerpt' ],
) );
register_rest_route( $this->namespace, '/helpers/create_post', array(
'methods' => 'POST',
'permission_callback' => [ $this->core, 'can_access_features' ],
'callback' => [ $this, 'rest_helpers_create_post' ],
) );
register_rest_route( $this->namespace, '/helpers/create_image', array(
'methods' => 'POST',
'permission_callback' => [ $this->core, 'can_access_features' ],
'callback' => [ $this, 'rest_helpers_create_images' ],
) );
register_rest_route( $this->namespace, '/helpers/count_posts', array(
'methods' => 'GET',
'permission_callback' => [ $this->core, 'can_access_features' ],
'callback' => [ $this, 'rest_helpers_count_posts' ],
) );
register_rest_route( $this->namespace, '/helpers/posts_ids', array(
'methods' => 'GET',
'permission_callback' => [ $this->core, 'can_access_features' ],
'callback' => [ $this, 'rest_helpers_posts_ids' ],
) );
register_rest_route( $this->namespace, '/helpers/post_types', array(
'methods' => 'GET',
'permission_callback' => [ $this->core, 'can_access_features' ],
'callback' => [ $this, 'rest_helpers_post_types' ],
) );
register_rest_route( $this->namespace, '/helpers/post_content', array(
'methods' => 'GET',
'permission_callback' => [ $this->core, 'can_access_features' ],
'callback' => [ $this, 'rest_helpers_post_content' ],
) );
// OpenAI Endpoints
register_rest_route( $this->namespace, '/openai/files/list', array(
'methods' => 'GET',
'permission_callback' => [ $this->core, 'can_access_settings' ],
'callback' => [ $this, 'rest_openai_files_get' ],
) );
register_rest_route( $this->namespace, '/openai/files/upload', array(
'methods' => 'POST',
'permission_callback' => [ $this->core, 'can_access_settings' ],
'callback' => [ $this, 'rest_openai_files_upload' ],
) );
register_rest_route( $this->namespace, '/openai/files/delete', array(
'methods' => 'POST',
'permission_callback' => [ $this->core, 'can_access_settings' ],
'callback' => [ $this, 'rest_openai_files_delete' ],
) );
register_rest_route( $this->namespace, '/openai/files/download', array(
'methods' => 'POST',
'permission_callback' => [ $this->core, 'can_access_settings' ],
'callback' => [ $this, 'rest_openai_files_download' ],
) );
register_rest_route( $this->namespace, '/openai/files/finetune', array(
'methods' => 'POST',
'permission_callback' => [ $this->core, 'can_access_settings' ],
'callback' => [ $this, 'rest_openai_files_finetune' ],
) );
register_rest_route( $this->namespace, '/openai/finetunes/list_deleted', array(
'methods' => 'GET',
'permission_callback' => [ $this->core, 'can_access_settings' ],
'callback' => [ $this, 'rest_openai_deleted_finetunes_get' ],
) );
// register_rest_route( $this->namespace, '/openai/models', array(
// 'methods' => 'GET',
// 'permission_callback' => [ $this->core, 'can_access_settings' ],
// 'callback' => [ $this, 'rest_openai_models_get' ],
// ) );
register_rest_route( $this->namespace, '/openai/finetunes/list', array(
'methods' => 'GET',
'permission_callback' => [ $this->core, 'can_access_settings' ],
'callback' => [ $this, 'rest_openai_finetunes_get' ],
) );
register_rest_route( $this->namespace, '/openai/finetunes/delete', array(
'methods' => 'POST',
'permission_callback' => [ $this->core, 'can_access_settings' ],
'callback' => [ $this, 'rest_openai_finetunes_delete' ],
) );
register_rest_route( $this->namespace, '/openai/finetunes/cancel', array(
'methods' => 'POST',
'permission_callback' => [ $this->core, 'can_access_settings' ],
'callback' => [ $this, 'rest_openai_finetunes_cancel' ],
) );
register_rest_route( $this->namespace, '/openai/incidents', array(
'methods' => 'GET',
'permission_callback' => [ $this->core, 'can_access_settings' ],
'callback' => [ $this, 'rest_openai_incidents' ],
) );
// Logging Endpoints
register_rest_route( $this->namespace, '/get_logs', array(
'methods' => 'GET',
'permission_callback' => array( $this->core, 'can_access_features' ),
'callback' => array( $this, 'rest_get_logs' )
) );
register_rest_route( $this->namespace, '/clear_logs', array(
'methods' => 'GET',
'permission_callback' => array( $this->core, 'can_access_features' ),
'callback' => array( $this, 'rest_clear_logs' )
) );
}
catch ( Exception $e ) {
var_dump( $e );
}
}
function rest_start_session() {
try {
$sessionId = $this->core->get_session_id();
$restNonce = $this->core->get_nonce( true );
return new WP_REST_Response( [
'success' => true,
'sessionId' => $sessionId,
'restNonce' => $restNonce
], 200 );
}
catch ( Exception $e ) {
$message = apply_filters( 'mwai_ai_exception', $e->getMessage() );
return new WP_REST_Response( [ 'success' => false, 'message' => $message ], 500 );
}
}
function rest_settings_list() {
return new WP_REST_Response( [
'success' => true,
'options' => $this->core->get_all_options()
], 200 );
}
function rest_settings_update( $request ) {
try {
$params = $request->get_json_params();
$value = $params['options'];
$options = $this->core->update_options( $value );
$success = !!$options;
$message = __( $success ? 'OK' : "Could not update options.", 'ai-engine' );
return new WP_REST_Response([ 'success' => $success, 'message' => $message, 'options' => $options ], 200 );
}
catch ( Exception $e ) {
$message = apply_filters( 'mwai_ai_exception', $e->getMessage() );
return new WP_REST_Response([ 'success' => false, 'message' => $message ], 500 );
}
}
function rest_settings_reset() {
try {
$options = $this->core->reset_options();
$success = !!$options;
$message = __( $success ? 'OK' : "Could not reset options.", 'ai-engine' );
return new WP_REST_Response([ 'success' => $success, 'message' => $message, 'options' => $options ], 200 );
}
catch ( Exception $e ) {
$message = apply_filters( 'mwai_ai_exception', $e->getMessage() );
return new WP_REST_Response([ 'success' => false, 'message' => $message ], 500 );
}
}
function rest_ai_models( $request ) {
try {
$params = $request->get_json_params();
$envId = $params['envId'];
$engine = Meow_MWAI_Engines_Factory::get( $this->core, $envId );
$models = $engine->retrieve_models();
return new WP_REST_Response([ 'success' => true, 'models' => $models ], 200 );
}
catch ( Exception $e ) {
$message = apply_filters( 'mwai_ai_exception', $e->getMessage() );
return new WP_REST_Response([ 'success' => false, 'message' => $message ], 500 );
}
}
function rest_ai_completions( $request ) {
try {
$params = $request->get_json_params();
$message = $this->retrieve_message( $params );
$query = new Meow_MWAI_Query_Text( $message );
$query->inject_params( $params );
// Handle streaming
$stream = $params['stream'] ?? false;
$streamCallback = null;
if ( $stream ) {
$streamCallback = function( $reply ) {
//$raw = _wp_specialchars( $reply, ENT_NOQUOTES, 'UTF-8', true );
$raw = $reply;
$this->core->stream_push( [ 'type' => 'live', 'data' => $raw ] );
if ( ob_get_level() > 0 ) {
ob_flush();
}
flush();
};
header( 'Cache-Control: no-cache' );
header( 'Content-Type: text/event-stream' );
header( 'X-Accel-Buffering: no' ); // This is useful to disable buffering in nginx through headers.
ob_implicit_flush( true );
ob_end_flush();
}
// Process Reply
$reply = $this->core->run_query( $query, $streamCallback );
$restRes = [
'success' => true,
'data' => $reply->result,
'usage' => $reply->usage
];
if ( $stream ) {
$this->core->stream_push( [ 'type' => 'end', 'data' => json_encode( $restRes ) ] );
die();
}
return new WP_REST_Response( $restRes, 200 );
}
catch ( Exception $e ) {
$message = apply_filters( 'mwai_ai_exception', $e->getMessage() );
if ( $stream ) {
$this->core->stream_push( [ 'type' => 'error', 'data' => $message ] );
}
else {
return new WP_REST_Response([ 'success' => false, 'message' => $message ], 500 );
}
}
}
function rest_ai_images( $request ) {
try {
$params = $request->get_json_params();
$message = $this->retrieve_message( $params );
$query = new Meow_MWAI_Query_Image( $message );
$query->inject_params( $params );
$reply = $this->core->run_query( $query );
return new WP_REST_Response([ 'success' => true, 'data' => $reply->results, 'usage' => $reply->usage ], 200 );
}
catch ( Exception $e ) {
$message = apply_filters( 'mwai_ai_exception', $e->getMessage() );
return new WP_REST_Response([ 'success' => false, 'message' => $message ], 500 );
}
}
function rest_ai_magic_wand( $request ) {
try {
$params = $request->get_json_params();
$action = isset( $params['action'] ) ? $params['action'] : null;
$data = isset( $params['data'] ) ? $params['data'] : null;
if ( empty( $data ) || empty( $action ) ) {
return new WP_REST_Response([ 'success' => false, 'message' => "An action and some data are required." ], 500 );
}
$data = apply_filters( 'mwai_magic_wand_' . $action, "", $data );
return new WP_REST_Response([ 'success' => true, 'data' => $data ], 200 );
}
catch ( Exception $e ) {
$message = apply_filters( 'mwai_ai_exception', $e->getMessage() );
return new WP_REST_Response([ 'success' => false, 'message' => $message ], 500 );
}
}
function rest_ai_copilot( $request ) {
try {
$params = $request->get_json_params();
$action = sanitize_text_field( $params['action'] );
$message = $this->retrieve_message( $params, true );
if ( empty( $action ) || empty( $message ) ) {
return new WP_REST_Response([ 'success' => false, 'message' => "Copilot needs an action and a prompt." ], 500 );
}
$query = new Meow_MWAI_Query_Text( $message, 2048 );
$query->set_scope( 'admin-tools' );
$model = $this->core->get_option( 'ai_default_model' );
$env = $this->core->get_option( 'ai_default_env' );
if ( !empty( $env ) ) {
$query->set_env_id( $env );
}
if ( !empty( $model ) ) {
$query->set_model( $model );
}
$reply = $this->core->run_query( $query );
return new WP_REST_Response([ 'success' => true, 'data' => $reply->result ], 200 );
}
catch ( Exception $e ) {
$message = apply_filters( 'mwai_ai_exception', $e->getMessage() );
return new WP_REST_Response([ 'success' => false, 'message' => $message ], 500 );
}
}
function rest_helpers_update_title( $request ) {
try {
$params = $request->get_json_params();
$title = sanitize_text_field( $params['title'] );
$postId = intval( $params['postId'] );
$post = get_post( $postId );
if ( !$post ) {
throw new Exception( 'There is no post with this ID.' );
}
$post->post_title = $title;
//$post->post_name = sanitize_title( $title );
wp_update_post( $post );
return new WP_REST_Response([ 'success' => true, 'message' => "Title updated." ], 200 );
}
catch ( Exception $e ) {
$message = apply_filters( 'mwai_ai_exception', $e->getMessage() );
return new WP_REST_Response([ 'success' => false, 'message' => $message ], 500 );
}
}
function rest_helpers_update_excerpt( $request ) {
try {
$params = $request->get_json_params();
$excerpt = sanitize_text_field( $params['excerpt'] );
$postId = intval( $params['postId'] );
$post = get_post( $postId );
if ( !$post ) {
throw new Exception( 'There is no post with this ID.' );
}
$post->post_excerpt = $excerpt;
wp_update_post( $post );
return new WP_REST_Response([ 'success' => true, 'message' => "Excerpt updated." ], 200 );
}
catch ( Exception $e ) {
$message = apply_filters( 'mwai_ai_exception', $e->getMessage() );
return new WP_REST_Response([ 'success' => false, 'message' => $message ], 500 );
}
}
function rest_helpers_create_post( $request ) {
try {
$params = $request->get_json_params();
$title = sanitize_text_field( $params['title'] );
$content = sanitize_textarea_field( $params['content'] );
$excerpt = sanitize_text_field( $params['excerpt'] );
$postType = sanitize_text_field( $params['postType'] );
$post = new stdClass();
$post->post_title = $title;
$post->post_excerpt = $excerpt;
$post->post_content = $content;
$post->post_status = 'draft';
$post->post_type = isset( $postType ) ? $postType : 'post';
// TODO: Let's try to avoid using Markdown to create the Post
// Instead, we should create Gutenberg Blocks, or simple HTML.
// Then, we can get rid of the library for Markdown.
$post->post_content = $this->core->markdown_to_html( $post->post_content );
$postId = wp_insert_post( $post );
return new WP_REST_Response([ 'success' => true, 'postId' => $postId ], 200 );
}
catch ( Exception $e ) {
$message = apply_filters( 'mwai_ai_exception', $e->getMessage() );
return new WP_REST_Response([ 'success' => false, 'message' => $message ], 500 );
}
}
function rest_helpers_create_images( $request ) {
try {
$params = $request->get_json_params();
$title = sanitize_text_field( $params['title'] );
$caption = sanitize_text_field( $params['caption'] );
$alt = sanitize_text_field( $params['alt'] );
$description = sanitize_text_field( $params['description'] );
$url = $params['url'];
$filename = sanitize_text_field( $params['filename'] );
$attachmentId = $this->core->add_image_from_url( $url, $filename, $title, $description, $caption, $alt );
return new WP_REST_Response([ 'success' => true, 'attachmentId' => $attachmentId ], 200 );
}
catch ( Exception $e ) {
$message = apply_filters( 'mwai_ai_exception', $e->getMessage() );
return new WP_REST_Response([ 'success' => false, 'message' => $message ], 500 );
}
}
function rest_openai_files_get() {
try {
$envId = isset( $_GET['envId'] ) ? $_GET['envId'] : null;
$purposeFilter = isset( $_GET['purpose'] ) ? $_GET['purpose'] : null;
$openai = Meow_MWAI_Engines_Factory::get_openai( $this->core, $envId );
$files = $openai->list_files( $purposeFilter );
return new WP_REST_Response([ 'success' => true, 'files' => $files ], 200 );
}
catch ( Exception $e ) {
$message = apply_filters( 'mwai_ai_exception', $e->getMessage() );
return new WP_REST_Response([ 'success' => false, 'message' => $message ], 500 );
}
}
function rest_openai_deleted_finetunes_get() {
try {
$envId = isset( $_GET['envId'] ) ? $_GET['envId'] : null;
$legacy = isset( $_GET['legacy'] ) ? $_GET['legacy'] === 'true' : false;
$openai = Meow_MWAI_Engines_Factory::get_openai( $this->core, $envId );
$finetunes = $openai->list_deleted_finetunes( $legacy );
return new WP_REST_Response([ 'success' => true, 'finetunes' => $finetunes ], 200 );
}
catch ( Exception $e ) {
$message = apply_filters( 'mwai_ai_exception', $e->getMessage() );
return new WP_REST_Response([ 'success' => false, 'message' => $message ], 500 );
}
}
function rest_openai_finetunes_get() {
try {
$envId = isset( $_GET['envId'] ) ? $_GET['envId'] : null;
$legacy = isset( $_GET['legacy'] ) ? $_GET['legacy'] === 'true' : false;
$openai = Meow_MWAI_Engines_Factory::get_openai( $this->core, $envId );
$finetunes = $openai->list_finetunes( $legacy );
return new WP_REST_Response([ 'success' => true, 'finetunes' => $finetunes ], 200 );
}
catch ( Exception $e ) {
$message = apply_filters( 'mwai_ai_exception', $e->getMessage() );
return new WP_REST_Response([ 'success' => false, 'message' => $message ], 500 );
}
}
function rest_openai_files_upload( $request ) {
try {
$params = $request->get_json_params();
$envId = $params['envId'];;
$filename = sanitize_text_field( $params['filename'] );
$data = $params['data'];
$openai = Meow_MWAI_Engines_Factory::get_openai( $this->core, $envId );
$file = $openai->upload_file( $filename, $data );
return new WP_REST_Response([ 'success' => true, 'file' => $file ], 200 );
}
catch ( Exception $e ) {
$message = apply_filters( 'mwai_ai_exception', $e->getMessage() );
return new WP_REST_Response([ 'success' => false, 'message' => $message ], 500 );
}
}
function rest_openai_files_delete( $request ) {
try {
$params = $request->get_json_params();
$envId = $params['envId'];;
$fileId = $params['fileId'];
$openai = Meow_MWAI_Engines_Factory::get_openai( $this->core, $envId );
$openai->delete_file( $fileId );
return new WP_REST_Response([ 'success' => true ], 200 );
}
catch ( Exception $e ) {
$message = apply_filters( 'mwai_ai_exception', $e->getMessage() );
return new WP_REST_Response([ 'success' => false, 'message' => $message ], 500 );
}
}
function rest_openai_finetunes_cancel( $request ) {
try {
$params = $request->get_json_params();
$envId = $params['envId'];;
$finetuneId = $params['finetuneId'];
$openai = Meow_MWAI_Engines_Factory::get_openai( $this->core, $envId );
$openai->cancel_finetune( $finetuneId );
return new WP_REST_Response([ 'success' => true ], 200 );
}
catch ( Exception $e ) {
$message = apply_filters( 'mwai_ai_exception', $e->getMessage() );
return new WP_REST_Response([ 'success' => false, 'message' => $message ], 500 );
}
}
function rest_openai_finetunes_delete( $request ) {
try {
$params = $request->get_json_params();
$envId = $params['envId'];;
$modelId = $params['modelId'];
$openai = Meow_MWAI_Engines_Factory::get_openai( $this->core, $envId );
$openai->delete_finetune( $modelId );
return new WP_REST_Response([ 'success' => true ], 200 );
}
catch ( Exception $e ) {
$message = apply_filters( 'mwai_ai_exception', $e->getMessage() );
return new WP_REST_Response([ 'success' => false, 'message' => $message ], 500 );
}
}
function rest_openai_files_download( $request ) {
try {
$params = $request->get_json_params();
$envId = $params['envId'];;
$fileId = $params['fileId'];
$openai = Meow_MWAI_Engines_Factory::get_openai( $this->core, $envId );
$filename = $openai->download_file( $fileId );
$data = file_get_contents( $filename );
return new WP_REST_Response([ 'success' => true, 'data' => $data ], 200 );
}
catch ( Exception $e ) {
$message = apply_filters( 'mwai_ai_exception', $e->getMessage() );
return new WP_REST_Response([ 'success' => false, 'message' => $message ], 500 );
}
}
function rest_openai_files_finetune( $request ) {
try {
$params = $request->get_json_params();
$envId = $params['envId'];;
$fileId = $params['fileId'];
$model = $params['model'];
$suffix = $params['suffix'];
$hyperparams = [
"nEpochs" => isset( $params['nEpochs'] ) ? $params['nEpochs'] : null,
"batchSize" => isset( $params['batchSize'] ) ? $params['batchSize'] : null,
];
$openai = Meow_MWAI_Engines_Factory::get_openai( $this->core, $envId );
$finetune = $openai->run_finetune( $fileId, $model, $suffix, $hyperparams );
return new WP_REST_Response([ 'success' => true, 'finetune' => $finetune ], 200 );
}
catch ( Exception $e ) {
$message = apply_filters( 'mwai_ai_exception', $e->getMessage() );
return new WP_REST_Response([ 'success' => false, 'message' => $message ], 500 );
}
}
function rest_openai_incidents() {
try {
$transient = get_transient( 'mwai_openai_incidents' );
if ( $transient ) {
return new WP_REST_Response([ 'success' => true, 'incidents' => $transient ], 200 );
}
$openai = Meow_MWAI_Engines_Factory::get_openai( $this->core );
$incidents = $openai->get_incidents();
set_transient( 'mwai_openai_incidents', $incidents, 60 * 10 );
return new WP_REST_Response([ 'success' => true, 'incidents' => $incidents ], 200 );
}
catch ( Exception $e ) {
$message = apply_filters( 'mwai_ai_exception', $e->getMessage() );
return new WP_REST_Response([ 'success' => false, 'message' => $message ], 500 );
}
}
function rest_helpers_count_posts( $request ) {
try {
$params = $request->get_query_params();
$postType = $params['postType'];
$postStatus = !empty( $params['postStatus'] ) ? explode( ',', $params['postStatus'] ) : [ 'publish' ];
$count = wp_count_posts( $postType );
$count = array_sum( array_intersect_key( (array)$count, array_flip( $postStatus ) ) );
return new WP_REST_Response([ 'success' => true, 'count' => $count ], 200 );
}
catch ( Exception $e ) {
$message = apply_filters( 'mwai_ai_exception', $e->getMessage() );
return new WP_REST_Response([ 'success' => false, 'message' => $message ], 500 );
}
}
function rest_helpers_posts_ids( $request ) {
try {
$params = $request->get_query_params();
$postType = $params['postType'];
$postStatus = !empty( $params['postStatus'] ) ? explode( ',', $params['postStatus'] ) : [ 'publish' ];
$posts = get_posts( [
'posts_per_page' => -1,
'post_type' => $postType,
'post_status' => $postStatus,
'fields' => 'ids'
] );
return new WP_REST_Response([ 'success' => true, 'postIds' => $posts ], 200 );
}
catch ( Exception $e ) {
$message = apply_filters( 'mwai_ai_exception', $e->getMessage() );
return new WP_REST_Response([ 'success' => false, 'message' => $message ], 500 );
}
}
function rest_helpers_post_content( $request ) {
try {
$params = $request->get_query_params();
$offset = (int)$params['offset'];
$postType = $params['postType'];
$postStatus = isset( $params['postStatus'] ) ? explode( ',', $params['postStatus'] ) : [ 'publish' ];
$postId = (int)$params['postId'];
$post = null;
if ( !empty( $postId ) ) {
$post = get_post( $postId );
if ( $post->post_status !== 'publish' && $post->post_status !== 'future'
&& $post->post_status !== 'draft' && $post->post_status !== 'private' ) {
$post = null;
}
}
else {
$posts = get_posts( [
'posts_per_page' => 1,
'post_type' => $postType,
'offset' => $offset,
'post_status' => $postStatus,
] );
$post = count( $posts ) === 0 ? null : $posts[0];
}
if ( !$post ) {
return new WP_REST_Response([ 'success' => false, 'message' => 'Post not found' ], 404 );
}
$cleanPost = $this->core->get_post( $post );
return new WP_REST_Response([ 'success' => true, 'content' => $cleanPost['content'],
'checksum' => $cleanPost['checksum'], 'language' => $cleanPost['language'], 'excerpt' => $cleanPost['excerpt'],
'postId' => $cleanPost['postId'], 'title' => $cleanPost['title'], 'url' => $cleanPost['url'] ], 200 );
}
catch ( Exception $e ) {
$message = apply_filters( 'mwai_ai_exception', $e->getMessage() );
return new WP_REST_Response([ 'success' => false, 'message' => $message ], 500 );
}
}
function rest_system_templates_get( $request ) {
try {
$params = $request->get_query_params();
$category = $params['category'];
$templates = [];
$templates_option = get_option( 'mwai_templates', [] );
if ( !is_array( $templates_option ) ) {
update_option( 'mwai_templates', [] );
}
$categories = array_column( $templates_option, 'category' );
$index = array_search( $category, $categories );
$templates = [];
if ( $index !== false ) {
$templates = $templates_option[$index]['templates'];
}
return new WP_REST_Response([ 'success' => true, 'templates' => $templates ], 200 );
}
catch ( Exception $e ) {
$message = apply_filters( 'mwai_ai_exception', $e->getMessage() );
return new WP_REST_Response([ 'success' => false, 'message' => $message ], 500 );
}
}
function rest_system_templates_save( $request ) {
try {
$params = $request->get_json_params();
$category = $params['category'];
$templates = $params['templates'];
$templates_option = get_option( 'mwai_templates', [] );
$categories = array_column( $templates_option, 'category' );
$index = array_search( $category, $categories );
if ( $index !== false && $index >= 0 ) {
$templates_option[$index]['templates'] = $templates;
}
else {
$group = [ 'category' => $category, 'templates' => $templates ];
$templates_option[] = $group;
}
update_option( 'mwai_templates', $templates_option );
return new WP_REST_Response([ 'success' => true ], 200 );
}
catch ( Exception $e ) {
$message = apply_filters( 'mwai_ai_exception', $e->getMessage() );
return new WP_REST_Response([ 'success' => false, 'message' => $message ], 500 );
}
}
function rest_system_logs_list( $request ) {
try {
$params = $request->get_json_params();
$offset = $params['offset'];
$limit = $params['limit'];
$filters = $params['filters'];
$sort = $params['sort'];
$logs = apply_filters( 'mwai_stats_logs', [], $offset, $limit, $filters, $sort );
return new WP_REST_Response([ 'success' => true, 'total' => $logs['total'], 'logs' => $logs['rows'] ], 200 );
}
catch ( Exception $e ) {
$message = apply_filters( 'mwai_ai_exception', $e->getMessage() );
return new WP_REST_Response([ 'success' => false, 'message' => $message ], 500 );
}
}
function rest_system_logs_delete( $request ) {
try {
$params = $request->get_json_params();
$logIds = $params['logIds'];
$success = apply_filters( 'mwai_stats_logs_delete', true, $logIds );
return new WP_REST_Response([ 'success' => $success ], 200 );
}
catch ( Exception $e ) {
$message = apply_filters( 'mwai_ai_exception', $e->getMessage() );
return new WP_REST_Response([ 'success' => false, 'message' => $message ], 500 );
}
}
function rest_system_logs_meta_get( $request ) {
try {
$params = $request->get_json_params();
$logId = $params['logId'];
$metaKeys = $params['metaKeys'];
$data = apply_filters( 'mwai_stats_logs_meta', [], $logId, $metaKeys );
return new WP_REST_Response([ 'success' => true, 'data' => $data ], 200 );
}
catch ( Exception $e ) {
$message = apply_filters( 'mwai_ai_exception', $e->getMessage() );
return new WP_REST_Response([ 'success' => false, 'message' => $message ], 500 );
}
}
function rest_ai_moderate( $request ) {
try {
$params = $request->get_json_params();
$envId = $params['envId'];
$text = $params['text'];
if ( !$text ) {
return new WP_REST_Response([ 'success' => false, 'message' => 'Text not found.' ], 404 );
}
$openai = Meow_MWAI_Engines_Factory::get_openai( $this->core, $envId );
$results = $openai->moderate( $text );
return new WP_REST_Response([ 'success' => true, 'results' => $results ], 200 );
}
catch ( Exception $e ) {
$message = apply_filters( 'mwai_ai_exception', $e->getMessage() );
return new WP_REST_Response([ 'success' => false, 'message' => $message ], 500 );
}
}
function rest_ai_transcribe_audio( $request ) {
try {
$params = $request->get_json_params();
$query = new Meow_MWAI_Query_Transcribe();
$query->inject_params( $params );
$query->set_scope('admin-tools');
$reply = $this->core->run_query( $query );
return new WP_REST_Response([ 'success' => true, 'data' => $reply->result ], 200 );
}
catch ( Exception $e ) {
$message = apply_filters( 'mwai_ai_exception', $e->getMessage() );
return new WP_REST_Response([ 'success' => false, 'message' => $message ], 500 );
}
}
function rest_ai_transcribe_image( $request ) {
try {
global $mwai;
$params = $request->get_json_params();
$message = $this->retrieve_message( $params );
$url = !empty( $params['url'] ) ? $params['url'] : null;
$path = !empty( $params['path'] ) ? $params['path'] : null;
$result = $mwai->simpleVisionQuery( $message, $url, $path );
return new WP_REST_Response([ 'success' => true, 'data' => $result ], 200 );
}
catch ( Exception $e ) {
$message = apply_filters( 'mwai_ai_exception', $e->getMessage() );
return new WP_REST_Response([ 'success' => false, 'message' => $message ], 500 );
}
}
function rest_ai_json( $request ) {
try {
global $mwai;
$params = $request->get_json_params();
$message = $this->retrieve_message( $params );
$result = $mwai->simpleJsonQuery( $message );
return new WP_REST_Response([ 'success' => true, 'data' => $result ], 200 );
}
catch ( Exception $e ) {
$message = apply_filters( 'mwai_ai_exception', $e->getMessage() );
return new WP_REST_Response([ 'success' => false, 'message' => $message ], 500 );
}
}
function rest_helpers_post_types() {
try {
$postTypes = $this->core->get_post_types();
return new WP_REST_Response([ 'success' => true, 'postTypes' => $postTypes ], 200 );
}
catch ( Exception $e ) {
$message = apply_filters( 'mwai_ai_exception', $e->getMessage() );
return new WP_REST_Response([ 'success' => false, 'message' => $message ], 500 );
}
}
function rest_settings_themes( $request ) {
try {
$method = $request->get_method();
if ( $method === 'GET' ) {
$themes = $this->core->get_themes();
return new WP_REST_Response([ 'success' => true, 'themes' => $themes ], 200 );
}
else if ( $method === 'POST' ) {
$params = $request->get_json_params();
$themes = $params['themes'];
$themes = $this->core->update_themes( $themes );
return new WP_REST_Response([ 'success' => true, 'themes' => $themes ], 200 );
}
}
catch ( Exception $e ) {
$message = apply_filters( 'mwai_ai_exception', $e->getMessage() );
return new WP_REST_Response([ 'success' => false, 'message' => $message ], 500 );
}
}
function rest_settings_chatbots( $request ) {
try {
$method = $request->get_method();
if ( $method === 'GET' ) {
$chatbots = $this->core->get_chatbots();
return new WP_REST_Response([ 'success' => true, 'chatbots' => $chatbots ], 200 );
}
else if ( $method === 'POST' ) {
$params = $request->get_json_params();
$chatbots = $params['chatbots'];
$chatbots = $this->core->update_chatbots( $chatbots );
return new WP_REST_Response([ 'success' => true, 'chatbots' => $chatbots ], 200 );
}
return new WP_REST_Response([ 'success' => false, 'message' => 'Method not allowed' ], 405 );
}
catch ( Exception $e ) {
$message = apply_filters( 'mwai_ai_exception', $e->getMessage() );
return new WP_REST_Response([ 'success' => false, 'message' => $message ], 500 );
}
}
#region Logs
function rest_get_logs() {
$logs = $this->core->get_logs();
return new WP_REST_Response( [ 'success' => true, 'data' => $logs ], 200 );
}
function rest_clear_logs() {
$this->core->clear_logs();
return new WP_REST_Response( [ 'success' => true ], 200 );
}
#endregion
}