PluginProbe ʕ •ᴥ•ʔ
AI Engine – The Chatbot, AI Framework & MCP for WordPress / 0.1.2
AI Engine – The Chatbot, AI Framework & MCP for WordPress v0.1.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 / 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
217 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 $defaults = apply_filters( 'mwai_chat_atts', [
49 'id' => uniqid(),
50 'context' => "Converse as if you were an AI assistant. Be friendly, creative.",
51 'ai_prompt' => "AI: ",
52 'user_prompt' => "You: ",
53 'sys_prompt' => "System: ",
54 'start_sentence' => "Hi! How can I help you?",
55 'model' => 'text-davinci-003',
56 'temperature' => 0.8
57 ] );
58 $atts = shortcode_atts( $defaults, $atts, 'meow_ai' );
59 $id = $atts['id'];
60 $apiUrl = get_rest_url( null, 'ai-engine/v1/chat' );
61 $onSentClickFn = "mwai_{$id}_onSendClick";
62 $addReplyFn = "mwai_{$id}_addReply";
63 $convertToHtmlFn = "mwai_{$id}_convertToHtml";
64 ob_start();
65 ?>
66
67 <div id="mwai-chat-<?= $id ?>" class="mwai-chat">
68 <div class="mwai-conversation">
69 </div>
70 <div class="mwai-input">
71 <input type="text" placeholder="Type your message here..." />
72 <button>Send</button>
73 </div>
74 </div>
75
76 <script>
77 function <?= $convertToHtmlFn ?>(text) {
78 // Split the input text into an array of lines
79 const lines = text.split('\n');
80
81 // Initialize an empty array to store the HTML
82 const html = [];
83
84 // Initialize a variable to keep track of the current list type (none, bullet, or numbered)
85 let listType = 'none';
86
87 // Iterate over the lines
88 for (const line of lines) {
89 // Check if the line is a bullet point
90 if (line.startsWith('*')) {
91 // If the current list type is not a bullet point, start a new bullet point list
92 if (listType !== 'bullet') {
93 html.push('<ul>');
94 listType = 'bullet';
95 }
96 // Add the bullet point to the HTML
97 html.push(`<li>${line.substring(1).trim()}</li>`);
98 }
99 // Check if the line is a numbered list item
100 else if (line.match(/^\d+\./)) {
101 // If the current list type is not a numbered list, start a new numbered list
102 if (listType !== 'numbered') {
103 html.push('<ol>');
104 listType = 'numbered';
105 }
106 // Add the numbered list item to the HTML
107 html.push(`<li>${line.substring(line.indexOf('.') + 1).trim()}</li>`);
108 }
109 // Otherwise, the line is not part of a list
110 else {
111 // If the current list type is not "none", close the current list
112 if (listType !== 'none') {
113 html.push(listType === 'bullet' ? '</ul>' : '</ol>');
114 listType = 'none';
115 }
116
117 // If the line starts with the AI or user prompt, replace it with a span with the appropriate class
118 if (line.startsWith('<?= $atts['ai_prompt'] ?>')) {
119 html.push(`<p><span class="mwai-ai-prompt"><?= $atts['ai_prompt'] ?></span>${line.substring('<?= $atts['ai_prompt'] ?>'.length).trim()}</p>`);
120 }
121 else if (line.startsWith('<?= $atts['user_prompt'] ?>')) {
122 html.push(`<p><span class="mwai-user-prompt"><?= $atts['user_prompt'] ?></span>${line.substring('<?= $atts['user_prompt'] ?>'.length).trim()}</p>`);
123 }
124 else {
125 // Otherwise, add the line as a paragraph to the HTML
126 html.push(`<p>${line.trim()}</p>`);
127 }
128 }
129 }
130
131 // If the current list type is not "none", close the current list
132 if (listType !== 'none') {
133 html.push(listType === 'bullet' ? '</ul>' : '</ol>');
134 }
135
136 // Join the HTML array into a single string and return it
137 return html.join('');
138 }
139
140 // Function to add a reply in the conversation
141 function <?= $addReplyFn ?>(text, type = 'user') {
142 var conversation = document.querySelector('#mwai-chat-<?= $id ?> .mwai-conversation');
143 text = <?= $convertToHtmlFn ?>(text);
144 if (type === 'ai') {
145 conversation.innerHTML += '<div class="mwai-ai">' + text + '</div>';
146 }
147 else if (type === 'system') {
148 conversation.innerHTML += '<div class="mwai-system">' + text + '</div>';
149 }
150 else {
151 conversation.innerHTML += '<div class="mwai-user">' + text + '</div>';
152 }
153 }
154
155 // Function to request the completion
156 function <?= $onSentClickFn ?>() {
157
158 // Disable the button
159 var button = document.querySelector('#mwai-chat-<?= $id ?> .mwai-input button');
160 button.disabled = true;
161
162 // Add the user reply
163 var input = document.querySelector('#mwai-chat-<?= $id ?> .mwai-input input');
164 <?= $addReplyFn ?>('<?= $atts['user_prompt'] ?>' + input.value, 'user');
165 input.value = '';
166 input.disabled = true;
167
168 // Request the completion and add the reply
169 var conversation = document.querySelector('#mwai-chat-<?= $id ?> .mwai-conversation');
170 var promptToUse = '<?= $atts['context'] ?>' + conversation.innerText + '\n';
171 fetch('<?= $apiUrl ?>', { method: 'POST', headers: { 'Content-Type': 'application/json' },
172 body: JSON.stringify({
173 prompt: promptToUse,
174 model: '<?= $atts['model'] ?>',
175 temperature: '<?= $atts['temperature'] ?>'
176 })
177 })
178 .then(response => response.json())
179 .then(data => {
180 console.log(data);
181 if (!data.success) {
182 <?= $addReplyFn ?>('<?= $atts['sys_prompt'] ?>' + data.message, 'system');
183 }
184 else {
185 <?= $addReplyFn ?>(data.data, 'ai');
186 }
187 button.disabled = false;
188 input.disabled = false;
189 })
190 .catch(error => {
191 console.error(error);
192 button.disabled = false;
193 input.disabled = false;
194 });
195 }
196
197 var input = document.querySelector('#mwai-chat-<?= $id ?> .mwai-input input');
198 input.addEventListener('keypress', (event) => {
199 if (event.keyCode === 13) {
200 <?= $onSentClickFn ?>();
201 }
202 });
203
204 var button = document.querySelector('#mwai-chat-<?= $id ?> .mwai-input button');
205 button.addEventListener('click', (event) => {
206 <?= $onSentClickFn ?>();
207 });
208
209 <?= $addReplyFn ?>('<?= $atts['ai_prompt'] ?>' + '<?= $atts['start_sentence'] ?>', 'ai');
210 </script>
211
212 <?php
213 $output = ob_get_contents();
214 ob_end_clean();
215 return $output;
216 }
217 }