PluginProbe ʕ •ᴥ•ʔ
AI Engine – The Chatbot, AI Framework & MCP for WordPress / 0.0.9
AI Engine – The Chatbot, AI Framework & MCP for WordPress v0.0.9
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 rest.php 3 years ago shortcodes.php 3 years ago ui.php 3 years ago
shortcodes.php
216 lines
1 <?php
2
3 class Meow_MWAI_Shortcodes {
4 private $core = null;
5 private $namespace = 'ai-engine/v1';
6
7 public function __construct( $core ) {
8 $this->core = $core;
9 add_shortcode( 'mwai_chat', array( $this, 'chat' ) );
10 add_action( 'rest_api_init', array( $this, 'rest_api_init' ) );
11 }
12
13 function rest_api_init() {
14 try {
15 register_rest_route( $this->namespace, '/chat', array(
16 'methods' => 'POST',
17 'callback' => array( $this, 'rest_chat' ),
18 'permission_callback' => '__return_true'
19 ) );
20 }
21 catch ( Exception $e ) {
22 var_dump( $e );
23 }
24 }
25
26 function rest_chat( $request ) {
27 try {
28 $params = $request->get_json_params();
29 $prompt = $params['prompt'];
30 $model = $params['model'];
31 $temperature = $params['temperature'];
32 $query = new Meow_MWAI_Query( $prompt, 1024 );
33 if ( $model ) {
34 $query->setModel( $model );
35 }
36 if ( $temperature ) {
37 $query->setTemperature( $temperature );
38 }
39 $answer = $this->core->ai->run( $query );
40 return new WP_REST_Response([ 'success' => true, 'data' => $answer->result, 'usage' => $answer->usage ], 200 );
41 }
42 catch ( Exception $e ) {
43 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
44 }
45 }
46
47 function chat( $atts ) {
48 $atts = shortcode_atts([
49 'context' => "Converse as if you were Michael Jackson, talking from the afterlife. Be friendly, creative.",
50 'ai_prompt' => "Michael: ",
51 'user_prompt' => "You: ",
52 'sys_prompt' => "System: ",
53 'start_sentence' => "Hi, my friend.",
54 'model' => 'text-davinci-003',
55 'temperature' => 0.8
56 ], $atts, 'meow_ai' );
57
58 $id = uniqid();
59 $apiUrl = get_rest_url( null, 'ai-engine/v1/chat' );
60 $onSentClickFn = "mwai_{$id}_onSendClick";
61 $addReplyFn = "mwai_{$id}_addReply";
62 $convertToHtmlFn = "mwai_{$id}_convertToHtml";
63 ob_start();
64 ?>
65
66 <div id="mwai-chat-<?= $id ?>" class="mwai-chat">
67 <div class="mwai-conversation">
68 </div>
69 <div class="mwai-input">
70 <input type="text" placeholder="Type your message here..." />
71 <button>Send</button>
72 </div>
73 </div>
74
75 <script>
76 function <?= $convertToHtmlFn ?>(text) {
77 // Split the input text into an array of lines
78 const lines = text.split('\n');
79
80 // Initialize an empty array to store the HTML
81 const html = [];
82
83 // Initialize a variable to keep track of the current list type (none, bullet, or numbered)
84 let listType = 'none';
85
86 // Iterate over the lines
87 for (const line of lines) {
88 // Check if the line is a bullet point
89 if (line.startsWith('*')) {
90 // If the current list type is not a bullet point, start a new bullet point list
91 if (listType !== 'bullet') {
92 html.push('<ul>');
93 listType = 'bullet';
94 }
95 // Add the bullet point to the HTML
96 html.push(`<li>${line.substring(1).trim()}</li>`);
97 }
98 // Check if the line is a numbered list item
99 else if (line.match(/^\d+\./)) {
100 // If the current list type is not a numbered list, start a new numbered list
101 if (listType !== 'numbered') {
102 html.push('<ol>');
103 listType = 'numbered';
104 }
105 // Add the numbered list item to the HTML
106 html.push(`<li>${line.substring(line.indexOf('.') + 1).trim()}</li>`);
107 }
108 // Otherwise, the line is not part of a list
109 else {
110 // If the current list type is not "none", close the current list
111 if (listType !== 'none') {
112 html.push(listType === 'bullet' ? '</ul>' : '</ol>');
113 listType = 'none';
114 }
115
116 // If the line starts with the AI or user prompt, replace it with a span with the appropriate class
117 if (line.startsWith('<?= $atts['ai_prompt'] ?>')) {
118 html.push(`<p><span class="mwai-ai-prompt"><?= $atts['ai_prompt'] ?></span>${line.substring('<?= $atts['ai_prompt'] ?>'.length).trim()}</p>`);
119 }
120 else if (line.startsWith('<?= $atts['user_prompt'] ?>')) {
121 html.push(`<p><span class="mwai-user-prompt"><?= $atts['user_prompt'] ?></span>${line.substring('<?= $atts['user_prompt'] ?>'.length).trim()}</p>`);
122 }
123 else {
124 // Otherwise, add the line as a paragraph to the HTML
125 html.push(`<p>${line.trim()}</p>`);
126 }
127 }
128 }
129
130 // If the current list type is not "none", close the current list
131 if (listType !== 'none') {
132 html.push(listType === 'bullet' ? '</ul>' : '</ol>');
133 }
134
135 // Join the HTML array into a single string and return it
136 return html.join('');
137 }
138
139 // Function to add a reply in the conversation
140 function <?= $addReplyFn ?>(text, type = 'user') {
141 var conversation = document.querySelector('#mwai-chat-<?= $id ?> .mwai-conversation');
142 text = <?= $convertToHtmlFn ?>(text);
143 if (type === 'ai') {
144 conversation.innerHTML += '<div class="mwai-ai">' + text + '</div>';
145 }
146 else if (type === 'system') {
147 conversation.innerHTML += '<div class="mwai-system">' + text + '</div>';
148 }
149 else {
150 conversation.innerHTML += '<div class="mwai-user">' + text + '</div>';
151 }
152 }
153
154 // Function to request the completion
155 function <?= $onSentClickFn ?>() {
156
157 // Disable the button
158 var button = document.querySelector('#mwai-chat-<?= $id ?> .mwai-input button');
159 button.disabled = true;
160
161 // Add the user reply
162 var input = document.querySelector('#mwai-chat-<?= $id ?> .mwai-input input');
163 <?= $addReplyFn ?>('<?= $atts['user_prompt'] ?>' + input.value, 'user');
164 input.value = '';
165 input.disabled = true;
166
167 // Request the completion and add the reply
168 var conversation = document.querySelector('#mwai-chat-<?= $id ?> .mwai-conversation');
169 var promptToUse = '<?= $atts['context'] ?>' + conversation.innerText + '\n';
170 fetch('<?= $apiUrl ?>', { method: 'POST', headers: { 'Content-Type': 'application/json' },
171 body: JSON.stringify({
172 prompt: promptToUse,
173 model: '<?= $atts['model'] ?>',
174 temperature: '<?= $atts['temperature'] ?>'
175 })
176 })
177 .then(response => response.json())
178 .then(data => {
179 console.log(data);
180 if (!data.success) {
181 <?= $addReplyFn ?>('<?= $atts['sys_prompt'] ?>' + data.message, 'system');
182 }
183 else {
184 <?= $addReplyFn ?>(data.data, 'ai');
185 }
186 button.disabled = false;
187 input.disabled = false;
188 })
189 .catch(error => {
190 console.error(error);
191 button.disabled = false;
192 input.disabled = false;
193 });
194 }
195
196 var input = document.querySelector('#mwai-chat-<?= $id ?> .mwai-input input');
197 input.addEventListener('keypress', (event) => {
198 if (event.keyCode === 13) {
199 <?= $onSentClickFn ?>();
200 }
201 });
202
203 var button = document.querySelector('#mwai-chat-<?= $id ?> .mwai-input button');
204 button.addEventListener('click', (event) => {
205 <?= $onSentClickFn ?>();
206 });
207
208 <?= $addReplyFn ?>('<?= $atts['ai_prompt'] ?>' + '<?= $atts['start_sentence'] ?>', 'ai');
209 </script>
210
211 <?php
212 $output = ob_get_contents();
213 ob_end_clean();
214 return $output;
215 }
216 }