PluginProbe ʕ •ᴥ•ʔ
AI Engine – The Chatbot, AI Framework & MCP for WordPress / 1.1.2
AI Engine – The Chatbot, AI Framework & MCP for WordPress v1.1.2
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
modules 3 years ago 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 openai.php 3 years ago query.php 3 years ago queryimage.php 3 years ago querytext.php 3 years ago rest.php 3 years ago ui.php 3 years ago
rest.php
577 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 register_rest_route( $this->namespace, '/openai_files', array(
69 'methods' => 'GET',
70 'permission_callback' => array( $this->core, 'can_access_settings' ),
71 'callback' => array( $this, 'openai_files_get' ),
72 ) );
73 register_rest_route( $this->namespace, '/openai_files', array(
74 'methods' => 'DELETE',
75 'permission_callback' => array( $this->core, 'can_access_settings' ),
76 'callback' => array( $this, 'openai_files_delete' ),
77 ) );
78 register_rest_route( $this->namespace, '/openai_files', array(
79 'methods' => 'POST',
80 'permission_callback' => array( $this->core, 'can_access_settings' ),
81 'callback' => array( $this, 'openai_files_upload' ),
82 ) );
83 register_rest_route( $this->namespace, '/openai_files_download', array(
84 'methods' => 'POST',
85 'permission_callback' => array( $this->core, 'can_access_settings' ),
86 'callback' => array( $this, 'openai_files_download' ),
87 ) );
88 register_rest_route( $this->namespace, '/openai_files_finetune', array(
89 'methods' => 'POST',
90 'permission_callback' => array( $this->core, 'can_access_settings' ),
91 'callback' => array( $this, 'openai_files_finetune' ),
92 ) );
93 register_rest_route( $this->namespace, '/openai_finetunes', array(
94 'methods' => 'GET',
95 'permission_callback' => array( $this->core, 'can_access_settings' ),
96 'callback' => array( $this, 'openai_finetunes_get' ),
97 ) );
98 register_rest_route( $this->namespace, '/openai_finetunes', array(
99 'methods' => 'DELETE',
100 'permission_callback' => array( $this->core, 'can_access_settings' ),
101 'callback' => array( $this, 'openai_finetunes_delete' ),
102 ) );
103 register_rest_route( $this->namespace, '/openai_incidents', array(
104 'methods' => 'GET',
105 'permission_callback' => array( $this->core, 'can_access_settings' ),
106 'callback' => array( $this, 'openai_incidents' ),
107 ) );
108 register_rest_route( $this->namespace, '/count_posts', array(
109 'methods' => 'GET',
110 'permission_callback' => array( $this->core, 'can_access_features' ),
111 'callback' => array( $this, 'count_posts' ),
112 ) );
113 register_rest_route( $this->namespace, '/post_content', array(
114 'methods' => 'GET',
115 'permission_callback' => array( $this->core, 'can_access_features' ),
116 'callback' => array( $this, 'post_content' ),
117 ) );
118 register_rest_route( $this->namespace, '/templates', array(
119 'methods' => 'GET',
120 'permission_callback' => array( $this->core, 'can_access_features' ),
121 'callback' => array( $this, 'templates_get' ),
122 ) );
123 register_rest_route( $this->namespace, '/templates', array(
124 'methods' => 'POST',
125 'permission_callback' => array( $this->core, 'can_access_features' ),
126 'callback' => array( $this, 'templates_save' ),
127 ) );
128 register_rest_route( $this->namespace, '/logs', array(
129 'methods' => 'POST',
130 'permission_callback' => array( $this->core, 'can_access_settings' ),
131 'callback' => array( $this, 'get_logs' ),
132 ) );
133 register_rest_route( $this->namespace, '/moderate', array(
134 'methods' => 'POST',
135 'permission_callback' => array( $this->core, 'can_access_settings' ),
136 'callback' => array( $this, 'moderate' ),
137 ) );
138 }
139 catch ( Exception $e ) {
140 var_dump( $e );
141 }
142 }
143
144 function rest_all_settings() {
145 return new WP_REST_Response( [
146 'success' => true,
147 'data' => $this->core->get_all_options()
148 ], 200 );
149 }
150
151 function rest_update_option( $request ) {
152 try {
153 $params = $request->get_json_params();
154 $value = $params['options'];
155 $options = $this->core->update_options( $value );
156 $success = !!$options;
157 $message = __( $success ? 'OK' : "Could not update options.", 'ai-engine' );
158 return new WP_REST_Response([ 'success' => $success, 'message' => $message, 'options' => $options ], 200 );
159 }
160 catch ( Exception $e ) {
161 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
162 }
163 }
164
165 function createValidationResult( $result = true, $message = null) {
166 $message = $message ? $message : __( 'OK', 'ai-engine' );
167 return [ 'result' => $result, 'message' => $message ];
168 }
169
170 function validate_updated_option( $option_name ) {
171 $option_checkbox = get_option( 'mwai_option_checkbox', false );
172 $option_text = get_option( 'mwai_option_text', 'Default' );
173 if ( $option_checkbox === '' )
174 update_option( 'mwai_option_checkbox', false );
175 if ( $option_text === '' )
176 update_option( 'mwai_option_text', 'Default' );
177 return $this->createValidationResult();
178 }
179
180 function make_completions( $request ) {
181 try {
182 $params = $request->get_json_params();
183 $prompt = $params['prompt'];
184 $query = new Meow_MWAI_QueryText( $prompt );
185 $query->injectParams( $params );
186 $answer = $this->core->ai->run( $query );
187 return new WP_REST_Response([ 'success' => true, 'data' => $answer->result, 'usage' => $answer->usage ], 200 );
188 }
189 catch ( Exception $e ) {
190 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
191 }
192 }
193
194 function make_images( $request ) {
195 try {
196 $params = $request->get_json_params();
197 $prompt = $params['prompt'];
198 $query = new Meow_MWAI_QueryImage( $prompt );
199 $query->injectParams( $params );
200 $answer = $this->core->ai->run( $query );
201 return new WP_REST_Response([ 'success' => true, 'data' => $answer->results, 'usage' => $answer->usage ], 200 );
202 }
203 catch ( Exception $e ) {
204 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
205 }
206 }
207
208 function make_titles( $request ) {
209 try {
210 $params = $request->get_json_params();
211 $postId = intval( $params['postId'] );
212 $text = $this->core->get_text_from_postId( $postId );
213 $prompt = "Create short SEO-friendly title for this text: " . $text;
214 $query = new Meow_MWAI_QueryText( $prompt, 128 );
215 $query->setMaxResults( 5 );
216 $query->setEnv( 'admin-tools' );
217 $answer = $this->core->ai->run( $query );
218 return new WP_REST_Response([ 'success' => true, 'data' => $answer->results ], 200 );
219 }
220 catch ( Exception $e ) {
221 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
222 }
223 }
224
225 function make_excerpts( $request ) {
226 try {
227 $params = $request->get_json_params();
228 $postId = intval( $params['postId'] );
229 $text = $this->core->get_text_from_postId( $postId );
230 $prompt = "Create SEO-friendly introduction to this text, 120 to 170 characters max, no URLs: " . $text;
231 $query = new Meow_MWAI_QueryText( $prompt, 512 );
232 $query->setMaxResults( 5 );
233 $query->setEnv( 'admin-tools' );
234 $answer = $this->core->ai->run( $query );
235 return new WP_REST_Response([ 'success' => true, 'data' => $answer->results ], 200 );
236 }
237 catch ( Exception $e ) {
238 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
239 }
240 }
241
242 function update_post_title( $request ) {
243 try {
244 $params = $request->get_json_params();
245 $title = sanitize_text_field( $params['title'] );
246 $postId = intval( $params['postId'] );
247 $post = get_post( $postId );
248 if ( !$post ) {
249 throw new Exception( 'There is no post with this ID.' );
250 }
251 $post->post_title = $title;
252 //$post->post_name = sanitize_title( $title );
253 wp_update_post( $post );
254 return new WP_REST_Response([ 'success' => true, 'message' => "Title updated." ], 200 );
255 }
256 catch ( Exception $e ) {
257 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
258 }
259 }
260
261 function update_post_excerpt( $request ) {
262 try {
263 $params = $request->get_json_params();
264 $excerpt = sanitize_text_field( $params['excerpt'] );
265 $postId = intval( $params['postId'] );
266 $post = get_post( $postId );
267 if ( !$post ) {
268 throw new Exception( 'There is no post with this ID.' );
269 }
270 $post->post_excerpt = $excerpt;
271 wp_update_post( $post );
272 return new WP_REST_Response([ 'success' => true, 'message' => "Excerpt updated." ], 200 );
273 }
274 catch ( Exception $e ) {
275 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
276 }
277 }
278
279 function create_post( $request ) {
280 try {
281 $params = $request->get_json_params();
282 $title = sanitize_text_field( $params['title'] );
283 // Sanitize content that contains line returns and HTML tags
284 $content = sanitize_textarea_field( $params['content'] );
285 $excerpt = sanitize_text_field( $params['excerpt'] );
286 //$postType = sanitize_text_field( $params['postType'] );
287 $post = new stdClass();
288 $post->post_title = $title;
289 $post->post_excerpt = $excerpt;
290 $post->post_content = $content;
291 $post->post_status = 'draft';
292 $post->post_type = 'post';
293 $post->post_content = $this->core->markdown_to_html( $post->post_content );
294 $postId = wp_insert_post( $post );
295 return new WP_REST_Response([ 'success' => true, 'postId' => $postId ], 200 );
296 }
297 catch ( Exception $e ) {
298 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
299 }
300 }
301
302 function curl_download( $Url ) {
303 if ( !function_exists( 'curl_init' ) ) {
304 die( 'CURL is not installed!' );
305 }
306 $ch = curl_init();
307 curl_setopt( $ch, CURLOPT_URL, $Url );
308 curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
309 $output = curl_exec( $ch );
310 curl_close( $ch );
311 return $output;
312 }
313
314 function create_image( $request ) {
315 try {
316 $params = $request->get_json_params();
317 $title = sanitize_text_field( $params['title'] );
318 $caption = sanitize_text_field( $params['caption'] );
319 $alt = sanitize_text_field( $params['alt'] );
320 $description = sanitize_text_field( $params['description'] );
321 $url = $params['url'];
322 $filename = sanitize_text_field( $params['filename'] );
323 $image_data = $this->curl_download( $url );
324 if ( !$image_data ) {
325 throw new Exception( 'Could not download the image.' );
326 }
327 $upload_dir = wp_upload_dir();
328 if ( empty( $filename ) ) {
329 $filename = basename( $url );
330 }
331 $wp_filetype = wp_check_filetype( $filename );
332 if ( wp_mkdir_p( $upload_dir['path'] ) ) {
333 $file = $upload_dir['path'] . '/' . $filename;
334 }
335 else {
336 $file = $upload_dir['basedir'] . '/' . $filename;
337 }
338
339 // Make sure the file is unique, if not, add a number to the end of the file before the extension
340 $i = 1;
341 $parts = pathinfo( $file );
342 while ( file_exists( $file ) ) {
343 $file = $parts['dirname'] . '/' . $parts['filename'] . '-' . $i . '.' . $parts['extension'];
344 $i++;
345 }
346
347 // Write the file
348 file_put_contents( $file, $image_data );
349 $attachment = [
350 'post_mime_type' => $wp_filetype['type'],
351 'post_title' => $title,
352 'post_content' => $description,
353 'post_excerpt' => $caption,
354 'post_status' => 'inherit'
355 ];
356 // Register the file as a Media Library attachment
357 $attachmentId = wp_insert_attachment( $attachment, $file );
358 require_once( ABSPATH . 'wp-admin/includes/image.php' );
359 $attachment_data = wp_generate_attachment_metadata( $attachmentId, $file );
360 wp_update_attachment_metadata( $attachmentId, $attachment_data );
361 update_post_meta( $attachmentId, '_wp_attachment_image_alt', $alt );
362 return new WP_REST_Response([ 'success' => true, 'attachmentId' => $attachmentId ], 200 );
363 }
364 catch ( Exception $e ) {
365 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
366 }
367 }
368
369 function openai_files_get( $request ) {
370 try {
371 //$params = $request->get_json_params();
372 $openai = new Meow_MWAI_OpenAI( $this->core );
373 $files = $openai->listFiles();
374 return new WP_REST_Response([ 'success' => true, 'files' => $files ], 200 );
375 }
376 catch ( Exception $e ) {
377 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
378 }
379 }
380
381 function openai_finetunes_get( $request ) {
382 try {
383 $params = $request->get_query_params();
384 $clean = isset( $params['clean'] ) ? true : false;
385 $openai = new Meow_MWAI_OpenAI( $this->core );
386 $finetunes = $openai->listFineTunes( $clean );
387 return new WP_REST_Response([ 'success' => true, 'finetunes' => $finetunes ], 200 );
388 }
389 catch ( Exception $e ) {
390 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
391 }
392 }
393
394 function openai_files_upload( $request ) {
395 try {
396 $params = $request->get_json_params();
397 $filename = sanitize_text_field( $params['filename'] );
398 $data = $params['data'];
399 $openai = new Meow_MWAI_OpenAI( $this->core );
400 $file = $openai->uploadFile( $filename, $data );
401 return new WP_REST_Response([ 'success' => true, 'file' => $file ], 200 );
402 }
403 catch ( Exception $e ) {
404 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
405 }
406 }
407
408 function openai_files_delete( $request ) {
409 try {
410 $params = $request->get_json_params();
411 $fileId = $params['fileId'];
412 $openai = new Meow_MWAI_OpenAI( $this->core );
413 $openai->deleteFile( $fileId );
414 return new WP_REST_Response([ 'success' => true ], 200 );
415 }
416 catch ( Exception $e ) {
417 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
418 }
419 }
420
421 function openai_finetunes_delete( $request ) {
422 try {
423 $params = $request->get_json_params();
424 $modelId = $params['modelId'];
425 $openai = new Meow_MWAI_OpenAI( $this->core );
426 $openai->deleteFineTune( $modelId );
427 return new WP_REST_Response([ 'success' => true ], 200 );
428 }
429 catch ( Exception $e ) {
430 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
431 }
432 }
433
434 function openai_files_download( $request ) {
435 try {
436 $params = $request->get_json_params();
437 $fileId = $params['fileId'];
438 $openai = new Meow_MWAI_OpenAI( $this->core );
439 $data = $openai->downloadFile( $fileId );
440 return new WP_REST_Response([ 'success' => true, 'data' => $data ], 200 );
441 }
442 catch ( Exception $e ) {
443 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
444 }
445 }
446
447 function openai_files_finetune( $request ) {
448 try {
449 $params = $request->get_json_params();
450 $fileId = $params['fileId'];
451 $model = $params['model'];
452 $suffix = $params['suffix'];
453 $hyperparams = [
454 "nEpochs" => $params['nEpochs'],
455 "batchSize" => $params['batchSize']
456 ];
457 $openai = new Meow_MWAI_OpenAI( $this->core );
458 $finetune = $openai->fineTuneFile( $fileId, $model, $suffix, $hyperparams );
459 return new WP_REST_Response([ 'success' => true, 'finetune' => $finetune ], 200 );
460 }
461 catch ( Exception $e ) {
462 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
463 }
464 }
465
466 function openai_incidents() {
467 try {
468 $transient = get_transient( 'mwai_openai_incidents' );
469 if ( $transient ) {
470 return new WP_REST_Response([ 'success' => true, 'incidents' => $transient ], 200 );
471 }
472 $openai = new Meow_MWAI_OpenAI( $this->core );
473 $incidents = $openai->getIncidents();
474 set_transient( 'mwai_openai_incidents', $incidents, 60 * 10 );
475 return new WP_REST_Response([ 'success' => true, 'incidents' => $incidents ], 200 );
476 }
477 catch ( Exception $e ) {
478 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
479 }
480 }
481
482 function count_posts( $request ) {
483 $params = $request->get_query_params();
484 $postType = $params['postType'];
485 $count = wp_count_posts( $postType );
486 return new WP_REST_Response([ 'success' => true, 'count' => $count ], 200 );
487 }
488
489 function post_content( $request ) {
490 $params = $request->get_query_params();
491 $offset = $params['offset'];
492 $postType = $params['postType'];
493 $postId = $params['postId'];
494 $post = null;
495 if ( !empty( $postId ) ) {
496 $post = get_post( $postId );
497 }
498 else {
499 $posts = get_posts( [
500 'posts_per_page' => 1,
501 'post_type' => $postType,
502 'offset' => $offset,
503 'post_status' => 'publish'
504 ] );
505 $post = count( $posts ) === 0 ? null : $posts[0];
506 }
507 if ( !$post ) {
508 return new WP_REST_Response([ 'success' => false, 'message' => 'Post not found' ], 404 );
509 }
510 $content = apply_filters( 'the_content', $post->post_content );
511 $content = wp_strip_all_tags( $content );
512 $content = preg_replace( '/[\r\n]+/', "\n", $content );
513 $title = $post->post_title;
514 $excerpt = $post->post_excerpt;
515 $url = get_permalink( $post->ID );
516 return new WP_REST_Response([ 'success' => true, 'content' => $content,
517 'title' => $title, 'url' => $url, 'excerpt' => $excerpt ], 200 );
518 }
519
520 function templates_get( $request ) {
521 $params = $request->get_query_params();
522 $category = $params['category'];
523 $templates = [];
524 $templates_option = get_option( 'mwai_templates', [] );
525 if ( !is_array( $templates_option ) ) {
526 update_option( 'mwai_templates', [] );
527 }
528 $categories = array_column( $templates_option, 'category' );
529 $index = array_search( $category, $categories );
530 $templates = [];
531 if ( $index !== false ) {
532 $templates = $templates_option[$index]['templates'];
533 }
534 return new WP_REST_Response([ 'success' => true, 'templates' => $templates ], 200 );
535 }
536
537 function templates_save( $request ) {
538 $params = $request->get_json_params();
539 $category = $params['category'];
540 $templates = $params['templates'];
541 $templates_option = get_option( 'mwai_templates', [] );
542 $categories = array_column( $templates_option, 'category' );
543 $index = array_search( $category, $categories );
544 if ( $index !== false && $index >= 0 ) {
545 $templates_option[$index]['templates'] = $templates;
546 }
547 else {
548 $group = [ 'category' => $category, 'templates' => $templates ];
549 $templates_option[] = $group;
550 }
551
552 update_option( 'mwai_templates', $templates_option );
553 return new WP_REST_Response([ 'success' => true ], 200 );
554 }
555
556 function get_logs( $request ) {
557 $params = $request->get_json_params();
558 $offset = $params['offset'];
559 $limit = $params['limit'];
560 $filters = $params['filters'];
561 $sort = $params['sort'];
562 $logs = apply_filters( 'mwai_stats_logs', [], $offset, $limit, $filters, $sort );
563 return new WP_REST_Response([ 'success' => true, 'total' => $logs['total'], 'logs' => $logs['rows'] ], 200 );
564 }
565
566 function moderate( $request ) {
567 $params = $request->get_json_params();
568 $text = $params['text'];
569 if ( !$text ) {
570 return new WP_REST_Response([ 'success' => false, 'message' => 'Text not found.' ], 404 );
571 }
572 $openai = new Meow_MWAI_OpenAI( $this->core );
573 $results = $openai->moderate( $text );
574 return new WP_REST_Response([ 'success' => true, 'results' => $results ], 200 );
575 }
576 }
577