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