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