PluginProbe ʕ •ᴥ•ʔ
AI Engine – The Chatbot, AI Framework & MCP for WordPress / 0.2.0
AI Engine – The Chatbot, AI Framework & MCP for WordPress v0.2.0
3.5.7 3.5.6 3.5.5 3.5.4 3.5.3 3.5.2 3.5.1 3.5.0 3.4.9 3.4.8 3.4.7 0.2.1 1.6.91 0.2.2 1.6.92 0.2.3 1.6.93 0.2.4 1.6.94 0.2.5 1.6.95 0.2.6 1.6.96 0.2.7 1.6.97 0.2.8 1.6.98 0.2.9 1.6.99 0.3.0 1.7.0 0.3.1 1.7.1 0.3.2 1.7.2 0.3.3 1.7.3 0.3.4 1.7.4 0.3.5 1.7.5 0.3.6 1.7.6 0.4.0 1.7.7 0.4.1 1.7.8 0.4.2 1.7.9 0.4.3 1.8.0 0.4.4 1.8.1 0.4.5 1.8.2 0.4.6 1.8.3 0.4.7 1.8.4 0.4.8 1.8.5 0.4.9 1.8.6 0.5.0 1.8.7 0.5.1 1.8.8 0.5.2 1.8.9 0.5.3 1.9.0 0.5.4 1.9.1 0.5.5 1.9.2 0.5.6 1.9.3 0.5.7 1.9.4 0.5.8 1.9.5 0.5.9 1.9.6 0.6.0 1.9.7 0.6.1 1.9.8 0.6.2 1.9.81 0.6.3 1.9.82 0.6.4 1.9.83 0.6.5 1.9.84 0.6.6 1.9.85 0.6.7 1.9.86 0.6.8 1.9.87 0.6.9 1.9.88 0.7.0 1.9.89 0.7.1 1.9.90 0.7.2 1.9.91 0.7.3 1.9.92 0.7.4 1.9.93 0.7.5 1.9.94 0.7.6 1.9.95 0.7.7 1.9.96 0.7.8 1.9.97 0.7.9 1.9.98 0.8.0 1.9.99 0.8.1 2.0.0 0.8.2 2.0.1 0.8.3 2.0.2 0.8.4 2.0.3 0.8.5 2.0.4 0.8.6 2.0.5 0.8.7 2.0.6 0.8.8 2.0.7 0.8.9 2.0.8 0.9.0 2.0.9 0.9.2 2.1.0 0.9.3 2.1.1 0.9.4 2.1.2 0.9.5 2.1.3 0.9.6 2.1.4 0.9.7 2.1.5 0.9.8 2.1.6 0.9.81 2.1.7 0.9.82 2.1.8 0.9.83 2.1.9 0.9.84 2.2.0 0.9.85 2.2.1 0.9.86 2.2.2 0.9.87 2.2.3 0.9.88 2.2.4 0.9.89 2.2.5 0.9.9 2.2.51 0.9.91 2.2.52 0.9.92 2.2.53 0.9.93 2.2.54 0.9.94 2.2.56 0.9.95 2.2.57 0.9.96 2.2.6 0.9.97 2.2.60 0.9.98 2.2.61 0.9.99 2.2.62 1.0.0 2.2.63 1.0.01 2.2.70 1.0.1 2.2.80 1.0.2 2.2.81 1.0.3 2.2.90 1.0.4 2.2.91 1.0.5 2.2.92 1.0.6 2.2.93 1.0.7 2.2.94 1.0.8 2.2.95 1.0.9 2.3.0 1.1.0 2.3.1 1.1.1 2.3.2 1.1.2 2.3.3 1.1.3 2.3.4 1.1.4 2.3.5 1.1.5 2.3.6 1.1.6 2.3.7 1.1.7 2.3.8 1.1.8 2.3.9 1.1.9 2.4.0 1.2.0 2.4.1 1.2.1 2.4.2 1.2.2 2.4.3 1.2.21 2.4.4 1.2.3 2.4.5 1.2.30 2.4.6 1.3.0 2.4.7 1.3.1 2.4.8 1.3.2 2.4.9 1.3.3 2.5.0 1.3.31 2.5.1 1.3.32 2.5.2 1.3.33 2.5.3 1.3.34 2.5.4 1.3.35 2.5.5 1.3.36 2.5.6 1.3.37 2.5.7 1.3.38 2.5.8 1.3.39 2.5.9 1.3.40 2.6.0 1.3.41 2.6.1 1.3.42 2.6.2 1.3.43 2.6.3 1.3.44 2.6.5 1.3.45 2.6.6 1.3.46 2.6.7 1.3.47 2.6.8 1.3.48 2.6.9 1.3.49 2.7.0 1.3.50 2.7.1 1.3.51 2.7.2 1.3.52 2.7.3 1.3.53 2.7.4 1.3.54 2.7.5 1.3.56 2.7.6 1.3.57 2.7.7 1.3.58 2.7.8 1.3.59 2.7.9 1.3.60 2.8.0 1.3.61 2.8.1 1.3.62 2.8.2 1.3.63 2.8.3 1.3.64 2.8.4 1.3.65 2.8.5 1.3.66 2.8.6 1.3.67 2.8.7 1.3.68 2.8.8 1.3.69 2.8.9 1.3.70 2.9.0 1.3.71 2.9.1 1.3.72 2.9.2 1.3.73 2.9.3 1.3.74 2.9.4 1.3.75 2.9.5 1.3.76 2.9.6 1.3.77 2.9.7 1.3.78 2.9.8 1.3.79 2.9.9 1.3.80 3.0.0 1.3.81 3.0.1 1.3.82 3.0.2 1.3.83 3.0.3 1.3.84 3.0.4 1.3.85 3.0.5 1.3.86 3.0.6 1.3.87 3.0.7 1.3.88 3.0.8 1.3.89 3.0.9 1.3.90 3.1.0 1.3.91 3.1.1 1.3.92 3.1.2 1.3.93 3.1.3 1.3.94 3.1.4 1.3.95 3.1.5 1.3.96 3.1.6 1.3.97 3.1.7 1.3.98 3.1.8 1.3.99 3.1.9 1.4.0 3.2.0 1.4.1 3.2.1 1.4.2 3.2.2 1.4.3 3.2.3 1.4.4 3.2.4 1.4.5 3.2.5 1.4.6 3.2.6 1.4.7 3.2.7 1.4.8 3.2.8 1.4.9 3.2.9 1.5.0 3.3.0 1.5.1 3.3.1 1.5.2 3.3.2 1.5.3 3.3.3 1.5.4 3.3.4 1.5.5 3.3.5 1.5.6 3.3.6 1.5.7 3.3.7 1.5.8 3.3.8 1.5.9 3.3.9 1.6.0 3.4.0 1.6.1 3.4.1 1.6.2 3.4.2 1.6.3 3.4.3 1.6.5 3.4.4 1.6.51 3.4.5 1.6.52 3.4.6 1.6.53 1.6.54 1.6.55 1.6.56 1.6.57 1.6.58 1.6.59 1.6.60 1.6.61 1.6.62 1.6.63 1.6.64 1.6.65 1.6.66 1.6.67 1.6.68 trunk 1.6.69 0.0.1 1.6.70 0.0.2 1.6.71 0.0.3 1.6.72 0.0.4 1.6.73 0.0.5 1.6.74 0.0.6 1.6.75 0.0.7 1.6.76 0.0.8 1.6.77 0.0.9 1.6.78 0.1.0 1.6.79 0.1.1 1.6.81 0.1.2 1.6.82 0.1.3 1.6.83 0.1.4 1.6.84 0.1.5 1.6.85 0.1.6 1.6.86 0.1.7 1.6.87 0.1.8 1.6.88 0.1.9 1.6.89 0.2.0 1.6.90
ai-engine / classes / rest.php
ai-engine / classes Last commit date
admin.php 3 years ago ai.php 3 years ago answer.php 3 years ago core.php 3 years ago init.php 3 years ago query.php 3 years ago queryimage.php 3 years ago querytext.php 3 years ago rest.php 3 years ago shortcodes.php 3 years ago ui.php 3 years ago
rest.php
313 lines
1 <?php
2
3 class Meow_MWAI_Rest
4 {
5 private $core = null;
6 private $namespace = 'ai-engine/v1';
7
8 public function __construct( $core ) {
9 if ( !current_user_can( 'administrator' ) ) {
10 return;
11 }
12 $this->core = $core;
13 add_action( 'rest_api_init', array( $this, 'rest_api_init' ) );
14 }
15
16 function rest_api_init() {
17 try {
18 register_rest_route( $this->namespace, '/update_option', array(
19 'methods' => 'POST',
20 'permission_callback' => array( $this->core, 'can_access_settings' ),
21 'callback' => array( $this, 'rest_update_option' )
22 ) );
23 register_rest_route( $this->namespace, '/all_settings', array(
24 'methods' => 'GET',
25 'permission_callback' => array( $this->core, 'can_access_settings' ),
26 'callback' => array( $this, 'rest_all_settings' ),
27 ) );
28 register_rest_route( $this->namespace, '/make_completions', array(
29 'methods' => 'POST',
30 'permission_callback' => array( $this->core, 'can_access_features' ),
31 'callback' => array( $this, 'make_completions' ),
32 ) );
33 register_rest_route( $this->namespace, '/make_images', array(
34 'methods' => 'POST',
35 'permission_callback' => array( $this->core, 'can_access_features' ),
36 'callback' => array( $this, 'make_images' ),
37 ) );
38 register_rest_route( $this->namespace, '/make_titles', array(
39 'methods' => 'POST',
40 'permission_callback' => array( $this->core, 'can_access_features' ),
41 'callback' => array( $this, 'make_titles' ),
42 ) );
43 register_rest_route( $this->namespace, '/make_excerpts', array(
44 'methods' => 'POST',
45 'permission_callback' => array( $this->core, 'can_access_features' ),
46 'callback' => array( $this, 'make_excerpts' ),
47 ) );
48 register_rest_route( $this->namespace, '/update_post_title', array(
49 'methods' => 'POST',
50 'permission_callback' => array( $this->core, 'can_access_features' ),
51 'callback' => array( $this, 'update_post_title' ),
52 ) );
53 register_rest_route( $this->namespace, '/update_post_excerpt', array(
54 'methods' => 'POST',
55 'permission_callback' => array( $this->core, 'can_access_features' ),
56 'callback' => array( $this, 'update_post_excerpt' ),
57 ) );
58 register_rest_route( $this->namespace, '/create_post', array(
59 'methods' => 'POST',
60 'permission_callback' => array( $this->core, 'can_access_features' ),
61 'callback' => array( $this, 'create_post' ),
62 ) );
63 register_rest_route( $this->namespace, '/create_image', array(
64 'methods' => 'POST',
65 'permission_callback' => array( $this->core, 'can_access_features' ),
66 'callback' => array( $this, 'create_image' ),
67 ) );
68 }
69 catch ( Exception $e ) {
70 var_dump( $e );
71 }
72 }
73
74 function rest_all_settings() {
75 return new WP_REST_Response( [
76 'success' => true,
77 'data' => $this->core->get_all_options()
78 ], 200 );
79 }
80
81 function rest_update_option( $request ) {
82 try {
83 $params = $request->get_json_params();
84 $value = $params['options'];
85 $options = $this->core->update_options( $value );
86 $success = !!$options;
87 $message = __( $success ? 'OK' : "Could not update options.", 'ai-engine' );
88 return new WP_REST_Response([ 'success' => $success, 'message' => $message, 'options' => $options ], 200 );
89 }
90 catch ( Exception $e ) {
91 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
92 }
93 }
94
95 function createValidationResult( $result = true, $message = null) {
96 $message = $message ? $message : __( 'OK', 'ai-engine' );
97 return [ 'result' => $result, 'message' => $message ];
98 }
99
100 function validate_updated_option( $option_name ) {
101 $option_checkbox = get_option( 'mwai_option_checkbox', false );
102 $option_text = get_option( 'mwai_option_text', 'Default' );
103 if ( $option_checkbox === '' )
104 update_option( 'mwai_option_checkbox', false );
105 if ( $option_text === '' )
106 update_option( 'mwai_option_text', 'Default' );
107 return $this->createValidationResult();
108 }
109
110 function setup_query_based_on_params( $query, $params ) {
111 if ( isset( $params['model'] ) ) {
112 $query->setModel( $params['model'] );
113 }
114 if ( isset( $params['temperature'] ) ) {
115 $query->setTemperature( $params['temperature'] );
116 }
117 if ( isset( $params['apiKey'] ) ) {
118 $query->setApiKey( $params['apiKey'] );
119 }
120 if ( isset( $params['maxResults'] ) ) {
121 $query->setMaxResults( $params['maxResults'] );
122 }
123 return $query;
124 }
125
126 function make_completions( $request ) {
127 try {
128 $params = $request->get_json_params();
129 $prompt = $params['prompt'];
130 $query = new Meow_MWAI_QueryText( $prompt, 2048 );
131 $query = $this->setup_query_based_on_params( $query, $params );
132 $answer = $this->core->ai->run( $query );
133 return new WP_REST_Response([ 'success' => true, 'data' => $answer->result, 'usage' => $answer->usage ], 200 );
134 }
135 catch ( Exception $e ) {
136 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
137 }
138 }
139
140 function make_images( $request ) {
141 try {
142 $params = $request->get_json_params();
143 $prompt = $params['prompt'];
144 $query = new Meow_MWAI_QueryImage( $prompt );
145 $query = $this->setup_query_based_on_params( $query, $params );
146 $answer = $this->core->ai->run( $query );
147 return new WP_REST_Response([ 'success' => true, 'data' => $answer->results, 'usage' => $answer->usage ], 200 );
148 }
149 catch ( Exception $e ) {
150 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
151 }
152 }
153
154 function make_titles( $request ) {
155 try {
156 $params = $request->get_json_params();
157 $postId = intval( $params['postId'] );
158 $text = $this->core->get_text_from_postId( $postId );
159 $prompt = "Create short SEO-friendly title for this text: " . $text;
160 $query = new Meow_MWAI_QueryText( $prompt, 40 );
161 $query->setMaxResults( 5 );
162 $answer = $this->core->ai->run( $query );
163 return new WP_REST_Response([ 'success' => true, 'data' => $answer->results ], 200 );
164 }
165 catch ( Exception $e ) {
166 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
167 }
168 }
169
170 function make_excerpts( $request ) {
171 try {
172 $params = $request->get_json_params();
173 $postId = intval( $params['postId'] );
174 $text = $this->core->get_text_from_postId( $postId );
175 $prompt = "Create SEO-friendly introduction to this text, 120 to 170 characters max, no URLs: " . $text;
176 $query = new Meow_MWAI_QueryText( $prompt, 140 );
177 $query->setMaxResults( 5 );
178 $answer = $this->core->ai->run( $query );
179 return new WP_REST_Response([ 'success' => true, 'data' => $answer->results ], 200 );
180 }
181 catch ( Exception $e ) {
182 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
183 }
184 }
185
186 function update_post_title( $request ) {
187 try {
188 $params = $request->get_json_params();
189 $title = sanitize_text_field( $params['title'] );
190 $postId = intval( $params['postId'] );
191 $post = get_post( $postId );
192 if ( !$post ) {
193 throw new Exception( 'There is no post with this ID.' );
194 }
195 $post->post_title = $title;
196 //$post->post_name = sanitize_title( $title );
197 wp_update_post( $post );
198 return new WP_REST_Response([ 'success' => true, 'message' => "Title updated." ], 200 );
199 }
200 catch ( Exception $e ) {
201 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
202 }
203 }
204
205 function update_post_excerpt( $request ) {
206 try {
207 $params = $request->get_json_params();
208 $excerpt = sanitize_text_field( $params['excerpt'] );
209 $postId = intval( $params['postId'] );
210 $post = get_post( $postId );
211 if ( !$post ) {
212 throw new Exception( 'There is no post with this ID.' );
213 }
214 $post->post_excerpt = $excerpt;
215 wp_update_post( $post );
216 return new WP_REST_Response([ 'success' => true, 'message' => "Excerpt updated." ], 200 );
217 }
218 catch ( Exception $e ) {
219 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
220 }
221 }
222
223 function create_post( $request ) {
224 try {
225 $params = $request->get_json_params();
226 $title = sanitize_text_field( $params['title'] );
227 // Sanitize content that contains line returns and HTML tags
228 $content = sanitize_textarea_field( $params['content'] );
229 $excerpt = sanitize_text_field( $params['excerpt'] );
230 //$postType = sanitize_text_field( $params['postType'] );
231 $post = new stdClass();
232 $post->post_title = $title;
233 $post->post_excerpt = $excerpt;
234 $post->post_content = $content;
235 $post->post_status = 'draft';
236 $post->post_type = 'post';
237 $post->post_content = $this->core->markdown_to_html( $post->post_content );
238 $postId = wp_insert_post( $post );
239 return new WP_REST_Response([ 'success' => true, 'postId' => $postId ], 200 );
240 }
241 catch ( Exception $e ) {
242 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
243 }
244 }
245
246 function curl_download( $Url ) {
247 if ( !function_exists( 'curl_init' ) ) {
248 die( 'CURL is not installed!' );
249 }
250 $ch = curl_init();
251 curl_setopt( $ch, CURLOPT_URL, $Url );
252 curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
253 $output = curl_exec( $ch );
254 curl_close( $ch );
255 return $output;
256 }
257
258 function create_image( $request ) {
259 try {
260 $params = $request->get_json_params();
261 $title = sanitize_text_field( $params['title'] );
262 $caption = sanitize_text_field( $params['caption'] );
263 $alt = sanitize_text_field( $params['alt'] );
264 $description = sanitize_text_field( $params['description'] );
265 $url = $params['url'];
266 $filename = sanitize_text_field( $params['filename'] );
267 $image_data = $this->curl_download( $url );
268 if ( !$image_data ) {
269 throw new Exception( 'Could not download the image.' );
270 }
271 $upload_dir = wp_upload_dir();
272 if ( empty( $filename ) ) {
273 $filename = basename( $url );
274 }
275 $wp_filetype = wp_check_filetype( $filename );
276 if ( wp_mkdir_p( $upload_dir['path'] ) ) {
277 $file = $upload_dir['path'] . '/' . $filename;
278 }
279 else {
280 $file = $upload_dir['basedir'] . '/' . $filename;
281 }
282
283 // Make sure the file is unique, if not, add a number to the end of the file before the extension
284 $i = 1;
285 $parts = pathinfo( $file );
286 while ( file_exists( $file ) ) {
287 $file = $parts['dirname'] . '/' . $parts['filename'] . '-' . $i . '.' . $parts['extension'];
288 $i++;
289 }
290
291 // Write the file
292 file_put_contents( $file, $image_data );
293 $attachment = [
294 'post_mime_type' => $wp_filetype['type'],
295 'post_title' => $title,
296 'post_content' => $description,
297 'post_excerpt' => $caption,
298 'post_status' => 'inherit'
299 ];
300 // Register the file as a Media Library attachment
301 $attachmentId = wp_insert_attachment( $attachment, $file );
302 require_once( ABSPATH . 'wp-admin/includes/image.php' );
303 $attachment_data = wp_generate_attachment_metadata( $attachmentId, $file );
304 wp_update_attachment_metadata( $attachmentId, $attachment_data );
305 update_post_meta( $attachmentId, '_wp_attachment_image_alt', $alt );
306 return new WP_REST_Response([ 'success' => true, 'attachmentId' => $attachmentId ], 200 );
307 }
308 catch ( Exception $e ) {
309 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
310 }
311 }
312 }
313