PluginProbe ʕ •ᴥ•ʔ
AI Engine – The Chatbot, AI Framework & MCP for WordPress / 1.0.01
AI Engine – The Chatbot, AI Framework & MCP for WordPress v1.0.01
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
542 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_query_params();
374 $clean = isset( $params['clean'] ) ? true : false;
375 $openai = new Meow_MWAI_OpenAI( $this->core );
376 $finetunes = $openai->listFineTunes( $clean );
377 return new WP_REST_Response([ 'success' => true, 'finetunes' => $finetunes ], 200 );
378 }
379 catch ( Exception $e ) {
380 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
381 }
382 }
383
384 function openai_files_upload( $request ) {
385 try {
386 $params = $request->get_json_params();
387 $filename = sanitize_text_field( $params['filename'] );
388 $data = $params['data'];
389 $openai = new Meow_MWAI_OpenAI( $this->core );
390 $file = $openai->uploadFile( $filename, $data );
391 return new WP_REST_Response([ 'success' => true, 'file' => $file ], 200 );
392 }
393 catch ( Exception $e ) {
394 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
395 }
396 }
397
398 function openai_files_delete( $request ) {
399 try {
400 $params = $request->get_json_params();
401 $fileId = $params['fileId'];
402 $openai = new Meow_MWAI_OpenAI( $this->core );
403 $openai->deleteFile( $fileId );
404 return new WP_REST_Response([ 'success' => true ], 200 );
405 }
406 catch ( Exception $e ) {
407 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
408 }
409 }
410
411 function openai_finetunes_delete( $request ) {
412 try {
413 $params = $request->get_json_params();
414 $modelId = $params['modelId'];
415 $openai = new Meow_MWAI_OpenAI( $this->core );
416 $openai->deleteFineTune( $modelId );
417 return new WP_REST_Response([ 'success' => true ], 200 );
418 }
419 catch ( Exception $e ) {
420 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
421 }
422 }
423
424 function openai_files_download( $request ) {
425 try {
426 $params = $request->get_json_params();
427 $fileId = $params['fileId'];
428 $openai = new Meow_MWAI_OpenAI( $this->core );
429 $data = $openai->downloadFile( $fileId );
430 return new WP_REST_Response([ 'success' => true, 'data' => $data ], 200 );
431 }
432 catch ( Exception $e ) {
433 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
434 }
435 }
436
437 function openai_files_finetune( $request ) {
438 try {
439 $params = $request->get_json_params();
440 $fileId = $params['fileId'];
441 $model = $params['model'];
442 $suffix = $params['suffix'];
443 $openai = new Meow_MWAI_OpenAI( $this->core );
444 $finetune = $openai->fineTuneFile( $fileId, $model, $suffix );
445 return new WP_REST_Response([ 'success' => true, 'finetune' => $finetune ], 200 );
446 }
447 catch ( Exception $e ) {
448 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
449 }
450 }
451
452 function openai_incidents() {
453 try {
454 $transient = get_transient( 'mwai_openai_incidents' );
455 if ( $transient ) {
456 return new WP_REST_Response([ 'success' => true, 'incidents' => $transient ], 200 );
457 }
458 $openai = new Meow_MWAI_OpenAI( $this->core );
459 $incidents = $openai->getIncidents();
460 set_transient( 'mwai_openai_incidents', $incidents, 60 * 10 );
461 return new WP_REST_Response([ 'success' => true, 'incidents' => $incidents ], 200 );
462 }
463 catch ( Exception $e ) {
464 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
465 }
466 }
467
468 function count_posts( $request ) {
469 $params = $request->get_query_params();
470 $postType = $params['postType'];
471 $count = wp_count_posts( $postType );
472 return new WP_REST_Response([ 'success' => true, 'count' => $count ], 200 );
473 }
474
475 function post_content( $request ) {
476 $params = $request->get_query_params();
477 $offset = $params['offset'];
478 $postType = $params['postType'];
479 $postId = $params['postId'];
480 $post = null;
481 if ( !empty( $postId ) ) {
482 $post = get_post( $postId );
483 }
484 else {
485 $posts = get_posts( [
486 'posts_per_page' => 1,
487 'post_type' => $postType,
488 'offset' => $offset,
489 'post_status' => 'publish'
490 ] );
491 $post = count( $posts ) === 0 ? null : $posts[0];
492 }
493 if ( !$post ) {
494 return new WP_REST_Response([ 'success' => false, 'message' => 'Post not found' ], 404 );
495 }
496 $content = apply_filters( 'the_content', $post->post_content );
497 $content = wp_strip_all_tags( $content );
498 $content = preg_replace( '/[\r\n]+/', "\n", $content );
499 $title = $post->post_title;
500 $excerpt = $post->post_excerpt;
501 $url = get_permalink( $post->ID );
502 return new WP_REST_Response([ 'success' => true, 'content' => $content,
503 'title' => $title, 'url' => $url, 'excerpt' => $excerpt ], 200 );
504 }
505
506 function templates_get( $request ) {
507 $params = $request->get_query_params();
508 $category = $params['category'];
509 $templates = [];
510 $templates_option = get_option( 'mwai_templates', [] );
511 if ( !is_array( $templates_option ) ) {
512 update_option( 'mwai_templates', [] );
513 }
514 $categories = array_column( $templates_option, 'category' );
515 $index = array_search( $category, $categories );
516 $templates = [];
517 if ( $index !== false ) {
518 $templates = $templates_option[$index]['templates'];
519 }
520 return new WP_REST_Response([ 'success' => true, 'templates' => $templates ], 200 );
521 }
522
523 function templates_save( $request ) {
524 $params = $request->get_json_params();
525 $category = $params['category'];
526 $templates = $params['templates'];
527 $templates_option = get_option( 'mwai_templates', [] );
528 $categories = array_column( $templates_option, 'category' );
529 $index = array_search( $category, $categories );
530 if ( $index !== false && $index >= 0 ) {
531 $templates_option[$index]['templates'] = $templates;
532 }
533 else {
534 $group = [ 'category' => $category, 'templates' => $templates ];
535 $templates_option[] = $group;
536 }
537
538 update_option( 'mwai_templates', $templates_option );
539 return new WP_REST_Response([ 'success' => true ], 200 );
540 }
541 }
542