PluginProbe ʕ •ᴥ•ʔ
AI Engine – The Chatbot, AI Framework & MCP for WordPress / 3.3.0
AI Engine – The Chatbot, AI Framework & MCP for WordPress v3.3.0
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 8 months ago base.php 11 months ago settings.php 10 months ago
ai.php
328 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 $query->set_quality( isset( $params['quality'] ) ? $params['quality'] : 'standard' );
114 $query->set_style( isset( $params['style'] ) ? $params['style'] : null );
115 $query->set_env( $params['envId'] );
116 $query->set_model( $params['model'] );
117 $query->user = $this->core->get_user_by( 'id', get_current_user_id() );
118 $reply = $this->core->run_query( $query );
119 $images = [];
120 foreach ( $reply->get_images() as $image ) {
121 $images[] = [ 'url' => $image, 'caption' => $reply->get_caption(), 'alt' => $reply->get_alt() ];
122 }
123 return $this->create_rest_response( [ 'success' => true, 'images' => $images ], 200 );
124 }
125 catch ( Exception $e ) {
126 return $this->create_rest_response( [ 'success' => false, 'message' => $e->getMessage() ], 500 );
127 }
128 }
129
130 public function rest_ai_image_edit( $request ) {
131 try {
132 $params = $request->get_json_params();
133 $imageId = $params['imageId'];
134 $maskId = isset( $params['maskId'] ) ? $params['maskId'] : null;
135 if ( !$imageId ) {
136 return $this->create_rest_response( [ 'success' => false, 'message' => 'Image ID is required.' ], 500 );
137 }
138 if ( $maskId ) {
139 $maskInfo = $this->core->files->get_attachment_info( $maskId );
140 $maskFile = $maskInfo['path'];
141 }
142 else {
143 $maskFile = null;
144 }
145 $imageInfo = $this->core->files->get_attachment_info( $imageId );
146 $imageFile = $imageInfo['path'];
147 $message = $this->retrieve_message( $params['message'] );
148 $query = new Meow_MWAI_Query_EditImage( $message, $imageFile, $maskFile );
149 $query->set_resolution( isset( $params['resolution'] ) ? $params['resolution'] : '1024x1024' );
150 $query->set_env( $params['envId'] );
151 $query->set_model( $params['model'] );
152 $query->user = $this->core->get_user_by( 'id', get_current_user_id() );
153 $reply = $this->core->run_query( $query );
154 $images = [];
155 foreach ( $reply->get_images() as $image ) {
156 $images[] = [ 'url' => $image, 'caption' => $reply->get_caption(), 'alt' => $reply->get_alt() ];
157 }
158 return $this->create_rest_response( [ 'success' => true, 'images' => $images ], 200 );
159 }
160 catch ( Exception $e ) {
161 return $this->create_rest_response( [ 'success' => false, 'message' => $e->getMessage() ], 500 );
162 }
163 }
164
165 public function rest_ai_copilot( $request ) {
166 try {
167 $params = $request->get_json_params();
168 $message = $this->retrieve_message( $params['message'] );
169 if ( empty( $message ) ) {
170 return $this->create_rest_response( [ 'success' => false, 'message' => 'Message cannot be empty.' ], 500 );
171 }
172 $query = apply_filters( 'mwai_ai_copilot', null, $message, $params );
173 if ( !is_null( $query ) && $query instanceof Meow_MWAI_Query_Base ) {
174 // We got back a query.
175 }
176 else if ( is_string( $query ) ) {
177 // We got back a string.
178 return $this->create_rest_response( [ 'success' => true, 'data' => $query ], 200 );
179 }
180 else {
181 $query = new Meow_MWAI_Query_Text( $message );
182 $query->set_max_tokens( $params['maxTokens'] );
183 $query->set_temperature( $params['temperature'] );
184 if ( !empty( $params['stop'] ) ) {
185 $query->set_stop( $params['stop'] );
186 }
187 }
188 $query->set_env( $params['envId'] );
189 $query->set_model( $params['model'] );
190 $query->session = $params['sessionId'];
191 $query->user = $this->core->get_user_by( 'id', get_current_user_id() );
192 if ( isset( $params['context'] ) ) {
193 $context = $params['context'];
194 $query->set_context( $context );
195 }
196 $reply = $this->core->run_query( $query );
197 return $this->create_rest_response( [ 'success' => true, 'data' => $reply->result ], 200 );
198 }
199 catch ( Exception $e ) {
200 return $this->create_rest_response( [ 'success' => false, 'message' => $e->getMessage() ], 500 );
201 }
202 }
203
204 public function rest_ai_magic_wand( $request ) {
205 try {
206 global $mwai;
207 $params = $request->get_json_params();
208 $message = $this->retrieve_message( $params['message'] );
209 $context = isset( $params['context'] ) ? $params['context'] : null;
210 $action = $params['action'];
211 $options = $params['options'];
212 $data = null;
213 if ( !$mwai->magicWand ) {
214 throw new Exception( __( 'Magic Wand is not enabled.', 'ai-engine' ) );
215 }
216 $data = $mwai->magicWand->run( $action, $message, $context, $options );
217 return $this->create_rest_response( [ 'success' => true, 'data' => $data ], 200 );
218 }
219 catch ( Exception $e ) {
220 return $this->create_rest_response( [ 'success' => false, 'message' => $e->getMessage() ], 500 );
221 }
222 }
223
224 public function rest_ai_moderate( $request ) {
225 try {
226 $params = $request->get_json_params();
227 $message = $this->retrieve_message( $params['message'] );
228 if ( empty( $message ) ) {
229 $message = $params['message'];
230 }
231 $query = new Meow_MWAI_Query_Moderate( $message );
232 $query->set_env( $params['envId'] );
233 $query->user = $this->core->get_user_by( 'id', get_current_user_id() );
234 $reply = $this->core->run_query( $query );
235 return $this->create_rest_response( [ 'success' => true, 'data' => $reply->result ], 200 );
236 }
237 catch ( Exception $e ) {
238 return $this->create_rest_response( [ 'success' => false, 'message' => $e->getMessage() ], 500 );
239 }
240 }
241
242 public function rest_ai_transcribe_audio( $request ) {
243 try {
244 $params = $request->get_json_params();
245 if ( empty( $params['attachmentId'] ) ) {
246 return $this->create_rest_response( [ 'success' => false, 'message' => 'Attachment ID is required.' ], 500 );
247 }
248 $attachmentId = intval( $params['attachmentId'] );
249 $attachment = get_post( $attachmentId );
250 if ( !$attachment ) {
251 return $this->create_rest_response( [ 'success' => false, 'message' => 'Attachment not found.' ], 500 );
252 }
253 $mimeType = get_post_mime_type( $attachmentId );
254 if ( strpos( $mimeType, 'audio' ) === false ) {
255 return $this->create_rest_response( [ 'success' => false, 'message' => 'Attachment is not an audio file.' ], 500 );
256 }
257 $url = wp_get_attachment_url( $attachmentId );
258 $query = new Meow_MWAI_Query_Transcribe( $url );
259 $query->set_env( $params['envId'] );
260 $query->set_model( $params['model'] );
261 $query->user = $this->core->get_user_by( 'id', get_current_user_id() );
262 $reply = $this->core->run_query( $query );
263 return $this->create_rest_response( [ 'success' => true, 'data' => $reply->result ], 200 );
264 }
265 catch ( Exception $e ) {
266 return $this->create_rest_response( [ 'success' => false, 'message' => $e->getMessage() ], 500 );
267 }
268 }
269
270 public function rest_ai_transcribe_image( $request ) {
271 try {
272 $params = $request->get_json_params();
273 $message = $this->retrieve_message( $params['message'] );
274 if ( empty( $params['attachmentId'] ) ) {
275 return $this->create_rest_response( [ 'success' => false, 'message' => 'Attachment ID is required.' ], 500 );
276 }
277 $attachmentId = intval( $params['attachmentId'] );
278 $attachment = get_post( $attachmentId );
279 if ( !$attachment ) {
280 return $this->create_rest_response( [ 'success' => false, 'message' => 'Attachment not found.' ], 500 );
281 }
282 $mimeType = get_post_mime_type( $attachmentId );
283 if ( !$this->core->is_image( $mimeType ) ) {
284 return $this->create_rest_response( [ 'success' => false, 'message' => 'Attachment is not an image file.' ], 500 );
285 }
286 $url = wp_get_attachment_url( $attachmentId );
287 $query = new Meow_MWAI_Query_Text( $message );
288 $query->set_max_tokens( !empty( $params['maxTokens'] ) ? $params['maxTokens'] : 4096 );
289 $query->set_env( $params['envId'] );
290 $query->set_model( $params['model'] );
291 $query->add_image( $url );
292 $query->user = $this->core->get_user_by( 'id', get_current_user_id() );
293 $reply = $this->core->run_query( $query );
294 return $this->create_rest_response( [ 'success' => true, 'data' => $reply->result ], 200 );
295 }
296 catch ( Exception $e ) {
297 return $this->create_rest_response( [ 'success' => false, 'message' => $e->getMessage() ], 500 );
298 }
299 }
300
301 public function rest_ai_json( $request ) {
302 try {
303 $params = $request->get_json_params();
304 $message = $this->retrieve_message( $params['message'] );
305 if ( empty( $message ) ) {
306 return $this->create_rest_response( [ 'success' => false, 'message' => 'Message cannot be empty.' ], 500 );
307 }
308 $query = new Meow_MWAI_Query_Text( $message );
309 $query->set_max_tokens( !empty( $params['maxTokens'] ) ? $params['maxTokens'] : 4096 );
310 $query->set_temperature( !empty( $params['temperature'] ) ? $params['temperature'] : 0 );
311 if ( !empty( $params['stop'] ) ) {
312 $query->set_stop( $params['stop'] );
313 }
314 $query->responseFormat = 'json_object';
315 $query->set_env( $params['envId'] );
316 $query->set_model( $params['model'] );
317 $query->session = $params['sessionId'];
318 $query->user = $this->core->get_user_by( 'id', get_current_user_id() );
319 $reply = $this->core->run_query( $query );
320 $json = json_decode( $reply->result );
321 return $this->create_rest_response( [ 'success' => true, 'data' => $json ], 200 );
322 }
323 catch ( Exception $e ) {
324 return $this->create_rest_response( [ 'success' => false, 'message' => $e->getMessage() ], 500 );
325 }
326 }
327 }
328