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