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