PluginProbe ʕ •ᴥ•ʔ
AI Engine – The Chatbot, AI Framework & MCP for WordPress / 2.2.61
AI Engine – The Chatbot, AI Framework & MCP for WordPress v2.2.61
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 / queries / base.php
ai-engine / classes / queries Last commit date
assistant.php 2 years ago base.php 2 years ago embed.php 2 years ago function.php 2 years ago image.php 2 years ago parameter.php 2 years ago text.php 2 years ago transcribe.php 2 years ago
base.php
342 lines
1 <?php
2
3 class Meow_MWAI_Query_Base implements JsonSerializable {
4
5 // Environment
6 public ?string $session = null;
7 public string $scope = '';
8
9 // Core Content
10 public ?string $instructions = null;
11 public array $messages = [];
12 public ?string $context = null;
13 public string $message = '';
14
15 // Parameters
16 public int $maxMessages = 15;
17 public int $maxResults = 1;
18 public string $model = '';
19 public string $mode = '';
20
21 // Functions
22 public array $functions = [];
23 public ?string $functionCall = null;
24
25 // Overrides for env
26 public array $envSettings = [];
27 public string $envId = '';
28 public ?string $apiKey = null;
29
30 // Seem to be only used by the Assistants, to get the current thread/discussion.
31 // Maybe we should try to move this to the assistant class, or use it as ExtraParams.
32 public ?string $botId = null;
33
34 // Extra Parameters (used by specific services, or for statistics, etc)
35 public array $extraParams = [];
36
37 #region Constructors, Serialization
38
39 public function __construct( $message = '' ) {
40 global $mwai_core;
41 if ( is_string( $message ) ) {
42 $this->set_message( $message );
43 }
44 $this->session = $mwai_core->get_session_id();
45 }
46
47 #[\ReturnTypeWillChange]
48 public function jsonSerialize() {
49 $json = [
50 'message' => $this->message,
51
52 'ai' => [
53 'model' => $this->model,
54 ],
55
56 'system' => [
57 'class' => get_class( $this ),
58 'envId' => $this->envId,
59 'mode' => $this->mode,
60 'scope' => $this->scope,
61 'session' => $this->session,
62 'maxMessages' => $this->maxMessages,
63 ]
64 ];
65
66 if ( !empty( $this->context ) ) {
67 $json['context']['context'] = $this->context;
68 }
69
70 return $json;
71 }
72
73 #endregion
74
75 #region Functions
76
77 public function add_function( Meow_MWAI_Query_Function $function ): void {
78 $this->functions[] = $function;
79 $this->functionCall = "auto";
80 }
81
82 public function set_functions( array $functions ): void {
83 $this->functions = $functions;
84 $this->functionCall = "auto";
85 }
86
87 #endregion
88
89 #region Helpers
90
91 public function replace( $search, $replace ) {
92 $this->message = str_replace( $search, $replace, $this->message );
93 }
94
95 #endregion
96
97 public function get_message(): string {
98 return $this->message;
99 }
100
101 public function get_in_tokens(): int {
102 $in_tokens = Meow_MWAI_Core::estimate_tokens( $this->messages, $this->message );
103 return $in_tokens;
104 }
105
106 /**
107 * The environment, like "chatbot", "imagesbot", "chatbot-007", "textwriter", etc...
108 * Used for statistics, mainly.
109 * @param string $env The environment.
110 */
111 public function set_scope( string $scope ): void {
112 $this->scope = $scope;
113 }
114
115 // TODO: Remove this after March 2024.
116 public function set_env( string $env ): void {
117 // TODO: At some point in February 2024, we should try to remove the env completely,
118 // transfer the forms and chatbots to use the new scope.
119 //error_log( 'AI Engine: set_env() is deprecated. Please use set_scope() instead.' );
120 $this->scope = $env;
121 }
122
123 /**
124 * The environment ID for AI services.
125 * Used for statistics, mainly.
126 * @param string $envId The environment ID.
127 */
128 public function set_env_id( string $envId ): void {
129 $this->envId = $envId;
130 }
131
132 /**
133 * ID of the model to use.
134 * @param string $model ID of the model to use.
135 */
136 public function set_model( string $model ) {
137 $this->model = $model;
138 $this->mode = 'chat';
139 }
140
141 public function get_model() {
142 return $this->model;
143 }
144
145 /**
146 * The instructions are used to define the personality of the AI, and to give it some context.
147 * @param string $instructions The instructions.
148 */
149 public function set_instructions( string $instructions ): void {
150 // TODO: Is now called instructions. After March 2024, let's remove this, and keep only the last line.
151 $this->instructions = apply_filters( 'mwai_ai_context', $instructions, $this );
152 if ( $this->instructions !== $instructions ) {
153 error_log( 'AI Engine: mwai_ai_context filter is deprecated. Please use mwai_ai_instructions instead.' );
154 }
155 $this->instructions = apply_filters( 'mwai_ai_instructions', $this->instructions, $this );
156 }
157
158 /**
159 * Given a message, the model will return one or more predicted completions.
160 * It can also return the probabilities of alternative tokens at each position.
161 * @param string $message The message to generate completions.
162 */
163 public function set_message( string $message ) {
164 $this->message = $message;
165 }
166
167 /**
168 * Similar to the prompt, but use an array of messages instead.
169 * @param string $messages The messages to generate completions.
170 */
171 public function set_messages( array $messages ) {
172 $messages = array_map( function( $message ) {
173 if ( is_array( $message ) ) {
174 return [ 'role' => $message['role'], 'content' => $message['content'] ];
175 }
176 else if ( is_object( $message ) ) {
177 return [ 'role' => $message->role, 'content' => $message->content ];
178 }
179 else {
180 throw new InvalidArgumentException( 'Unsupported message type.' );
181 }
182 }, $messages );
183 $this->messages = $messages;
184 }
185
186 /**
187 * The context can be used to add additional information that is likely to be relevant to the model.
188 * @param string $context The context.
189 */
190 public function set_context( string $context ): void {
191 $this->context = $context;
192 }
193
194 /**
195 * The API key to use.
196 * @param string $apiKey The API key.
197 */
198 public function set_api_key( string $apiKey ) {
199 $this->apiKey = $apiKey;
200 }
201
202 /**
203 * The session ID to use.
204 * @param string $session The session ID.
205 */
206 public function set_session( string $session ) {
207 $this->session = $session;
208 }
209
210 /**
211 * The bot ID to use.
212 * @param string $botId The bot ID.
213 */
214 public function set_bot_id( string $botId ) {
215 $this->botId = $botId;
216 }
217
218 /**
219 * How many completions to generate for each prompt.
220 * Because this parameter generates many completions, it can quickly consume your token quota.
221 * Use carefully and ensure that you have reasonable settings for max_tokens and stop.
222 * @param float $maxResults Number of completions.
223 */
224 public function set_max_results( int $maxResults ) {
225 $this->maxResults = $maxResults;
226 }
227
228 /**
229 * This is run at the end of the process, to do some final checks.
230 */
231 public function final_checks() {
232 if ( !empty( $this->maxMessages ) ) {
233 $context = array_shift( $this->messages );
234 if ( !empty( $this->messages ) ) {
235 $this->messages = array_slice( $this->messages, -$this->maxMessages );
236 }
237 else {
238 $this->messages = [];
239 }
240 if ( !empty( $context ) ) {
241 array_unshift( $this->messages, $context );
242 }
243 }
244 }
245
246 public function set_max_sentences( int $maxMessages ): void {
247 if ( !empty( $maxMessages ) ) {
248 $this->maxMessages = intval( $maxMessages );
249 }
250 }
251
252 protected function convert_keys( $params )
253 {
254 $newParams = [];
255 foreach ( $params as $key => $value ) {
256 $newKey = '';
257 $capitalizeNextChar = false;
258 for ( $i = 0; $i < strlen( $key ); $i++ ) {
259 if ( $key[$i] == '_' ) {
260 $capitalizeNextChar = true;
261 }
262 else {
263 $newKey .= $capitalizeNextChar ? strtoupper($key[$i]) : $key[$i];
264 $capitalizeNextChar = false;
265 }
266 }
267 $newParams[$newKey] = $value;
268 }
269 return $newParams;
270 }
271
272 public function toJson() {
273 return json_encode( $this );
274 }
275
276 #region Extra Params
277 public function setExtraParam( string $key, $value ): void {
278 $this->extraParams[$key] = $value;
279 }
280
281 public function getExtraParam( string $key ) {
282 // Only if it exists
283 if ( !isset( $this->extraParams[$key] ) ) {
284 return null;
285 }
286 $value = $this->extraParams[$key];
287 return $value;
288 }
289 #endregion Extra Params
290
291 // Based on the params of the query, update the attributes
292 public function inject_params( array $params ): void
293 {
294 // Those are for the keys passed directly by the shortcode.
295 $params = $this->convert_keys( $params );
296
297 if ( !empty( $params['model'] ) ) {
298 $this->set_model( $params['model'] );
299 }
300 if ( !empty( $params['context'] ) ) {
301 $this->set_instructions( $params['context'] );
302 }
303 if ( !empty( $params['prompt'] ) ) {
304 //TODO: At some point, we need to rename prompt into message everywhere in the clients.
305 //error_log( 'AI Engine: prompt is deprecated. Please use message instead.' );
306 $this->set_message( $params['prompt'] );
307 }
308 if ( !empty( $params['message'] ) ) {
309 $this->set_message( $params['message'] );
310 }
311 if ( !empty( $params['messages'] ) ) {
312 $this->set_messages( $params['messages'] );
313 }
314 if ( !empty( $params['maxMessages'] ) && intval( $params['maxMessages'] ) > 0 ) {
315 $this->set_max_sentences( intval( $params['maxMessages'] ) );
316 }
317 if ( !empty( $params['maxMessages'] ) && intval( $params['maxMessages'] ) > 0 ) {
318 $this->set_max_sentences( intval( $params['maxMessages'] ) );
319 }
320 if ( !empty( $params['maxResults'] ) ) {
321 $this->set_max_results( $params['maxResults'] );
322 }
323 if ( !empty( $params['env'] ) ) {
324 $this->set_env( $params['env'] );
325 }
326 if ( !empty( $params['scope'] ) ) {
327 $this->set_scope( $params['scope'] );
328 }
329 if ( !empty( $params['session'] ) ) {
330 $this->set_session( $params['session'] );
331 }
332 if ( !empty( $params['apiKey'] ) ) {
333 $this->set_api_key( $params['apiKey'] );
334 }
335 if ( !empty( $params['botId'] ) ) {
336 $this->set_bot_id( $params['botId'] );
337 }
338 if ( !empty( $params['envId'] ) ) {
339 $this->set_env_id( $params['envId'] );
340 }
341 }
342 }