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