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