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