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