PluginProbe ʕ •ᴥ•ʔ
AI Engine – The Chatbot, AI Framework & MCP for WordPress / 2.0.8
AI Engine – The Chatbot, AI Framework & MCP for WordPress v2.0.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 / api.php
ai-engine / classes Last commit date
engines 2 years ago modules 2 years ago queries 2 years ago admin.php 2 years ago api.php 2 years ago core.php 2 years ago init.php 3 years ago reply.php 2 years ago rest.php 2 years ago
api.php
279 lines
1 <?php
2
3 class Meow_MWAI_API {
4 public $core;
5 private $chatbot_module;
6 private $discussions_module;
7
8 public function __construct( $chatbot_module, $discussions_module ) {
9 global $mwai_core;
10 $this->core = $mwai_core;
11 $this->chatbot_module = $chatbot_module;
12 $this->discussions_module = $discussions_module;
13 add_action( 'rest_api_init', array( $this, 'rest_api_init' ) );
14 }
15
16 #region REST API
17 function rest_api_init() {
18 $public_api = $this->core->get_option( 'public_api' );
19 if ( !$public_api ) {
20 return;
21 }
22 register_rest_route( 'mwai/v1', '/simpleTextQuery', array(
23 'methods' => 'POST',
24 'callback' => array( $this, 'rest_simpleTextQuery' ),
25 'permission_callback' => function( $request ) {
26 return $this->core->can_access_public_api( 'simpleTextQuery', $request );
27 },
28 ) );
29 register_rest_route( 'mwai/v1', '/simpleVisionQuery', array(
30 'methods' => 'POST',
31 'callback' => array( $this, 'rest_simpleVisionQuery' ),
32 'permission_callback' => function( $request ) {
33 return $this->core->can_access_public_api( 'simpleVisionQuery', $request );
34 },
35 ) );
36 register_rest_route( 'mwai/v1', '/simpleJsonQuery', array(
37 'methods' => 'POST',
38 'callback' => array( $this, 'rest_simpleJsonQuery' ),
39 'permission_callback' => function( $request ) {
40 return $this->core->can_access_public_api( 'simpleJsonQuery', $request );
41 },
42 ) );
43 register_rest_route( 'mwai/v1', '/moderationCheck', array(
44 'methods' => 'POST',
45 'callback' => array( $this, 'rest_moderationCheck' ),
46 'permission_callback' => function( $request ) {
47 return $this->core->can_access_public_api( 'moderationCheck', $request );
48 },
49 ) );
50
51 if ( $this->chatbot_module ) {
52 register_rest_route( 'mwai/v1', '/simpleChatbotQuery', array(
53 'methods' => 'POST',
54 'callback' => array( $this, 'rest_simpleChatbotQuery' ),
55 'permission_callback' => function( $request ) {
56 return $this->core->can_access_public_api( 'simpleChatbotQuery', $request );
57 },
58 ) );
59 }
60 }
61
62 public function rest_simpleChatbotQuery( $request ) {
63 try {
64 $params = $request->get_params();
65 $botId = isset( $params['botId'] ) ? $params['botId'] : '';
66 $prompt = isset( $params['prompt'] ) ? $params['prompt'] : '';
67 $chatId = isset( $params['chatId'] ) ? $params['chatId'] : null;
68 $params = null;
69 if ( !empty( $chatId ) ) {
70 $params = array( 'chatId' => $chatId );
71 }
72 if ( empty( $botId ) || empty( $prompt ) ) {
73 throw new Exception( 'The botId and prompt are required.' );
74 }
75 $reply = $this->simpleChatbotQuery( $botId, $prompt, $params );
76 return new WP_REST_Response([ 'success' => true, 'data' => $reply ], 200 );
77 }
78 catch (Exception $e) {
79 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
80 }
81 }
82
83 public function rest_simpleTextQuery( $request ) {
84 try {
85 $params = $request->get_params();
86 $prompt = isset( $params['prompt'] ) ? $params['prompt'] : '';
87 $options = isset( $params['options'] ) ? $params['options'] : [];
88 $env = isset( $params['env'] ) ? $params['env'] : 'public-api';
89 if ( !empty( $env ) ) {
90 $options['env'] = $env;
91 }
92 if ( empty( $prompt ) ) {
93 throw new Exception( 'The prompt is required.' );
94 }
95 $reply = $this->simpleTextQuery( $prompt, $options );
96 return new WP_REST_Response([ 'success' => true, 'data' => $reply ], 200 );
97 }
98 catch (Exception $e) {
99 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
100 }
101 }
102
103 public function rest_simpleVisionQuery( $request ) {
104 try {
105 $params = $request->get_params();
106 $prompt = isset( $params['prompt'] ) ? $params['prompt'] : '';
107 $url = isset( $params['url'] ) ? $params['url'] : '';
108 $path = isset( $params['path'] ) ? $params['path'] : '';
109 $options = isset( $params['options'] ) ? $params['options'] : [];
110 $env = isset( $params['env'] ) ? $params['env'] : 'public-api';
111 if ( !empty( $env ) ) {
112 $options['env'] = $env;
113 }
114 if ( empty( $prompt ) ) {
115 throw new Exception( 'The prompt is required.' );
116 }
117 if ( empty( $url ) && empty( $path ) ) {
118 throw new Exception( 'The url or path is required.' );
119 }
120 $reply = $this->simpleVisionQuery( $prompt, $url, $path, $options );
121 return new WP_REST_Response([ 'success' => true, 'data' => $reply ], 200 );
122 }
123 catch (Exception $e) {
124 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
125 }
126 }
127
128 public function rest_simpleJsonQuery( $request ) {
129 try {
130 $params = $request->get_params();
131 $prompt = isset( $params['prompt'] ) ? $params['prompt'] : '';
132 $options = isset( $params['options'] ) ? $params['options'] : [];
133 $env = isset( $params['env'] ) ? $params['env'] : 'public-api';
134 if ( !empty( $env ) ) {
135 $options['env'] = $env;
136 }
137 if ( empty( $prompt ) ) {
138 throw new Exception( 'The prompt is required.' );
139 }
140 $reply = $this->simpleJsonQuery( $prompt, $options );
141 return new WP_REST_Response([ 'success' => true, 'data' => $reply ], 200 );
142 }
143 catch (Exception $e) {
144 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
145 }
146 }
147
148 public function rest_moderationCheck( $request ) {
149 try {
150 $params = $request->get_params();
151 $text = $params['text'];
152 $reply = $this->moderationCheck( $text );
153 return new WP_REST_Response([ 'success' => true, 'data' => $reply ], 200 );
154 }
155 catch (Exception $e) {
156 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
157 }
158 }
159 #endregion
160
161 #region Simple API
162 /**
163 * Executes a vision query.`
164 *
165 * @param string $prompt The prompt for the AI.
166 * @param string $url The URL of the image to analyze.
167 * @param string|null $path The path to the image file. If provided, the image data will be read from this file.
168 * @param array $params Additional parameters for the AI query.
169 *
170 * @return string The result of the AI query.
171 */
172 public function simpleVisionQuery( $prompt, $url, $path = null, $params = [] ) {
173 global $mwai_core;
174 $query = new Meow_MWAI_Query_Text( $prompt );
175 $query->inject_params( $params );
176 $query->set_model( MWAI_FALLBACK_MODEL_VISION );
177 $remote_upload = $this->core->get_option( 'image_remote_upload' );
178 $preferURL = $remote_upload === 'url';
179
180 if ( $preferURL && $url ) {
181 $query->set_new_image( $url );
182 }
183 else if ( !$preferURL && !empty( $path ) ) {
184 $data = base64_encode( file_get_contents( $path ) );
185 $query->set_new_image_data( $data );
186 }
187 else if ( $url ) {
188 $query->set_new_image( $url );
189 }
190 else if ( !empty($path ) ) {
191 $data = base64_encode( file_get_contents( $path ) );
192 $query->set_new_image_data( $data );
193 }
194
195 $reply = $mwai_core->ai->run( $query );
196 return $reply->result;
197 }
198
199 /**
200 * Executes a chatbot query.
201 * It will use the discussion if chatId is provided in the parameters.
202 *
203 * @param string $botId The ID of the chatbot.
204 * @param string $prompt The prompt for the AI.
205 * @param array $params Additional parameters for the AI query.
206 *
207 * @return string The result of the AI query.
208 */
209 public function simpleChatbotQuery( $botId, $prompt, $params = [] ) {
210 if ( !isset( $params['messages'] ) && isset( $params['chatId'] ) ) {
211 $discussion = $this->discussions_module->get_discussion( $botId, $params['chatId'] );
212 if ( !empty( $discussion ) ) {
213 $params['messages'] = $discussion->messages;
214 }
215 }
216 $data = $this->chatbot_module->chat_submit( $botId, $prompt, $params );
217 return $data['reply'];
218 }
219
220 /**
221 * Executes a text query.
222 *
223 * @param string $prompt The prompt for the AI.
224 * @param array $params Additional parameters for the AI query.
225 *
226 * @return string The result of the AI query.
227 */
228 public function simpleTextQuery( $prompt, $params = [] ) {
229 global $mwai_core;
230 $query = new Meow_MWAI_Query_Text( $prompt );
231 $query->inject_params( $params );
232 $reply = $mwai_core->ai->run( $query );
233 return $reply->result;
234 }
235
236 /**
237 * Executes a query that will have to return a JSON result.
238 *
239 * @param string $prompt The prompt for the AI.
240 * @param array $params Additional parameters for the AI query.
241 *
242 * @return array The result of the AI query.
243 */
244 public function simpleJsonQuery( $prompt, $url = null, $path = null, $params = [] ) {
245 if ( !empty( $url ) || !empty( $path ) ) {
246 throw new Exception( 'The url and path are not supported yet by the simpleJsonQuery.' );
247 }
248 global $mwai_core;
249 $query = new Meow_MWAI_Query_Text( $prompt . "\nYour reply must be a formatted JSON." );
250 $query->inject_params( $params );
251 $query->set_response_format( 'json' );
252 $query->set_model( MWAI_FALLBACK_MODEL_JSON );
253 $reply = $mwai_core->ai->run( $query );
254 try {
255 $json = json_decode( $reply->result, true );
256 return $json;
257 }
258 catch ( Exception $e ) {
259 throw new Exception( 'The result is not a valid JSON.' );
260 }
261 }
262
263 /**
264 * Checks if a text is safe or not.
265 *
266 * @param string $text The text to check.
267 *
268 * @return bool True if the text is safe, false otherwise.
269 */
270 public function moderationCheck( $text ) {
271 global $mwai_core;
272 $openai = new Meow_MWAI_Engines_OpenAI( $mwai_core );
273 $res = $openai->moderate( $text );
274 if ( !empty( $res ) && !empty( $res['results'] ) ) {
275 return (bool)$res['results'][0]['flagged'];
276 }
277 }
278 #endregion
279 }