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