PluginProbe ʕ •ᴥ•ʔ
AI Engine – The Chatbot, AI Framework & MCP for WordPress / 2.8.2
AI Engine – The Chatbot, AI Framework & MCP for WordPress v2.8.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 1 year ago assistfeedback.php 1 year ago base.php 1 year ago droppedfile.php 1 year ago editimage.php 1 year ago embed.php 1 year ago feedback.php 1 year ago function.php 1 year ago image.php 1 year ago parameter.php 1 year ago text.php 1 year ago transcribe.php 1 year ago
base.php
355 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 = null;
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 // Options
41 // Engine will either upload or share an URL to the image, for Vision, for example.
42 // Having this here allows other services to override it if needed (Ollama needs it false).
43 public ?string $image_remote_upload = null;
44
45 #region Constructors, Serialization
46
47 public function __construct( $message = '' ) {
48 global $mwai_core;
49 if ( is_string( $message ) ) {
50 $this->set_message( $message );
51 }
52 $this->session = $mwai_core->get_session_id();
53 $this->core = $mwai_core;
54 $this->image_remote_upload = $this->core->get_option( 'image_remote_upload' );
55 }
56
57 #[\ReturnTypeWillChange]
58 public function jsonSerialize(): array {
59 $json = [
60 'message' => $this->message,
61 'instructions' => $this->instructions,
62
63 'ai' => [
64 'model' => $this->model,
65 'feature' => $this->feature,
66 ],
67
68 'system' => [
69 'class' => get_class( $this ),
70 'envId' => $this->envId,
71 'scope' => $this->scope,
72 'session' => $this->session,
73 'maxMessages' => $this->maxMessages,
74 ]
75 ];
76
77 if ( !empty( $this->context ) ) {
78 $json['context']['content'] = $this->context;
79 }
80
81 return $json;
82 }
83
84 #endregion
85
86 #region Functions
87
88 public function add_function( Meow_MWAI_Query_Function $function ): void {
89 $this->functions[] = $function;
90 $this->functionCall = "auto";
91 }
92
93 public function set_functions( array $functions ): void {
94 $this->functions = $functions;
95 $this->functionCall = "auto";
96 }
97
98 #endregion
99
100 #region Helpers
101
102 public function replace( $search, $replace ) {
103 $this->message = str_replace( $search, $replace, $this->message );
104 }
105
106 #endregion
107
108 public function get_message(): string {
109 return $this->message;
110 }
111
112 public function get_in_tokens(): int {
113 $in_tokens = Meow_MWAI_Core::estimate_tokens(
114 $this->messages,
115 $this->message,
116 $this->context ?? ''
117 );
118 return $in_tokens;
119 }
120
121 /**
122 * The environment, like "chatbot", "imagesbot", "chatbot-007", "textwriter", etc...
123 * Used for statistics, mainly.
124 * @param string $env The environment.
125 */
126 public function set_scope( string $scope ): void {
127 $this->scope = $scope;
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 }
146
147 public function get_model() {
148 return $this->model;
149 }
150
151 /**
152 * The chat ID to use.
153 * @param string $chatId The chat ID.
154 */
155 public function set_chat_id( string $chatId ) {
156 $this->chatId = $chatId;
157 }
158
159 public function get_chat_id() {
160 return $this->chatId;
161 }
162
163 /**
164 * The instructions are used to define the personality of the AI, and to give it some context.
165 * @param string $instructions The instructions.
166 */
167 public function set_instructions( string $instructions ): void {
168 // Decode HTML entities in case the instructions were sanitized at the UI level
169 // and ended up encoded when reaching the server.
170 $instructions = html_entity_decode( $instructions );
171
172 $this->instructions = apply_filters( 'mwai_ai_context', $instructions, $this );
173 if ( $this->instructions !== $instructions ) {
174 Meow_MWAI_Logging::deprecated( '"mwai_ai_context" filter is deprecated. Please use "mwai_ai_instructions" instead.' );
175 }
176 $this->instructions = apply_filters( 'mwai_ai_instructions', $this->instructions, $this );
177 }
178
179 /**
180 * Given a message, the model will return one or more predicted completions.
181 * It can also return the probabilities of alternative tokens at each position.
182 * @param string $message The message to generate completions.
183 */
184 public function set_message( string $message ) {
185 $this->message = $message;
186 }
187
188 /**
189 * Similar to the prompt, but use an array of messages instead.
190 * @param string $messages The messages to generate completions.
191 */
192 public function set_messages( array $messages ) {
193 $messages = array_map( function( $message ) {
194 if ( is_array( $message ) ) {
195 return [ 'role' => $message['role'], 'content' => $message['content'] ];
196 }
197 else if ( is_object( $message ) ) {
198 return [ 'role' => $message->role, 'content' => $message->content ];
199 }
200 else {
201 throw new InvalidArgumentException( 'Unsupported message type.' );
202 }
203 }, $messages );
204 $this->messages = $messages;
205 }
206
207 /**
208 * The context can be used to add additional information that is likely to be relevant to the model.
209 * @param string $context The context.
210 */
211 public function set_context( string $context ): void {
212 $this->context = $context;
213 }
214
215 /**
216 * The API key to use.
217 * @param string $apiKey The API key.
218 */
219 public function set_api_key( string $apiKey ) {
220 $this->apiKey = $apiKey;
221 }
222
223 /**
224 * The session ID to use.
225 * @param string $session The session ID.
226 */
227 public function set_session( string $session ) {
228 $this->session = $session;
229 }
230
231 /**
232 * The bot ID to use.
233 * @param string $botId The bot ID.
234 */
235 public function set_bot_id( string $botId ) {
236 $this->botId = $botId;
237 }
238
239 /**
240 * How many completions to generate for each prompt.
241 * Because this parameter generates many completions, it can quickly consume your token quota.
242 * Use carefully and ensure that you have reasonable settings for max_tokens and stop.
243 * @param float $maxResults Number of completions.
244 */
245 public function set_max_results( int $maxResults ) {
246 $this->maxResults = $maxResults;
247 }
248
249 /**
250 * This is run at the end of the process, to do some final checks.
251 */
252 public function final_checks() {
253 if ( !empty( $this->maxMessages ) ) {
254 $context = array_shift( $this->messages );
255 if ( !empty( $this->messages ) ) {
256 $this->messages = array_slice( $this->messages, -$this->maxMessages );
257 }
258 else {
259 $this->messages = [];
260 }
261 if ( !empty( $context ) ) {
262 array_unshift( $this->messages, $context );
263 }
264 }
265 }
266
267 public function set_max_messages( int $maxMessages ): void {
268 if ( !empty( $maxMessages ) ) {
269 $this->maxMessages = intval( $maxMessages );
270 }
271 }
272
273 protected function convert_keys( $params )
274 {
275 $newParams = [];
276 foreach ( $params as $key => $value ) {
277 $newKey = '';
278 $capitalizeNextChar = false;
279 for ( $i = 0; $i < strlen( $key ); $i++ ) {
280 if ( $key[$i] == '_' ) {
281 $capitalizeNextChar = true;
282 }
283 else {
284 $newKey .= $capitalizeNextChar ? strtoupper($key[$i]) : $key[$i];
285 $capitalizeNextChar = false;
286 }
287 }
288 $newParams[$newKey] = $value;
289 }
290 return $newParams;
291 }
292
293 public function toJson() {
294 return json_encode( $this );
295 }
296
297 #region Extra Params
298 public function setExtraParam( string $key, $value ): void {
299 $this->extraParams[$key] = $value;
300 }
301
302 public function getExtraParam( string $key ) {
303 // Only if it exists
304 if ( !isset( $this->extraParams[$key] ) ) {
305 return null;
306 }
307 $value = $this->extraParams[$key];
308 return $value;
309 }
310 #endregion Extra Params
311
312 // Based on the params of the query, update the attributes
313 public function inject_params( array $params ): void
314 {
315 // Those are for the keys passed directly by the shortcode.
316 $params = $this->convert_keys( $params );
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_messages( intval( $params['maxMessages'] ) );
329 }
330 if ( !empty( $params['maxResults'] ) ) {
331 $this->set_max_results( $params['maxResults'] );
332 }
333 if ( !empty( $params['scope'] ) ) {
334 $this->set_scope( $params['scope'] );
335 }
336 if ( !empty( $params['session'] ) ) {
337 $this->set_session( $params['session'] );
338 }
339 if ( !empty( $params['apiKey'] ) ) {
340 $this->set_api_key( $params['apiKey'] );
341 }
342 if ( !empty( $params['botId'] ) ) {
343 $this->set_bot_id( $params['botId'] );
344 }
345 if ( !empty( $params['envId'] ) ) {
346 $this->set_env_id( $params['envId'] );
347 }
348 if ( !empty( $params['model'] ) ) {
349 $this->set_model( $params['model'] );
350 }
351 if ( !empty( $params['chatId'] ) ) {
352 $this->set_chat_id( $params['chatId'] );
353 }
354 }
355 }