PluginProbe ʕ •ᴥ•ʔ
AI Engine – The Chatbot, AI Framework & MCP for WordPress / 2.7.2
AI Engine – The Chatbot, AI Framework & MCP for WordPress v2.7.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 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
354 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 $this->instructions = apply_filters( 'mwai_ai_context', $instructions, $this );
169 if ( $this->instructions !== $instructions ) {
170 Meow_MWAI_Logging::deprecated( '"mwai_ai_context" filter is deprecated. Please use "mwai_ai_instructions" instead.' );
171 }
172 $this->instructions = apply_filters( 'mwai_ai_instructions', $this->instructions, $this );
173 }
174
175 /**
176 * Given a message, the model will return one or more predicted completions.
177 * It can also return the probabilities of alternative tokens at each position.
178 * @param string $message The message to generate completions.
179 */
180 public function set_message( string $message ) {
181 $this->message = $message;
182 }
183
184 /**
185 * Similar to the prompt, but use an array of messages instead.
186 * @param string $messages The messages to generate completions.
187 */
188 public function set_messages( array $messages ) {
189 $messages = array_map( function( $message ) {
190 if ( is_array( $message ) ) {
191 return [ 'role' => $message['role'], 'content' => $message['content'] ];
192 }
193 else if ( is_object( $message ) ) {
194 return [ 'role' => $message->role, 'content' => $message->content ];
195 }
196 else {
197 throw new InvalidArgumentException( 'Unsupported message type.' );
198 }
199 }, $messages );
200 $this->messages = $messages;
201 }
202
203 /**
204 * The context can be used to add additional information that is likely to be relevant to the model.
205 * @param string $context The context.
206 */
207 public function set_context( string $context ): void {
208 $this->context = $context;
209 }
210
211 /**
212 * The API key to use.
213 * @param string $apiKey The API key.
214 */
215 public function set_api_key( string $apiKey ) {
216 $this->apiKey = $apiKey;
217 }
218
219 /**
220 * The session ID to use.
221 * @param string $session The session ID.
222 */
223 public function set_session( string $session ) {
224 $this->session = $session;
225 }
226
227 /**
228 * The bot ID to use.
229 * @param string $botId The bot ID.
230 */
231 public function set_bot_id( string $botId ) {
232 $this->botId = $botId;
233 }
234
235 /**
236 * How many completions to generate for each prompt.
237 * Because this parameter generates many completions, it can quickly consume your token quota.
238 * Use carefully and ensure that you have reasonable settings for max_tokens and stop.
239 * @param float $maxResults Number of completions.
240 */
241 public function set_max_results( int $maxResults ) {
242 $this->maxResults = $maxResults;
243 }
244
245 /**
246 * This is run at the end of the process, to do some final checks.
247 */
248 public function final_checks() {
249 if ( !empty( $this->maxMessages ) ) {
250 $context = array_shift( $this->messages );
251 if ( !empty( $this->messages ) ) {
252 $this->messages = array_slice( $this->messages, -$this->maxMessages );
253 }
254 else {
255 $this->messages = [];
256 }
257 if ( !empty( $context ) ) {
258 array_unshift( $this->messages, $context );
259 }
260 }
261 }
262
263 public function set_max_sentences( int $maxMessages ): void {
264 if ( !empty( $maxMessages ) ) {
265 $this->maxMessages = intval( $maxMessages );
266 }
267 }
268
269 protected function convert_keys( $params )
270 {
271 $newParams = [];
272 foreach ( $params as $key => $value ) {
273 $newKey = '';
274 $capitalizeNextChar = false;
275 for ( $i = 0; $i < strlen( $key ); $i++ ) {
276 if ( $key[$i] == '_' ) {
277 $capitalizeNextChar = true;
278 }
279 else {
280 $newKey .= $capitalizeNextChar ? strtoupper($key[$i]) : $key[$i];
281 $capitalizeNextChar = false;
282 }
283 }
284 $newParams[$newKey] = $value;
285 }
286 return $newParams;
287 }
288
289 public function toJson() {
290 return json_encode( $this );
291 }
292
293 #region Extra Params
294 public function setExtraParam( string $key, $value ): void {
295 $this->extraParams[$key] = $value;
296 }
297
298 public function getExtraParam( string $key ) {
299 // Only if it exists
300 if ( !isset( $this->extraParams[$key] ) ) {
301 return null;
302 }
303 $value = $this->extraParams[$key];
304 return $value;
305 }
306 #endregion Extra Params
307
308 // Based on the params of the query, update the attributes
309 public function inject_params( array $params ): void
310 {
311 // Those are for the keys passed directly by the shortcode.
312 $params = $this->convert_keys( $params );
313
314 if ( !empty( $params['instructions'] ) ) {
315 $this->set_instructions( $params['instructions'] );
316 }
317 if ( !empty( $params['message'] ) ) {
318 $this->set_message( $params['message'] );
319 }
320 if ( !empty( $params['messages'] ) ) {
321 $this->set_messages( $params['messages'] );
322 }
323 if ( !empty( $params['maxMessages'] ) && intval( $params['maxMessages'] ) > 0 ) {
324 $this->set_max_sentences( intval( $params['maxMessages'] ) );
325 }
326 if ( !empty( $params['maxMessages'] ) && intval( $params['maxMessages'] ) > 0 ) {
327 $this->set_max_sentences( intval( $params['maxMessages'] ) );
328 }
329 if ( !empty( $params['maxResults'] ) ) {
330 $this->set_max_results( $params['maxResults'] );
331 }
332 if ( !empty( $params['scope'] ) ) {
333 $this->set_scope( $params['scope'] );
334 }
335 if ( !empty( $params['session'] ) ) {
336 $this->set_session( $params['session'] );
337 }
338 if ( !empty( $params['apiKey'] ) ) {
339 $this->set_api_key( $params['apiKey'] );
340 }
341 if ( !empty( $params['botId'] ) ) {
342 $this->set_bot_id( $params['botId'] );
343 }
344 if ( !empty( $params['envId'] ) ) {
345 $this->set_env_id( $params['envId'] );
346 }
347 if ( !empty( $params['model'] ) ) {
348 $this->set_model( $params['model'] );
349 }
350 if ( !empty( $params['chatId'] ) ) {
351 $this->set_chat_id( $params['chatId'] );
352 }
353 }
354 }