PluginProbe ʕ •ᴥ•ʔ
AI Engine – The Chatbot, AI Framework & MCP for WordPress / 3.5.0
AI Engine – The Chatbot, AI Framework & MCP for WordPress v3.5.0
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 / ai.php
ai-engine / classes / rest Last commit date
ai.php 1 month ago base.php 11 months ago settings.php 3 months ago
ai.php
330 lines
1 <?php
2
3 class Meow_MWAI_Rest_AI extends Meow_MWAI_Rest_Base {
4 public function register_routes() {
5 register_rest_route( $this->namespace, '/ai/models', [
6 'methods' => 'POST',
7 'callback' => [ $this, 'rest_ai_models' ],
8 'permission_callback' => [ $this->core, 'check_rest_nonce' ]
9 ] );
10 register_rest_route( $this->namespace, '/ai/completions', [
11 'methods' => 'POST',
12 'callback' => [ $this, 'rest_ai_completions' ],
13 'permission_callback' => [ $this->core, 'check_rest_nonce' ]
14 ] );
15 register_rest_route( $this->namespace, '/ai/images', [
16 'methods' => 'POST',
17 'callback' => [ $this, 'rest_ai_images' ],
18 'permission_callback' => [ $this->core, 'check_rest_nonce' ]
19 ] );
20 register_rest_route( $this->namespace, '/ai/image_edit', [
21 'methods' => 'POST',
22 'callback' => [ $this, 'rest_ai_image_edit' ],
23 'permission_callback' => [ $this->core, 'check_rest_nonce' ]
24 ] );
25 register_rest_route( $this->namespace, '/ai/copilot', [
26 'methods' => 'POST',
27 'callback' => [ $this, 'rest_ai_copilot' ],
28 'permission_callback' => [ $this->core, 'check_rest_nonce' ]
29 ] );
30
31 register_rest_route( $this->namespace, '/ai/magic_wand', [
32 'methods' => 'POST',
33 'callback' => [ $this, 'rest_ai_magic_wand' ],
34 'permission_callback' => [ $this->core, 'check_rest_nonce' ]
35 ] );
36 register_rest_route( $this->namespace, '/ai/moderate', [
37 'methods' => 'POST',
38 'callback' => [ $this, 'rest_ai_moderate' ],
39 'permission_callback' => [ $this->core, 'check_rest_nonce' ]
40 ] );
41 register_rest_route( $this->namespace, '/ai/transcribe_audio', [
42 'methods' => 'POST',
43 'callback' => [ $this, 'rest_ai_transcribe_audio' ],
44 'permission_callback' => [ $this->core, 'check_rest_nonce' ]
45 ] );
46 register_rest_route( $this->namespace, '/ai/transcribe_image', [
47 'methods' => 'POST',
48 'callback' => [ $this, 'rest_ai_transcribe_image' ],
49 'permission_callback' => [ $this->core, 'check_rest_nonce' ]
50 ] );
51 register_rest_route( $this->namespace, '/ai/json', [
52 'methods' => 'POST',
53 'callback' => [ $this, 'rest_ai_json' ],
54 'permission_callback' => [ $this->core, 'check_rest_nonce' ]
55 ] );
56 }
57
58 public function rest_ai_models( $request ) {
59 try {
60 $params = $request->get_json_params();
61 $envId = $params['envId'];
62 $query = new Meow_MWAI_Query_Text( '', 4096 );
63 $query->envId = $envId;
64 $models = $this->core->get_engine_models( $query );
65 return $this->create_rest_response( [ 'success' => true, 'models' => $models ], 200 );
66 }
67 catch ( Exception $e ) {
68 return $this->create_rest_response( [ 'success' => false, 'message' => $e->getMessage() ], 500 );
69 }
70 }
71
72 public function rest_ai_completions( $request ) {
73 try {
74 $params = $request->get_json_params();
75 $message = $this->retrieve_message( $params['message'] );
76 if ( empty( $message ) ) {
77 return $this->create_rest_response( [ 'success' => false, 'message' => 'Message cannot be empty.' ], 500 );
78 }
79 $query = apply_filters( 'mwai_ai_completions', null, $message, $params );
80 if ( !is_null( $query ) && $query instanceof Meow_MWAI_Query_Base ) {
81 // We got back a query.
82 }
83 else if ( is_string( $query ) ) {
84 // We got back a string.
85 return $this->create_rest_response( [ 'success' => true, 'data' => $query ], 200 );
86 }
87 else {
88 $query = new Meow_MWAI_Query_Text( $message );
89 $query->set_max_tokens( $params['maxTokens'] );
90 $query->set_temperature( $params['temperature'] );
91 if ( !empty( $params['stop'] ) ) {
92 $query->set_stop( $params['stop'] );
93 }
94 }
95 $query->set_env( $params['envId'] );
96 $query->set_model( $params['model'] );
97 $query->session = $params['sessionId'];
98 $query->user = $this->core->get_user_by( 'id', get_current_user_id() );
99 $reply = $this->core->run_query( $query );
100 return $this->create_rest_response( [ 'success' => true, 'data' => $reply->result ], 200 );
101 }
102 catch ( Exception $e ) {
103 return $this->create_rest_response( [ 'success' => false, 'message' => $e->getMessage() ], 500 );
104 }
105 }
106
107 public function rest_ai_images( $request ) {
108 try {
109 $params = $request->get_json_params();
110 $message = $this->retrieve_message( $params['message'] );
111 $query = new Meow_MWAI_Query_Image( $message );
112 $query->set_resolution( isset( $params['resolution'] ) ? $params['resolution'] : '1024x1024' );
113 if ( isset( $params['quality'] ) ) {
114 $query->set_quality( $params['quality'] );
115 }
116 $query->set_style( isset( $params['style'] ) ? $params['style'] : null );
117 $query->set_env( $params['envId'] );
118 $query->set_model( $params['model'] );
119 $query->user = $this->core->get_user_by( 'id', get_current_user_id() );
120 $reply = $this->core->run_query( $query );
121 $images = [];
122 foreach ( $reply->get_images() as $image ) {
123 $images[] = [ 'url' => $image, 'caption' => $reply->get_caption(), 'alt' => $reply->get_alt() ];
124 }
125 return $this->create_rest_response( [ 'success' => true, 'images' => $images ], 200 );
126 }
127 catch ( Exception $e ) {
128 return $this->create_rest_response( [ 'success' => false, 'message' => $e->getMessage() ], 500 );
129 }
130 }
131
132 public function rest_ai_image_edit( $request ) {
133 try {
134 $params = $request->get_json_params();
135 $imageId = $params['imageId'];
136 $maskId = isset( $params['maskId'] ) ? $params['maskId'] : null;
137 if ( !$imageId ) {
138 return $this->create_rest_response( [ 'success' => false, 'message' => 'Image ID is required.' ], 500 );
139 }
140 if ( $maskId ) {
141 $maskInfo = $this->core->files->get_attachment_info( $maskId );
142 $maskFile = $maskInfo['path'];
143 }
144 else {
145 $maskFile = null;
146 }
147 $imageInfo = $this->core->files->get_attachment_info( $imageId );
148 $imageFile = $imageInfo['path'];
149 $message = $this->retrieve_message( $params['message'] );
150 $query = new Meow_MWAI_Query_EditImage( $message, $imageFile, $maskFile );
151 $query->set_resolution( isset( $params['resolution'] ) ? $params['resolution'] : '1024x1024' );
152 $query->set_env( $params['envId'] );
153 $query->set_model( $params['model'] );
154 $query->user = $this->core->get_user_by( 'id', get_current_user_id() );
155 $reply = $this->core->run_query( $query );
156 $images = [];
157 foreach ( $reply->get_images() as $image ) {
158 $images[] = [ 'url' => $image, 'caption' => $reply->get_caption(), 'alt' => $reply->get_alt() ];
159 }
160 return $this->create_rest_response( [ 'success' => true, 'images' => $images ], 200 );
161 }
162 catch ( Exception $e ) {
163 return $this->create_rest_response( [ 'success' => false, 'message' => $e->getMessage() ], 500 );
164 }
165 }
166
167 public function rest_ai_copilot( $request ) {
168 try {
169 $params = $request->get_json_params();
170 $message = $this->retrieve_message( $params['message'] );
171 if ( empty( $message ) ) {
172 return $this->create_rest_response( [ 'success' => false, 'message' => 'Message cannot be empty.' ], 500 );
173 }
174 $query = apply_filters( 'mwai_ai_copilot', null, $message, $params );
175 if ( !is_null( $query ) && $query instanceof Meow_MWAI_Query_Base ) {
176 // We got back a query.
177 }
178 else if ( is_string( $query ) ) {
179 // We got back a string.
180 return $this->create_rest_response( [ 'success' => true, 'data' => $query ], 200 );
181 }
182 else {
183 $query = new Meow_MWAI_Query_Text( $message );
184 $query->set_max_tokens( $params['maxTokens'] );
185 $query->set_temperature( $params['temperature'] );
186 if ( !empty( $params['stop'] ) ) {
187 $query->set_stop( $params['stop'] );
188 }
189 }
190 $query->set_env( $params['envId'] );
191 $query->set_model( $params['model'] );
192 $query->session = $params['sessionId'];
193 $query->user = $this->core->get_user_by( 'id', get_current_user_id() );
194 if ( isset( $params['context'] ) ) {
195 $context = $params['context'];
196 $query->set_context( $context );
197 }
198 $reply = $this->core->run_query( $query );
199 return $this->create_rest_response( [ 'success' => true, 'data' => $reply->result ], 200 );
200 }
201 catch ( Exception $e ) {
202 return $this->create_rest_response( [ 'success' => false, 'message' => $e->getMessage() ], 500 );
203 }
204 }
205
206 public function rest_ai_magic_wand( $request ) {
207 try {
208 global $mwai;
209 $params = $request->get_json_params();
210 $message = $this->retrieve_message( $params['message'] );
211 $context = isset( $params['context'] ) ? $params['context'] : null;
212 $action = $params['action'];
213 $options = $params['options'];
214 $data = null;
215 if ( !$mwai->magicWand ) {
216 throw new Exception( __( 'Magic Wand is not enabled.', 'ai-engine' ) );
217 }
218 $data = $mwai->magicWand->run( $action, $message, $context, $options );
219 return $this->create_rest_response( [ 'success' => true, 'data' => $data ], 200 );
220 }
221 catch ( Exception $e ) {
222 return $this->create_rest_response( [ 'success' => false, 'message' => $e->getMessage() ], 500 );
223 }
224 }
225
226 public function rest_ai_moderate( $request ) {
227 try {
228 $params = $request->get_json_params();
229 $message = $this->retrieve_message( $params['message'] );
230 if ( empty( $message ) ) {
231 $message = $params['message'];
232 }
233 $query = new Meow_MWAI_Query_Moderate( $message );
234 $query->set_env( $params['envId'] );
235 $query->user = $this->core->get_user_by( 'id', get_current_user_id() );
236 $reply = $this->core->run_query( $query );
237 return $this->create_rest_response( [ 'success' => true, 'data' => $reply->result ], 200 );
238 }
239 catch ( Exception $e ) {
240 return $this->create_rest_response( [ 'success' => false, 'message' => $e->getMessage() ], 500 );
241 }
242 }
243
244 public function rest_ai_transcribe_audio( $request ) {
245 try {
246 $params = $request->get_json_params();
247 if ( empty( $params['attachmentId'] ) ) {
248 return $this->create_rest_response( [ 'success' => false, 'message' => 'Attachment ID is required.' ], 500 );
249 }
250 $attachmentId = intval( $params['attachmentId'] );
251 $attachment = get_post( $attachmentId );
252 if ( !$attachment ) {
253 return $this->create_rest_response( [ 'success' => false, 'message' => 'Attachment not found.' ], 500 );
254 }
255 $mimeType = get_post_mime_type( $attachmentId );
256 if ( strpos( $mimeType, 'audio' ) === false ) {
257 return $this->create_rest_response( [ 'success' => false, 'message' => 'Attachment is not an audio file.' ], 500 );
258 }
259 $url = wp_get_attachment_url( $attachmentId );
260 $query = new Meow_MWAI_Query_Transcribe( $url );
261 $query->set_env( $params['envId'] );
262 $query->set_model( $params['model'] );
263 $query->user = $this->core->get_user_by( 'id', get_current_user_id() );
264 $reply = $this->core->run_query( $query );
265 return $this->create_rest_response( [ 'success' => true, 'data' => $reply->result ], 200 );
266 }
267 catch ( Exception $e ) {
268 return $this->create_rest_response( [ 'success' => false, 'message' => $e->getMessage() ], 500 );
269 }
270 }
271
272 public function rest_ai_transcribe_image( $request ) {
273 try {
274 $params = $request->get_json_params();
275 $message = $this->retrieve_message( $params['message'] );
276 if ( empty( $params['attachmentId'] ) ) {
277 return $this->create_rest_response( [ 'success' => false, 'message' => 'Attachment ID is required.' ], 500 );
278 }
279 $attachmentId = intval( $params['attachmentId'] );
280 $attachment = get_post( $attachmentId );
281 if ( !$attachment ) {
282 return $this->create_rest_response( [ 'success' => false, 'message' => 'Attachment not found.' ], 500 );
283 }
284 $mimeType = get_post_mime_type( $attachmentId );
285 if ( !$this->core->is_image( $mimeType ) ) {
286 return $this->create_rest_response( [ 'success' => false, 'message' => 'Attachment is not an image file.' ], 500 );
287 }
288 $url = wp_get_attachment_url( $attachmentId );
289 $query = new Meow_MWAI_Query_Text( $message );
290 $query->set_max_tokens( !empty( $params['maxTokens'] ) ? $params['maxTokens'] : 4096 );
291 $query->set_env( $params['envId'] );
292 $query->set_model( $params['model'] );
293 $query->add_image( $url );
294 $query->user = $this->core->get_user_by( 'id', get_current_user_id() );
295 $reply = $this->core->run_query( $query );
296 return $this->create_rest_response( [ 'success' => true, 'data' => $reply->result ], 200 );
297 }
298 catch ( Exception $e ) {
299 return $this->create_rest_response( [ 'success' => false, 'message' => $e->getMessage() ], 500 );
300 }
301 }
302
303 public function rest_ai_json( $request ) {
304 try {
305 $params = $request->get_json_params();
306 $message = $this->retrieve_message( $params['message'] );
307 if ( empty( $message ) ) {
308 return $this->create_rest_response( [ 'success' => false, 'message' => 'Message cannot be empty.' ], 500 );
309 }
310 $query = new Meow_MWAI_Query_Text( $message );
311 $query->set_max_tokens( !empty( $params['maxTokens'] ) ? $params['maxTokens'] : 4096 );
312 $query->set_temperature( !empty( $params['temperature'] ) ? $params['temperature'] : 0 );
313 if ( !empty( $params['stop'] ) ) {
314 $query->set_stop( $params['stop'] );
315 }
316 $query->responseFormat = 'json_object';
317 $query->set_env( $params['envId'] );
318 $query->set_model( $params['model'] );
319 $query->session = $params['sessionId'];
320 $query->user = $this->core->get_user_by( 'id', get_current_user_id() );
321 $reply = $this->core->run_query( $query );
322 $json = json_decode( $reply->result );
323 return $this->create_rest_response( [ 'success' => true, 'data' => $json ], 200 );
324 }
325 catch ( Exception $e ) {
326 return $this->create_rest_response( [ 'success' => false, 'message' => $e->getMessage() ], 500 );
327 }
328 }
329 }
330