PluginProbe ʕ •ᴥ•ʔ
AI Engine – The Chatbot, AI Framework & MCP for WordPress / 1.3.1
AI Engine – The Chatbot, AI Framework & MCP for WordPress v1.3.1
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 queryembed.php 3 years ago queryimage.php 3 years ago querytext.php 3 years ago querytranscribe.php 3 years ago rest.php 3 years ago ui.php 3 years ago
rest.php
706 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_settings' ),
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_settings' ),
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_settings' ),
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_settings' ),
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_settings' ),
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_settings' ),
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_settings' ),
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_settings' ),
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 register_rest_route( $this->namespace, '/logs', array(
129 'methods' => 'POST',
130 'permission_callback' => array( $this->core, 'can_access_settings' ),
131 'callback' => array( $this, 'get_logs' ),
132 ) );
133 register_rest_route( $this->namespace, '/moderate', array(
134 'methods' => 'POST',
135 'permission_callback' => array( $this->core, 'can_access_settings' ),
136 'callback' => array( $this, 'moderate' ),
137 ) );
138 register_rest_route( $this->namespace, '/vectors', array(
139 'methods' => 'POST',
140 'permission_callback' => array( $this->core, 'can_access_settings' ),
141 'callback' => array( $this, 'get_vectors' ),
142 ) );
143 register_rest_route( $this->namespace, '/vector', array(
144 'methods' => 'POST',
145 'permission_callback' => array( $this->core, 'can_access_settings' ),
146 'callback' => array( $this, 'add_vector' ),
147 ) );
148 register_rest_route( $this->namespace, '/vector', array(
149 'methods' => 'PUT',
150 'permission_callback' => array( $this->core, 'can_access_settings' ),
151 'callback' => array( $this, 'modify_vector' ),
152 ) );
153 register_rest_route( $this->namespace, '/vectors', array(
154 'methods' => 'DELETE',
155 'permission_callback' => array( $this->core, 'can_access_settings' ),
156 'callback' => array( $this, 'delete_vectors' ),
157 ) );
158 register_rest_route( $this->namespace, '/transcribe', array(
159 'methods' => 'POST',
160 'permission_callback' => array( $this->core, 'can_access_settings' ),
161 'callback' => array( $this, 'transcribe' ),
162 ) );
163 }
164 catch ( Exception $e ) {
165 var_dump( $e );
166 }
167 }
168
169 function rest_all_settings() {
170 return new WP_REST_Response( [
171 'success' => true,
172 'data' => $this->core->get_all_options()
173 ], 200 );
174 }
175
176 function rest_update_option( $request ) {
177 try {
178 $params = $request->get_json_params();
179 $value = $params['options'];
180 $options = $this->core->update_options( $value );
181 $success = !!$options;
182 $message = __( $success ? 'OK' : "Could not update options.", 'ai-engine' );
183 return new WP_REST_Response([ 'success' => $success, 'message' => $message, 'options' => $options ], 200 );
184 }
185 catch ( Exception $e ) {
186 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
187 }
188 }
189
190 function createValidationResult( $result = true, $message = null) {
191 $message = $message ? $message : __( 'OK', 'ai-engine' );
192 return [ 'result' => $result, 'message' => $message ];
193 }
194
195 function validate_updated_option( $option_name ) {
196 $option_checkbox = get_option( 'mwai_option_checkbox', false );
197 $option_text = get_option( 'mwai_option_text', 'Default' );
198 if ( $option_checkbox === '' )
199 update_option( 'mwai_option_checkbox', false );
200 if ( $option_text === '' )
201 update_option( 'mwai_option_text', 'Default' );
202 return $this->createValidationResult();
203 }
204
205 function make_completions( $request ) {
206 try {
207 $params = $request->get_json_params();
208 $prompt = $params['prompt'];
209 $query = new Meow_MWAI_QueryText( $prompt );
210 $query->injectParams( $params );
211 $answer = $this->core->ai->run( $query );
212 return new WP_REST_Response([ 'success' => true, 'data' => $answer->result, 'usage' => $answer->usage ], 200 );
213 }
214 catch ( Exception $e ) {
215 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
216 }
217 }
218
219 function make_images( $request ) {
220 try {
221 $params = $request->get_json_params();
222 $prompt = $params['prompt'];
223 $query = new Meow_MWAI_QueryImage( $prompt );
224 $query->injectParams( $params );
225 $answer = $this->core->ai->run( $query );
226 return new WP_REST_Response([ 'success' => true, 'data' => $answer->results, 'usage' => $answer->usage ], 200 );
227 }
228 catch ( Exception $e ) {
229 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
230 }
231 }
232
233 function make_titles( $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 a short SEO-friendly title for this article: " . $text;
239 $query = new Meow_MWAI_QueryText( $prompt, 128 );
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 make_excerpts( $request ) {
251 try {
252 $params = $request->get_json_params();
253 $postId = intval( $params['postId'] );
254 $text = $this->core->get_text_from_postId( $postId );
255 $prompt = "Create a SEO-friendly introduction to this article, 120 to 170 characters max, no URLs: " . $text;
256 $query = new Meow_MWAI_QueryText( $prompt, 512 );
257 $query->setMaxResults( 5 );
258 $query->setEnv( 'admin-tools' );
259 $answer = $this->core->ai->run( $query );
260 return new WP_REST_Response([ 'success' => true, 'data' => $answer->results ], 200 );
261 }
262 catch ( Exception $e ) {
263 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
264 }
265 }
266
267 function update_post_title( $request ) {
268 try {
269 $params = $request->get_json_params();
270 $title = sanitize_text_field( $params['title'] );
271 $postId = intval( $params['postId'] );
272 $post = get_post( $postId );
273 if ( !$post ) {
274 throw new Exception( 'There is no post with this ID.' );
275 }
276 $post->post_title = $title;
277 //$post->post_name = sanitize_title( $title );
278 wp_update_post( $post );
279 return new WP_REST_Response([ 'success' => true, 'message' => "Title updated." ], 200 );
280 }
281 catch ( Exception $e ) {
282 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
283 }
284 }
285
286 function update_post_excerpt( $request ) {
287 try {
288 $params = $request->get_json_params();
289 $excerpt = sanitize_text_field( $params['excerpt'] );
290 $postId = intval( $params['postId'] );
291 $post = get_post( $postId );
292 if ( !$post ) {
293 throw new Exception( 'There is no post with this ID.' );
294 }
295 $post->post_excerpt = $excerpt;
296 wp_update_post( $post );
297 return new WP_REST_Response([ 'success' => true, 'message' => "Excerpt updated." ], 200 );
298 }
299 catch ( Exception $e ) {
300 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
301 }
302 }
303
304 function create_post( $request ) {
305 try {
306 $params = $request->get_json_params();
307 $title = sanitize_text_field( $params['title'] );
308 // Sanitize content that contains line returns and HTML tags
309 $content = sanitize_textarea_field( $params['content'] );
310 $excerpt = sanitize_text_field( $params['excerpt'] );
311 //$postType = sanitize_text_field( $params['postType'] );
312 $post = new stdClass();
313 $post->post_title = $title;
314 $post->post_excerpt = $excerpt;
315 $post->post_content = $content;
316 $post->post_status = 'draft';
317 $post->post_type = 'post';
318 $post->post_content = $this->core->markdown_to_html( $post->post_content );
319 $postId = wp_insert_post( $post );
320 return new WP_REST_Response([ 'success' => true, 'postId' => $postId ], 200 );
321 }
322 catch ( Exception $e ) {
323 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
324 }
325 }
326
327 function image_download( $url ) {
328 $response = wp_remote_get( $url );
329 $output = wp_remote_retrieve_body( $response );
330 return $output;
331 }
332
333 function create_image( $request ) {
334 try {
335 $params = $request->get_json_params();
336 $title = sanitize_text_field( $params['title'] );
337 $caption = sanitize_text_field( $params['caption'] );
338 $alt = sanitize_text_field( $params['alt'] );
339 $description = sanitize_text_field( $params['description'] );
340 $url = $params['url'];
341 $filename = sanitize_text_field( $params['filename'] );
342 $image_data = $this->image_download( $url );
343 if ( !$image_data ) {
344 throw new Exception( 'Could not download the image.' );
345 }
346 $upload_dir = wp_upload_dir();
347 if ( empty( $filename ) ) {
348 $filename = basename( $url );
349 }
350 $wp_filetype = wp_check_filetype( $filename );
351 if ( wp_mkdir_p( $upload_dir['path'] ) ) {
352 $file = $upload_dir['path'] . '/' . $filename;
353 }
354 else {
355 $file = $upload_dir['basedir'] . '/' . $filename;
356 }
357
358 // Make sure the file is unique, if not, add a number to the end of the file before the extension
359 $i = 1;
360 $parts = pathinfo( $file );
361 while ( file_exists( $file ) ) {
362 $file = $parts['dirname'] . '/' . $parts['filename'] . '-' . $i . '.' . $parts['extension'];
363 $i++;
364 }
365
366 // Write the file
367 file_put_contents( $file, $image_data );
368 $attachment = [
369 'post_mime_type' => $wp_filetype['type'],
370 'post_title' => $title,
371 'post_content' => $description,
372 'post_excerpt' => $caption,
373 'post_status' => 'inherit'
374 ];
375 // Register the file as a Media Library attachment
376 $attachmentId = wp_insert_attachment( $attachment, $file );
377 require_once( ABSPATH . 'wp-admin/includes/image.php' );
378 $attachment_data = wp_generate_attachment_metadata( $attachmentId, $file );
379 wp_update_attachment_metadata( $attachmentId, $attachment_data );
380 update_post_meta( $attachmentId, '_wp_attachment_image_alt', $alt );
381 return new WP_REST_Response([ 'success' => true, 'attachmentId' => $attachmentId ], 200 );
382 }
383 catch ( Exception $e ) {
384 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
385 }
386 }
387
388 function openai_files_get( $request ) {
389 try {
390 //$params = $request->get_json_params();
391 $openai = new Meow_MWAI_OpenAI( $this->core );
392 $files = $openai->listFiles();
393 return new WP_REST_Response([ 'success' => true, 'files' => $files ], 200 );
394 }
395 catch ( Exception $e ) {
396 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
397 }
398 }
399
400 function openai_finetunes_get( $request ) {
401 try {
402 $params = $request->get_query_params();
403 $clean = isset( $params['clean'] ) ? true : false;
404 $openai = new Meow_MWAI_OpenAI( $this->core );
405 $finetunes = $openai->listFineTunes( $clean );
406 return new WP_REST_Response([ 'success' => true, 'finetunes' => $finetunes ], 200 );
407 }
408 catch ( Exception $e ) {
409 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
410 }
411 }
412
413 function openai_files_upload( $request ) {
414 try {
415 $params = $request->get_json_params();
416 $filename = sanitize_text_field( $params['filename'] );
417 $data = $params['data'];
418 $openai = new Meow_MWAI_OpenAI( $this->core );
419 $file = $openai->uploadFile( $filename, $data );
420 return new WP_REST_Response([ 'success' => true, 'file' => $file ], 200 );
421 }
422 catch ( Exception $e ) {
423 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
424 }
425 }
426
427 function x( $request ) {
428 try {
429 $params = $request->get_json_params();
430 $filename = sanitize_text_field( $params['filename'] );
431 $data = $params['data'];
432 $openai = new Meow_MWAI_OpenAI( $this->core );
433 $file = $openai->uploadFile( $filename, $data );
434 return new WP_REST_Response([ 'success' => true, 'file' => $file ], 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_delete( $request ) {
442 try {
443 $params = $request->get_json_params();
444 $fileId = $params['fileId'];
445 $openai = new Meow_MWAI_OpenAI( $this->core );
446 $openai->deleteFile( $fileId );
447 return new WP_REST_Response([ 'success' => true ], 200 );
448 }
449 catch ( Exception $e ) {
450 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
451 }
452 }
453
454 function openai_finetunes_delete( $request ) {
455 try {
456 $params = $request->get_json_params();
457 $modelId = $params['modelId'];
458 $openai = new Meow_MWAI_OpenAI( $this->core );
459 $openai->deleteFineTune( $modelId );
460 return new WP_REST_Response([ 'success' => true ], 200 );
461 }
462 catch ( Exception $e ) {
463 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
464 }
465 }
466
467 function openai_files_download( $request ) {
468 try {
469 $params = $request->get_json_params();
470 $fileId = $params['fileId'];
471 $openai = new Meow_MWAI_OpenAI( $this->core );
472 $data = $openai->downloadFile( $fileId );
473 return new WP_REST_Response([ 'success' => true, 'data' => $data ], 200 );
474 }
475 catch ( Exception $e ) {
476 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
477 }
478 }
479
480 function openai_files_finetune( $request ) {
481 try {
482 $params = $request->get_json_params();
483 $fileId = $params['fileId'];
484 $model = $params['model'];
485 $suffix = $params['suffix'];
486 $hyperparams = [
487 "nEpochs" => $params['nEpochs'],
488 "batchSize" => $params['batchSize']
489 ];
490 $openai = new Meow_MWAI_OpenAI( $this->core );
491 $finetune = $openai->fineTuneFile( $fileId, $model, $suffix, $hyperparams );
492 return new WP_REST_Response([ 'success' => true, 'finetune' => $finetune ], 200 );
493 }
494 catch ( Exception $e ) {
495 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
496 }
497 }
498
499 function openai_incidents() {
500 try {
501 $transient = get_transient( 'mwai_openai_incidents' );
502 if ( $transient ) {
503 return new WP_REST_Response([ 'success' => true, 'incidents' => $transient ], 200 );
504 }
505 $openai = new Meow_MWAI_OpenAI( $this->core );
506 $incidents = $openai->getIncidents();
507 set_transient( 'mwai_openai_incidents', $incidents, 60 * 10 );
508 return new WP_REST_Response([ 'success' => true, 'incidents' => $incidents ], 200 );
509 }
510 catch ( Exception $e ) {
511 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
512 }
513 }
514
515 function count_posts( $request ) {
516 try {
517 $params = $request->get_query_params();
518 $postType = $params['postType'];
519 $count = wp_count_posts( $postType );
520 return new WP_REST_Response([ 'success' => true, 'count' => $count ], 200 );
521 }
522 catch ( Exception $e ) {
523 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
524 }
525 }
526
527 function post_content( $request ) {
528 try {
529 $params = $request->get_query_params();
530 $offset = $params['offset'];
531 $postType = $params['postType'];
532 $postId = $params['postId'];
533 $post = null;
534 if ( !empty( $postId ) ) {
535 $post = get_post( $postId );
536 }
537 else {
538 $posts = get_posts( [
539 'posts_per_page' => 1,
540 'post_type' => $postType,
541 'offset' => $offset,
542 'post_status' => 'publish'
543 ] );
544 $post = count( $posts ) === 0 ? null : $posts[0];
545 }
546 if ( !$post ) {
547 return new WP_REST_Response([ 'success' => false, 'message' => 'Post not found' ], 404 );
548 }
549 $content = apply_filters( 'the_content', $post->post_content );
550 $content = wp_strip_all_tags( $content );
551 $content = preg_replace( '/[\r\n]+/', "\n", $content );
552 $title = $post->post_title;
553 $excerpt = $post->post_excerpt;
554 $url = get_permalink( $post->ID );
555 return new WP_REST_Response([ 'success' => true, 'content' => $content,
556 'title' => $title, 'url' => $url, 'excerpt' => $excerpt ], 200 );
557 }
558 catch ( Exception $e ) {
559 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
560 }
561 }
562
563 function templates_get( $request ) {
564 try {
565 $params = $request->get_query_params();
566 $category = $params['category'];
567 $templates = [];
568 $templates_option = get_option( 'mwai_templates', [] );
569 if ( !is_array( $templates_option ) ) {
570 update_option( 'mwai_templates', [] );
571 }
572 $categories = array_column( $templates_option, 'category' );
573 $index = array_search( $category, $categories );
574 $templates = [];
575 if ( $index !== false ) {
576 $templates = $templates_option[$index]['templates'];
577 }
578 return new WP_REST_Response([ 'success' => true, 'templates' => $templates ], 200 );
579 }
580 catch ( Exception $e ) {
581 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
582 }
583 }
584
585 function templates_save( $request ) {
586 try {
587 $params = $request->get_json_params();
588 $category = $params['category'];
589 $templates = $params['templates'];
590 $templates_option = get_option( 'mwai_templates', [] );
591 $categories = array_column( $templates_option, 'category' );
592 $index = array_search( $category, $categories );
593 if ( $index !== false && $index >= 0 ) {
594 $templates_option[$index]['templates'] = $templates;
595 }
596 else {
597 $group = [ 'category' => $category, 'templates' => $templates ];
598 $templates_option[] = $group;
599 }
600
601 update_option( 'mwai_templates', $templates_option );
602 return new WP_REST_Response([ 'success' => true ], 200 );
603 }
604 catch ( Exception $e ) {
605 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
606 }
607 }
608
609 function get_logs( $request ) {
610 try {
611 $params = $request->get_json_params();
612 $offset = $params['offset'];
613 $limit = $params['limit'];
614 $filters = $params['filters'];
615 $sort = $params['sort'];
616 $logs = apply_filters( 'mwai_stats_logs', [], $offset, $limit, $filters, $sort );
617 return new WP_REST_Response([ 'success' => true, 'total' => $logs['total'], 'logs' => $logs['rows'] ], 200 );
618 }
619 catch ( Exception $e ) {
620 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
621 }
622 }
623
624 function moderate( $request ) {
625 try {
626 $params = $request->get_json_params();
627 $text = $params['text'];
628 if ( !$text ) {
629 return new WP_REST_Response([ 'success' => false, 'message' => 'Text not found.' ], 404 );
630 }
631 $openai = new Meow_MWAI_OpenAI( $this->core );
632 $results = $openai->moderate( $text );
633 return new WP_REST_Response([ 'success' => true, 'results' => $results ], 200 );
634 }
635 catch ( Exception $e ) {
636 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
637 }
638
639 }
640
641 function get_vectors( $request ) {
642 try {
643 $params = $request->get_json_params();
644 $offset = $params['offset'];
645 $limit = $params['limit'];
646 $filters = $params['filters'];
647 $sort = $params['sort'];
648 $vectors = apply_filters( 'mwai_embeddings_vectors', [], $offset, $limit, $filters, $sort );
649 return new WP_REST_Response([ 'success' => true, 'total' => $vectors['total'], 'vectors' => $vectors['rows'] ], 200 );
650 }
651 catch ( Exception $e ) {
652 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
653 }
654 }
655
656 function add_vector( $request ) {
657 try {
658 $params = $request->get_json_params();
659 $vector = $params['vector'];
660 $success = apply_filters( 'mwai_embeddings_vectors_add', false, $vector );
661 return new WP_REST_Response([ 'success' => $success, 'vector' => $vector ], 200 );
662 }
663 catch ( Exception $e ) {
664 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
665 }
666 }
667
668 function modify_vector( $request ) {
669 try {
670 $params = $request->get_json_params();
671 $vector = $params['vector'];
672 $success = apply_filters( 'mwai_embeddings_vectors_update', false, $vector );
673 return new WP_REST_Response([ 'success' => $success, 'vector' => $vector ], 200 );
674 }
675 catch ( Exception $e ) {
676 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
677 }
678 }
679
680 function delete_vectors( $request ) {
681 try {
682 $params = $request->get_json_params();
683 $ids = $params['ids'];
684 $success = apply_filters( 'mwai_embeddings_vectors_delete', false, $ids );
685 return new WP_REST_Response([ 'success' => $success ], 200 );
686 }
687 catch ( Exception $e ) {
688 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
689 }
690 }
691
692 function transcribe( $request ) {
693 try {
694 $params = $request->get_json_params();
695 $query = new Meow_MWAI_QueryTranscribe();
696 $query->injectParams( $params );
697 $query->setEnv('admin-tools');
698 $answer = $this->core->ai->run( $query );
699 return new WP_REST_Response([ 'success' => true, 'data' => $answer->result ], 200 );
700 }
701 catch ( Exception $e ) {
702 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
703 }
704 }
705 }
706