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