PluginProbe ʕ •ᴥ•ʔ
AI Engine – The Chatbot, AI Framework & MCP for WordPress / 2.6.2
AI Engine – The Chatbot, AI Framework & MCP for WordPress v2.6.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 / modules / wand.php
ai-engine / classes / modules Last commit date
advisor.php 2 years ago chatbot.php 1 year ago discussions.php 1 year ago files.php 1 year ago gdpr.php 1 year ago security.php 1 year ago tasks.php 2 years ago wand.php 1 year ago
wand.php
323 lines
1 <?php
2
3 class Meow_MWAI_Modules_Wand
4 {
5 private $core;
6
7 public static $features = [
8 'correctText' => [
9 'label' => 'Correct Text',
10 'sublabel' => 'Grammar & Spelling',
11 'arguments' => ['postId', 'text'],
12 'where' => 'blockContext',
13 'group' => 'first'
14 ],
15 'enhanceText' => [
16 'label' => 'Enhance Text',
17 'sublabel' => 'Readibility & Quality',
18 'arguments' => ['postId', 'text'],
19 'where' => 'blockContext',
20 'group' => 'first'
21 ],
22 'longerText' => [
23 'label' => 'Longer Text',
24 'sublabel' => 'Readibility',
25 'arguments' => ['postId', 'text'],
26 'where' => 'blockContext',
27 'group' => 'first'
28 ],
29 'shorterText' => [
30 'label' => 'Shorter Text',
31 'sublabel' => 'Readibility',
32 'arguments' => ['postId', 'text'],
33 'where' => 'blockContext',
34 'group' => 'first'
35 ],
36 'translateText' => [
37 'label' => 'Translate Text',
38 'sublabel' => 'To Post Language',
39 'arguments' => ['postId', 'text', 'language'],
40 'where' => 'blockContext',
41 'group' => 'first'
42 ],
43 'translateSection' => [
44 'label' => 'Translate Post',
45 'sublabel' => 'To Post Language',
46 'arguments' => ['postId', 'text', 'context'],
47 'where' => 'postContext', // We should probably handle this dynamically on the front-side
48 'group' => 'first' // This is random
49 ],
50 'suggestSynonyms' => [
51 'label' => 'Suggest Synonyms',
52 'sublabel' => 'For Selected Words',
53 'arguments' => ['postId', 'text', 'selectedText'],
54 'where' => 'blockContext',
55 'group' => 'second'
56 ],
57 'generateImage' => [
58 'label' => 'Generate Image',
59 'sublabel' => 'For This Text',
60 'arguments' => ['postId', 'text'],
61 'where' => 'blockContext',
62 'group' => 'third'
63 ],
64 'suggestExcerpts' => [
65 'label' => 'Suggest Excerpts',
66 'sublabel' => 'Generate SEO-Optimized Excerpts',
67 'arguments' => ['postId'],
68 'where' => 'postActions'
69 ],
70 'suggestTitles' => [
71 'label' => 'Suggest Titles',
72 'sublabel' => 'Generate SEO-Optimized Titles',
73 'arguments' => ['postId'],
74 'where' => 'postActions'
75 ]
76 ];
77
78 public function __construct( $core )
79 {
80 $this->core = $core;
81 $this->register_filters();
82 }
83
84 private function register_filters()
85 {
86 foreach ( self::$features as $action => $feature ) {
87 add_filter( 'mwai_magic_wand_' . $action, [ $this, 'action_' . $action ], 10, 2 );
88 }
89 }
90
91 /**
92 * Common method to process text actions (e.g., correct, enhance, lengthen, shorten text).
93 *
94 * @param array $arguments The arguments provided for the action.
95 * @param string $messagePrefix The prefix for the message to be set in the query.
96 * @return array The result of the text processing.
97 */
98 private function processTextAction( $arguments, $messagePrefix )
99 {
100 $postId = $arguments['postId'];
101 $text = $arguments['text'];
102 $query = new Meow_MWAI_Query_Text( "", 1024 );
103 $query->set_scope( 'admin-tools' );
104 $language = $keepLanguage = "";
105 if ( !empty( $postId ) ) {
106 $language = $this->core->get_post_language( $postId );
107 $keepLanguage = " Ensure the reply is in the same language as the original text ({$language}).";
108 }
109 $query->set_message( $messagePrefix . $keepLanguage . "\n\n" . $text );
110 $reply = $this->core->run_query( $query );
111
112 return [
113 'mode' => 'replace',
114 'type' => $reply->type,
115 'result' => $reply->result,
116 'results' => $reply->results
117 ];
118 }
119
120 /**
121 * Handles the correction of text by checking and correcting grammatical errors.
122 */
123 public function action_correctText( $value, $arguments )
124 {
125 $prompt = apply_filters( 'mwai_prompt_correctText', "Correct the typos and grammar mistakes in this text without altering its content. Ensure the reply is in the same language as the original text.\n\n", $arguments );
126 return $this->processTextAction( $arguments, $prompt );
127 }
128
129 /**
130 * Enhances the text's readability and quality.
131 */
132 public function action_enhanceText( $value, $arguments )
133 {
134 $prompt = apply_filters( 'mwai_prompt_enhanceText', "Enhance this text by improving readability and quality, using a more suitable vocabulary, and refining its structure.\n\n", $arguments );
135 return $this->processTextAction( $arguments, $prompt );
136 }
137
138 /**
139 * Lengthens the text to improve readability.
140 */
141 public function action_longerText( $value, $arguments ) {
142 $prompt = apply_filters( 'mwai_prompt_longerText', "Expand the subsequent text to a minimum of three times its original length, integrating relevant and accurate information to enrich its content. If the text is a story, amplify its charm by elaborating on essential aspects, enhancing readability, and creating a sense of engagement for the reader. Maintain consistency in tone and vocabulary throughout the expansion process.\n\n", $arguments );
143 return $this->processTextAction( $arguments, $prompt );
144 }
145
146 /**
147 * Shortens the text to improve readability.
148 */
149 public function action_shorterText( $value, $arguments ) {
150 $prompt = apply_filters( 'mwai_prompt_shorterText', "Condense the following text by reducing its length to half, while retaining the core elements of the original narrative. Focus on maintaining the essence of the story and its key details.\n\n", $arguments );
151 return $this->processTextAction( $arguments, $prompt );
152 }
153
154 /**
155 * Suggests synonyms for selected words in the text.
156 */
157 public function action_suggestSynonyms( $value, $arguments ) {
158 $postId = $arguments['postId'];
159 $selectedText = $arguments['selectedText'];
160 $query = new Meow_MWAI_Query_Text( "", 1024 );
161 $query->set_scope( 'admin-tools' );
162 $language = $keepLanguage = "";
163 if ( !empty( $postId ) ) {
164 $language = $this->core->get_post_language( $postId );
165 $keepLanguage = " Ensure the reply is in the same language as the original text ({$language}).";
166 }
167 $prompt = apply_filters( 'mwai_prompt_suggestSynonyms', "Provide 5 synonyms or 5 ways of rephrasing the given word or sentence while retaining the original meaning and preserving the initial and final punctuation and spacing if any. Offer only the resulting word or expression, without additional context. If a suitable synonym or alternative cannot be identified, ensure that a creative response is still provided. Separate every suggestion with a new line, and that's it." . $keepLanguage . "\n\n", $arguments );
168 $query->set_message( $prompt . $selectedText );
169 $query->set_temperature( 1 );
170 $reply = $this->core->run_query( $query );
171 $lines = explode( "\n", $reply->result );
172 $results = [];
173 foreach ( $lines as $line ) {
174 if ( !empty( $line ) ) {
175 $results[] = $line;
176 }
177 }
178 return [
179 'mode' => 'suggest',
180 'type' => $reply->type,
181 'result' => $results[0] ?? '',
182 'results' => $results
183 ];
184 }
185
186 /**
187 * Generates an image relevant to the text.
188 */
189 public function action_generateImage( $value, $arguments ) {
190 global $mwai;
191 $postId = $arguments['postId'];
192 $text = $arguments['text'];
193 $prompt = apply_filters( 'mwai_prompt_generateImage', "Generate an image that is relevant to the following text:\n\n", $arguments );
194 $message = $prompt . $text;
195 $media = $mwai->imageQueryForMediaLibrary( $message, $params = [], $postId );
196 return [
197 'mode' => 'insertMedia',
198 'type' => 'image',
199 'media' => $media
200 ];
201 }
202
203 /**
204 * Translates the specified text of text to the target language.
205 *
206 * @param mixed $value Unused parameter
207 * @param array $arguments Contains postId, text, and context
208 * @return array Translation result
209 */
210 public function action_translateSection( $value, $arguments ) {
211 $postId = $arguments['postId'];
212 $text = $arguments['text'];
213
214 if (empty($text)) {
215 return [
216 'mode' => 'replace',
217 'type' => 'text',
218 'result' => '',
219 'results' => []
220 ];
221 }
222
223 $context = $arguments['context'];
224 $targetLanguage = $this->core->get_post_language($postId);
225 $query = new Meow_MWAI_Query_Text("", 1024);
226 $query->set_scope('admin-tools');
227 $prompt = "Translate the following section into {$targetLanguage}:\n\n" .
228 "[SECTION TO TRANSLATE]\n{$text}\n[END SECTION TO TRANSLATE]\n\n" .
229 "Translation guidelines:\n" .
230 "1. Maintain the original tone, mood, and nuance.\n" .
231 "2. Preserve the intended meaning as accurately as possible.\n" .
232 "3. Ensure the translation fits seamlessly within the broader context.\n" .
233 "4. Use appropriate idiomatic expressions in the target language when applicable.\n" .
234 "5. Maintain any formatting or special characters present in the original text.\n\n" .
235 "Broader context (for reference only, do not translate):\n\n" .
236 "[CONTEXT]\n{$context}\n[END CONTEXT]\n\n" .
237 "Provide only the translated section, between the markers [TRANSLATED SECTION] and [END TRANSLATED SECTION], without any additional content. Do not include the markers [TRANSLATED SECTION] and [END TRANSLATED SECTION] in your reply!\n\n";
238 $prompt = apply_filters('mwai_prompt_translateSection', $prompt, $arguments);
239 $query->set_message($prompt);
240 $reply = $this->core->run_query($query);
241
242 // Clean up the result, just in case...
243 $result = $reply->result;
244 $result = str_replace('[TRANSLATED SECTION]', '', $result);
245 $result = str_replace('[END TRANSLATED SECTION]', '', $result);
246 $result = trim($result);
247 $results = [];
248 foreach ($reply->results as $r) {
249 $r = str_replace('[TRANSLATED SECTION]', '', $r);
250 $r = str_replace('[END TRANSLATED SECTION]', '', $r);
251 $r = trim($r);
252 $results[] = $r;
253 }
254
255 return [
256 'mode' => 'replace',
257 'type' => $reply->type,
258 'result' => $result,
259 'results' => $results
260 ];
261 }
262
263 /**
264 * Translates the text to the specified language.
265 */
266 public function action_translateText( $value, $arguments ) {
267 $postId = $arguments['postId'];
268 $text = $arguments['text'];
269 $language = $this->core->get_post_language( $postId );
270 $query = new Meow_MWAI_Query_Text( "", 1024 );
271 $query->set_scope( 'admin-tools' );
272 $prompt = apply_filters( 'mwai_prompt_translateText', "Translate the text into {$language}, preserving the tone, mood, and nuance, while staying as true as possible to the original meaning. Provide only the translated text, without any additional content.\n\n", $arguments );
273 $query->set_message( $prompt . $text );
274 $reply = $this->core->run_query( $query );
275 return [
276 'mode' => 'replace',
277 'type' => $reply->type,
278 'result' => $reply->result,
279 'results' => $reply->results
280 ];
281 }
282
283 /**
284 * Suggests SEO-optimized excerpts for the text.
285 */
286 public function action_suggestExcerpts( $value, $arguments ) {
287 $postId = $arguments['postId'];
288 $text = $this->core->get_post_content( $postId );
289 $query = new Meow_MWAI_Query_Text( "", 1024 );
290 $query->set_scope( 'admin-tools' );
291 $prompt = apply_filters( 'mwai_prompt_suggestExcerpts', "Craft a clear, SEO-optimized introduction for the following text, using 120 to 170 characters. Ensure the introduction is concise and relevant, without including any URLs.\n\n", $arguments );
292 $query->set_message( $prompt . $text );
293 $query->set_max_results( 5 );
294 $reply = $this->core->run_query( $query );
295 return [
296 'mode' => 'suggest',
297 'type' => $reply->type,
298 'result' => $reply->result,
299 'results' => $reply->results
300 ];
301 }
302
303 /**
304 * Suggests SEO-optimized titles for the text.
305 */
306 public function action_suggestTitles( $value, $arguments ) {
307 $postId = $arguments['postId'];
308 $text = $this->core->get_post_content( $postId );
309 $query = new Meow_MWAI_Query_Text( "", 1024 );
310 $query->set_scope( 'admin-tools' );
311 $prompt = apply_filters( 'mwai_prompt_suggestTitles', "Generate a concise, SEO-optimized title for the following text, without using quotes or any other formatting. Focus on clarity and relevance to the content.\n\n", $arguments );
312 $query->set_message( $prompt . $text );
313 $query->set_max_results( 5 );
314 $reply = $this->core->run_query( $query );
315 return [
316 'mode' => 'suggest',
317 'type' => $reply->type,
318 'result' => $reply->result,
319 'results' => $reply->results
320 ];
321 }
322 }
323