PluginProbe ʕ •ᴥ•ʔ
AI Engine – The Chatbot, AI Framework & MCP for WordPress / 2.3.3
AI Engine – The Chatbot, AI Framework & MCP for WordPress v2.3.3
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
chatbot.php 2 years ago discussions.php 2 years ago files.php 2 years ago security.php 2 years ago tasks.php 2 years ago utilities.php 2 years ago wand.php 2 years ago
wand.php
269 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 'suggestSynonyms' => [
44 'label' => 'Suggest Synonyms',
45 'sublabel' => 'For Selected Words',
46 'arguments' => ['postId', 'text', 'selectedText'],
47 'where' => 'blockContext',
48 'group' => 'second'
49 ],
50 'generateImage' => [
51 'label' => 'Generate Image',
52 'sublabel' => 'For This Text',
53 'arguments' => ['postId', 'text'],
54 'where' => 'blockContext',
55 'group' => 'third'
56 ],
57 'suggestExcerpts' => [
58 'label' => 'Suggest Excerpts',
59 'sublabel' => 'Generate SEO-Optimized Excerpts',
60 'arguments' => ['postId'],
61 'where' => 'postActions'
62 ],
63 'suggestTitles' => [
64 'label' => 'Suggest Titles',
65 'sublabel' => 'Generate SEO-Optimized Titles',
66 'arguments' => ['postId'],
67 'where' => 'postActions'
68 ]
69 ];
70
71 public function __construct( $core )
72 {
73 $this->core = $core;
74 $this->register_filters();
75 }
76
77 private function register_filters()
78 {
79 foreach ( self::$features as $action => $feature ) {
80 add_filter( 'mwai_magic_wand_' . $action, [ $this, 'action_' . $action ], 10, 2 );
81 }
82 }
83
84 /**
85 * Common method to process text actions (e.g., correct, enhance, lengthen, shorten text).
86 *
87 * @param array $arguments The arguments provided for the action.
88 * @param string $messagePrefix The prefix for the message to be set in the query.
89 * @return array The result of the text processing.
90 */
91 private function processTextAction( $arguments, $messagePrefix )
92 {
93 $postId = $arguments['postId'];
94 $text = $arguments['text'];
95 $query = new Meow_MWAI_Query_Text( "", 1024 );
96 $query->set_scope( 'admin-tools' );
97 $language = $keepLanguage = "";
98 if ( !empty( $postId ) ) {
99 $language = $this->core->get_post_language( $postId );
100 $keepLanguage = " Ensure the reply is in the same language as the original text ({$language}).";
101 }
102 $query->set_message( $messagePrefix . $keepLanguage . "\n\n" . $text );
103 $reply = $this->core->run_query( $query );
104
105 return [
106 'mode' => 'replace',
107 'type' => $reply->type,
108 'result' => $reply->result,
109 'results' => $reply->results
110 ];
111 }
112
113 /**
114 * Handles the correction of text by checking and correcting grammatical errors.
115 */
116 public function action_correctText( $value, $arguments )
117 {
118 $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 );
119 return $this->processTextAction( $arguments, $prompt );
120 }
121
122 /**
123 * Enhances the text's readability and quality.
124 */
125 public function action_enhanceText( $value, $arguments )
126 {
127 $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 );
128 return $this->processTextAction( $arguments, $prompt );
129 }
130
131 /**
132 * Lengthens the text to improve readability.
133 */
134 public function action_longerText( $value, $arguments ) {
135 $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 );
136 return $this->processTextAction( $arguments, $prompt );
137 }
138
139 /**
140 * Shortens the text to improve readability.
141 */
142 public function action_shorterText( $value, $arguments ) {
143 $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 );
144 return $this->processTextAction( $arguments, $prompt );
145 }
146
147 /**
148 * Suggests synonyms for selected words in the text.
149 */
150 public function action_suggestSynonyms( $value, $arguments ) {
151 $postId = $arguments['postId'];
152 $selectedText = $arguments['selectedText'];
153 $query = new Meow_MWAI_Query_Text( "", 1024 );
154 $query->set_scope( 'admin-tools' );
155 $language = $keepLanguage = "";
156 if ( !empty( $postId ) ) {
157 $language = $this->core->get_post_language( $postId );
158 $keepLanguage = " Ensure the reply is in the same language as the original text ({$language}).";
159 }
160 $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 );
161 $query->set_message( $prompt . $selectedText );
162 $query->set_temperature( 1 );
163 $reply = $this->core->run_query( $query );
164 $lines = explode( "\n", $reply->result );
165 $results = [];
166 foreach ( $lines as $line ) {
167 if ( !empty( $line ) ) {
168 $results[] = $line;
169 }
170 }
171 return [
172 'mode' => 'suggest',
173 'type' => $reply->type,
174 'result' => $results[0] ?? '',
175 'results' => $results
176 ];
177 }
178
179 /**
180 * Generates an image relevant to the text.
181 */
182 public function action_generateImage( $value, $arguments ) {
183 $postId = $arguments['postId'];
184 $text = $arguments['text'];
185 $prompt = apply_filters( 'mwai_prompt_generateImage', "Generate an image that is relevant to the following text:\n\n", $arguments );
186 $query = new Meow_MWAI_Query_Image( $prompt . $text );
187 $query->set_local_download( null );
188 $reply = $this->core->run_query( $query );
189 preg_match( '/\!\[Image\]\((.*?)\)/', $reply->result, $matches );
190 $url = $matches[1] ?? $reply->result;
191 $attachmentId = $this->core->add_image_from_url( $url, null, null, null, null, null, $postId );
192 if ( empty( $attachmentId ) ) {
193 throw new Exception( 'Could not add the image to the Media Library.' );
194 }
195 $media = [
196 'id' => $attachmentId,
197 'url' => wp_get_attachment_url( $attachmentId ),
198 'title' => get_the_title( $attachmentId ),
199 'caption' => wp_get_attachment_caption( $attachmentId ),
200 'alt' => get_post_meta( $attachmentId, '_wp_attachment_image_alt', true )
201 ];
202 return [
203 'mode' => 'insertMedia',
204 'type' => 'image',
205 'media' => $media
206 ];
207 }
208
209 /**
210 * Translates the text to the specified language.
211 */
212 public function action_translateText( $value, $arguments ) {
213 $postId = $arguments['postId'];
214 $text = $arguments['text'];
215 $language = $this->core->get_post_language( $postId );
216 $query = new Meow_MWAI_Query_Text( "", 1024 );
217 $query->set_scope( 'admin-tools' );
218 $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 );
219 $query->set_message( $prompt . $text );
220 $reply = $this->core->run_query( $query );
221 return [
222 'mode' => 'replace',
223 'type' => $reply->type,
224 'result' => $reply->result,
225 'results' => $reply->results
226 ];
227 }
228
229 /**
230 * Suggests SEO-optimized excerpts for the text.
231 */
232 public function action_suggestExcerpts( $value, $arguments ) {
233 $postId = $arguments['postId'];
234 $text = $this->core->get_post_content( $postId );
235 $query = new Meow_MWAI_Query_Text( "", 1024 );
236 $query->set_scope( 'admin-tools' );
237 $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 );
238 $query->set_message( $prompt . $text );
239 $query->set_max_results( 5 );
240 $reply = $this->core->run_query( $query );
241 return [
242 'mode' => 'suggest',
243 'type' => $reply->type,
244 'result' => $reply->result,
245 'results' => $reply->results
246 ];
247 }
248
249 /**
250 * Suggests SEO-optimized titles for the text.
251 */
252 public function action_suggestTitles( $value, $arguments ) {
253 $postId = $arguments['postId'];
254 $text = $this->core->get_post_content( $postId );
255 $query = new Meow_MWAI_Query_Text( "", 1024 );
256 $query->set_scope( 'admin-tools' );
257 $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 );
258 $query->set_message( $prompt . $text );
259 $query->set_max_results( 5 );
260 $reply = $this->core->run_query( $query );
261 return [
262 'mode' => 'suggest',
263 'type' => $reply->type,
264 'result' => $reply->result,
265 'results' => $reply->results
266 ];
267 }
268 }
269