PluginProbe ʕ •ᴥ•ʔ
AI Engine – The Chatbot, AI Framework & MCP for WordPress / 1.2.3
AI Engine – The Chatbot, AI Framework & MCP for WordPress v1.2.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 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
712 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 curl_download( $Url ) {
328 if ( !function_exists( 'curl_init' ) ) {
329 die( 'CURL is not installed!' );
330 }
331 $ch = curl_init();
332 curl_setopt( $ch, CURLOPT_URL, $Url );
333 curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
334 $output = curl_exec( $ch );
335 curl_close( $ch );
336 return $output;
337 }
338
339 function create_image( $request ) {
340 try {
341 $params = $request->get_json_params();
342 $title = sanitize_text_field( $params['title'] );
343 $caption = sanitize_text_field( $params['caption'] );
344 $alt = sanitize_text_field( $params['alt'] );
345 $description = sanitize_text_field( $params['description'] );
346 $url = $params['url'];
347 $filename = sanitize_text_field( $params['filename'] );
348 $image_data = $this->curl_download( $url );
349 if ( !$image_data ) {
350 throw new Exception( 'Could not download the image.' );
351 }
352 $upload_dir = wp_upload_dir();
353 if ( empty( $filename ) ) {
354 $filename = basename( $url );
355 }
356 $wp_filetype = wp_check_filetype( $filename );
357 if ( wp_mkdir_p( $upload_dir['path'] ) ) {
358 $file = $upload_dir['path'] . '/' . $filename;
359 }
360 else {
361 $file = $upload_dir['basedir'] . '/' . $filename;
362 }
363
364 // Make sure the file is unique, if not, add a number to the end of the file before the extension
365 $i = 1;
366 $parts = pathinfo( $file );
367 while ( file_exists( $file ) ) {
368 $file = $parts['dirname'] . '/' . $parts['filename'] . '-' . $i . '.' . $parts['extension'];
369 $i++;
370 }
371
372 // Write the file
373 file_put_contents( $file, $image_data );
374 $attachment = [
375 'post_mime_type' => $wp_filetype['type'],
376 'post_title' => $title,
377 'post_content' => $description,
378 'post_excerpt' => $caption,
379 'post_status' => 'inherit'
380 ];
381 // Register the file as a Media Library attachment
382 $attachmentId = wp_insert_attachment( $attachment, $file );
383 require_once( ABSPATH . 'wp-admin/includes/image.php' );
384 $attachment_data = wp_generate_attachment_metadata( $attachmentId, $file );
385 wp_update_attachment_metadata( $attachmentId, $attachment_data );
386 update_post_meta( $attachmentId, '_wp_attachment_image_alt', $alt );
387 return new WP_REST_Response([ 'success' => true, 'attachmentId' => $attachmentId ], 200 );
388 }
389 catch ( Exception $e ) {
390 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
391 }
392 }
393
394 function openai_files_get( $request ) {
395 try {
396 //$params = $request->get_json_params();
397 $openai = new Meow_MWAI_OpenAI( $this->core );
398 $files = $openai->listFiles();
399 return new WP_REST_Response([ 'success' => true, 'files' => $files ], 200 );
400 }
401 catch ( Exception $e ) {
402 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
403 }
404 }
405
406 function openai_finetunes_get( $request ) {
407 try {
408 $params = $request->get_query_params();
409 $clean = isset( $params['clean'] ) ? true : false;
410 $openai = new Meow_MWAI_OpenAI( $this->core );
411 $finetunes = $openai->listFineTunes( $clean );
412 return new WP_REST_Response([ 'success' => true, 'finetunes' => $finetunes ], 200 );
413 }
414 catch ( Exception $e ) {
415 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
416 }
417 }
418
419 function openai_files_upload( $request ) {
420 try {
421 $params = $request->get_json_params();
422 $filename = sanitize_text_field( $params['filename'] );
423 $data = $params['data'];
424 $openai = new Meow_MWAI_OpenAI( $this->core );
425 $file = $openai->uploadFile( $filename, $data );
426 return new WP_REST_Response([ 'success' => true, 'file' => $file ], 200 );
427 }
428 catch ( Exception $e ) {
429 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
430 }
431 }
432
433 function x( $request ) {
434 try {
435 $params = $request->get_json_params();
436 $filename = sanitize_text_field( $params['filename'] );
437 $data = $params['data'];
438 $openai = new Meow_MWAI_OpenAI( $this->core );
439 $file = $openai->uploadFile( $filename, $data );
440 return new WP_REST_Response([ 'success' => true, 'file' => $file ], 200 );
441 }
442 catch ( Exception $e ) {
443 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
444 }
445 }
446
447 function openai_files_delete( $request ) {
448 try {
449 $params = $request->get_json_params();
450 $fileId = $params['fileId'];
451 $openai = new Meow_MWAI_OpenAI( $this->core );
452 $openai->deleteFile( $fileId );
453 return new WP_REST_Response([ 'success' => true ], 200 );
454 }
455 catch ( Exception $e ) {
456 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
457 }
458 }
459
460 function openai_finetunes_delete( $request ) {
461 try {
462 $params = $request->get_json_params();
463 $modelId = $params['modelId'];
464 $openai = new Meow_MWAI_OpenAI( $this->core );
465 $openai->deleteFineTune( $modelId );
466 return new WP_REST_Response([ 'success' => true ], 200 );
467 }
468 catch ( Exception $e ) {
469 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
470 }
471 }
472
473 function openai_files_download( $request ) {
474 try {
475 $params = $request->get_json_params();
476 $fileId = $params['fileId'];
477 $openai = new Meow_MWAI_OpenAI( $this->core );
478 $data = $openai->downloadFile( $fileId );
479 return new WP_REST_Response([ 'success' => true, 'data' => $data ], 200 );
480 }
481 catch ( Exception $e ) {
482 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
483 }
484 }
485
486 function openai_files_finetune( $request ) {
487 try {
488 $params = $request->get_json_params();
489 $fileId = $params['fileId'];
490 $model = $params['model'];
491 $suffix = $params['suffix'];
492 $hyperparams = [
493 "nEpochs" => $params['nEpochs'],
494 "batchSize" => $params['batchSize']
495 ];
496 $openai = new Meow_MWAI_OpenAI( $this->core );
497 $finetune = $openai->fineTuneFile( $fileId, $model, $suffix, $hyperparams );
498 return new WP_REST_Response([ 'success' => true, 'finetune' => $finetune ], 200 );
499 }
500 catch ( Exception $e ) {
501 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
502 }
503 }
504
505 function openai_incidents() {
506 try {
507 $transient = get_transient( 'mwai_openai_incidents' );
508 if ( $transient ) {
509 return new WP_REST_Response([ 'success' => true, 'incidents' => $transient ], 200 );
510 }
511 $openai = new Meow_MWAI_OpenAI( $this->core );
512 $incidents = $openai->getIncidents();
513 set_transient( 'mwai_openai_incidents', $incidents, 60 * 10 );
514 return new WP_REST_Response([ 'success' => true, 'incidents' => $incidents ], 200 );
515 }
516 catch ( Exception $e ) {
517 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
518 }
519 }
520
521 function count_posts( $request ) {
522 try {
523 $params = $request->get_query_params();
524 $postType = $params['postType'];
525 $count = wp_count_posts( $postType );
526 return new WP_REST_Response([ 'success' => true, 'count' => $count ], 200 );
527 }
528 catch ( Exception $e ) {
529 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
530 }
531 }
532
533 function post_content( $request ) {
534 try {
535 $params = $request->get_query_params();
536 $offset = $params['offset'];
537 $postType = $params['postType'];
538 $postId = $params['postId'];
539 $post = null;
540 if ( !empty( $postId ) ) {
541 $post = get_post( $postId );
542 }
543 else {
544 $posts = get_posts( [
545 'posts_per_page' => 1,
546 'post_type' => $postType,
547 'offset' => $offset,
548 'post_status' => 'publish'
549 ] );
550 $post = count( $posts ) === 0 ? null : $posts[0];
551 }
552 if ( !$post ) {
553 return new WP_REST_Response([ 'success' => false, 'message' => 'Post not found' ], 404 );
554 }
555 $content = apply_filters( 'the_content', $post->post_content );
556 $content = wp_strip_all_tags( $content );
557 $content = preg_replace( '/[\r\n]+/', "\n", $content );
558 $title = $post->post_title;
559 $excerpt = $post->post_excerpt;
560 $url = get_permalink( $post->ID );
561 return new WP_REST_Response([ 'success' => true, 'content' => $content,
562 'title' => $title, 'url' => $url, 'excerpt' => $excerpt ], 200 );
563 }
564 catch ( Exception $e ) {
565 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
566 }
567 }
568
569 function templates_get( $request ) {
570 try {
571 $params = $request->get_query_params();
572 $category = $params['category'];
573 $templates = [];
574 $templates_option = get_option( 'mwai_templates', [] );
575 if ( !is_array( $templates_option ) ) {
576 update_option( 'mwai_templates', [] );
577 }
578 $categories = array_column( $templates_option, 'category' );
579 $index = array_search( $category, $categories );
580 $templates = [];
581 if ( $index !== false ) {
582 $templates = $templates_option[$index]['templates'];
583 }
584 return new WP_REST_Response([ 'success' => true, 'templates' => $templates ], 200 );
585 }
586 catch ( Exception $e ) {
587 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
588 }
589 }
590
591 function templates_save( $request ) {
592 try {
593 $params = $request->get_json_params();
594 $category = $params['category'];
595 $templates = $params['templates'];
596 $templates_option = get_option( 'mwai_templates', [] );
597 $categories = array_column( $templates_option, 'category' );
598 $index = array_search( $category, $categories );
599 if ( $index !== false && $index >= 0 ) {
600 $templates_option[$index]['templates'] = $templates;
601 }
602 else {
603 $group = [ 'category' => $category, 'templates' => $templates ];
604 $templates_option[] = $group;
605 }
606
607 update_option( 'mwai_templates', $templates_option );
608 return new WP_REST_Response([ 'success' => true ], 200 );
609 }
610 catch ( Exception $e ) {
611 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
612 }
613 }
614
615 function get_logs( $request ) {
616 try {
617 $params = $request->get_json_params();
618 $offset = $params['offset'];
619 $limit = $params['limit'];
620 $filters = $params['filters'];
621 $sort = $params['sort'];
622 $logs = apply_filters( 'mwai_stats_logs', [], $offset, $limit, $filters, $sort );
623 return new WP_REST_Response([ 'success' => true, 'total' => $logs['total'], 'logs' => $logs['rows'] ], 200 );
624 }
625 catch ( Exception $e ) {
626 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
627 }
628 }
629
630 function moderate( $request ) {
631 try {
632 $params = $request->get_json_params();
633 $text = $params['text'];
634 if ( !$text ) {
635 return new WP_REST_Response([ 'success' => false, 'message' => 'Text not found.' ], 404 );
636 }
637 $openai = new Meow_MWAI_OpenAI( $this->core );
638 $results = $openai->moderate( $text );
639 return new WP_REST_Response([ 'success' => true, 'results' => $results ], 200 );
640 }
641 catch ( Exception $e ) {
642 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
643 }
644
645 }
646
647 function get_vectors( $request ) {
648 try {
649 $params = $request->get_json_params();
650 $offset = $params['offset'];
651 $limit = $params['limit'];
652 $filters = $params['filters'];
653 $sort = $params['sort'];
654 $vectors = apply_filters( 'mwai_embeddings_vectors', [], $offset, $limit, $filters, $sort );
655 return new WP_REST_Response([ 'success' => true, 'total' => $vectors['total'], 'vectors' => $vectors['rows'] ], 200 );
656 }
657 catch ( Exception $e ) {
658 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
659 }
660 }
661
662 function add_vector( $request ) {
663 try {
664 $params = $request->get_json_params();
665 $vector = $params['vector'];
666 $success = apply_filters( 'mwai_embeddings_vectors_add', false, $vector );
667 return new WP_REST_Response([ 'success' => $success, 'vector' => $vector ], 200 );
668 }
669 catch ( Exception $e ) {
670 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
671 }
672 }
673
674 function modify_vector( $request ) {
675 try {
676 $params = $request->get_json_params();
677 $vector = $params['vector'];
678 $success = apply_filters( 'mwai_embeddings_vectors_update', false, $vector );
679 return new WP_REST_Response([ 'success' => $success, 'vector' => $vector ], 200 );
680 }
681 catch ( Exception $e ) {
682 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
683 }
684 }
685
686 function delete_vectors( $request ) {
687 try {
688 $params = $request->get_json_params();
689 $ids = $params['ids'];
690 $success = apply_filters( 'mwai_embeddings_vectors_delete', false, $ids );
691 return new WP_REST_Response([ 'success' => $success ], 200 );
692 }
693 catch ( Exception $e ) {
694 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
695 }
696 }
697
698 function transcribe( $request ) {
699 try {
700 $params = $request->get_json_params();
701 $query = new Meow_MWAI_QueryTranscribe();
702 $query->injectParams( $params );
703 $query->setEnv('admin-tools');
704 $answer = $this->core->ai->run( $query );
705 return new WP_REST_Response([ 'success' => true, 'data' => $answer->result ], 200 );
706 }
707 catch ( Exception $e ) {
708 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
709 }
710 }
711 }
712