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