PluginProbe ʕ •ᴥ•ʔ
AI Engine – The Chatbot, AI Framework & MCP for WordPress / 2.2.93
AI Engine – The Chatbot, AI Framework & MCP for WordPress v2.2.93
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
351 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 $this->instructions = apply_filters( 'mwai_ai_context', $instructions, $this );
156 if ( $this->instructions !== $instructions ) {
157 error_log( 'AI Engine: mwai_ai_context filter is deprecated. Please use mwai_ai_instructions instead.' );
158 }
159 $this->instructions = apply_filters( 'mwai_ai_instructions', $this->instructions, $this );
160 }
161
162 /**
163 * Given a message, the model will return one or more predicted completions.
164 * It can also return the probabilities of alternative tokens at each position.
165 * @param string $message The message to generate completions.
166 */
167 public function set_message( string $message ) {
168 $this->message = $message;
169 }
170
171 /**
172 * Similar to the prompt, but use an array of messages instead.
173 * @param string $messages The messages to generate completions.
174 */
175 public function set_messages( array $messages ) {
176 $messages = array_map( function( $message ) {
177 if ( is_array( $message ) ) {
178 return [ 'role' => $message['role'], 'content' => $message['content'] ];
179 }
180 else if ( is_object( $message ) ) {
181 return [ 'role' => $message->role, 'content' => $message->content ];
182 }
183 else {
184 throw new InvalidArgumentException( 'Unsupported message type.' );
185 }
186 }, $messages );
187 $this->messages = $messages;
188 }
189
190 /**
191 * The context can be used to add additional information that is likely to be relevant to the model.
192 * @param string $context The context.
193 */
194 public function set_context( string $context ): void {
195 $this->context = $context;
196 }
197
198 /**
199 * The API key to use.
200 * @param string $apiKey The API key.
201 */
202 public function set_api_key( string $apiKey ) {
203 $this->apiKey = $apiKey;
204 }
205
206 /**
207 * The session ID to use.
208 * @param string $session The session ID.
209 */
210 public function set_session( string $session ) {
211 $this->session = $session;
212 }
213
214 /**
215 * The bot ID to use.
216 * @param string $botId The bot ID.
217 */
218 public function set_bot_id( string $botId ) {
219 $this->botId = $botId;
220 }
221
222 /**
223 * How many completions to generate for each prompt.
224 * Because this parameter generates many completions, it can quickly consume your token quota.
225 * Use carefully and ensure that you have reasonable settings for max_tokens and stop.
226 * @param float $maxResults Number of completions.
227 */
228 public function set_max_results( int $maxResults ) {
229 $this->maxResults = $maxResults;
230 }
231
232 /**
233 * This is run at the end of the process, to do some final checks.
234 */
235 public function final_checks() {
236 if ( !empty( $this->maxMessages ) ) {
237 $context = array_shift( $this->messages );
238 if ( !empty( $this->messages ) ) {
239 $this->messages = array_slice( $this->messages, -$this->maxMessages );
240 }
241 else {
242 $this->messages = [];
243 }
244 if ( !empty( $context ) ) {
245 array_unshift( $this->messages, $context );
246 }
247 }
248 }
249
250 public function set_max_sentences( int $maxMessages ): void {
251 if ( !empty( $maxMessages ) ) {
252 $this->maxMessages = intval( $maxMessages );
253 }
254 }
255
256 protected function convert_keys( $params )
257 {
258 $newParams = [];
259 foreach ( $params as $key => $value ) {
260 $newKey = '';
261 $capitalizeNextChar = false;
262 for ( $i = 0; $i < strlen( $key ); $i++ ) {
263 if ( $key[$i] == '_' ) {
264 $capitalizeNextChar = true;
265 }
266 else {
267 $newKey .= $capitalizeNextChar ? strtoupper($key[$i]) : $key[$i];
268 $capitalizeNextChar = false;
269 }
270 }
271 $newParams[$newKey] = $value;
272 }
273 return $newParams;
274 }
275
276 public function toJson() {
277 return json_encode( $this );
278 }
279
280 #region Extra Params
281 public function setExtraParam( string $key, $value ): void {
282 $this->extraParams[$key] = $value;
283 }
284
285 public function getExtraParam( string $key ) {
286 // Only if it exists
287 if ( !isset( $this->extraParams[$key] ) ) {
288 return null;
289 }
290 $value = $this->extraParams[$key];
291 return $value;
292 }
293 #endregion Extra Params
294
295 // Based on the params of the query, update the attributes
296 public function inject_params( array $params ): void
297 {
298 // Those are for the keys passed directly by the shortcode.
299 $params = $this->convert_keys( $params );
300
301 if ( !empty( $params['model'] ) ) {
302 $this->set_model( $params['model'] );
303 }
304 // TODO: Remove this condition after July 2024.
305 if ( !empty( $params['context'] ) ) {
306 error_log( 'AI Engine: context is deprecated. Please use instructions instead.' );
307 $this->set_instructions( $params['context'] );
308 }
309 if ( !empty( $params['instructions'] ) ) {
310 $this->set_instructions( $params['instructions'] );
311 }
312 // TODO: Remove this condition after September 2024.
313 if ( !empty( $params['prompt'] ) ) {
314 error_log( 'AI Engine: prompt is deprecated. Please use message instead.' );
315 $this->set_message( $params['prompt'] );
316 }
317 if ( !empty( $params['message'] ) ) {
318 $this->set_message( $params['message'] );
319 }
320 if ( !empty( $params['messages'] ) ) {
321 $this->set_messages( $params['messages'] );
322 }
323 if ( !empty( $params['maxMessages'] ) && intval( $params['maxMessages'] ) > 0 ) {
324 $this->set_max_sentences( intval( $params['maxMessages'] ) );
325 }
326 if ( !empty( $params['maxMessages'] ) && intval( $params['maxMessages'] ) > 0 ) {
327 $this->set_max_sentences( intval( $params['maxMessages'] ) );
328 }
329 if ( !empty( $params['maxResults'] ) ) {
330 $this->set_max_results( $params['maxResults'] );
331 }
332 // if ( !empty( $params['env'] ) ) {
333 // $this->set_env( $params['env'] );
334 // }
335 if ( !empty( $params['scope'] ) ) {
336 $this->set_scope( $params['scope'] );
337 }
338 if ( !empty( $params['session'] ) ) {
339 $this->set_session( $params['session'] );
340 }
341 if ( !empty( $params['apiKey'] ) ) {
342 $this->set_api_key( $params['apiKey'] );
343 }
344 if ( !empty( $params['botId'] ) ) {
345 $this->set_bot_id( $params['botId'] );
346 }
347 if ( !empty( $params['envId'] ) ) {
348 $this->set_env_id( $params['envId'] );
349 }
350 }
351 }