PluginProbe ʕ •ᴥ•ʔ
AI Engine – The Chatbot, AI Framework & MCP for WordPress / 1.5.6
AI Engine – The Chatbot, AI Framework & MCP for WordPress v1.5.6
3.5.8 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 / chatbot.php
ai-engine / classes / modules Last commit date
assistants.php 3 years ago chatbot.php 3 years ago chatbot_legacy.php 3 years ago chatbot_logs.php 3 years ago discussions.php 3 years ago
chatbot.php
217 lines
1 <?php
2
3 define( 'MWAI_CHATBOT_FRONT_PARAMS', [ 'aiName', 'userName', 'guestName', 'textSend', 'textClear',
4 'textInputPlaceholder', 'textInputMaxLength', 'textCompliance', 'startSentence',
5 'themeId', 'window', 'icon', 'iconText', 'iconAlt', 'iconPosition', 'fullscreen', 'copyButton'
6 ] );
7
8 class Meow_MWAI_Modules_Chatbot {
9 private $core = null;
10 private $namespace = 'mwai-bot/v1';
11 private $siteWideChatId = null;
12
13 public function __construct() {
14 global $mwai_core;
15 $this->core = $mwai_core;
16 add_shortcode( 'mwai_chatbot_v2', array( $this, 'chat' ) );
17 add_action( 'rest_api_init', array( $this, 'rest_api_init' ) );
18 $this->siteWideChatId = $this->core->get_option( 'chatId' );
19 add_action( 'wp_enqueue_scripts', array( $this, 'register_scripts' ) );
20 }
21
22 public function register_scripts() {
23 wp_register_script( 'mwai_highlight', MWAI_URL . 'vendor/highlightjs/highlight.min.js', [], '11.7', false );
24 $physical_file = MWAI_PATH . '/app/chatbot.js';
25 $cache_buster = file_exists( $physical_file ) ? filemtime( $physical_file ) : MWAI_VERSION;
26 wp_register_script( 'mwai_chatbot', MWAI_URL . '/app/chatbot.js', [ 'wp-element' ], $cache_buster, false );
27 if ( !empty( $this->siteWideChatId ) && $this->siteWideChatId !== 'none' ) {
28 $this->enqueue_scripts();
29 add_action( 'wp_footer', array( $this, 'inject_chat' ) );
30 }
31 }
32
33 public function enqueue_scripts() {
34 wp_enqueue_script( "mwai_chatbot" );
35 if ( $this->core->get_option( 'shortcode_chat_syntax_highlighting' ) ) {
36 wp_enqueue_script( "mwai_highlight" );
37 }
38 }
39
40 public function rest_api_init() {
41 register_rest_route( $this->namespace, '/chat', array(
42 'methods' => 'POST',
43 'callback' => array( $this, 'rest_chat' ),
44 'permission_callback' => '__return_true'
45 ) );
46 register_rest_route( $this->namespace, '/images', array(
47 'methods' => 'POST',
48 'callback' => array( $this, 'rest_images' ),
49 'permission_callback' => '__return_true'
50 ) );
51 }
52
53 public function basics_security_check( $params ) {
54 if ( empty( $params['newMessage'] ) ) {
55 return false;
56 }
57 if ( empty( $params['chatId'] ) ) {
58 return false;
59 }
60 $length = strlen( trim( $params['newMessage'] ) );
61 if ( $length < 1 || $length > ( 4096 - 512 ) ) {
62 return false;
63 }
64 return true;
65 }
66
67 public function rest_chat( $request ) {
68 try {
69 $params = $request->get_json_params();
70 if ( !$this->basics_security_check( $params )) {
71 return new WP_REST_Response( [
72 'success' => false,
73 'message' => 'Sorry, your query has been rejected.' ], 403
74 );
75 }
76 $chatbot = $this->core->getChatbot( $params['chatId'] );
77 if ( !$chatbot ) {
78 return new WP_REST_Response( [
79 'success' => false,
80 'message' => 'Sorry, your query has been rejected.' ], 403
81 );
82 }
83
84 // Create QueryText
85 $query = new Meow_MWAI_QueryText( $params['newMessage'], 1024 );
86 $query->setIsChat( true );
87
88 // Handle Params
89 $newParams = [];
90 foreach ( $chatbot as $key => $value ) {
91 $newParams[$key] = $value;
92 }
93 foreach ( $params as $key => $value ) {
94 $newParams[$key] = $value;
95 }
96 $params = apply_filters( 'mwai_chatbot_params', $newParams );
97 $query->injectParams( $params );
98
99 // Takeover
100 $takeoverAnswer = apply_filters( 'mwai_chatbot_takeover', null, $query, $params );
101 if ( !empty( $takeoverAnswer ) ) {
102 return new WP_REST_Response( [ 'success' => true, 'answer' => $takeoverAnswer,
103 'html' => $takeoverAnswer, 'usage' => null ], 200 );
104 }
105
106 // Moderation
107 if ( $this->core->get_option( 'shortcode_chat_moderation' ) ) {
108 global $mwai;
109 $isFlagged = $mwai->moderationCheck( $query->prompt );
110 if ( $isFlagged ) {
111 return new WP_REST_Response( [
112 'success' => false,
113 'message' => 'Sorry, your message has been rejected by moderation.' ], 403
114 );
115 }
116 }
117
118 // Awareness & Embeddings
119 $context = null;
120 $embeddingsIndex = $params['embeddingsIndex'];
121 if ( $query->mode === 'chat' && !empty( $embeddingsIndex ) ) {
122 $context = apply_filters( 'mwai_context_search', $query, $embeddingsIndex );
123 if ( !empty( $context ) ) {
124 $content = $this->core->cleanSentences( $context['content'] );
125 $query->injectContext( $content );
126 }
127 }
128
129 // Query the AI
130 $answer = $this->core->ai->run( $query );
131 $rawText = $answer->result;
132 $extra = [];
133 if ( $context ) {
134 $extra = [ 'embeddings' => $context['embeddings'] ];
135 }
136 $html = apply_filters( 'mwai_chatbot_reply', $rawText, $query, $params, $extra );
137 if ( $this->core->get_option( 'shortcode_chat_formatting' ) ) {
138 $html = $this->core->markdown_to_html( $html );
139 }
140 return new WP_REST_Response( [ 'success' => true, 'answer' => $rawText,
141 'html' => $html, 'usage' => $answer->usage ], 200 );
142 }
143 catch ( Exception $e ) {
144 return new WP_REST_Response( [ 'success' => false, 'message' => $e->getMessage() ], 500 );
145 }
146 }
147
148 public function rest_images( $request ) {
149 try {
150 $params = $request->get_json_params();
151 $query = new Meow_MWAI_QueryImage( $params['prompt'] );
152 $query->injectParams( $params );
153 $answer = $this->core->ai->run( $query );
154 return new WP_REST_Response( [ 'success' => true, 'images' => $answer->results, 'usage' => $answer->usage ], 200 );
155 }
156 catch ( Exception $e ) {
157 return new WP_REST_Response( [ 'success' => false, 'message' => $e->getMessage() ], 500 );
158 }
159 }
160
161 public function inject_chat() {
162 $params = $this->core->getChatbot( $this->siteWideChatId );
163 if ( !empty( $params ) ) {
164 $params['window'] = true;
165 $params['id'] = $this->siteWideChatId;
166 echo $this->chat( $params );
167 }
168 return null;
169 }
170
171 public function imageschat( $atts ) {
172 $atts['mode'] = 'images';
173 return $this->chat( $atts );
174 }
175
176 public function chat( $atts ) {
177 $chatId = isset( $atts['id'] ) ? $atts['id'] : 'default';
178 $chatbot = $this->core->getChatbot( $chatId );
179 if ( !$chatbot ) {
180 return "Chatbot not found.";
181 }
182 unset( $atts['id'] );
183
184 $frontParams = [];
185 foreach ( MWAI_CHATBOT_FRONT_PARAMS as $param ) {
186 if ( isset( $atts[$param] ) ) {
187 $frontParams[$param] = $atts[$param];
188 }
189 else if ( isset( $chatbot[$param] ) ) {
190 $frontParams[$param] = $chatbot[$param];
191 }
192 }
193
194 $frontSystem = [
195 'chatId' => $chatId,
196 'userData' => $this->core->getUserData(),
197 'sessionId' => $this->core->get_session_id(),
198 'restNonce' => wp_create_nonce( 'wp_rest' ),
199 'contextId' => get_the_ID(),
200 'pluginUrl' => MWAI_URL,
201 'restUrl' => untrailingslashit( rest_url() ),
202 'debugMode' => $this->core->get_option( 'debug_mode' ),
203 'typewriter' => $this->core->get_option( 'shortcode_chat_typewriter' )
204 ];
205
206 $theme = isset( $frontParams['themeId'] ) ? $this->core->getTheme( $frontParams['themeId'] ) : null;
207 $jsonFrontParams = htmlspecialchars(json_encode($frontParams), ENT_QUOTES, 'UTF-8');
208 $jsonFrontSystem = htmlspecialchars(json_encode($frontSystem), ENT_QUOTES, 'UTF-8');
209 $jsonFrontTheme = htmlspecialchars(json_encode($theme), ENT_QUOTES, 'UTF-8');
210 $jsonAttributes = htmlspecialchars(json_encode($atts), ENT_QUOTES, 'UTF-8');
211
212 $this->enqueue_scripts();
213 return "<div class='mwai-chatbot-container' data-params='{$jsonFrontParams}' data-system='{$jsonFrontSystem}' data-theme='{$jsonFrontTheme}' data-atts='{$jsonAttributes}'></div>";
214 }
215
216 }
217