PluginProbe ʕ •ᴥ•ʔ
AI Engine – The Chatbot, AI Framework & MCP for WordPress / 0.2.0
AI Engine – The Chatbot, AI Framework & MCP for WordPress v0.2.0
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 / shortcodes.php
ai-engine / classes Last commit date
admin.php 3 years ago ai.php 3 years ago answer.php 3 years ago core.php 3 years ago init.php 3 years ago query.php 3 years ago queryimage.php 3 years ago querytext.php 3 years ago rest.php 3 years ago shortcodes.php 3 years ago ui.php 3 years ago
shortcodes.php
336 lines
1 <?php
2
3 class Meow_MWAI_Shortcodes {
4 private $core = null;
5 private $namespace = 'ai-engine/v1';
6
7 public function __construct() {
8 global $mwai_core;
9 $this->core = $mwai_core;
10 add_shortcode( 'mwai_chat', array( $this, 'chat' ) );
11 add_action( 'rest_api_init', array( $this, 'rest_api_init' ) );
12
13 // If we apply ChatGPT styles
14 if ( $this->core->get_option( 'shortcode_chat_style' ) ) {
15 add_filter( 'mwai_chat_html', array( $this, 'chatgpt_style' ), 10, 2 );
16 add_filter( 'mwai_chat_html', array( $this, 'spinner_style' ), 10, 2 );
17 }
18 }
19
20 function rest_api_init() {
21 try {
22 register_rest_route( $this->namespace, '/chat', array(
23 'methods' => 'POST',
24 'callback' => array( $this, 'rest_chat' ),
25 'permission_callback' => '__return_true'
26 ) );
27 }
28 catch ( Exception $e ) {
29 var_dump( $e );
30 }
31 }
32
33 function spinner_style( $html, $atts ) {
34 // If needed, we can use the $id to apply styles
35 $id = $atts['id']; // This could be replace by the ID of a specific chatbot
36 return "
37 <style>
38 #mwai-chat-$id button {
39 position: relative;
40 }
41
42 #mwai-chat-$id button[disabled] span {
43 display: none;
44 }
45
46 #mwai-chat-$id button[disabled]::after {
47 content: '';
48 position: absolute;
49 width: 18px;
50 height: 18px;
51 top: 0;
52 left: 0;
53 right: 0;
54 bottom: 0;
55 margin: auto;
56 border: 3px solid transparent;
57 border-top-color: #ffffff;
58 border-radius: 50%;
59 animation: mwai-button-spinner 1s ease infinite;
60 }
61
62 @keyframes mwai-button-spinner {
63 from {
64 transform: rotate(0turn);
65 }
66
67 to {
68 transform: rotate(1turn);
69 }
70 }
71 </style>
72 " . $html;
73 }
74
75 function chatgpt_style( $html, $atts ) {
76 // If needed, we can use the $id to apply styles
77 $id = $atts['id']; // This could be replace by the ID of a specific chatbot
78 return "
79 <style>
80 #mwai-chat-$id {
81 background: #343541;
82 color: white;
83 font-size: 15px;
84 border-radius: 10px;
85 overflow: hidden;
86 }
87
88 #mwai-chat-$id h2 {
89 font-size: 20px;
90 }
91
92 #mwai-chat-$id pre {
93 background: black;
94 color: white;
95 border-radius: 10px;
96 padding: 10px 15px;
97 break-after: auto;
98 font-size: 14px;
99 }
100
101 #mwai-chat-$id ol {
102 padding: 0;
103 margin: 0 0 0 20px;
104 }
105
106 #mwai-chat-$id .mwai-reply {
107 display: flex;
108 padding: 20px;
109 }
110
111 #mwai-chat-$id .mwai-ai {
112 background: #454654;
113 }
114
115 #mwai-chat-$id .mwai-name {
116 color: #a0a0a0;
117 margin-right: 20px;
118 }
119
120 #mwai-chat-$id .mwai-text {
121 flex: auto;
122 }
123
124 #mwai-chat-$id .mwai-text > *:first-child {
125 margin-top: 0;
126 }
127
128 #mwai-chat-$id .mwai-text > *:last-child {
129 margin-bottom: 0;
130 }
131
132 #mwai-chat-$id .mwai-input {
133 display: flex;
134 padding: 15px;
135 }
136
137 #mwai-chat-$id .mwai-input input {
138 background: #40414f;
139 color: white;
140 flex: auto;
141 padding: 15px;
142 border: none;
143 border-radius: 5px;
144 font-size: 15px;
145 }
146
147 #mwai-chat-$id .mwai-input button {
148 background: none;
149 color: white;
150 border: 1px solid #40414f;
151 margin-left: 15px;
152 width: 80px;
153 border-radius: 5px;
154 cursor: pointer;
155 }
156 </style>
157 " . $html;
158 }
159
160 function rest_chat( $request ) {
161 try {
162 $params = $request->get_json_params();
163 $prompt = $params['prompt'];
164 $model = $params['model'];
165 $userName = $params['userName'];
166 $aiName = $params['aiName'];
167 $temperature = $params['temperature'];
168 $apiKey = $params['apiKey'];
169 $query = new Meow_MWAI_Query( $prompt, 1024 );
170 if ( $model ) {
171 $query->setModel( $model );
172 }
173 if ( $temperature ) {
174 $query->setTemperature( $temperature );
175 }
176 if ( $apiKey ) {
177 $query->setApiKey( $apiKey );
178 }
179 $answer = $this->core->ai->run( $query );
180 $rawText = $answer->result;
181
182 $html = $this->core->markdown_to_html( $answer->result );
183 return new WP_REST_Response([ 'success' => true, 'answer' => $rawText, 'html' => $html, 'usage' => $answer->usage ], 200 );
184 }
185 catch ( Exception $e ) {
186 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
187 }
188 }
189
190 function chat( $atts ) {
191 $defaults = apply_filters( 'mwai_chat_atts', [
192 'id' => uniqid(),
193 'context' => "Converse as if you were an AI assistant. Be friendly, creative.",
194 'ai_name' => "AI: ",
195 'user_name' => "User: ",
196 'sys_name' => "System: ",
197 'start_sentence' => "Hi! How can I help you?",
198 'model' => 'text-davinci-003',
199 'temperature' => 0.8,
200 'api_key' => ''
201 ] );
202 $atts = shortcode_atts( $defaults, $atts, 'meow_ai' );
203 $id = $atts['id'];
204 $apiUrl = get_rest_url( null, 'ai-engine/v1/chat' );
205 $onSentClickFn = "mwai_{$id}_onSendClick";
206 $addReplyFn = "mwai_{$id}_addReply";
207 $convertToHtmlFn = "mwai_{$id}_convertToHtml";
208 $aiName = addslashes( trim($atts['ai_name']) );
209 $userName = addslashes( trim($atts['user_name']) );
210 $sysName = addslashes( trim($atts['sys_name']) );
211 $context = addslashes( trim( $atts['context'] ) );
212 $onGoingPrompt = "mwai_{$id}_onGoingPrompt";
213 ob_start();
214 ?>
215
216 <div id="mwai-chat-<?= $id ?>" class="mwai-chat">
217 <div class="mwai-conversation">
218 </div>
219 <div class="mwai-input">
220 <input type="text" placeholder="Type your message here..." />
221 <button><span>Send</span></button>
222 </div>
223 </div>
224
225 <script>
226 var <?= $onGoingPrompt ?> = '<?= $context ?>' + '\n\n';
227
228 function <?= $convertToHtmlFn ?>(text) {
229 return text;
230 }
231
232 // Function to add a reply in the conversation
233 function <?= $addReplyFn ?>(text, type = 'user') {
234 var conversation = document.querySelector('#mwai-chat-<?= $id ?> .mwai-conversation');
235 text = <?= $convertToHtmlFn ?>(text);
236 var mwaiClasses = 'mwai-reply';
237 if (type === 'ai') {
238 mwaiClasses += ' mwai-ai';
239 }
240 else if (type === 'system') {
241 mwaiClasses += ' mwai-system';
242 }
243 else {
244 mwaiClasses += ' mwai-user';
245 }
246 var html = '<div class="' + mwaiClasses + '">';
247 if (type === 'ai') {
248 html += '<span class="mwai-name"><?= $aiName ?></span>';
249 }
250 else if (type === 'system') {
251 html += '<span class="mwai-name"><?= $sysName ?></span>';
252 }
253 else {
254 html += '<span class="mwai-name"><?= $userName ?></span>';
255 }
256 html += '<span class="mwai-text">' + text + '</span>';
257 html += '</div>';
258
259 conversation.innerHTML += html;
260 }
261
262 // Function to request the completion
263 function <?= $onSentClickFn ?>() {
264 let input = document.querySelector('#mwai-chat-<?= $id ?> .mwai-input input');
265 let inputText = input.value.trim();
266
267 if (inputText === '') {
268 return;
269 }
270
271 // Disable the button
272 var button = document.querySelector('#mwai-chat-<?= $id ?> .mwai-input button');
273 button.disabled = true;
274
275 // Add the user reply
276 <?= $addReplyFn ?>(inputText, 'user');
277 <?= $onGoingPrompt ?> += '<?= $userName ?>' + inputText + '\n';
278 input.value = '';
279 input.disabled = true;
280
281 // Request the completion
282 <?= $onGoingPrompt ?> += '<?= $aiName ?>';
283 const data = {
284 prompt: <?= $onGoingPrompt ?>,
285 userName: '<?= $userName ?>',
286 aiName: '<?= $aiName ?>',
287 model: '<?= $atts['model'] ?>',
288 temperature: '<?= $atts['temperature'] ?>',
289 apiKey: '<?= $atts['api_key'] ?>',
290 };
291 console.log('[BOT] Sent: ', data);
292 fetch('<?= $apiUrl ?>', { method: 'POST', headers: { 'Content-Type': 'application/json' },
293 body: JSON.stringify(data)
294 })
295 .then(response => response.json())
296 .then(data => {
297 console.log('[BOT] Recv: ', data);
298 if (!data.success) {
299 <?= $addReplyFn ?>(data.message, 'system');
300 }
301 else {
302 <?= $addReplyFn ?>(data.html, 'ai');
303 <?= $onGoingPrompt ?> += data.answer + '\n';
304 }
305 button.disabled = false;
306 input.disabled = false;
307 })
308 .catch(error => {
309 console.error(error);
310 button.disabled = false;
311 input.disabled = false;
312 });
313 }
314
315 var input = document.querySelector('#mwai-chat-<?= $id ?> .mwai-input input');
316 input.addEventListener('keypress', (event) => {
317 if (event.keyCode === 13) {
318 <?= $onSentClickFn ?>();
319 }
320 });
321
322 var button = document.querySelector('#mwai-chat-<?= $id ?> .mwai-input button');
323 button.addEventListener('click', (event) => {
324 <?= $onSentClickFn ?>();
325 });
326
327 <?= $addReplyFn ?>('<?= $atts['start_sentence'] ?>', 'ai');
328 </script>
329
330 <?php
331 $output = ob_get_contents();
332 ob_end_clean();
333 $output = apply_filters( 'mwai_chat_html', $output, $atts );
334 return $output;
335 }
336 }